diff --git a/wp-content/plugins/nextgen-gallery/changelog.txt b/wp-content/plugins/nextgen-gallery/changelog.txt index fcb96679d55ce715ea516514ed73ab0b4ec84451..c40fcbcc0702b2a4335ee33e1044aa7a92b15d6a 100644 --- a/wp-content/plugins/nextgen-gallery/changelog.txt +++ b/wp-content/plugins/nextgen-gallery/changelog.txt @@ -1,6 +1,150 @@ NextGEN Gallery by Photocrati Media += V2.0.63 - 04.29.2014 = +* NEW: Translation ready +* NEW: Including German translation by Roland Stumpp +* NEW: Including Czech translation by Separatista +* NEW: Including Finnish translation by Vesa Tiirikainen +* NEW: WPML / qTranslate support +* NEW: Bundled Browser+ JavaScript library +* NEW: Added NGG_DISABLE_FILTER_THE_CONTENT constant to manage conflicts +* Changed: Moved jquery.nextgen_radio_toggle.js to NextGEN Admin Module +* Changed: Original display settings are passed to secondary display types +* Fixed: Thumbnail dimension calculations are inaccurate by 1px when maintaining aspect ratio +* Fixed: Copy IPTC data from original to new image when creating new sizes / thumbnails +* Fixed: Use correct absolute path when importing images in a multisite environment +* Fixed: Incorrect display of disk space quotas in multisite environments +* Fixed: Removed redundant roles form in multisite environments +* Fixed: Insert Gallery Window support for multisite environments +* Fixed: Incorrect handling of NextGEN Styles in multisite environments +* Fixed: Not honouring NGG_IMPORT_ROOT constant +* Fixed: Fixed inability to edit gallery properties using XMLRPC's edit_gallery method +* Fixed: Alignment issues in Basic Compact Albums caused by subalbums not displaying image 'counter' +* Fixed: Display setting forms compatibility issue with WordPress 3.9 +* Fixed; Compability with jQuery Dialogs in WordPress 3.9 +* Fixed: Maximum entity code should be a displayed gallery property for recent/random sources only +* Fixed: Problems with zlib compression: https://core.trac.wordpress.org/ticket/18525 +* Fixed: Support for web servers which use a document root of '//' +* Fixed: Compatibility with WPML Translation Management +* Fixed: use 'del' for function name in ngg_store.js, 'delete' is a reserved keyword +* Fixed: Enqueue fontawesome only when necessary +* Fixed: Suhosin compatibility issue when overriding PHP memory limit +* Fixed: Handle images of wrong image type correctly when trying to create cropped thumbnails +* Fixed: Datamapper entities not allowed to have properties with a value of 0 +* Fixed: Resource manager is manipulating feeds +* Fixed: Convert absolute urls to relative urls for lightboxes +* Fixed: Start the resource manager as early as we can within the init action +* Fixed: Routing problem for galleries with images named 1.jpg, 2.jpg, 3.jpg, etc. +* Fixed: Added tooltips to basic slideshow settings +* Fixed: Remove CKEditor's NextGEN button, which is incompatible with NextGEN Gallery 2.x + += V2.0.61 - 04.01.2014 = +* Fixed: Compatibility with WP 3.9 +* Fixed: Exception thrown when using Reset button + += V2.0.59 - 03.18.2014 = +* Changed: Separated pope_module_list from ngg_options record in options table +* Fixed: Removed code causing jQuery compatibility issues in WP Admin +* Fixed: Allow third-parties to override jQuery with Google's CDN +* Fixed: When resetting the 'jquery' handle, ensure that jquery-migrate is a dependency +* Fixed: Silenced many PHP warnings +* Fixed: Datamapper->count() not returning the correct count +* Fixed: Compatibility with Gravity Forms + += V2.0.58 - 03.10.2014 = +* Fixed: Reset jQuery to WP defaults when modified by a third-party +* Fixed: Compatibility with WP jQuery Lightbox plugin +* Fixed: Compatibility with Peekaboo theme + += V2.0.57 - 03.05.2014 = +* NEW: Re-introduced the Reset button +* NEW: Tooltip added for Page Link to functionality +* NEW: Displayed Gallery Triggers moved from NextGEN Pro to NextGEN Gallery (not in use) +* NEW: Added NGG_Store, a client-side persistence layer (not in use) +* NEW: Added NGG_CRON_SCHEDULE constant. Set to the number of seconds between the execution of NextGEN Gallery cron jobs +* NEW: Added NGG_RENDERING_CACHE_TTL constant. TTL measured in seconds. +* NEW: Added NGG_DISPLAYED_GALLERY_CACHE_TTL constant. TTL measured in seconds. +* NEW: Added NGG_DISABLE_LEGACY_SHORTCODES constant. When TRUE, [slideshow] becomes [nggslideshow]. +* NEW: Added Font Awesome, available for NextGEN Gallery extensions +* Changed: Transients are removed every 30 minutes instead of 60 minutes +* Changed: Admin Page & Form components refactored to allow custom POST processing +* Changed: Default path for NEW multisite installations to wp-content/uploads/sites/%BLOG_ID%/nggallery/ +* Fixed: Ability to upload ZIP files on Windows hosts +* Fixed: Support for filenames with non-ASCII characters +* Fixed: Dynamic updates in the Attach to Post interface (interframe communication) +* Fixed: Attach to Post interface freezing in IE11 +* Fixed: Path issues on Windows Servers +* Fixed: Module installer integrity +* Fixed: Database query performance. No more joins to the WP options table +* Fixed: Lightboxes storing absolute paths for static resources +* Fixed: Displayed gallery cache not regularly flushed +* Fixed: SQL query performance problems. Honor max_packet_allowed variable for MySQL +* Fixed: Multiple database queries generated for determining next available image slug +* Fixed: Corrupted MediaRSS feeds +* Fixed: Padding on Gallery Settings and Other Options pages +* Fixed: Routing issues on subdirectory installs +* Fixed: Importing galleries using the Attach to Post Interface +* Fixed: Gallery path calculations on Windows web servers +* Fixed: Sub-album urls not processed correctly +* Fixed: Apply maximum entity count to existing displayed galleries +* Fixed: NextGEN Gallery Thumbnail Widget shouldn't use ImageBrowser effect +* Fixed: Ability to set shuffle parameter for ImageRotator slideshows +* Fixed: PHP warning about HTMLDocument when displaying a SinglePic +* Fixed: Sanitization of gallery title +* Fixed: Home URL now used instead of Site URL in MediaRSS feed +* Fixed: Attach to Post interface broken when WPML is installed +* Fixed: Attach to Post interface instructing browser to cache the page +* Fixed: Watermarking not working in low-memory environments +* Fixed: Maximum images limit not being applied for galleries already created. +* Fixed: Double forward slashes in static urls +* Fixed: Don't sleep when checking if the installer is running +* Fixed: Don't enforce Pope interface contracts +* Fixed: Remove custom table extra records from wp_options table +* Fixed: Scan folder for new images not working +* Fixed: Incorrect page permalink used for "Page Link To" functionality +* Fixed: Pagination broken when Basic Thumbnail gallery on the same page as Basic Album +* Fixed: parse_url() warnings generated for PHP 5.3.3 and earlier +* Fixed: Compatibility with Headway Themes +* Fixed: Compatibility with web servers which don't provide PHP a document root +* Fixed: Third-party incompatibilities caused by the Photocrati Resource Manager +* Fixed: Compatibility with the Flattr plugin +* Fixed: Compatibility with the Weaver II theme +* Fixed: Interface tweaks for WordPress 3.8 + += V2.0.40 - 11.26.2013 = +* NEW: Added the ability to apply lightbox effects to non-NGG images +* NEW: Added NGG_HIDE_STRICT_ERRORS constant. Define and set to TRUE to hide strict errors +* NEW: Added NEXTGEN_GALLERY_IMPORT_ROOT constant. Define and set to TRUE to browse from a custom directory +* NEW: Added NGG_DEBUG constant. Define and set to TRUE to display helpful messages for debugging +* NEW: Each custom table record will have an associated custom post record for expansion +* NEW: Display helpful error messages when there's a problem uploading images +* NEW: Add data-(src|thumbnail|image-id|title|description) attribute to gallery image anchors +* NEW: Variant support for displayed gallery sources. Random images is limited to 5 variations +* Fixed: Excessive creation of transients for random galleries +* Fixed: Many issues prohibiting the ability to upload images +* Fixed: Compatibility with NextGEN Gallery Export Plugin for Adobe Lightroom (thanks Vladimir!) +* Fixed: Sorting in the Attach to Post interface +* Fixed: HTML allowed in gallery/album descriptions +* Fixed: Requests for galleries within albums that have numeric names are broken +* Fixed: Call to a non-member function get() on WP_Query +* Fixed: Ability to sort by Image ID in the Attach to Post interface +* Fixed: Isolate the Attach to Post from implicit third-party script inclusion +* Fixed: Check for the existance of thumbnails when generating urls, and if missing, generate new ones +* Fixed: Compatibility with NextGEN Facebook OpenGraph+ plugin +* Fixed: Various XML-RPC issues +* Fixed: Widgets stylesheet not included +* Fixed: Issue with color not being pre-selected when previewing Watermark +* Fixed: E_NOTICE emitted when cleaning up cached image files +* Fixed: E_NOTICE emitted when viewing display type settings +* Fixed: Typo adjusting pcre.backtrack_limit for shortcodes +* Fixed: Content within the tabs of the Attach to Post interface cut-off +* Fixed: Routing problem which would cause conflicts with different display types on the same page +* Fixed: Broken Dynamic CSS links on GoDaddy +* Fixed: Ability to use HTML in gallery/album descriptions +* Fixed: Sub-album requests conflicting with paginated galleries on the same page +* Merged: Pull request from andreasE (https://bitbucket.org/photocrati/nextgen-gallery/pull-request/6/) + = V2.0.33 - 10.21.2013 = * NEW: Requests /ngg_tag/[tagname] will create a displayed gallery * NEW: Option added to "Import Gallery" tab to use original images diff --git a/wp-content/plugins/nextgen-gallery/nggallery.php b/wp-content/plugins/nextgen-gallery/nggallery.php old mode 100644 new mode 100755 index 01e4f91fead84f21d3362ca36de2cd1250e3911e..c34ae6c09e507c47a47582aa3a9dd95105770ea9 --- a/wp-content/plugins/nextgen-gallery/nggallery.php +++ b/wp-content/plugins/nextgen-gallery/nggallery.php @@ -3,8 +3,8 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You /** * Plugin Name: NextGEN Gallery by Photocrati - * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 7 million downloads. - * Version: 2.0.33 + * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 9 million downloads. + * Version: 2.0.63 * Author: Photocrati Media * Plugin URI: http://www.nextgen-gallery.com * Author URI: http://www.photocrati.com @@ -12,6 +12,51 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You */ if (!class_exists('E_Clean_Exit')) { class E_Clean_Exit extends RuntimeException {} } +if (!class_exists('E_NggErrorException')) { class E_NggErrorException extends RuntimeException {} } + +// This is a temporary function to replace the use of WP's esc_url which strips spaces away from URLs +// TODO: Move this to a better place +if (!function_exists('nextgen_esc_url')) { + function nextgen_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 ); + $url = str_replace( '%', '%25', $url ); + $url = str_replace( ' ', '%20', $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 ''; + } + + return apply_filters('clean_url', $good_protocol_url, $original_url, $_context); + } +} /** * NextGEN Gallery is built on top of the Photocrati Pope Framework: @@ -33,7 +78,7 @@ class C_NextGEN_Bootstrap var $_registry = NULL; var $_settings_option_name = 'ngg_options'; var $_pope_loaded = FALSE; - static $debug = WP_DEBUG; + static $debug = FALSE; static function shutdown($exception=NULL) { @@ -52,7 +97,7 @@ class C_NextGEN_Bootstrap $klass = get_class($exception); echo "<h1>{$klass} thrown</h1>"; echo "<p>{$exception->getMessage()}</p>"; - if (self::$debug OR (defined('NEXTGEN_GALLERY_DEBUG') AND NEXTGEN_GALLERY_DEBUG == TRUE)) { + if (self::$debug OR (defined('NGG_DEBUG') AND NGG_DEBUG == TRUE)) { echo "<h3>Where:</h3>"; echo "<p>On line <strong>{$exception->getLine()}</strong> of <strong>{$exception->getFile()}</strong></p>"; echo "<h3>Trace:</h3>"; @@ -65,16 +110,40 @@ class C_NextGEN_Bootstrap } } + static function get_backtrace($objects=FALSE, $remove_dynamic_calls=TRUE) + { + $trace = debug_backtrace($objects); + if ($remove_dynamic_calls) { + $skip_methods = array( + '_exec_cached_method', + '__call', + 'get_method_property', + 'set_method_property', + 'call_method' + ); + foreach ($trace as $key => &$value) { + if (isset($value['class']) && isset($value['function'])) { + if ($value['class'] == 'ReflectionMethod' && $value['function'] == 'invokeArgs') + unset($trace[$key]); + + else if ($value['class'] == 'ExtensibleObject' && in_array($value['function'], $skip_methods)) + unset($trace[$key]); + } + } + } + + return $trace; + } + function __construct() { // Boostrap set_exception_handler(__CLASS__.'::shutdown'); $this->_define_constants(); - $this->_load_non_pope(); - $this->_register_hooks(); - $this->_load_pope(); - + $this->_load_non_pope(); + $this->_register_hooks(); + $this->_load_pope(); } function _load_non_pope() @@ -83,11 +152,13 @@ class C_NextGEN_Bootstrap include_once('non_pope/class.photocrati_cache.php'); C_Photocrati_Cache::get_instance(); C_Photocrati_Cache::get_instance('displayed_galleries'); - C_Photocrati_Cache::$enabled = TRUE; + C_Photocrati_Cache::get_instance('displayed_gallery_rendering'); + + C_Photocrati_Cache::$enabled = PHOTOCRATI_CACHE; if (isset($_REQUEST['ngg_flush'])) { C_Photocrati_Cache::flush('all'); - $_SERVER['QUERY_STRING'] = str_replace('ngg_flush=1', '', $_SERVER['QUERY_STRING']); + die("Flushed all caches"); } elseif (isset($_REQUEST['ngg_force_update'])) { C_Photocrati_Cache::$do_not_lookup = TRUE; @@ -96,7 +167,7 @@ class C_NextGEN_Bootstrap } elseif (isset($_REQUEST['ngg_flush_expired'])) { C_Photocrati_Cache::flush('all', TRUE); - $_SERVER['QUERY_STRING'] = str_replace('ngg_flush_expired=1', '', $_SERVER['QUERY_STRING']); + die("Flushed all expired items from the cache"); } // Load Settings Manager @@ -132,9 +203,9 @@ class C_NextGEN_Bootstrap if ($tmp && (int)$tmp <= 300) @ini_set('xdebug.max_nesting_level', 300); // Include pope framework - require_once(path_join(NEXTGEN_GALLERY_PLUGIN_DIR, implode( - DIRECTORY_SEPARATOR, array('pope','lib','autoload.php') - ))); + require_once(implode( + DIRECTORY_SEPARATOR, array(NGG_PLUGIN_DIR, 'pope','lib','autoload.php') + )); // Get the component registry $this->_registry = C_Component_Registry::get_instance(); @@ -144,19 +215,16 @@ class C_NextGEN_Bootstrap // Load embedded products. Each product is expected to load any // modules required - $this->_registry->add_module_path(NEXTGEN_GALLERY_PRODUCT_DIR, true, false); + $this->_registry->add_module_path(NGG_PRODUCT_DIR, true, false); $this->_registry->load_all_products(); - // Give third-party plugins that opportunity to include their own products - // and modules - do_action('load_nextgen_gallery_modules', $this->_registry); + // Give third-party plugins that opportunity to include their own products + // and modules + do_action('load_nextgen_gallery_modules', $this->_registry); // Initializes all loaded modules $this->_registry->initialize_all_modules(); - // Set the document root - $this->_registry->get_utility('I_Fs')->set_document_root(ABSPATH); - $this->_pope_loaded = TRUE; } @@ -167,18 +235,11 @@ class C_NextGEN_Bootstrap */ function _register_hooks() { - // Load text domain - load_plugin_textdomain( - NEXTGEN_GALLERY_I8N_DOMAIN, - false, - $this->directory_path('lang') - ); - // Register the activation routines - add_action('activate_'.NEXTGEN_GALLERY_PLUGIN_BASENAME, array(get_class(), 'activate')); + add_action('activate_'.NGG_PLUGIN_BASENAME, array(get_class(), 'activate')); // Register the deactivation routines - add_action('deactivate_'.NEXTGEN_GALLERY_PLUGIN_BASENAME, array(get_class(), 'deactivate')); + add_action('deactivate_'.NGG_PLUGIN_BASENAME, array(get_class(), 'deactivate')); // Register our test suite add_filter('simpletest_suites', array(&$this, 'add_testsuite')); @@ -188,9 +249,10 @@ class C_NextGEN_Bootstrap add_filter('pre_update_site_option_'.$this->_settings_option_name, array(&$this, 'persist_settings')); // This plugin uses jQuery extensively - add_action('init', array(&$this, 'enqueue_jquery'), 1); - add_action('wp_print_scripts', array(&$this, 'fix_jquery')); - add_action('admin_print_scripts', array(&$this, 'fix_jquery')); + if (NGG_FIX_JQUERY) { + add_action('wp_enqueue_scripts', array(&$this, 'fix_jquery')); + add_action('wp_print_scripts', array(&$this, 'fix_jquery')); + } // If the selected stylesheet is using an unsafe path, then notify the user if (C_NextGen_Style_Manager::get_instance()->is_directory_unsafe()) { @@ -198,18 +260,43 @@ class C_NextGEN_Bootstrap } // Delete displayed gallery transients periodically + add_filter('cron_schedules', array(&$this, 'add_ngg_schedule')); add_action('ngg_delete_expired_transients', array(&$this, 'delete_expired_transients')); - if (!wp_next_scheduled('ngg_delete_expired_transients')) { - wp_schedule_event(time(), 'hourly', 'ngg_delete_expired_transients'); - } + add_action('wp', array(&$this, 'schedule_cron_jobs')); // Update modules - add_action('init', array(&$this, 'update'), PHP_INT_MAX); + add_action('init', array(&$this, 'update'), PHP_INT_MAX-1); // Start the plugin! - add_action('init', array(&$this, 'route'), PHP_INT_MAX); + add_action('init', array(&$this, 'route'), 11); + } + + function schedule_cron_jobs() + { + if (!wp_next_scheduled('ngg_delete_expired_transients')) { + wp_schedule_event(time(), 'ngg_custom', 'ngg_delete_expired_transients'); + } + } + + /** + * Defines a new cron schedule + * @param $schedules + * @return mixed + */ + function add_ngg_schedule($schedules) + { + $schedules['ngg_custom'] = array( + 'interval' => NGG_CRON_SCHEDULE, + 'display' => sprintf(__('Every %d seconds', 'nggallery'), NGG_CRON_SCHEDULE) + ); + + return $schedules; } + + /** + * Flush all expires transients created by the plugin + */ function delete_expired_transients() { C_Photocrati_Cache::flush('displayed_galleries', TRUE); @@ -229,30 +316,39 @@ class C_NextGEN_Bootstrap } /** - * Enqueues jQuery - */ - function enqueue_jquery() - { - wp_enqueue_script('jquery'); - } - - /** - * Ensures that the latest version of jQuery bundled with WordPress is used + * Ensures that the version of JQuery used is expected for NextGEN Gallery */ function fix_jquery() { - global $wp_scripts; - - if (isset($wp_scripts->registered['jquery'])) { - $jquery = $wp_scripts->registered['jquery']; - if (!isset($jquery->ver) OR version_compare('1.8', $jquery->ver) == 1) { - ob_start(); - wp_deregister_script('jquery'); - ob_end_clean(); - wp_register_script('jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.10.0' ); - } - } - else wp_register_script( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.10.0' ); + global $wp_scripts; + + // Determine which version of jQuery to include + $src = '/wp-includes/js/jquery/jquery.js'; + + // Ensure that jQuery is always set to the default + if (isset($wp_scripts->registered['jquery'])) { + $jquery = $wp_scripts->registered['jquery']; + + // There's an exception to the rule. We'll allow the same + // version of jQuery as included with WP to be fetched from + // Google AJAX libraries, as we have a systematic means of verifying + // that won't cause any troubles + $version = preg_quote($jquery->ver, '#'); + if (!preg_match("#ajax\\.googleapis\\.com/ajax/libs/jquery/{$version}/jquery\\.min\\.js#", $jquery->src)) { + $jquery->src = FALSE; + if (array_search('jquery-core', $jquery->deps) === FALSE) { + $jquery->deps[] = 'jquery-core'; + } + if (array_search('jquery-migrate', $jquery->deps) === FALSE) { + $jquery->deps[] = 'jquery-migrate'; + } + } + } + + // Ensure that jquery-core is used, as WP intended + if (isset($wp_scripts->registered['jquery-core'])) { + $wp_scripts->registered['jquery-core']->src = $src; + } wp_enqueue_script('jquery'); } @@ -280,10 +376,13 @@ class C_NextGEN_Bootstrap */ function update() { - $this->_load_pope(); + if ((!(defined('DOING_AJAX') && DOING_AJAX)) && !isset($_REQUEST['doing_wp_cron'])) { - // Try updating all modules - C_Photocrati_Installer::update(); + $this->_load_pope(); + + // Try updating all modules + C_Photocrati_Installer::update(); + } } /** @@ -312,7 +411,7 @@ class C_NextGEN_Bootstrap */ static function deactivate() { - C_Photocrati_Installer::uninstall(NEXTGEN_GALLERY_PLUGIN_BASENAME); + C_Photocrati_Installer::uninstall(NGG_PLUGIN_BASENAME); } /** @@ -321,21 +420,63 @@ class C_NextGEN_Bootstrap function _define_constants() { // NextGEN by Photocrati Constants - define('NEXTGEN_GALLERY_PLUGIN', basename($this->directory_path())); - define('NEXTGEN_GALLERY_PLUGIN_BASENAME', plugin_basename(__FILE__)); - define('NEXTGEN_GALLERY_PLUGIN_DIR', $this->directory_path()); - define('NEXTGEN_GALLERY_PLUGIN_URL', $this->path_uri()); - define('NEXTGEN_GALLERY_I8N_DOMAIN', 'nggallery'); - define('NEXTGEN_GALLERY_TESTS_DIR', path_join(NEXTGEN_GALLERY_PLUGIN_DIR, 'tests')); - define('NEXTGEN_GALLERY_PRODUCT_DIR', path_join(NEXTGEN_GALLERY_PLUGIN_DIR, 'products')); - define('NEXTGEN_GALLERY_PRODUCT_URL', path_join(NEXTGEN_GALLERY_PLUGIN_URL, 'products')); - define('NEXTGEN_GALLERY_MODULE_DIR', path_join(NEXTGEN_GALLERY_PRODUCT_DIR, 'photocrati_nextgen/modules')); - define('NEXTGEN_GALLERY_MODULE_URL', path_join(NEXTGEN_GALLERY_PRODUCT_URL, 'photocrati_nextgen/modules')); - define('NEXTGEN_GALLERY_PLUGIN_CLASS', path_join(NEXTGEN_GALLERY_PLUGIN_DIR, 'module.NEXTGEN_GALLERY_PLUGIN.php')); - define('NEXTGEN_GALLERY_PLUGIN_STARTED_AT', microtime()); - define('NEXTGEN_GALLERY_PLUGIN_VERSION', '2.0.33'); - } + define('NGG_PLUGIN', basename($this->directory_path())); + define('NGG_PLUGIN_BASENAME', plugin_basename(__FILE__)); + define('NGG_PLUGIN_DIR', $this->directory_path()); + define('NGG_PLUGIN_URL', $this->path_uri()); + define('NGG_TESTS_DIR', implode(DIRECTORY_SEPARATOR, array(rtrim(NGG_PLUGIN_DIR, "/\\"), 'tests'))); + define('NGG_PRODUCT_DIR', implode(DIRECTORY_SEPARATOR, array(rtrim(NGG_PLUGIN_DIR, "/\\"), 'products'))); + define('NGG_MODULE_DIR', implode(DIRECTORY_SEPARATOR, array(rtrim(NGG_PRODUCT_DIR, "/\\"), 'photocrati_nextgen', 'modules'))); + define('NGG_PRODUCT_URL', path_join(str_replace("\\", '/', NGG_PLUGIN_URL), 'products')); + define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules')); + define('NGG_PLUGIN_STARTED_AT', microtime()); + define('NGG_PLUGIN_VERSION', '2.0.63'); + + if (!defined('NGG_HIDE_STRICT_ERRORS')) { + define('NGG_HIDE_STRICT_ERRORS', TRUE); + } + + // Should we display E_STRICT errors? + if (NGG_HIDE_STRICT_ERRORS) { + $level = error_reporting(); + if ($level != 0) error_reporting($level & ~E_STRICT); + } + + // Should we display NGG debugging information? + if (!defined('NGG_DEBUG')) { + define('NGG_DEBUG', FALSE); + } + self::$debug = NGG_DEBUG; + + // User definable constants + if (!defined('NGG_IMPORT_ROOT')) { + $path = WP_CONTENT_DIR; + define('NGG_IMPORT_ROOT', $path); + } + // Should the Photocrati cache be enabled + if (!defined('PHOTOCRATI_CACHE')) { + define('PHOTOCRATI_CACHE', TRUE); + } + if (!defined('PHOTOCRATI_CACHE_TTL')) { + define('PHOTOCRATI_CACHE_TTL', 3600); + } + + // Cron job + if (!defined('NGG_CRON_SCHEDULE')) { + define('NGG_CRON_SCHEDULE', 1800); + } + + // Don't enforce interfaces + if (!defined('EXTENSIBLE_OBJECT_ENFORCE_INTERFACES')) { + define('EXTENSIBLE_OBJECT_ENFORCE_INTERFACES', FALSE); + } + + // Fix jquery + if (!defined('NGG_FIX_JQUERY')) { + define('NGG_FIX_JQUERY', TRUE); + } + } /** * Defines the NextGEN Test Suite @@ -344,7 +485,7 @@ class C_NextGEN_Bootstrap */ function add_testsuite($suites=array()) { - $tests_dir = NEXTGEN_GALLERY_TESTS_DIR; + $tests_dir = NGG_TESTS_DIR; if (file_exists($tests_dir)) { diff --git a/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_shortcode_manager.php b/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_shortcode_manager.php index 4f71a4a047d0530c2d926b5cb5ac1a8db9a99d2f..0614d85ee35bed6d8e2698f365a782cf87cdc7bc 100644 --- a/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_shortcode_manager.php +++ b/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_shortcode_manager.php @@ -4,6 +4,8 @@ class C_NextGen_Shortcode_Manager { private static $_instance = NULL; private $_shortcodes = array(); + private $_runlevel = 0; + private $_has_warned = FALSE; /** * Gets an instance of the class @@ -44,8 +46,16 @@ class C_NextGen_Shortcode_Manager */ private function __construct() { - add_filter('the_content', array(&$this, 'deactivate_all'), 1); - add_filter('the_content', array(&$this, 'parse_content'), PHP_INT_MAX-1); + // For theme & plugin compatibility and to prevent the output of our shortcodes from being + // altered we disable our shortcodes at the beginning of the_content and enable them at the end + // however a bug in Wordpress (see comments in deactivate_all() below) causes another issue + // of compatibility causing our shortcodes to not be registered at the time the_content is run. + // This disables that at the risk that themes may alter our HTML output in an attempt to sanitize it. + if (defined('NGG_DISABLE_FILTER_THE_CONTENT') && NGG_DISABLE_FILTER_THE_CONTENT) + return; + + add_filter('the_content', array(&$this, 'deactivate_all'), -(PHP_INT_MAX-1)); + add_filter('the_content', array(&$this, 'parse_content'), PHP_INT_MAX-1); } /** @@ -53,6 +63,26 @@ class C_NextGen_Shortcode_Manager */ function deactivate_all($content) { + // There is a bug in Wordpress itself: when a hook recurses any hooks meant to execute after it are discarded. + // For example the following code, despite expectations, will NOT display 'bar' as bar() is never executed. + // See https://core.trac.wordpress.org/ticket/17817 for more information. + /* function foo() { + * remove_action('foo', 'foo'); + * } + * function bar() { + * echo('bar'); + * } + * add_action('foo', 'foo'); + * add_action('foo', 'bar'); + * do_action('foo'); + */ + $this->_runlevel += 1; + if ($this->_runlevel > 1 && defined('WP_DEBUG') && WP_DEBUG && !is_admin() && !$this->_has_warned) + { + $this->_has_warned = TRUE; + error_log('Sorry, but recursing filters on "the_content" breaks NextGEN Gallery. Please see https://core.trac.wordpress.org/ticket/17817 and NGG_DISABLE_FILTER_THE_CONTENT'); + } + foreach (array_keys($this->_shortcodes) as $shortcode) { $this->deactivate($shortcode); } @@ -77,8 +107,12 @@ class C_NextGen_Shortcode_Manager */ function parse_content($content) { + $this->_runlevel--; $this->activate_all(); - return do_shortcode($content); + $content = do_shortcode($content); + $content = apply_filters('ngg_content', $content); + + return $content; } /** diff --git a/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_style_manager.php b/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_style_manager.php index 9992c1a67cf6782c7dcf3298d0341725c79828ec..6a226e94c12b23b0842eb245db6fbff0b3d680c6 100644 --- a/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_style_manager.php +++ b/wp-content/plugins/nextgen-gallery/non_pope/class.nextgen_style_manager.php @@ -10,18 +10,14 @@ class C_NextGen_Style_Manager function __construct() { - $this->default_dir = realpath((implode(DIRECTORY_SEPARATOR, array( - untrailingslashit(dirname(__FILE__)), - '..', - 'products', - 'photocrati_nextgen', - 'modules', - 'ngglegacy', - 'css' - )))); + $this->default_dir = implode(DIRECTORY_SEPARATOR, array( + NGG_MODULE_DIR, + 'ngglegacy', + 'css' + )); $this->new_dir = implode(DIRECTORY_SEPARATOR, array( - untrailingslashit(WP_CONTENT_DIR), + rtrim(WP_CONTENT_DIR, "/\\"), 'ngg_styles' )); @@ -32,37 +28,33 @@ class C_NextGen_Style_Manager $this->add_directory($this->new_dir); // We check the parent theme directory. Needed for child themes - $this->add_directory(implode(DIRECTORY_SEPARATOR, array( - untrailingslashit(get_template_directory()), - )), TRUE); + $this->add_directory(rtrim(get_template_directory(), "/\\"), TRUE); // We also check parent_theme/nggallery $this->add_directory(implode(DIRECTORY_SEPARATOR, array( - untrailingslashit(get_template_directory()), + rtrim(get_template_directory(), "/\\"), 'nggallery' )), TRUE); // We also check parent_theme/ngg_styles $this->add_directory(implode(DIRECTORY_SEPARATOR, array( - untrailingslashit(get_template_directory()), + rtrim(get_template_directory(), "/\\"), 'ngg_styles' )), TRUE); // We check the root directory of the theme. Users shouldn't store here, // but they might - $this->add_directory(implode(DIRECTORY_SEPARATOR, array( - untrailingslashit(get_stylesheet_directory()), - )), TRUE); + $this->add_directory(rtrim(get_stylesheet_directory(), "/\\"), TRUE); // We also check the theme/nggallery directory $this->add_directory(implode(DIRECTORY_SEPARATOR, array( - untrailingslashit(get_stylesheet_directory()), + rtrim(get_stylesheet_directory(), "/\\"), 'nggallery' )), TRUE); // We also check the theme/ngg_styles directory $this->add_directory(implode(DIRECTORY_SEPARATOR, array( - untrailingslashit(get_stylesheet_directory()), + rtrim(get_stylesheet_directory(), "/\\"), 'ngg_styles' )), TRUE); } @@ -99,13 +91,13 @@ class C_NextGen_Style_Manager */ function is_default_dir($dir) { - return untrailingslashit($dir) == $this->default_dir; + return rtrim($dir, "/\\") == $this->default_dir; } function get_new_dir($filename) { return implode(DIRECTORY_SEPARATOR, array( - untrailingslashit($this->new_dir), + rtrim($this->new_dir, "/\\"), $filename )); } @@ -165,13 +157,13 @@ class C_NextGen_Style_Manager if (!$selected) $selected = $this->get_selected_stylesheet(); $retval = implode(DIRECTORY_SEPARATOR, array( - untrailingslashit($this->default_dir), + rtrim($this->default_dir, "/\\"), $selected )); foreach ($this->directories as $dir) { $path = implode(DIRECTORY_SEPARATOR, array( - untrailingslashit($dir), + rtrim($dir, "/\\"), $selected )); @@ -193,22 +185,24 @@ class C_NextGen_Style_Manager if (!$selected) $selected = $this->get_selected_stylesheet(); $retval = str_replace( - trailingslashit(ABSPATH), - trailingslashit(site_url()), + C_Fs::get_instance()->get_document_root(), + site_url(), $this->find_selected_stylesheet_abspath($selected) ); - return str_replace('\\', '/', $retval); + return rtrim(str_replace('\\', '/', $retval), "/"); } - function find_all_stylesheets() + function find_all_stylesheets($dir = FALSE) { $retval = array(); + if (!$dir) + $dir = $this->directories; - foreach (array_reverse($this->directories) as $dir) { + foreach (array_reverse($dir) as $dir) { $path = implode(DIRECTORY_SEPARATOR, array( - untrailingslashit($dir), + rtrim($dir, "/\\"), '*.css' )); $files = glob($path); diff --git a/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_cache.php b/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_cache.php index 928395fd34a57d906e7ed15b21770d7b0ac9ab78..060d358e157a8e1d856ddc215f06b9feb7326eed 100644 --- a/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_cache.php +++ b/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_cache.php @@ -51,7 +51,7 @@ class C_Photocrati_Cache * @param null $value * @return bool|int */ - static function set($key, $value=NULL, $group=NULL, $ttl=3600) + static function set($key, $value=NULL, $group=NULL, $ttl=NULL) { return self::get_instance($group)->update($key, $value, $ttl); } @@ -87,6 +87,7 @@ class C_Photocrati_Cache */ static function flush($group=NULL, $expired_only=FALSE) { + if (!extension_loaded('suhosin')) ini_set('memory_limit', -1); $retval = 0; if (self::$enabled) { @@ -123,10 +124,51 @@ class C_Photocrati_Cache $all_keys[] = "'_transient_timeout_{$value}'"; $all_keys[] = "'_transient_{$value}'"; } - unset($keys); - $all_keys = implode(',', $all_keys); - $sql = "DELETE FROM {$wpdb->options} WHERE option_name IN (". $all_keys. ')'; - $retval = $wpdb->query($sql); + + // Determine the maximum packet size for the MySQL server + $max_packet_size = 1000000; // 1 MB + if ($row = $wpdb->get_row("SHOW VARIABLES LIKE 'max_allowed_packet'")) { + $max_packet_size = intval($row->Value); + } + $precision = -6; + if ($max_packet_size <1000000) $precision = -5; + if ($max_packet_size <100000) $precision = -4; + if ($max_packet_size <10000) $precision = -3; + if ($max_packet_size <1000) $precision = -2; + + if (version_compare(PHP_VERSION, '5.3.0') >= 0) + $max_packet_size = round($max_packet_size, $precision, PHP_ROUND_HALF_DOWN); + else + $max_packet_size = round($max_packet_size, $precision); + + // Generate DELETE queries up to $max_packet_size + $keys = array(); + $average_key_size = strlen($all_keys[0])+15; + $count = 1000; // 1 KB buffer + while (($key = array_pop($all_keys))) { + + if (($count + $average_key_size) < $max_packet_size) { + $keys[] = $key; + $count += $average_key_size; + } + else { + $keys = implode(',', $keys); + $sql = "DELETE FROM {$wpdb->options} WHERE option_name IN (". $keys. ')'; + if (strlen($sql) > $max_packet_size) error_log("Delete transient query larger than max_allowed_packet for MySQL"); + else $retval += $wpdb->query($sql); + $count = 1000; + $keys = array(); + } + } + + // If the number of keys to delete is less than the max packet size, then we should still + // delete the records + if (!$retval && $keys) { + $keys = implode(',', $keys); + $sql = "DELETE FROM {$wpdb->options} WHERE option_name IN (". $keys. ')'; + if (strlen($sql) > $max_packet_size) error_log("Delete transient query larger than max_allowed_packet for MySQL"); + else $retval += $wpdb->query($sql); + } } } } @@ -190,14 +232,17 @@ class C_Photocrati_Cache * @param $value * @return bool|int */ - function update($key, $value, $ttl=3600) + function update($key, $value, $ttl=NULL) { + if (!$ttl) $ttl = PHOTOCRATI_CACHE_TTL; + $retval = FALSE; if (self::$enabled) { if (is_array($key)) $key = self::generate_key($key); if (self::$force_update OR $this->lookup($key, FALSE) === FALSE) { set_transient($key, $value, $ttl); - update_option($this->group.$key, time()+$ttl); + delete_option($this->group.$key); + add_option($this->group.$key, time()+$ttl, NULL, 'no'); $retval = $key; } } @@ -217,4 +262,4 @@ class C_Photocrati_Cache } else return FALSE; } -} \ No newline at end of file +} diff --git a/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_installer.php b/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_installer.php index 52daf97b9e0f557617687a1b0a28634b994ed1ff..f020294e603c8839ba8559bc732e4fe1e7cce7ba 100644 --- a/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_installer.php +++ b/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_installer.php @@ -59,6 +59,29 @@ if (!class_exists('C_Photocrati_Installer')) } } + static function can_do_upgrade() + { + $proceed = FALSE; + + // Proceed if no other process has started the installer routines + if (!($doing_upgrade = get_option('ngg_doing_upgrade', FALSE))) { + update_option('ngg_doing_upgrade', time()); + $proceed = TRUE; + } + + // Or, force proceeding if we have a stale ngg_doing_upgrade record + elseif ($doing_upgrade === TRUE OR time() - $doing_upgrade > 120) { + update_option('ngg_doing_upgrade', time()); + $proceed = TRUE; + } + return $proceed; + } + + static function done_upgrade() + { + update_option('ngg_doing_upgrade', FALSE); + } + static function update($reset=FALSE) { $local_settings = C_NextGen_Settings::get_instance(); @@ -96,11 +119,17 @@ if (!class_exists('C_Photocrati_Installer')) } } - $last_module_list = $reset ? array() : $local_settings->get('pope_module_list', array()); + $last_module_list = self::_get_last_module_list($reset); $current_module_list = self::_generate_module_info(); - if (count(($modules = array_diff($current_module_list, $last_module_list))) > 0) + if (count(($modules = array_diff($current_module_list, $last_module_list))) > 0 && self::can_do_upgrade()) { + // Clear APC cache + if (function_exists('apc_clear_cache')) { + @apc_clear_cache('opcode'); + apc_clear_cache(); + } + // The cache should be flushed C_Photocrati_Cache::flush(); @@ -125,7 +154,7 @@ if (!class_exists('C_Photocrati_Installer')) } // Update the module list - $local_settings->set('pope_module_list', $current_module_list); + update_option('pope_module_list', $current_module_list); // NOTE & TODO: if the above section that declares $global_settings_to_keep is removed this should also // Since a hard-reset of the settings was forced we must again re-apply our previously saved values @@ -138,6 +167,8 @@ if (!class_exists('C_Photocrati_Installer')) // Save any changes settings $global_settings->save(); $local_settings->save(); + + self::done_upgrade(); } // Another workaround to an issue caused by NextGen's lack of multisite compatibility. It's possible @@ -153,20 +184,36 @@ if (!class_exists('C_Photocrati_Installer')) } } + static function _get_last_module_list($reset=FALSE) + { + // Return empty array to reset + if ($reset) return array(); + + // First try getting the list from a single WP option, "pope_module_list" + $retval = get_option('pope_module_list', array()); + if (!$retval) { + $local_settings = C_NextGen_Settings::get_instance(); + $retval = $local_settings->get('pope_module_list', array()); + $local_settings->delete('pope_module_list'); + } + + return $retval; + } + static function _generate_module_info() { $retval = array(); $registry = C_Component_Registry::get_instance(); foreach ($registry->get_module_list() as $module_id) { $module_version = $registry->get_module($module_id)->module_version; - $retval[$module_id] = "{$module_id}|{$module_version}"; + $retval[] = "{$module_id}|{$module_version}"; } return $retval; } static function refresh_cron() { - @ini_set('memory_limit', -1); + if (!extension_loaded('suhosin')) @ini_set('memory_limit', -1); // Remove all cron jobs created by NextGEN Gallery $cron = _get_cron_array(); @@ -183,4 +230,4 @@ if (!class_exists('C_Photocrati_Installer')) _set_cron_array($cron); } } -} \ No newline at end of file +} diff --git a/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_resource_manager.php b/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_resource_manager.php index 6687f5f95fd2c48863d8c6a2ee17e58131a14307..b12b48500cada192ee7ae409524b5098b6e86fb0 100644 --- a/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_resource_manager.php +++ b/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_resource_manager.php @@ -4,6 +4,8 @@ class C_Photocrati_Resource_Manager { static $instance = NULL; + public $marker = '<!-- ngg_resource_manager_marker -->'; + var $buffer = ''; var $styles = ''; var $scripts = ''; @@ -21,10 +23,19 @@ class C_Photocrati_Resource_Manager { // Validate the request $this->validate_request(); - - add_action('init',array(&$this, 'start_buffer'), 1); + add_action('init', array(&$this, 'start_buffer'), -1); + add_action('wp_footer', array(&$this, 'print_marker'), -1); } + /** + * Created early as possible in the wp_footer action this is the string to which we + * will move JS resources after + */ + function print_marker() + { + print $this->marker; + } + /** * Determines if the resource manager should perform it's routines for this request * @return bool @@ -41,6 +52,7 @@ class C_Photocrati_Resource_Manager else if (isset($_GET['display_gallery_iframe'])) $retval = FALSE; else if (defined('WP_ADMIN') && WP_ADMIN && defined('DOING_AJAX') && DOING_AJAX) $retval = FALSE; else if (preg_match("/(js|css|xsl|xml|kml)$/", $_SERVER['REQUEST_URI'])) $retval = FALSE; + else if (preg_match("#/feed(/?)$#i", $_SERVER['REQUEST_URI']) || !empty($_GET['feed'])) $retval = FALSE; elseif (preg_match("/\\.(\\w{3,4})$/", $_SERVER['REQUEST_URI'], $match)) { if (!in_array($match[1], array('htm', 'html', 'php'))) { $retval = FALSE; @@ -55,6 +67,9 @@ class C_Photocrati_Resource_Manager */ function start_buffer() { + if (defined('NGG_DISABLE_RESOURCE_MANAGER') && NGG_DISABLE_RESOURCE_MANAGER) + return; + if (apply_filters('run_ngg_resource_manager', $this->valid_request)) { ob_start(array(&$this, 'output_buffer_handler')); ob_start(array(&$this, 'get_buffer')); @@ -117,14 +132,14 @@ class C_Photocrati_Resource_Manager $this->buffer = str_ireplace('</head>', $this->styles.'</head>', $this->buffer); } - // Move the scripts to the bottom of the page - if ($this->scripts) { - $this->buffer = str_ireplace('</body>', $this->scripts.'</body>', $this->buffer); - } + // Move the scripts to the bottom of the page + if ($this->scripts) { + $this->buffer = str_ireplace($this->marker, $this->marker . $this->scripts, $this->buffer); + } - if ($this->other_output) { - $this->buffer = str_replace('</body>', $this->other_output.'</body>', $this->buffer); - } + if ($this->other_output) { + $this->buffer = str_replace($this->marker, $this->marker . $this->other_output, $this->buffer); + } } } @@ -139,8 +154,8 @@ class C_Photocrati_Resource_Manager // If W3TC is installed and activated, we can't output the // scripts and manipulate the buffer, so we can only provide a warning - if (defined('W3TC') && defined('WP_DEBUG') && WP_DEBUG) { - if (defined('DONOTCACHEPAGE')) define('DONOTCACHEPAGE', TRUE); + if (defined('W3TC') && defined('WP_DEBUG') && WP_DEBUG && !is_admin()) { + if (!defined('DONOTCACHEPAGE')) define('DONOTCACHEPAGE', TRUE); if (!did_action('wp_footer')) { error_log("We're sorry, but your theme's page template didn't make a call to wp_footer(), which is required by NextGEN Gallery. Please add this call to your page templates."); } diff --git a/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_settings_manager.php b/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_settings_manager.php index 7cf2375d6e7d8763952664b7f59c6eb77c182efa..fb90931c7982a919c02963330c14074406a3f211 100644 --- a/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_settings_manager.php +++ b/wp-content/plugins/nextgen-gallery/non_pope/class.photocrati_settings_manager.php @@ -140,6 +140,7 @@ if (!class_exists('C_Photocrati_Settings_Manager_Base')) { function reset() { $this->_options = array(); + $this->_defaults = array(); } /** diff --git a/wp-content/plugins/nextgen-gallery/pope/README.txt b/wp-content/plugins/nextgen-gallery/pope/README.txt old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/pope/lib/autoload.php b/wp-content/plugins/nextgen-gallery/pope/lib/autoload.php old mode 100644 new mode 100755 index f57214b2ae152cbbb57ac445d5d50bc9148df55c..7961f530d8df6dd38c7e16d70be925406f74ec95 --- a/wp-content/plugins/nextgen-gallery/pope/lib/autoload.php +++ b/wp-content/plugins/nextgen-gallery/pope/lib/autoload.php @@ -1,7 +1,7 @@ <?php if (!defined('POPE_VERSION')) { - define('POPE_VERSION', '0.4'); + define('POPE_VERSION', '0.6'); require_once('class.extensibleobject.php'); require_once('interface.component.php'); require_once('class.component.php'); diff --git a/wp-content/plugins/nextgen-gallery/pope/lib/class.base_module.php b/wp-content/plugins/nextgen-gallery/pope/lib/class.base_module.php old mode 100644 new mode 100755 index fc113d2ef9fac77e37e1d155461f49c682ed589b..5230657cef03afed0af0bb4485a0d0636b412351 --- a/wp-content/plugins/nextgen-gallery/pope/lib/class.base_module.php +++ b/wp-content/plugins/nextgen-gallery/pope/lib/class.base_module.php @@ -33,7 +33,7 @@ abstract class C_Base_Module extends C_Component /** * Defines the module */ - function define($id, $name, $description='', $version='', $uri='', $author='', $author_uri='', $context=FALSE) + function define($id='pope-module', $name='Pope Module', $description='', $version='', $uri='', $author='', $author_uri='', $context=FALSE) { parent::define($context); $this->implement('I_Pope_Module'); @@ -145,7 +145,7 @@ abstract class C_Base_Module extends C_Component { return $path; } - return trim($base, '/') . '/' . ltrim($path, '/'); + return trim($base, "/\\") . DIRECTORY_SEPARATOR . ltrim($path, "/\\"); } /** diff --git a/wp-content/plugins/nextgen-gallery/pope/lib/class.base_product.php b/wp-content/plugins/nextgen-gallery/pope/lib/class.base_product.php old mode 100644 new mode 100755 index 6b14cd4f35347bf4d014b02d6d1ee9a7e5eaffbb..e4be5999fcf884eb10ff2577bdde0a0677e78fee --- a/wp-content/plugins/nextgen-gallery/pope/lib/class.base_product.php +++ b/wp-content/plugins/nextgen-gallery/pope/lib/class.base_product.php @@ -12,9 +12,9 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You */ abstract class C_Base_Product extends C_Base_Module { - function define($id, $name, $description='', $version='', $uri='', $author='', $author_uri='') + function define($id='pope-product', $name='Pope Product', $description='', $version='', $uri='', $author='', $author_uri='', $context=FALSE) { - parent::define($id, $name, $description, $version, $uri, $author, $author_uri); + parent::define($id, $name, $description, $version, $uri, $author, $author_uri, $context); $this->get_registry()->add_product($this->module_id, $this); } diff --git a/wp-content/plugins/nextgen-gallery/pope/lib/class.component.php b/wp-content/plugins/nextgen-gallery/pope/lib/class.component.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/pope/lib/class.component_factory.php b/wp-content/plugins/nextgen-gallery/pope/lib/class.component_factory.php old mode 100644 new mode 100755 index 046def6d80fe2fc13b411afaae3520ac6d114b11..01d8c72af5b225bc13db3fc73861739009cce2c5 --- a/wp-content/plugins/nextgen-gallery/pope/lib/class.component_factory.php +++ b/wp-content/plugins/nextgen-gallery/pope/lib/class.component_factory.php @@ -7,9 +7,9 @@ class C_Component_Factory extends C_Component { static $_instances = array(); - function define() + function define($context=FALSE) { - parent::define(); + parent::define($context); $this->implement('I_Component_Factory'); } diff --git a/wp-content/plugins/nextgen-gallery/pope/lib/class.component_registry.php b/wp-content/plugins/nextgen-gallery/pope/lib/class.component_registry.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/pope/lib/class.extensibleobject.php b/wp-content/plugins/nextgen-gallery/pope/lib/class.extensibleobject.php old mode 100644 new mode 100755 index 2a45dac8f06b0ae9be066fb172ddf0d4d72b3140..f1cee52ce97d2ad3087dde47cfa4136c448dd458 --- a/wp-content/plugins/nextgen-gallery/pope/lib/class.extensibleobject.php +++ b/wp-content/plugins/nextgen-gallery/pope/lib/class.extensibleobject.php @@ -2,6 +2,10 @@ define('__EXTOBJ_STATIC__', '__STATICALLY_CALLED__'); define('__EXTOBJ_NO_INIT__', '__NO_INIT__'); +if (!defined('EXTENSIBLE_OBJECT_ENFORCE_INTERFACES')) { + define('EXTENSIBLE_OBJECT_ENFORCE_INTERFACES', TRUE); +} + /** * Provides helper methods for Pope objects @@ -162,7 +166,7 @@ class ExtensibleObject extends PopeHelpers // call_user_func_array(array($this, 'define'), $args); } - $this->_enforce_interface_contracts(); + if (EXTENSIBLE_OBJECT_ENFORCE_INTERFACES) $this->_enforce_interface_contracts(); if ($init_instance) { @@ -750,7 +754,7 @@ class ExtensibleObject extends PopeHelpers */ function __call($method, $args) { - $this->clear_method_properties($method, $args); + $this->reset_method_properties($method, $args); // Run pre hooks? if ($this->are_pre_hooks_enabled($method) && $this->get_method_property($method, self::METHOD_PROPERTY_RUN_PRE_HOOKS)) { @@ -833,7 +837,10 @@ class ExtensibleObject extends PopeHelpers } } - return $this->get_method_property($method, self::METHOD_PROPERTY_RETURN_VALUE); + // Get return value, clear all method properties, and then return + $retval = $this->get_method_property($method, self::METHOD_PROPERTY_RETURN_VALUE); + $this->remove_method_properties($method); + return $retval; } @@ -1181,7 +1188,7 @@ class ExtensibleObject extends PopeHelpers * before every method call (before pre-hooks) * @param string $method */ - function clear_method_properties($method, $args=array()) + function reset_method_properties($method, $args=array()) { $this->_method_properties[$method] = array( 'run' => TRUE, @@ -1191,6 +1198,35 @@ class ExtensibleObject extends PopeHelpers ); } + /** + * Removes the cache of the method properties + * @param $method + */ + function remove_method_properties($method) + { + unset($this->_method_properties[$method]); + } + + /** + * Gets all method properties + * @return array + */ + function get_method_properties($method) + { + return $this->_method_properties[$method]; + } + + /** + * Sets all method properties + * @param $method + * @param $props + */ + function set_method_properties($method, $props) + { + foreach ($props as $key => $value) { + $this->set_method_property($method, $key, $value); + } + } /** * Returns TRUE if the ExtensibleObject has decided to implement a @@ -1291,6 +1327,9 @@ class Mixin extends PopeHelpers $backtrace = debug_backtrace(); $klass = get_class($backtrace[0]['object']); + // Get the method properties. We'll store this afterwards. + $props = $this->object->get_method_properties($method); + // Perform the routine described above... $this->object->disable_pre_hooks($method); $this->object->disable_post_hooks($method); @@ -1308,6 +1347,9 @@ class Mixin extends PopeHelpers $this->object->enable_post_hooks($method); $this->object->enable_mixin($method, $klass); + // Re-set all method properties + $this->object->set_method_properties($method, $props); + return $retval; } @@ -1366,7 +1408,7 @@ class Hook extends Mixin * Provides an alias for call_anchor, as there's no parent * to call in the context of a hook. */ - function call_parent() + function call_parent($method) { $args = func_get_args(); return call_user_func_array( diff --git a/wp-content/plugins/nextgen-gallery/pope/lib/interface.component_factory.php b/wp-content/plugins/nextgen-gallery/pope/lib/interface.component_factory.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/class.nextgen_product_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/class.nextgen_product_installer.php index 0cac1bef7efe9e81534eaa58f821e9ac8dd09d1f..7f9a1ee68e66fd6d7de2799fbd26c11f4081fa8c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/class.nextgen_product_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/class.nextgen_product_installer.php @@ -2,12 +2,58 @@ class C_NextGen_Product_Installer { + function _filter_modules($pope_modules_list, $product) + { + foreach ($product as $module_name) { + $module = C_Component_Registry::get_instance()->get_module($module_name); + $str = $module->module_id . '|' . $module->module_version; + $search = array_search($str, $pope_modules_list); + if (FALSE !== $search) + unset($pope_modules_list[$search]); + } + return $pope_modules_list; + } + function uninstall($hard) { + // remove this products modules from the pope_module_list registry + $pope_modules_list = get_option('pope_module_list', array()); + $pope_modules_list = $this->_filter_modules($pope_modules_list, P_Photocrati_NextGen::$modules); + + // run each modules respective uninstall routines foreach (P_Photocrati_NextGen::$modules as $module_name) { if (($handler = C_Photocrati_Installer::get_handler_instance($module_name))) { - if (method_exists($handler, 'uninstall')) $handler->uninstall($hard); + if (method_exists($handler, 'uninstall')) $handler->uninstall($hard); } - } + } + + // lastly remove this product itself from the pope_module_list registry + $search = array_search('photocrati-nextgen|' . NGG_PLUGIN_VERSION, $pope_modules_list); + if (FALSE !== $search) + unset($pope_modules_list[$search]); + + // TODO: remove this. NextGen Pro's uninstall routine will be updated in a separate release, + // so to maintain proper support we run the same routine as above for it + $pro_version = FALSE; + if (defined('NGG_PRO_PLUGIN_VERSION')) + $pro_version = 'NGG_PRO_PLUGIN_VERSION'; + if (defined('NEXTGEN_GALLERY_PRO_VERSION')) + $pro_version = 'NEXTGEN_GALLERY_PRO_VERSION'; + if (FALSE !== $pro_version) + $pro_version = constant($pro_version); + + if (FALSE !== $pro_version) + { + $pope_modules_list = $this->_filter_modules($pope_modules_list, P_Photocrati_NextGen_Pro::$modules); + $search = array_search('photocrati-nextgen-pro|' . $pro_version, $pope_modules_list); + if (FALSE !== $search) + unset($pope_modules_list[$search]); + } + + if (empty($pope_modules_list)) + delete_option('pope_module_list'); + else + update_option('pope_module_list', $pope_modules_list); + } -} \ No newline at end of file +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/class.ajax_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/class.ajax_controller.php index a426c8aaaea6ecbc1ae74e88be7e2d8648381bd7..8a364eb7b66a02df0ea729dbb6f8ded22e74063c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/class.ajax_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/class.ajax_controller.php @@ -12,11 +12,11 @@ class C_Ajax_Controller extends C_MVC_Controller function index_action() { - // Start an output buffer to avoid displaying any PHP warnings/errors - ob_start(); + // Inform the MVC framework what type of content we're returning + $this->set_content_type('json'); - // Inform the MVC framework what type of content we're returning - $this->set_content_type('json'); + // Start an output buffer to avoid displaying any PHP warnings/errors + ob_start(); // Get the action requested & find and execute the related method if (($action = $this->param('action'))) { @@ -27,11 +27,13 @@ class C_Ajax_Controller extends C_MVC_Controller } // If no retval has been set, then return an error - if (!$retval) + if (is_null($retval)) $retval = array('error' => 'Not a valid AJAX action'); // Flush the buffer - ob_end_clean(); + while (ob_get_level() > 0 ) { + ob_end_clean(); + } // Return the JSON to the browser echo json_encode($retval); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/module.ajax.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/module.ajax.php index 3fc151f4ae8317274f405eaf03a5f6fc5b3452ac..932832f54019f13152e46f344c3d6a8601939111 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/module.ajax.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/module.ajax.php @@ -14,7 +14,7 @@ class M_Ajax extends C_Base_Module 'photocrati-ajax', 'AJAX', 'Provides AJAX functionality', - '0.4', + '0.7', 'http://www.photocrati.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -47,7 +47,7 @@ class M_Ajax extends C_Base_Module */ function _register_hooks() { - add_action('init', array(&$this, 'enqueue_scripts')); + add_action('init', array(&$this, 'enqueue_scripts'), 9); } @@ -68,9 +68,15 @@ class M_Ajax extends C_Base_Module $vars = array( 'url' => $router->get_url($settings->ajax_slug, FALSE), 'wp_site_url' => $home_url, - 'wp_site_static_url' => str_replace('/index.php', '', $site_url) + 'wp_site_static_url' => str_replace('/index.php', '', str_replace('/index.php', '', $site_url)) ); wp_localize_script('photocrati_ajax', 'photocrati_ajax', $vars); + + wp_register_script('persist-js', $router->get_static_url('photocrati-ajax#persist.js')); + wp_register_script('store-js', $router->get_static_url('photocrati-ajax#store.js')); + wp_register_script('ngg-store-js', $router->get_static_url('photocrati-ajax#ngg_store.js'), array('jquery', 'persist-js', 'store-js')); + + wp_enqueue_script('ngg-store-js'); } function get_type_list() diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/ngg_store.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/ngg_store.js new file mode 100644 index 0000000000000000000000000000000000000000..45a8f23c1df5e9cca09e3ef8d2110d09355d5ad9 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/ngg_store.js @@ -0,0 +1,42 @@ +jQuery(function($){ + +// Store isn't working 100% for me. So disabling it for now. +store.enabled = false; + +window.Ngg_Store = { + driver: store.enabled ? store : new Persist.Store('ngg_store'), + + get: function(key){ + return this.driver.get(key); + }, + + set: function(key, value){ + if (typeof(value) == 'object') { + value = JSON.stringify(value); + } + return this.driver.set(key, value); + }, + + del: function(key){ + this.driver.remove(key); + return !this.has(key); + }, + + has: function(key){ + var value = this.get(key); + return typeof(value) != 'undefined' && value != null; + }, + + save: function(){ + if (typeof(this.driver['save']) != 'undefined') { + return this.driver.save(); + } + else return true; + } +}; + +$(window).unload(function(){ + Ngg_Store.save(); +}) + +}); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/persist.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/persist.js new file mode 100644 index 0000000000000000000000000000000000000000..f5a344783cf5af7fb5d02d6b2642c2d2aaae2f22 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/persist.js @@ -0,0 +1,145 @@ + +var swfobject=function(){var UNDEF="undefined",OBJECT="object",SHOCKWAVE_FLASH="Shockwave Flash",SHOCKWAVE_FLASH_AX="ShockwaveFlash.ShockwaveFlash",FLASH_MIME_TYPE="application/x-shockwave-flash",EXPRESS_INSTALL_ID="SWFObjectExprInst",ON_READY_STATE_CHANGE="onreadystatechange",win=window,doc=document,nav=navigator,plugin=false,domLoadFnArr=[main],regObjArr=[],objIdArr=[],listenersArr=[],storedAltContent,storedAltContentId,storedCallbackFn,storedCallbackObj,isDomLoaded=false,isExpressInstallActive=false,dynamicStylesheet,dynamicStylesheetMedia,autoHideShow=true,ua=function(){var w3cdom=typeof doc.getElementById!=UNDEF&&typeof doc.getElementsByTagName!=UNDEF&&typeof doc.createElement!=UNDEF,u=nav.userAgent.toLowerCase(),p=nav.platform.toLowerCase(),windows=p?/win/.test(p):/win/.test(u),mac=p?/mac/.test(p):/mac/.test(u),webkit=/webkit/.test(u)?parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,ie=!+"\v1",playerVersion=[0,0,0],d=null;if(typeof nav.plugins!=UNDEF&&typeof nav.plugins[SHOCKWAVE_FLASH]==OBJECT){d=nav.plugins[SHOCKWAVE_FLASH].description;if(d&&!(typeof nav.mimeTypes!=UNDEF&&nav.mimeTypes[FLASH_MIME_TYPE]&&!nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)){plugin=true;ie=false;d=d.replace(/^.*\s+(\S+\s+\S+$)/,"$1");playerVersion[0]=parseInt(d.replace(/^(.*)\..*$/,"$1"),10);playerVersion[1]=parseInt(d.replace(/^.*\.(.*)\s.*$/,"$1"),10);playerVersion[2]=/[a-zA-Z]/.test(d)?parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0;}} +else if(typeof win.ActiveXObject!=UNDEF){try{var a=new ActiveXObject(SHOCKWAVE_FLASH_AX);if(a){d=a.GetVariable("$version");if(d){ie=true;d=d.split(" ")[1].split(",");playerVersion=[parseInt(d[0],10),parseInt(d[1],10),parseInt(d[2],10)];}}} +catch(e){}} + return{w3:w3cdom,pv:playerVersion,wk:webkit,ie:ie,win:windows,mac:mac};}(),onDomLoad=function(){if(!ua.w3){return;} + if((typeof doc.readyState!=UNDEF&&doc.readyState=="complete")||(typeof doc.readyState==UNDEF&&(doc.getElementsByTagName("body")[0]||doc.body))){callDomLoadFunctions();} + if(!isDomLoaded){if(typeof doc.addEventListener!=UNDEF){doc.addEventListener("DOMContentLoaded",callDomLoadFunctions,false);} + if(ua.ie&&ua.win){doc.attachEvent(ON_READY_STATE_CHANGE,function(){if(doc.readyState=="complete"){doc.detachEvent(ON_READY_STATE_CHANGE,arguments.callee);callDomLoadFunctions();}});if(win==top){(function(){if(isDomLoaded){return;} + try{doc.documentElement.doScroll("left");} + catch(e){setTimeout(arguments.callee,0);return;} + callDomLoadFunctions();})();}} + if(ua.wk){(function(){if(isDomLoaded){return;} + if(!/loaded|complete/.test(doc.readyState)){setTimeout(arguments.callee,0);return;} + callDomLoadFunctions();})();} + addLoadEvent(callDomLoadFunctions);}}();function callDomLoadFunctions(){if(isDomLoaded){return;} + try{var t=doc.getElementsByTagName("body")[0].appendChild(createElement("span"));t.parentNode.removeChild(t);} + catch(e){return;} + isDomLoaded=true;var dl=domLoadFnArr.length;for(var i=0;i<dl;i++){domLoadFnArr[i]();}} + function addDomLoadEvent(fn){if(isDomLoaded){fn();} + else{domLoadFnArr[domLoadFnArr.length]=fn;}} + function addLoadEvent(fn){if(typeof win.addEventListener!=UNDEF){win.addEventListener("load",fn,false);} + else if(typeof doc.addEventListener!=UNDEF){doc.addEventListener("load",fn,false);} + else if(typeof win.attachEvent!=UNDEF){addListener(win,"onload",fn);} + else if(typeof win.onload=="function"){var fnOld=win.onload;win.onload=function(){fnOld();fn();};} + else{win.onload=fn;}} + function main(){if(plugin){testPlayerVersion();} + else{matchVersions();}} + function testPlayerVersion(){var b=doc.getElementsByTagName("body")[0];var o=createElement(OBJECT);o.setAttribute("type",FLASH_MIME_TYPE);var t=b.appendChild(o);if(t){var counter=0;(function(){if(typeof t.GetVariable!=UNDEF){var d=t.GetVariable("$version");if(d){d=d.split(" ")[1].split(",");ua.pv=[parseInt(d[0],10),parseInt(d[1],10),parseInt(d[2],10)];}} + else if(counter<10){counter++;setTimeout(arguments.callee,10);return;} + b.removeChild(o);t=null;matchVersions();})();} + else{matchVersions();}} + function matchVersions(){var rl=regObjArr.length;if(rl>0){for(var i=0;i<rl;i++){var id=regObjArr[i].id;var cb=regObjArr[i].callbackFn;var cbObj={success:false,id:id};if(ua.pv[0]>0){var obj=getElementById(id);if(obj){if(hasPlayerVersion(regObjArr[i].swfVersion)&&!(ua.wk&&ua.wk<312)){setVisibility(id,true);if(cb){cbObj.success=true;cbObj.ref=getObjectById(id);cb(cbObj);}} + else if(regObjArr[i].expressInstall&&canExpressInstall()){var att={};att.data=regObjArr[i].expressInstall;att.width=obj.getAttribute("width")||"0";att.height=obj.getAttribute("height")||"0";if(obj.getAttribute("class")){att.styleclass=obj.getAttribute("class");} + if(obj.getAttribute("align")){att.align=obj.getAttribute("align");} + var par={};var p=obj.getElementsByTagName("param");var pl=p.length;for(var j=0;j<pl;j++){if(p[j].getAttribute("name").toLowerCase()!="movie"){par[p[j].getAttribute("name")]=p[j].getAttribute("value");}} + showExpressInstall(att,par,id,cb);} + else{displayAltContent(obj);if(cb){cb(cbObj);}}}} + else{setVisibility(id,true);if(cb){var o=getObjectById(id);if(o&&typeof o.SetVariable!=UNDEF){cbObj.success=true;cbObj.ref=o;} + cb(cbObj);}}}}} + function getObjectById(objectIdStr){var r=null;var o=getElementById(objectIdStr);if(o&&o.nodeName=="OBJECT"){if(typeof o.SetVariable!=UNDEF){r=o;} + else{var n=o.getElementsByTagName(OBJECT)[0];if(n){r=n;}}} + return r;} + function canExpressInstall(){return!isExpressInstallActive&&hasPlayerVersion("6.0.65")&&(ua.win||ua.mac)&&!(ua.wk&&ua.wk<312);} + function showExpressInstall(att,par,replaceElemIdStr,callbackFn){isExpressInstallActive=true;storedCallbackFn=callbackFn||null;storedCallbackObj={success:false,id:replaceElemIdStr};var obj=getElementById(replaceElemIdStr);if(obj){if(obj.nodeName=="OBJECT"){storedAltContent=abstractAltContent(obj);storedAltContentId=null;} + else{storedAltContent=obj;storedAltContentId=replaceElemIdStr;} + att.id=EXPRESS_INSTALL_ID;if(typeof att.width==UNDEF||(!/%$/.test(att.width)&&parseInt(att.width,10)<310)){att.width="310";} + if(typeof att.height==UNDEF||(!/%$/.test(att.height)&&parseInt(att.height,10)<137)){att.height="137";} + doc.title=doc.title.slice(0,47)+" - Flash Player Installation";var pt=ua.ie&&ua.win?"ActiveX":"PlugIn",fv="MMredirectURL="+win.location.toString().replace(/&/g,"%26")+"&MMplayerType="+pt+"&MMdoctitle="+doc.title;if(typeof par.flashvars!=UNDEF){par.flashvars+="&"+fv;} + else{par.flashvars=fv;} + if(ua.ie&&ua.win&&obj.readyState!=4){var newObj=createElement("div");replaceElemIdStr+="SWFObjectNew";newObj.setAttribute("id",replaceElemIdStr);obj.parentNode.insertBefore(newObj,obj);obj.style.display="none";(function(){if(obj.readyState==4){obj.parentNode.removeChild(obj);} + else{setTimeout(arguments.callee,10);}})();} + createSWF(att,par,replaceElemIdStr);}} + function displayAltContent(obj){if(ua.ie&&ua.win&&obj.readyState!=4){var el=createElement("div");obj.parentNode.insertBefore(el,obj);el.parentNode.replaceChild(abstractAltContent(obj),el);obj.style.display="none";(function(){if(obj.readyState==4){obj.parentNode.removeChild(obj);} + else{setTimeout(arguments.callee,10);}})();} + else{obj.parentNode.replaceChild(abstractAltContent(obj),obj);}} + function abstractAltContent(obj){var ac=createElement("div");if(ua.win&&ua.ie){ac.innerHTML=obj.innerHTML;} + else{var nestedObj=obj.getElementsByTagName(OBJECT)[0];if(nestedObj){var c=nestedObj.childNodes;if(c){var cl=c.length;for(var i=0;i<cl;i++){if(!(c[i].nodeType==1&&c[i].nodeName=="PARAM")&&!(c[i].nodeType==8)){ac.appendChild(c[i].cloneNode(true));}}}}} + return ac;} + function createSWF(attObj,parObj,id){var r,el=getElementById(id);if(ua.wk&&ua.wk<312){return r;} + if(el){if(typeof attObj.id==UNDEF){attObj.id=id;} + if(ua.ie&&ua.win){var att="";for(var i in attObj){if(attObj[i]!=Object.prototype[i]){if(i.toLowerCase()=="data"){parObj.movie=attObj[i];} + else if(i.toLowerCase()=="styleclass"){att+=' class="'+attObj[i]+'"';} + else if(i.toLowerCase()!="classid"){att+=' '+i+'="'+attObj[i]+'"';}}} + var par="";for(var j in parObj){if(parObj[j]!=Object.prototype[j]){par+='<param name="'+j+'" value="'+parObj[j]+'" />';}} + el.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+att+'>'+par+'</object>';objIdArr[objIdArr.length]=attObj.id;r=getElementById(attObj.id);} + else{var o=createElement(OBJECT);o.setAttribute("type",FLASH_MIME_TYPE);for(var m in attObj){if(attObj[m]!=Object.prototype[m]){if(m.toLowerCase()=="styleclass"){o.setAttribute("class",attObj[m]);} + else if(m.toLowerCase()!="classid"){o.setAttribute(m,attObj[m]);}}} + for(var n in parObj){if(parObj[n]!=Object.prototype[n]&&n.toLowerCase()!="movie"){createObjParam(o,n,parObj[n]);}} + el.parentNode.replaceChild(o,el);r=o;}} + return r;} + function createObjParam(el,pName,pValue){var p=createElement("param");p.setAttribute("name",pName);p.setAttribute("value",pValue);el.appendChild(p);} + function removeSWF(id){var obj=getElementById(id);if(obj&&obj.nodeName=="OBJECT"){if(ua.ie&&ua.win){obj.style.display="none";(function(){if(obj.readyState==4){removeObjectInIE(id);} + else{setTimeout(arguments.callee,10);}})();} + else{obj.parentNode.removeChild(obj);}}} + function removeObjectInIE(id){var obj=getElementById(id);if(obj){for(var i in obj){if(typeof obj[i]=="function"){obj[i]=null;}} + obj.parentNode.removeChild(obj);}} + function getElementById(id){var el=null;try{el=doc.getElementById(id);} + catch(e){} + return el;} + function createElement(el){return doc.createElement(el);} + function addListener(target,eventType,fn){target.attachEvent(eventType,fn);listenersArr[listenersArr.length]=[target,eventType,fn];} + function hasPlayerVersion(rv){var pv=ua.pv,v=rv.split(".");v[0]=parseInt(v[0],10);v[1]=parseInt(v[1],10)||0;v[2]=parseInt(v[2],10)||0;return(pv[0]>v[0]||(pv[0]==v[0]&&pv[1]>v[1])||(pv[0]==v[0]&&pv[1]==v[1]&&pv[2]>=v[2]))?true:false;} + function createCSS(sel,decl,media,newStyle){if(ua.ie&&ua.mac){return;} + var h=doc.getElementsByTagName("head")[0];if(!h){return;} + var m=(media&&typeof media=="string")?media:"screen";if(newStyle){dynamicStylesheet=null;dynamicStylesheetMedia=null;} + if(!dynamicStylesheet||dynamicStylesheetMedia!=m){var s=createElement("style");s.setAttribute("type","text/css");s.setAttribute("media",m);dynamicStylesheet=h.appendChild(s);if(ua.ie&&ua.win&&typeof doc.styleSheets!=UNDEF&&doc.styleSheets.length>0){dynamicStylesheet=doc.styleSheets[doc.styleSheets.length-1];} + dynamicStylesheetMedia=m;} + if(ua.ie&&ua.win){if(dynamicStylesheet&&typeof dynamicStylesheet.addRule==OBJECT){dynamicStylesheet.addRule(sel,decl);}} + else{if(dynamicStylesheet&&typeof doc.createTextNode!=UNDEF){dynamicStylesheet.appendChild(doc.createTextNode(sel+" {"+decl+"}"));}}} + function setVisibility(id,isVisible){if(!autoHideShow){return;} + var v=isVisible?"visible":"hidden";if(isDomLoaded&&getElementById(id)){getElementById(id).style.visibility=v;} + else{createCSS("#"+id,"visibility:"+v);}} + function urlEncodeIfNecessary(s){var regex=/[\\\"<>\.;]/;var hasBadChars=regex.exec(s)!=null;return hasBadChars&&typeof encodeURIComponent!=UNDEF?encodeURIComponent(s):s;} + var cleanup=function(){if(ua.ie&&ua.win){window.attachEvent("onunload",function(){var ll=listenersArr.length;for(var i=0;i<ll;i++){listenersArr[i][0].detachEvent(listenersArr[i][1],listenersArr[i][2]);} + var il=objIdArr.length;for(var j=0;j<il;j++){removeSWF(objIdArr[j]);} + for(var k in ua){ua[k]=null;} + ua=null;for(var l in swfobject){swfobject[l]=null;} + swfobject=null;});}}();return{registerObject:function(objectIdStr,swfVersionStr,xiSwfUrlStr,callbackFn){if(ua.w3&&objectIdStr&&swfVersionStr){var regObj={};regObj.id=objectIdStr;regObj.swfVersion=swfVersionStr;regObj.expressInstall=xiSwfUrlStr;regObj.callbackFn=callbackFn;regObjArr[regObjArr.length]=regObj;setVisibility(objectIdStr,false);} + else if(callbackFn){callbackFn({success:false,id:objectIdStr});}},getObjectById:function(objectIdStr){if(ua.w3){return getObjectById(objectIdStr);}},embedSWF:function(swfUrlStr,replaceElemIdStr,widthStr,heightStr,swfVersionStr,xiSwfUrlStr,flashvarsObj,parObj,attObj,callbackFn){var callbackObj={success:false,id:replaceElemIdStr};if(ua.w3&&!(ua.wk&&ua.wk<312)&&swfUrlStr&&replaceElemIdStr&&widthStr&&heightStr&&swfVersionStr){setVisibility(replaceElemIdStr,false);addDomLoadEvent(function(){widthStr+="";heightStr+="";var att={};if(attObj&&typeof attObj===OBJECT){for(var i in attObj){att[i]=attObj[i];}} + att.data=swfUrlStr;att.width=widthStr;att.height=heightStr;var par={};if(parObj&&typeof parObj===OBJECT){for(var j in parObj){par[j]=parObj[j];}} + if(flashvarsObj&&typeof flashvarsObj===OBJECT){for(var k in flashvarsObj){if(typeof par.flashvars!=UNDEF){par.flashvars+="&"+k+"="+flashvarsObj[k];} + else{par.flashvars=k+"="+flashvarsObj[k];}}} + if(hasPlayerVersion(swfVersionStr)){var obj=createSWF(att,par,replaceElemIdStr);if(att.id==replaceElemIdStr){setVisibility(replaceElemIdStr,true);} + callbackObj.success=true;callbackObj.ref=obj;} + else if(xiSwfUrlStr&&canExpressInstall()){att.data=xiSwfUrlStr;showExpressInstall(att,par,replaceElemIdStr,callbackFn);return;} + else{setVisibility(replaceElemIdStr,true);} + if(callbackFn){callbackFn(callbackObj);}});} + else if(callbackFn){callbackFn(callbackObj);}},switchOffAutoHideShow:function(){autoHideShow=false;},ua:ua,getFlashPlayerVersion:function(){return{major:ua.pv[0],minor:ua.pv[1],release:ua.pv[2]};},hasFlashPlayerVersion:hasPlayerVersion,createSWF:function(attObj,parObj,replaceElemIdStr){if(ua.w3){return createSWF(attObj,parObj,replaceElemIdStr);} + else{return undefined;}},showExpressInstall:function(att,par,replaceElemIdStr,callbackFn){if(ua.w3&&canExpressInstall()){showExpressInstall(att,par,replaceElemIdStr,callbackFn);}},removeSWF:function(objElemIdStr){if(ua.w3){removeSWF(objElemIdStr);}},createCSS:function(selStr,declStr,mediaStr,newStyleBoolean){if(ua.w3){createCSS(selStr,declStr,mediaStr,newStyleBoolean);}},addDomLoadEvent:addDomLoadEvent,addLoadEvent:addLoadEvent,getQueryParamValue:function(param){var q=doc.location.search||doc.location.hash;if(q){if(/\?/.test(q)){q=q.split("?")[1];} + if(param==null){return urlEncodeIfNecessary(q);} + var pairs=q.split("&");for(var i=0;i<pairs.length;i++){if(pairs[i].substring(0,pairs[i].indexOf("="))==param){return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=")+1)));}}} + return"";},expressInstallCallback:function(){if(isExpressInstallActive){var obj=getElementById(EXPRESS_INSTALL_ID);if(obj&&storedAltContent){obj.parentNode.replaceChild(storedAltContent,obj);if(storedAltContentId){setVisibility(storedAltContentId,true);if(ua.ie&&ua.win){storedAltContent.style.display="block";}} + if(storedCallbackFn){storedCallbackFn(storedCallbackObj);}} + isExpressInstallActive=false;}}};}();(function(){if(window.google&&google.gears){return;} + var F=null;if(typeof GearsFactory!='undefined'){F=new GearsFactory();}else{try{F=new ActiveXObject('Gears.Factory');if(F.getBuildInfo().indexOf('ie_mobile')!=-1){F.privateSetGlobalObject(this);}}catch(e){if((typeof navigator.mimeTypes!='undefined')&&navigator.mimeTypes["application/x-googlegears"]){F=document.createElement("object");F.style.display="none";F.width=0;F.height=0;F.type="application/x-googlegears";document.documentElement.appendChild(F);}}} + if(!F){return;} + if(!window.google){google={};} + if(!google.gears){google.gears={factory:F};}})();Persist=(function(){var VERSION='0.3.1',P,B,esc,init,empty,ec;ec=(function(){var EPOCH='Thu, 01-Jan-1970 00:00:01 GMT',RATIO=1000*60*60*24,KEYS=['expires','path','domain'],esc=escape,un=unescape,doc=document,me;var get_now=function(){var r=new Date();r.setTime(r.getTime());return r;};var cookify=function(c_key,c_val){var i,key,val,r=[],opt=(arguments.length>2)?arguments[2]:{};r.push(esc(c_key)+'='+esc(c_val));for(var idx=0;idx<KEYS.length;idx++){key=KEYS[idx];val=opt[key];if(val){r.push(key+'='+val);}} + if(opt.secure){r.push('secure');} + return r.join('; ');};var alive=function(){var k='__EC_TEST__',v=new Date();v=v.toGMTString();this.set(k,v);this.enabled=(this.remove(k)==v);return this.enabled;};me={set:function(key,val){var opt=(arguments.length>2)?arguments[2]:{},now=get_now(),expire_at,cfg={};if(opt.expires){if(opt.expires==-1){cfg.expires=-1} +else{var expires=opt.expires*RATIO;cfg.expires=new Date(now.getTime()+expires);cfg.expires=cfg.expires.toGMTString();}} + var keys=['path','domain','secure'];for(var i=0;i<keys.length;i++){if(opt[keys[i]]){cfg[keys[i]]=opt[keys[i]];}} + var r=cookify(key,val,cfg);doc.cookie=r;return val;},has:function(key){key=esc(key);var c=doc.cookie,ofs=c.indexOf(key+'='),len=ofs+key.length+1,sub=c.substring(0,key.length);return((!ofs&&key!=sub)||ofs<0)?false:true;},get:function(key){key=esc(key);var c=doc.cookie,ofs=c.indexOf(key+'='),len=ofs+key.length+1,sub=c.substring(0,key.length),end;if((!ofs&&key!=sub)||ofs<0){return null;} + end=c.indexOf(';',len);if(end<0){end=c.length;} + return un(c.substring(len,end));},remove:function(k){var r=me.get(k),opt={expires:EPOCH};doc.cookie=cookify(k,'',opt);return r;},keys:function(){var c=doc.cookie,ps=c.split('; '),i,p,r=[];for(var idx=0;idx<ps.length;idx++){p=ps[idx].split('=');r.push(un(p[0]));} + return r;},all:function(){var c=doc.cookie,ps=c.split('; '),i,p,r=[];for(var idx=0;idx<ps.length;idx++){p=ps[idx].split('=');r.push([un(p[0]),un(p[1])]);} + return r;},version:'0.2.1',enabled:false};me.enabled=alive.call(me);return me;}());var index_of=(function(){if(Array.prototype.indexOf){return function(ary,val){return Array.prototype.indexOf.call(ary,val);};}else{return function(ary,val){var i,l;for(var idx=0,len=ary.length;idx<len;idx++){if(ary[idx]==val){return idx;}} + return-1;};}})();empty=function(){};esc=function(str){return'PS'+str.replace(/_/g,'__').replace(/ /g,'_s');};var C={search_order:['localstorage','globalstorage','gears','cookie','ie','flash'],name_re:/^[a-z][a-z0-9_ \-]+$/i,methods:['init','get','set','remove','load','save','iterate'],sql:{version:'1',create:"CREATE TABLE IF NOT EXISTS persist_data (k TEXT UNIQUE NOT NULL PRIMARY KEY, v TEXT NOT NULL)",get:"SELECT v FROM persist_data WHERE k = ?",set:"INSERT INTO persist_data(k, v) VALUES (?, ?)",remove:"DELETE FROM persist_data WHERE k = ?",keys:"SELECT * FROM persist_data"},flash:{div_id:'_persist_flash_wrap',id:'_persist_flash',path:'persist.swf',size:{w:1,h:1},params:{autostart:true}}};B={gears:{size:-1,test:function(){return(window.google&&window.google.gears)?true:false;},methods:{init:function(){var db;db=this.db=google.gears.factory.create('beta.database');db.open(esc(this.name));db.execute(C.sql.create).close();},get:function(key){var r,sql=C.sql.get;var db=this.db;var ret;db.execute('BEGIN').close();r=db.execute(sql,[key]);ret=r.isValidRow()?r.field(0):null;r.close();db.execute('COMMIT').close();return ret;},set:function(key,val){var rm_sql=C.sql.remove,sql=C.sql.set,r;var db=this.db;var ret;db.execute('BEGIN').close();db.execute(rm_sql,[key]).close();db.execute(sql,[key,val]).close();db.execute('COMMIT').close();return val;},remove:function(key){var get_sql=C.sql.get,sql=C.sql.remove,r,val=null,is_valid=false;var db=this.db;db.execute('BEGIN').close();db.execute(sql,[key]).close();db.execute('COMMIT').close();return true;},iterate:function(fn,scope){var key_sql=C.sql.keys;var r;var db=this.db;r=db.execute(key_sql);while(r.isValidRow()){fn.call(scope||this,r.field(0),r.field(1));r.next();} + r.close();}}},globalstorage:{size:5*1024*1024,test:function(){if(window.globalStorage){var domain='127.0.0.1';if(this.o&&this.o.domain){domain=this.o.domain;} + try{var dontcare=globalStorage[domain];return true;}catch(e){if(window.console&&window.console.warn){console.warn("globalStorage exists, but couldn't use it because your browser is running on domain:",domain);} + return false;}}else{return false;}},methods:{key:function(key){return esc(this.name)+esc(key);},init:function(){this.store=globalStorage[this.o.domain];},get:function(key){key=this.key(key);return this.store.getItem(key);},set:function(key,val){key=this.key(key);this.store.setItem(key,val);return val;},remove:function(key){var val;key=this.key(key);val=this.store.getItem[key];this.store.removeItem(key);return val;}}},localstorage:{size:-1,test:function(){try{if(window.localStorage&&window.localStorage.setItem("test",null)==undefined){if(/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){var ffVersion=RegExp.$1;if(ffVersion>=9){return true;} + if(window.location.protocol=='file:'){return false;}}else{return true;}}else{return false;} + return window.localStorage?true:false;}catch(e){return false;}},methods:{key:function(key){return this.name+'>'+key;},init:function(){this.store=localStorage;},get:function(key){key=this.key(key);return this.store.getItem(key);},set:function(key,val){key=this.key(key);this.store.setItem(key,val);return val;},remove:function(key){var val;key=this.key(key);val=this.store.getItem(key);this.store.removeItem(key);return val;},iterate:function(fn,scope){var l=this.store,key,keys;for(var i=0;i<l.length;i++){key=l.key(i);keys=key.split('>');if((keys.length==2)&&(keys[0]==this.name)){fn.call(scope||this,keys[1],l.getItem(key));}}}}},ie:{prefix:'_persist_data-',size:64*1024,test:function(){return window.ActiveXObject?true:false;},make_userdata:function(id){var el=document.createElement('div');el.id=id;el.style.display='none';el.addBehavior('#default#userdata');document.body.appendChild(el);return el;},methods:{init:function(){var id=B.ie.prefix+esc(this.name);this.el=B.ie.make_userdata(id);if(this.o.defer){this.load();}},get:function(key){var val;key=esc(key);if(!this.o.defer){this.load();} + val=this.el.getAttribute(key);return val;},set:function(key,val){key=esc(key);this.el.setAttribute(key,val);if(!this.o.defer){this.save();} + return val;},remove:function(key){var val;key=esc(key);if(!this.o.defer){this.load();} + val=this.el.getAttribute(key);this.el.removeAttribute(key);if(!this.o.defer){this.save();} + return val;},load:function(){this.el.load(esc(this.name));},save:function(){this.el.save(esc(this.name));}}},cookie:{delim:':',size:4000,test:function(){return P.Cookie.enabled?true:false;},methods:{key:function(key){return this.name+B.cookie.delim+key;},get:function(key,fn){var val;key=this.key(key);val=ec.get(key);return val;},set:function(key,val,fn){key=this.key(key);ec.set(key,val,this.o);return val;},remove:function(key,val){var val;key=this.key(key);val=ec.remove(key);return val;}}},flash:{test:function(){try{if(!swfobject){return false;}}catch(e){return false;} + var major=swfobject.getFlashPlayerVersion().major;return(major>=8)?true:false;},methods:{init:function(){if(!B.flash.el){var key,el,fel,cfg=C.flash;el=document.createElement('div');el.id=cfg.div_id;fel=document.createElement('div');fel.id=cfg.id;el.appendChild(fel);document.body.appendChild(el);B.flash.el=swfobject.createSWF({id:cfg.id,data:this.o.swf_path||cfg.path,width:cfg.size.w,height:cfg.size.h},cfg.params,cfg.id);} + this.el=B.flash.el;},get:function(key){var val;key=esc(key);val=this.el.get(this.name,key);return val;},set:function(key,val){var old_val;key=esc(key);old_val=this.el.set(this.name,key,val);return old_val;},remove:function(key){var val;key=esc(key);val=this.el.remove(this.name,key);return val;}}}};init=function(){var i,l,b,key,fns=C.methods,keys=C.search_order;for(var idx=0,len=fns.length;idx<len;idx++){P.Store.prototype[fns[idx]]=empty;} + P.type=null;P.size=-1;for(var idx2=0,len2=keys.length;!P.type&&idx2<len2;idx2++){b=B[keys[idx2]];if(b.test()){P.type=keys[idx2];P.size=b.size;for(key in b.methods){P.Store.prototype[key]=b.methods[key];}}} + P._init=true;};P={VERSION:VERSION,type:null,size:0,add:function(o){B[o.id]=o;C.search_order=[o.id].concat(C.search_order);init();},remove:function(id){var ofs=index_of(C.search_order,id);if(ofs<0){return;} + C.search_order.splice(ofs,1);delete B[id];init();},Cookie:ec,Store:function(name,o){if(!C.name_re.exec(name)){throw new Error("Invalid name");} + if(!P.type){throw new Error("No suitable storage found");} + o=o||{};this.name=name;o.domain=o.domain||location.hostname||'localhost';o.domain=o.domain.replace(/:\d+$/,'');o.domain=(o.domain=='localhost')?'':o.domain;this.o=o;o.expires=o.expires||365*2;o.path=o.path||'/';if(this.o.search_order){C.search_order=this.o.search_order;init();} + this.init();}};init();return P;})(); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/persist.swf b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/persist.swf new file mode 100644 index 0000000000000000000000000000000000000000..572ec0d1c1e3be8210d2561120e5cbbd5eb6c497 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/persist.swf differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/store.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/store.js new file mode 100644 index 0000000000000000000000000000000000000000..07523433a41d8aea2374880f736b1271268dcca7 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ajax/static/store.js @@ -0,0 +1,2 @@ +/* Copyright (c) 2010-2013 Marcus Westin */ +this.JSON||(this.JSON={}),function(){function f(e){return e<10?"0"+e:e}function quote(e){return escapable.lastIndex=0,escapable.test(e)?'"'+e.replace(escapable,function(e){var t=meta[e];return typeof t=="string"?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var n,r,i,s,o=gap,u,a=t[e];a&&typeof a=="object"&&typeof a.toJSON=="function"&&(a=a.toJSON(e)),typeof rep=="function"&&(a=rep.call(t,e,a));switch(typeof a){case"string":return quote(a);case"number":return isFinite(a)?String(a):"null";case"boolean":case"null":return String(a);case"object":if(!a)return"null";gap+=indent,u=[];if(Object.prototype.toString.apply(a)==="[object Array]"){s=a.length;for(n=0;n<s;n+=1)u[n]=str(n,a)||"null";return i=u.length===0?"[]":gap?"[\n"+gap+u.join(",\n"+gap)+"\n"+o+"]":"["+u.join(",")+"]",gap=o,i}if(rep&&typeof rep=="object"){s=rep.length;for(n=0;n<s;n+=1)r=rep[n],typeof r=="string"&&(i=str(r,a),i&&u.push(quote(r)+(gap?": ":":")+i))}else for(r in a)Object.hasOwnProperty.call(a,r)&&(i=str(r,a),i&&u.push(quote(r)+(gap?": ":":")+i));return i=u.length===0?"{}":gap?"{\n"+gap+u.join(",\n"+gap)+"\n"+o+"}":"{"+u.join(",")+"}",gap=o,i}}typeof Date.prototype.toJSON!="function"&&(Date.prototype.toJSON=function(e){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(e){return this.valueOf()});var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;typeof JSON.stringify!="function"&&(JSON.stringify=function(e,t,n){var r;gap="",indent="";if(typeof n=="number")for(r=0;r<n;r+=1)indent+=" ";else typeof n=="string"&&(indent=n);rep=t;if(!t||typeof t=="function"||typeof t=="object"&&typeof t.length=="number")return str("",{"":e});throw new Error("JSON.stringify")}),typeof JSON.parse!="function"&&(JSON.parse=function(text,reviver){function walk(e,t){var n,r,i=e[t];if(i&&typeof i=="object")for(n in i)Object.hasOwnProperty.call(i,n)&&(r=walk(i,n),r!==undefined?i[n]=r:delete i[n]);return reviver.call(e,t,i)}var j;text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),typeof reviver=="function"?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(),function(e){function o(){try{return r in e&&e[r]}catch(t){return!1}}var t={},n=e.document,r="localStorage",i="script",s;t.disabled=!1,t.set=function(e,t){},t.get=function(e){},t.remove=function(e){},t.clear=function(){},t.transact=function(e,n,r){var i=t.get(e);r==null&&(r=n,n=null),typeof i=="undefined"&&(i=n||{}),r(i),t.set(e,i)},t.getAll=function(){},t.forEach=function(){},t.serialize=function(e){return JSON.stringify(e)},t.deserialize=function(e){if(typeof e!="string")return undefined;try{return JSON.parse(e)}catch(t){return e||undefined}};if(o())s=e[r],t.set=function(e,n){return n===undefined?t.remove(e):(s.setItem(e,t.serialize(n)),n)},t.get=function(e){return t.deserialize(s.getItem(e))},t.remove=function(e){s.removeItem(e)},t.clear=function(){s.clear()},t.getAll=function(){var e={};return t.forEach(function(t,n){e[t]=n}),e},t.forEach=function(e){for(var n=0;n<s.length;n++){var r=s.key(n);e(r,t.get(r))}};else if(n.documentElement.addBehavior){var u,a;try{a=new ActiveXObject("htmlfile"),a.open(),a.write("<"+i+">document.w=window</"+i+'><iframe src="/favicon.ico"></iframe>'),a.close(),u=a.w.frames[0].document,s=u.createElement("div")}catch(f){s=n.createElement("div"),u=n.body}function l(e){return function(){var n=Array.prototype.slice.call(arguments,0);n.unshift(s),u.appendChild(s),s.addBehavior("#default#userData"),s.load(r);var i=e.apply(t,n);return u.removeChild(s),i}}var c=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g");function h(e){return e.replace(c,"___")}t.set=l(function(e,n,i){return n=h(n),i===undefined?t.remove(n):(e.setAttribute(n,t.serialize(i)),e.save(r),i)}),t.get=l(function(e,n){return n=h(n),t.deserialize(e.getAttribute(n))}),t.remove=l(function(e,t){t=h(t),e.removeAttribute(t),e.save(r)}),t.clear=l(function(e){var t=e.XMLDocument.documentElement.attributes;e.load(r);for(var n=0,i;i=t[n];n++)e.removeAttribute(i.name);e.save(r)}),t.getAll=function(e){var n={};return t.forEach(function(e,t){n[e]=t}),n},t.forEach=l(function(e,n){var r=e.XMLDocument.documentElement.attributes;for(var i=0,s;s=r[i];++i)n(s.name,t.deserialize(e.getAttribute(s.name)))})}try{var p="__storejs__";t.set(p,p),t.get(p)!=p&&(t.disabled=!0),t.remove(p)}catch(f){t.disabled=!0}t.enabled=!t.disabled,typeof module!="undefined"&&module.exports?module.exports=t:typeof define=="function"&&define.amd?define(t):e.store=t}(this.window||global) \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php index e548fc3bd2c530e2499d273b9fbe7c23f37b82f0..c74a45d221be3b5c5defa1f06e3c9fe89280ba8c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php @@ -154,9 +154,9 @@ class A_Attach_To_Post_Ajax extends Mixin // name of the gallery or album if (($image = $image_mapper->find($entity->previewpic))) { if ($entity->is_album) - $image->alttext = _('Album: ').$entity->name; + $image->alttext = sprintf(__('Album: %s', 'nggallery'), $entity->name); else - $image->alttext = _('Gallery: ').$entity->title; + $image->alttext = sprintf(__('Gallery: %s', 'nggallery'), $entity->title); } // Prefix the id of an album with 'a' @@ -167,14 +167,14 @@ class A_Attach_To_Post_Ajax extends Mixin } // Get the thumbnail - $entity->thumb_url = $storage->get_image_url($image, 'thumb'); + $entity->thumb_url = $storage->get_image_url($image, 'thumb', TRUE); $entity->thumb_html = $storage->get_image_html($image, 'thumb'); $entity->max_width = $settings->thumbwidth; $entity->max_height = $settings->thumbheight; } } else { - $response['error'] = _('Missing parameters'); + $response['error'] = __('Missing parameters', 'nggallery'); } return $response; } @@ -189,7 +189,7 @@ class A_Attach_To_Post_Ajax extends Mixin $mapper = $this->object->get_registry()->get_utility('I_Displayed_Gallery_Mapper'); // Do we have fields to work with? - if ($this->object->validate_ajax_request(true) && ($params = $this->object->param('displayed_gallery'))) { + if ($this->object->validate_ajax_request(true) && ($params = json_decode($this->object->param('displayed_gallery')))) { // Existing displayed gallery ? if (($id = $this->object->param('id'))) { @@ -200,7 +200,7 @@ class A_Attach_To_Post_Ajax extends Mixin } else { $factory = $this->object->get_registry()->get_utility('I_Component_Factory'); - $displayed_gallery = $factory->create('displayed_gallery', $mapper, $params); + $displayed_gallery = $factory->create('displayed_gallery', $params, $mapper); } // Save the changes @@ -210,10 +210,10 @@ class A_Attach_To_Post_Ajax extends Mixin } else { - $response['error'] = _('Displayed gallery does not exist'); + $response['error'] = __('Displayed gallery does not exist', 'nggallery'); } } - else $response['error'] = _('Invalid request'); + else $response['error'] = __('Invalid request', 'nggallery'); return $response; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/adapter.gallery_storage_frame_event.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/adapter.gallery_storage_frame_event.php index 400850ae9176de904e31fd99d0a2d9463d2e70dc..d4e7651d9937bd073983894edfe51950ce72eb1f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/adapter.gallery_storage_frame_event.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/adapter.gallery_storage_frame_event.php @@ -29,11 +29,19 @@ class A_Gallery_Storage_Frame_Event extends Mixin $storage->get_thumb_url($image) ); - $events->add_event( - array( - 'event' => 'thumbnail_modified', - 'image' => $image, - ) - ); + if (is_admin()) { + + $event = new stdClass(); + $event->pid = $image->{$image->id_field}; + $event->id_field = $image->id_field; + $event->thumb_url = $image->thumb_url; + + $events->add_event( + array( + 'event' => 'thumbnail_modified', + 'image' => $event, + ) + ); + } } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php index 321c10584c59bccb875899578d6dae5352cd2a3a..04ccc09e8962b73f391024291684f97398559a8e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php @@ -4,6 +4,8 @@ class C_Attach_Controller extends C_NextGen_Admin_Page_Controller { static $_instances = array(); var $_displayed_gallery; + var $_marked_scripts; + var $_is_rendering; static function &get_instance($context) { @@ -28,6 +30,56 @@ class C_Attach_Controller extends C_NextGen_Admin_Page_Controller { parent::initialize(); $this->_load_displayed_gallery(); + + $this->_marked_scripts = array(); + + if (did_action('wp_print_scripts')) { + $this->_handle_scripts(); + } + else { + add_action('wp_print_scripts', array($this, '_handle_scripts'), 9999); + } + } + + function _handle_scripts() + { + if (is_admin() && $this->_is_rendering) + { + global $wp_scripts; + + $queue = $wp_scripts->queue; + $marked = $this->_marked_scripts; + + foreach ($marked as $tag => $value) { + $this->_handle_script($tag, $queue); + } + + foreach ($queue as $extra) { + wp_dequeue_script($extra); + } + } + } + + function _handle_script($tag, &$queue) + { + global $wp_scripts; + + $registered = $wp_scripts->registered; + + $idx = array_search($tag, $queue); + if ($idx !== false) { + unset($queue[$idx]); + } + + if (isset($registered[$tag])) { + $script = $registered[$tag]; + + if ($script->deps) { + foreach ($script->deps as $dep) { + $this->_handle_script($dep, $queue); + } + } + } } } @@ -40,26 +92,37 @@ class Mixin_Attach_To_Post extends Mixin $this->object->_displayed_gallery = $mapper->create(); } } + + function mark_script($script_tag) + { + $this->object->_marked_scripts[$script_tag] = true; + } function enqueue_backend_resources() { $this->call_parent('enqueue_backend_resources'); - // Enqueue frame event publishing wp_enqueue_script('frame_event_publisher'); + $this->object->mark_script('frame_event_publisher'); // Enqueue JQuery UI libraries wp_enqueue_script('jquery-ui-tabs'); wp_enqueue_script('jquery-ui-sortable'); - wp_enqueue_script('jquery-ui-tooltip'); + wp_enqueue_script('jquery-ui-tooltip'); wp_enqueue_script('ngg_tabs', $this->get_static_url('photocrati-attach_to_post#ngg_tabs.js')); + $this->object->mark_script('jquery-ui-tabs'); + $this->object->mark_script('jquery-ui-sortable'); + $this->object->mark_script('jquery-ui-tooltip'); + $this->object->mark_script('ngg_tabs'); // Ensure select2 wp_enqueue_style('select2'); wp_enqueue_script('select2'); + $this->object->mark_script('select2'); // Ensure that the Photocrati AJAX library is loaded wp_enqueue_script('photocrati_ajax'); + $this->object->mark_script('photocrati_ajax'); // Enqueue logic for the Attach to Post interface as a whole wp_enqueue_script( @@ -68,9 +131,11 @@ class Mixin_Attach_To_Post extends Mixin wp_enqueue_style( 'ngg_attach_to_post', $this->get_static_url('photocrati-attach_to_post#attach_to_post.css') ); + $this->object->mark_script('ngg_attach_to_post'); // Enqueue backbone.js library, required by the Attach to Post display tab wp_enqueue_script('backbone'); // provided by WP + $this->object->mark_script('backbone'); // Ensure underscore sting, a helper utility wp_enqueue_script( @@ -79,6 +144,7 @@ class Mixin_Attach_To_Post extends Mixin array('underscore'), '2.3.0' ); + $this->object->mark_script('underscore.string'); // Enqueue the backbone app for the display tab $settings = C_NextGen_Settings::get_instance(); @@ -98,6 +164,15 @@ class Mixin_Attach_To_Post extends Mixin 'ngg_displayed_gallery_preview_url', $settings->gallery_preview_url ); + $this->object->mark_script('ngg_display_tab'); + + // TODO: for now mark Pro scripts to ensure they are enqueued properly, remove this after Pro upgrade with tagging added + $display_types = array('photocrati-nextgen_pro_slideshow', 'photocrati-nextgen_pro_horizontal_filmstrip', 'photocrati-nextgen_pro_thumbnail_grid', 'photocrati-nextgen_pro_blog_gallery', 'photocrati-nextgen_pro_film'); + foreach ($display_types as $display_type) { + $this->object->mark_script($display_type . '-js'); + } + + $this->object->mark_script('nextgen_pro_albums_settings_script'); } /** @@ -105,8 +180,8 @@ class Mixin_Attach_To_Post extends Mixin */ function index_action($return=FALSE) { - if ($this->object->_displayed_gallery->is_new()) $this->object->expires("+2 hour"); - + $this->object->do_not_cache(); + // Enqueue resources return $this->object->render_view('photocrati-attach_to_post#attach_to_post', array( 'page_title' => $this->object->_get_page_title(), @@ -170,7 +245,7 @@ class Mixin_Attach_To_Post extends Mixin */ function _get_page_title() { - return _('NextGEN Gallery - Attach To Post'); + return __('NextGEN Gallery - Attach To Post', 'nggallery'); } @@ -188,35 +263,35 @@ class Mixin_Attach_To_Post extends Mixin if ($sec_actor->is_allowed('NextGEN Manage gallery')) { $retval['displayed_tab'] = array( 'content' => $this->object->_render_display_tab(), - 'title' => _('Display Galleries') + 'title' => __('Display Galleries', 'nggallery') ); } if ($sec_actor->is_allowed('NextGEN Upload images')) { $retval['create_tab'] = array( 'content' => $this->object->_render_create_tab(), - 'title' => _('Add Gallery / Images') + 'title' => __('Add Gallery / Images', 'nggallery') ); } if ($sec_actor->is_allowed('NextGEN Manage others gallery') && $sec_actor->is_allowed('NextGEN Manage gallery')) { $retval['galleries_tab'] = array( 'content' => $this->object->_render_galleries_tab(), - 'title' => _('Manage Galleries') + 'title' => __('Manage Galleries', 'nggallery') ); } if ($sec_actor->is_allowed('NextGEN Edit album')) { $retval['albums_tab'] = array( 'content' => $this->object->_render_albums_tab(), - 'title' => _('Manage Albums') + 'title' => __('Manage Albums', 'nggallery') ); } if ($sec_actor->is_allowed('NextGEN Manage tags')) { $retval['tags_tab'] = array( 'content' => $this->object->_render_tags_tab(), - 'title' => _('Manage Tags') + 'title' => __('Manage Tags', 'nggallery') ); } @@ -232,7 +307,7 @@ class Mixin_Attach_To_Post extends Mixin function _render_ngg_page_in_frame($page, $tab_id = null) { $frame_url = admin_url("/admin.php?page={$page}&attach_to_post"); - $frame_url = esc_url($frame_url); + $frame_url = nextgen_esc_url($frame_url); if ($tab_id) { $tab_id = " id='ngg-iframe-{$tab_id}'"; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php index a49f335e52cb28345dab64b4da52fa77431878f3..bb678b21b88fb08e1ff075648923660e388ddaa0 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php @@ -24,6 +24,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin $context = 'attach_to_post'; $gallery_mapper = $this->get_registry()->get_utility('I_Gallery_Mapper', $context); $album_mapper = $this->get_registry()->get_utility('I_Album_Mapper', $context); + $image_mapper = $this->get_registry()->get_utility('I_Image_Mapper', $context); $display_type_mapper= $this->get_registry()->get_utility('I_Display_Type_Mapper', $context); $source_mapper = $this->get_registry()->get_utility('I_Displayed_Gallery_Source_Mapper', $context); $security = $this->get_registry()->get_utility('I_Security_Manager'); @@ -53,7 +54,8 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin 'albums' => json_encode($album_mapper->find_all()), 'tags' => json_encode($tags), 'display_types' => json_encode($display_types), - 'sec_token' => $security->get_request_token('nextgen_edit_displayed_gallery')->get_json() + 'sec_token' => $security->get_request_token('nextgen_edit_displayed_gallery')->get_json(), + 'image_primary_key' => $image_mapper->get_primary_key_column() ), $return); return $output; @@ -65,11 +67,11 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin $order_2 = $type_2->view_order; if ($order_1 == null) { - $order_1 = NEXTGEN_DISPLAY_PRIORITY_BASE; + $order_1 = NGG_DISPLAY_PRIORITY_BASE; } if ($order_2 == null) { - $order_2 = NEXTGEN_DISPLAY_PRIORITY_BASE; + $order_2 = NGG_DISPLAY_PRIORITY_BASE; } if ($order_1 > $order_2) { @@ -92,7 +94,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin // The ATP requires more memmory than some applications, somewhere around 60MB. // Because it's such an important feature of NextGEN Gallery, we temporarily disable // any memory limits - @ini_set('memory_limit', -1); + if (!extension_loaded('suhosin')) @ini_set('memory_limit', -1); return array( $this->object->_render_display_types_tab(), @@ -110,7 +112,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin { return $this->object->render_partial('photocrati-attach_to_post#accordion_tab', array( 'id' => 'source_tab', - 'title' => _('What would you like to display?'), + 'title' => __('What would you like to display?', 'nggallery'), 'content' => $this->object->_render_display_source_tab_contents() ), TRUE); } @@ -134,7 +136,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin { return $this->object->render_partial('photocrati-attach_to_post#accordion_tab', array( 'id' => 'display_type_tab', - 'title' => _('Select a display type'), + 'title' => __('Select a display type', 'nggallery'), 'content' => $this->object->_render_display_type_tab_contents() ), TRUE); } @@ -157,7 +159,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin { return $this->object->render_partial('photocrati-attach_to_post#accordion_tab', array( 'id' => 'display_settings_tab', - 'title' => _('Customize the display settings'), + 'title' => __('Customize the display settings', 'nggallery'), 'content' => $this->object->_render_display_settings_contents() ), TRUE); } @@ -207,7 +209,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin // Get all display setting forms $form_manager = C_Form_Manager::get_instance(); $forms = $form_manager->get_forms( - NEXTGEN_DISPLAY_SETTINGS_SLUG, TRUE + NGG_DISPLAY_SETTINGS_SLUG, TRUE ); // Display each form @@ -248,7 +250,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin $css_class = $this->object->_get_selected_display_type_name() ? 'display_settings_form hidden' : 'display_settings_form'; $retval[] = $this->object->render_partial('photocrati-attach_to_post#no_display_type_selected', array( - 'no_display_type_selected' => _('No display type selected'), + 'no_display_type_selected' => __('No display type selected', 'nggallery'), 'css_class' => $css_class ), TRUE); @@ -266,7 +268,7 @@ class Mixin_Attach_To_Post_Display_Tab extends Mixin { return $this->object->render_partial('photocrati-attach_to_post#accordion_tab', array( 'id' => 'preview_tab', - 'title' => _('Sort or Exclude Images'), + 'title' => __('Sort or Exclude Images', 'nggallery'), 'content' => $this->object->_render_preview_tab_contents() ), TRUE); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php index d24f0f3c6776fe79355d3976faf47282ab3a25f9..64f7a7f031b58615e8949989316515dfc489f482 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php @@ -6,7 +6,7 @@ } */ -define('NEXTGEN_GALLERY_ATTACH_TO_POST_SLUG', 'ngg_attach_to_post'); +define('NGG_ATTACH_TO_POST_SLUG', 'nextgen-attach_to_post'); class M_Attach_To_Post extends C_Base_Module { @@ -23,7 +23,7 @@ class M_Attach_To_Post extends C_Base_Module 'photocrati-attach_to_post', 'Attach To Post', 'Provides the "Attach to Post" interface for displaying galleries and albums', - '0.7', + '0.10', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com', @@ -40,11 +40,17 @@ class M_Attach_To_Post extends C_Base_Module include_once('class.attach_to_post_installer.php'); C_Photocrati_Installer::add_handler($this->module_id, 'C_Attach_To_Post_Installer'); - $uri = strtolower($_SERVER['REQUEST_URI']); - - if (strpos($uri, '/nextgen-attach_to_post') !== false) { - define('WP_ADMIN', true); - } + // Set WP_ADMIN=true for better compatibility with certain themes & plugins. + // Unfortunately as of 3.9 in a multisite environment this causes problems. + if (self::is_atp_url() && (!defined('MULTISITE') || (defined('MULTISITE') && !MULTISITE))) + define('WP_ADMIN', true); + } + + // We only register our display-type settings forms when IS_ADMIN, but Wordpress 3.9 introduced a problem + // with doing this on multisite sub-sites. Now we register our forms when is_atp_url() is true OR is_admin() + static function is_atp_url() + { + return (strpos(strtolower($_SERVER['REQUEST_URI']), '/nextgen-attach_to_post') !== false) ? TRUE : FALSE; } /** @@ -127,8 +133,28 @@ class M_Attach_To_Post extends C_Base_Module add_action('ngg_after_new_images_added',array(&$this, 'images_added_event')); add_action('ngg_page_event', array(&$this, 'nextgen_page_event')); add_action('ngg_manage_tags', array(&$this, 'manage_tags_event')); + + // We use two hooks here because we need it to execute for both the post-new.php + // page and ATP interface + add_action('plugins_loaded', array(&$this, 'fix_ie11'), 1); + add_action('admin_init', array(&$this, 'fix_ie11'), PHP_INT_MAX-1); + add_action('admin_enqueue_scripts', array(&$this, 'fix_ie11'), 1); + add_action('admin_enqueue_scripts', array(&$this, 'fix_ie11'), PHP_INT_MAX-1); } + /** + * WordPress sets the X-UA-Compatible header to IE=edge. Unfortunately, this causes problems with Plupload, + * so we have the send this header + */ + function fix_ie11() + { + if ((array_search('attach_to_post', array_keys($_REQUEST)) !== FALSE OR strpos($_SERVER['REQUEST_URI'], NGG_ATTACH_TO_POST_SLUG) !== FALSE OR strpos($_SERVER['REQUEST_URI'], 'wp-admin/post.php') !== FALSE OR strpos($_SERVER['REQUEST_URI'], 'wp-admin/post-new.php') !== FALSE)) { + if (!headers_sent()) { + header('X-UA-Compatible: IE=EmulateIE10'); + } + } + } + /** * Substitutes the gallery placeholder content with the gallery type frontend * view, returns a list of static resources that need to be loaded @@ -146,6 +172,7 @@ class M_Attach_To_Post extends C_Base_Module $router->remove_url_segment('index.php', $router->get_base_url()), '/nextgen-attach_to_post/preview' )); + $router->debug = TRUE; $preview_url = preg_quote($preview_url['host'] . $preview_url['path'], '#'); $alt_preview_url = parse_url($router->join_paths( @@ -248,8 +275,15 @@ class M_Attach_To_Post extends C_Base_Module */ function add_attach_to_post_tinymce_plugin($plugins) { - $router = $this->get_registry()->get_utility('I_Router'); - $plugins[$this->attach_to_post_tinymce_plugin] = $router->get_static_url('photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin.js'); + global $wp_version; + $router = $this->get_registry()->get_utility('I_Router'); + + if ($wp_version >= 3.9) + $file = $router->get_static_url('photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin.js'); + else + $file = $router->get_static_url('photocrati-attach_to_post#ngg_attach_to_post_tinymce_plugin_wp38_compat.js'); + + $plugins[$this->attach_to_post_tinymce_plugin] = $file; return $plugins; } @@ -303,12 +337,13 @@ class M_Attach_To_Post extends C_Base_Module function new_gallery_event($gallery_id) { $gallery = $this->get_registry()->get_utility('I_Gallery_Mapper')->find($gallery_id); - - $this->_get_frame_event_publisher()->add_event(array( - 'event' => 'new_gallery', - 'gallery_id'=> intval($gallery_id), - 'gallery_title' => $gallery->title - )); + if ($gallery) { + $this->_get_frame_event_publisher()->add_event(array( + 'event' => 'new_gallery', + 'gallery_id'=> intval($gallery_id), + 'gallery_title' => $gallery->title + )); + } } /** diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/atp_button.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/atp_button.png new file mode 100644 index 0000000000000000000000000000000000000000..5ad79e6667f5dc774193dd3bb1aa4a46a817710e Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/atp_button.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.js index dbc0e8d6f86454279a81f638fc9b5f8268804cb0..d047b8f17dc9512b34c7194c546a2068d7154167 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.js @@ -6,35 +6,33 @@ function close_attach_to_post_window() // Adjusts the height of a frame on the page, and then executes // the specified callback -function adjust_height_for_frame(frame, callback) +function adjust_height_for_frame(parent_window, current_window, callback) { // Adjust height of the frame - var $frame = jQuery(frame); - var new_height = $frame.contents().find('#wpbody').height(); - var parent_height = jQuery(parent.document).height(); + var $frame = jQuery(current_window.frameElement); + var new_height = $frame.contents().height()/3; + var new_height_body = $frame.contents().find('#wpbody').height(); + var parent_height = jQuery(parent_window.document).height(); var current_height = $frame.height(); - // If the height is less than the parent window height, then use - // the parent window height instead + if (new_height < new_height_body) new_height = new_height_body; if (new_height < parent_height) new_height = parent_height; - // If the height has changed, then use the new height - if (current_height != new_height) { - var frame_id = $frame.attr('id'); - - $frame.height(new_height); - - if (frame_id && frame_id.indexOf('ngg-iframe-') == 0) { - var tab_id = frame_id.substr(11); - - if (tab_id) { - jQuery('#' + tab_id).height(new_height); - } - } - } + if (current_height < new_height) { + $frame.height(new_height); + + var frame_id = $frame.attr('id'); + if (frame_id && frame_id.indexOf('ngg-iframe-') == 0) { + var tab_id = frame_id.substr(11); + + if (tab_id) { + jQuery('#' + tab_id).height(new_height); + } + } + } if (callback != undefined) - return callback.call(frame, new_height); + return callback(parent_window, current_window, new_height); else return true; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.css index 8a20724e692fcb209e0347e48bce23796bb5762b..991c35baa816d49ce743eefe27d89ce57a94668a 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post_dialog.css @@ -1,9 +1,26 @@ +/* TinyMCE 4 rules */ +#ngg_attach_to_post_dialog-title { + display: none; +} + +#ngg_attach_to_post_dialog-head { + min-height: 0; + height: 0; +} + +#ngg_attach_to_post_dialog-head .mce-close { + position: absolute; + top: 6px !important; + right: 20px !important; + z-index: 2; +} .ngg_attach_to_post_window { position: relative; border: none !important; } +/* TinyMCE 3 rules */ .ngg_attach_to_post_window .mceResize, .ngg_attach_to_post_window .mceTop, .ngg_attach_to_post_window .mceBottom, diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.css index 86285cf416feaf1ebd6363ab6e5f413c0fa6287c..0d4fed00ab5648ecc330caefd2b221d229c55f68 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.css @@ -1,4 +1,9 @@ -#iframely, #iframely body{ +/* keep the ATP background white */ +html#iframely { + background: white !important; +} + +#iframely, #iframely body { padding: 0px; width: 100%; height: 100%; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.js index 97efd79970921412398f48c358f37e7b35eb05ec..441f459df579d7d660e3086318ad1d16e0d50f3e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/iframely.js @@ -1,7 +1,6 @@ if (window.frameElement) { document.getElementsByTagName('html')[0].id = 'iframely'; jQuery(function($){ - // Concentrate only on the content of the page $('#wpwrap').html($('#wpbody').html($('#wpbody-content').html($('#ngg_page_content')))); // We need to ensure that any POST operation includes the "attach_to_post" @@ -9,7 +8,7 @@ if (window.frameElement) { $('form').each(function(){ $(this).append("<input type='hidden' name='attach_to_post' value='1'/>"); }); - + var parent = window.parent; if (parent == null || typeof(parent.adjust_height_for_frame) == "undefined") { @@ -17,17 +16,48 @@ if (window.frameElement) { parent = window; } } - - if (typeof(parent.adjust_height_for_frame) != "undefined") { - // Adjust the height of the frame - parent.adjust_height_for_frame(window.frameElement, function(){ - $('#iframely').css({ - position: 'static', - visibility: 'visible' - }).animate({ - opacity: 1.0 - }); - }); - } + + // Adjust the height of the frame + var recursive_check = true; + if (recursive_check) { + if (typeof(parent.adjust_height_for_frame) != "undefined") { + parent.adjust_height_for_frame(parent, window, iframely_callback); + } + } + else { + if (typeof(parent.adjust_height_for_frame) != "undefined") { + // Adjust the height of the frame + parent.adjust_height_for_frame(parent, window, function(){ + $('#iframely').css({ + position: 'static', + visibility: 'visible' + }).animate({ + opacity: 1.0 + }); + }); + } + } }); } + +function iframely_callback(parent_window, current_window, new_height) +{ + var $current_window = jQuery(current_window); + + if (typeof($current_window.data('iframely')) == 'undefined') $current_window.data('iframely', {attempts: 1}); + var iframely = $current_window.data('iframely'); + + // After we've attempted to resize the frame 3 times, give up + if (iframely.attempts == 3) { + jQuery('#iframely').css({ + position: 'static', + visibility: 'visible' + }).animate({ opacity: 1.0 }); + } + else { + iframely.attempts += 1; + setTimeout(function(){ + parent_window.adjust_height_for_frame(parent_window, current_window, iframely_callback); + }, 400); + } +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.js index 82dc223734303facb6dc9f0adaf9137edd8422e9..1cb6011528f0635a80e83d78c3a117bb49919c9b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin.js @@ -1,32 +1,43 @@ // Self-executing function to create and register the TinyMCE plugin (function(siteurl) { + tinyMCE.addI18n('en.ngg_attach_to_post', { + title: 'Attach NextGEN Gallery to Post' + }); + // Create the plugin. We'll register it afterwards tinymce.create('tinymce.plugins.NextGEN_AttachToPost', { /** * The WordPress Site URL - **/ - siteurl: siteurl, + */ + siteurl: siteurl, /** * Returns metadata about this plugin */ getInfo: function() { return { - longname: 'NextGen - Attach Gallery', - author: 'Photocrati Media', - authorurl: 'http://www.photocrati.com', - infourl: 'http://www.nextgen-gallery.com', - version: '0.1' + longname: 'NextGEN Gallery', + author: 'Photocrati Media', + authorurl: 'http://www.photocrati.com', + infourl: 'http://www.nextgen-gallery.com', + version: '0.1' }; }, - /** * Initializes the plugin, this will be executed after the plugin has been created. */ init: function(editor, plugin_url) { + var self = this; + + // TinyMCE 4s events are a bit weird, but this lets us listen to the window-manager close event + editor.windowManager.nggOldOpen = editor.windowManager.open; + editor.windowManager.open = function(one, two) { + var modal = editor.windowManager.nggOldOpen(one, two); + modal.on('close', self.wm_close_event); + }; // Register a new TinyMCE command editor.addCommand('ngg_attach_to_post', this.render_attach_to_post_interface, { @@ -36,169 +47,91 @@ // Add a button to trigger the above command editor.addButton('NextGEN_AttachToPost', { - title: 'NextGEN Gallery - Attach To Post', + title: 'ngg_attach_to_post.title', cmd: 'ngg_attach_to_post', - image: plugin_url+'/nextgen.gif' + image: plugin_url+'/atp_button.png' }); // When the shortcode is clicked, open the attach to post interface editor.settings.extended_valid_elements += ",shortcode"; editor.settings.custom_elements = "shortcode"; - var self = this; - var drag_in_progress = false; - var click_timer; - editor.onMouseDown.addToTop(function(editor, e) { + editor.on('mouseup', function(e) { if (e.target.tagName == 'IMG') { - if (self.get_class_name(e.target).indexOf('ngg_displayed_gallery') >= 0) { - click_timer = setTimeout(function() { - drag_in_progress = true; - }, 250); - } - } - }); - - editor.onMouseUp.addToTop(function(editor, e) { - if (!drag_in_progress && e.target.tagName == 'IMG') { - if (self.get_class_name(e.target).indexOf('ngg_displayed_gallery') >= 0) { - editor.dom.events.cancel(e); - editor.dom.events.stop(e); - var id = e.target.src.match(/\d+$/); - if (id) id = id.pop(); - var obj = tinymce.extend(self, { - editor: editor, - plugin: editor.plugins.NextGEN_AttachToPost, - id: id - }); - self.render_attach_to_post_interface.call(obj); - } - } - clearTimeout(click_timer); - drag_in_progress = false; + if (self.get_class_name(e.target).indexOf('ngg_displayed_gallery') >= 0) { + editor.dom.events.cancel(e); + var id = e.target.src.match(/\d+$/); + if (id) id = id.pop(); + var obj = tinymce.extend(self, { + editor: editor, + plugin: editor.plugins.NextGEN_AttachToPost, + id: id + }); + self.render_attach_to_post_interface(id); + } + } }); }, get_class_name: function(node) { - var class_name = node.getAttribute('class') ? - node.getAttribute('class') : node.className; - - if (class_name) return class_name; - else return ""; + var class_name = node.getAttribute('class') ? node.getAttribute('class') : node.className; + if (class_name) { + return class_name; + } else { + return ""; + } }, + wm_close_event: function() { + // Restore scrolling for the main content window when the attach to post interface is closed + jQuery('html,body').css('overflow', 'auto'); + tinyMCE.activeEditor.selection.select(tinyMCE.activeEditor.dom.select('p')[0]); + tinyMCE.activeEditor.selection.collapse(0); + }, /** * Renders the attach to post interface */ - render_attach_to_post_interface: function(id) { - + render_attach_to_post_interface: function(id) { // Determine the attach to post url var attach_to_post_url = nextgen_gallery_attach_to_post_url; - if (typeof(this.id) != 'undefined') { - attach_to_post_url += "?id="+this.id; - } - - // We're going to open a dialog window. TinyMCE doesn't - // get the positioning exactly right, so we add an event - // handler to make adjustments - // - // We also make the parent window unscrollable, to avoid - // multiple scrollbars - this.editor.windowManager.onOpen.add(function(win){ - - // Assign the window the "ngg_attach_to_post_window" so that - // we can style it - var window_selector = '#'; - if (win.params && win.params.mce_window_id) - window_selector += win.params.mce_window_id; - else if (win.features && win.features.id) - window_selector += win.features.id; - - var callback = function(selector, callback){ - var obj = jQuery(selector); - if (obj.length == 0) { - setTimeout(function(){ - callback.call(null, selector, callback); - }, 5); - } - else { - obj.addClass('ngg_attach_to_post_window'); - } - } - setTimeout(function(){ - callback.call(null, window_selector, callback); - },5); - - jQuery('html,body').css('overflow', 'hidden'); - }); + if (typeof(id) != 'undefined') { + attach_to_post_url += "?id=" + this.id; + } - // Restore scrolling for the main content window - // when the attach to post interface is closed - this.editor.windowManager.onClose.add(function(win){ - jQuery('html,body').css('overflow', 'auto'); - tinyMCE.activeEditor.selection.select(tinyMCE.activeEditor.dom.select('p')[0]); - tinyMCE.activeEditor.selection.collapse(0); - }); - - var popupDialog = jQuery('<div style="display:none;"><div id="ngg_attach_to_post_dialog" tabindex="-1" action=""></div></div>'); - popupDialog.appendTo(jQuery(document.body)); - var win = window; - while (win.parent != null && win.parent != win) { win = win.parent; } - + win = jQuery(win); - var winWidth = win.width(); - var winHeight = win.height(); - var popupWidth = 1200; + var winWidth = win.width(); + var winHeight = win.height(); + var popupWidth = 1200; var popupHeight = 600; - var minWidth = 800; - var minHeight = 600; - var maxWidth = winWidth - (winWidth * 0.05); - var maxHeight = winHeight - (winHeight * 0.05); - - if (maxWidth < minWidth) { - maxWidth = winWidth - 10; - } - - if (maxHeight < minHeight) { - maxHeight = winHeight - 10; - } - - if (popupWidth > maxWidth) { - popupWidth = maxWidth; - } - - if (popupHeight > maxHeight) { - popupHeight = maxHeight; - } + var minWidth = 800; + var minHeight = 600; + var maxWidth = winWidth - (winWidth * 0.05); + var maxHeight = winHeight - (winHeight * 0.05); + + if (maxWidth < minWidth) { maxWidth = winWidth - 10; } + if (maxHeight < minHeight) { maxHeight = winHeight - 10; } + if (popupWidth > maxWidth) { popupWidth = maxWidth; } + if (popupHeight > maxHeight) { popupHeight = maxHeight; } // Open a window, occupying 90% of the screen real estate - var popup = this.editor.windowManager.open({ - file: attach_to_post_url, -// wpDialog: true, + this.editor.windowManager.open({ + url: attach_to_post_url, id: 'ngg_attach_to_post_dialog', - width: popupWidth, - height: popupHeight, - inline: true, - title: "NextGEN Gallery - Attach To Post" + width: popupWidth, + height: popupHeight, + title: "NextGEN Gallery - Attach To Post" }); -// popupDialog.wpdialog({ -// title: "NextGEN Gallery - Attach To Post", -// width: 1200, -// height: 600, -// modal: true, -// dialogClass: 'wp-dialog', -// zIndex: 300000 -// }); // Ensure that the window cannot be scrolled - XXX actually allow scrolling in the main window and disable it for the inner-windows/frames/elements as to create a single scrollbar - jQuery('#'+popup.id+'_ifr').css('overflow-y', 'auto'); - jQuery('#'+popup.id+'_ifr').css('overflow-x', 'hidden'); - //jQuery('#'+popup.id+'_ifr').mCustomScrollbar(); - //jQuery('#'+popup.id).addClass('wp-dialog'); + jQuery('html,body').css('overflow', 'hidden'); + jQuery('#ngg_attach_to_post_dialog_ifr').css('overflow-y', 'auto'); + jQuery('#ngg_attach_to_post_dialog_ifr').css('overflow-x', 'hidden'); } }); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin_wp38_compat.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin_wp38_compat.js new file mode 100644 index 0000000000000000000000000000000000000000..e4c71bf869c0ea767dc4c87c0dbbbdffd6899e9e --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/static/ngg_attach_to_post_tinymce_plugin_wp38_compat.js @@ -0,0 +1,200 @@ +// Self-executing function to create and register the TinyMCE plugin +(function(siteurl) { + + tinyMCE.addI18n('en.ngg_attach_to_post', { + title: 'Attach NextGEN Gallery to Post' + }); + + // Create the plugin. We'll register it afterwards + tinymce.create('tinymce.plugins.NextGEN_AttachToPost', { + + /** + * The WordPress Site URL + **/ + siteurl: siteurl, + + /** + * Returns metadata about this plugin + */ + getInfo: function() { + return { + longname: 'NextGEN Gallery', + author: 'Photocrati Media', + authorurl: 'http://www.photocrati.com', + infourl: 'http://www.nextgen-gallery.com', + version: '0.1' + }; + }, + + + /** + * Initializes the plugin, this will be executed after the plugin has been created. + */ + init: function(editor, plugin_url) { + + // Register a new TinyMCE command + editor.addCommand('ngg_attach_to_post', this.render_attach_to_post_interface, { + editor: editor, + plugin: editor.plugins.NextGEN_AttachToPost + }); + + // Add a button to trigger the above command + editor.addButton('NextGEN_AttachToPost', { + title: 'ngg_attach_to_post.title', + cmd: 'ngg_attach_to_post', + image: plugin_url+'/nextgen.gif' + }); + + // When the shortcode is clicked, open the attach to post interface + editor.settings.extended_valid_elements += ",shortcode"; + editor.settings.custom_elements = "shortcode"; + var self = this; + var drag_in_progress = false; + var click_timer; + + editor.onMouseDown.addToTop(function(editor, e) { + if (e.target.tagName == 'IMG') { + if (self.get_class_name(e.target).indexOf('ngg_displayed_gallery') >= 0) { + click_timer = setTimeout(function() { + drag_in_progress = true; + }, 250); + } + } + }); + + editor.onMouseUp.addToTop(function(editor, e) { + if (!drag_in_progress && e.target.tagName == 'IMG') { + if (self.get_class_name(e.target).indexOf('ngg_displayed_gallery') >= 0) { + editor.dom.events.cancel(e); + editor.dom.events.stop(e); + var id = e.target.src.match(/\d+$/); + if (id) id = id.pop(); + var obj = tinymce.extend(self, { + editor: editor, + plugin: editor.plugins.NextGEN_AttachToPost, + id: id + }); + self.render_attach_to_post_interface.call(obj); + } + } + clearTimeout(click_timer); + drag_in_progress = false; + }); + }, + + get_class_name: function(node) { + var class_name = node.getAttribute('class') ? + node.getAttribute('class') : node.className; + + if (class_name) return class_name; + else return ""; + }, + + + /** + * Renders the attach to post interface + */ + render_attach_to_post_interface: function(id) { + + // Determine the attach to post url + var attach_to_post_url = nextgen_gallery_attach_to_post_url; + if (typeof(this.id) != 'undefined') { + attach_to_post_url += "?id="+this.id; + } + + // We're going to open a dialog window. TinyMCE doesn't + // get the positioning exactly right, so we add an event + // handler to make adjustments + // + // We also make the parent window unscrollable, to avoid + // multiple scrollbars + this.editor.windowManager.onOpen.add(function(win){ + + // Assign the window the "ngg_attach_to_post_window" so that + // we can style it + var window_selector = '#'; + if (win.params && win.params.mce_window_id) + window_selector += win.params.mce_window_id; + else if (win.features && win.features.id) + window_selector += win.features.id; + + var callback = function(selector, callback){ + var obj = jQuery(selector); + if (obj.length == 0) { + setTimeout(function(){ + callback.call(null, selector, callback); + }, 5); + } + else { + obj.addClass('ngg_attach_to_post_window'); + } + } + setTimeout(function(){ + callback.call(null, window_selector, callback); + },5); + + jQuery('html,body').css('overflow', 'hidden'); + }); + + // Restore scrolling for the main content window + // when the attach to post interface is closed + this.editor.windowManager.onClose.add(function(win){ + jQuery('html,body').css('overflow', 'auto'); + tinyMCE.activeEditor.selection.select(tinyMCE.activeEditor.dom.select('p')[0]); + tinyMCE.activeEditor.selection.collapse(0); + }); + + var popupDialog = jQuery('<div style="display:none;"><div id="ngg_attach_to_post_dialog" tabindex="-1" action=""></div></div>'); + popupDialog.appendTo(jQuery(document.body)); + + var win = window; + + while (win.parent != null && win.parent != win) { + win = win.parent; + } + + win = jQuery(win); + var winWidth = win.width(); + var winHeight = win.height(); + var popupWidth = 1200; + var popupHeight = 600; + var minWidth = 800; + var minHeight = 600; + var maxWidth = winWidth - (winWidth * 0.05); + var maxHeight = winHeight - (winHeight * 0.05); + + if (maxWidth < minWidth) { + maxWidth = winWidth - 10; + } + + if (maxHeight < minHeight) { + maxHeight = winHeight - 10; + } + + if (popupWidth > maxWidth) { + popupWidth = maxWidth; + } + + if (popupHeight > maxHeight) { + popupHeight = maxHeight; + } + + // Open a window, occupying 90% of the screen real estate + var popup = this.editor.windowManager.open({ + file: attach_to_post_url, + id: 'ngg_attach_to_post_dialog', + width: popupWidth, + height: popupHeight, + inline: true, + title: "NextGEN Gallery - Attach To Post" + }); + + // Ensure that the window cannot be scrolled - XXX actually allow scrolling in the main window and disable it for the inner-windows/frames/elements as to create a single scrollbar + jQuery('#'+popup.id+'_ifr').css('overflow-y', 'auto'); + jQuery('#'+popup.id+'_ifr').css('overflow-x', 'hidden'); + } + }); + + // Register plugin + tinymce.PluginManager.add('NextGEN_AttachToPost', tinymce.plugins.NextGEN_AttachToPost); +})(photocrati_ajax.wp_site_url); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php index e5f17e3ae6bdb88f21a392567fcf0b569e94bf38..cdbd4eeae5b66ee2cc169758ad662560306f05b9 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php @@ -7,5 +7,5 @@ <?php endforeach ?> </div> <p> - <input type="button" id="save_displayed_gallery" value="Save"/> + <input type="button" id="save_displayed_gallery" value="<?php _e('Save', 'nggallery'); ?>"/> </p> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php index aa79ce57e13417cba1042573f75013aa57009eff..5c4d9ab7b2115c7de3302afbdca23b7b8e55bf35 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php @@ -69,7 +69,8 @@ jQuery(function($){ text_field: 'title', - initialize: function(){ + initialize: function(options) { + this.options = options || {}; _.each(this.options, function(value, key){ this[key] = value; }, this); @@ -145,7 +146,8 @@ jQuery(function($){ model: null, - initialize: function(){ + initialize: function(options) { + this.options = options || {}; _.each(this.options, function(value, key){ this[key] = value; }, this); @@ -170,7 +172,8 @@ jQuery(function($){ Ngg.Views.Chosen = Backbone.View.extend({ tagName: 'span', - initialize: function(){ + initialize: function(options) { + this.options = options || {}; this.collection = this.options.collection; if (!this.options.multiple) this.options.include_blank = true; this.select_tag = new Ngg.Views.SelectTag(this.options); @@ -296,6 +299,7 @@ jQuery(function($){ var self = this; this.in_progress = true; $.post(this.fetch_url, this._create_request(limit, offset), function(response){ + if (typeof(_) == 'undefined') return; if (!_.isObject(response)) response = JSON.parse(response); if (response.items) { @@ -608,7 +612,7 @@ jQuery(function($){ width: 500 }); - this.$el.html('<tr><td><label>Sources</label></td><td id="source_column"></td></tr>'); + this.$el.html('<tr><td><label><?php _e('Sources', 'nggallery'); ?></label></td><td id="source_column"></td></tr>'); this.$el.find('#source_column').append(chosen.render().el); var selected = this.sources.selected(); @@ -642,7 +646,7 @@ jQuery(function($){ type: 'text', name: 'slug', value: this.slug, - placeholder: '(optional)', + placeholder: '<?php _e('(optional)', 'nggallery'); ?>', id: 'field_slug' }); @@ -650,8 +654,8 @@ jQuery(function($){ self.displayed_gallery.set('slug', $(this).val()); }); - var tooltip = 'Sets an SEO-friendly name to this gallery for URLs. Currently only in use by the Pro Lightbox.'; - this.$el.append('<tr><td id="slug_label"><label for="field_slug" class="tooltip" title="' + tooltip + '">Slug</label></td><td id="slug_column"></td></tr>'); + var tooltip = '<?php _e('Sets an SEO-friendly name to this gallery for URLs. Currently only in use by the Pro Lightbox.', 'nggallery'); ?>'; + this.$el.append('<tr><td id="slug_label"><label for="field_slug" class="tooltip" title="' + tooltip + '"><?php _e('Slug', 'nggallery'); ?></label></td><td id="slug_column"></td></tr>'); this.$el.find('#slug_column').append(input); return this; @@ -808,6 +812,9 @@ jQuery(function($){ this.entities.remove(model, {silent: true}); this.entities.add(model, {at: model.changed.sortorder, silent: true}); this.displayed_gallery.set('sortorder', this.entities.entity_ids()); + if (typeof(console) != 'undefined' && typeof(console.log) != 'undefined') { + console.log(this.entities.entity_ids()); + } this.displayed_gallery.set('order_by', 'sortorder'); }, this); @@ -853,7 +860,7 @@ jQuery(function($){ render_no_images_notice: function(){ this.$el.empty(); - this.$el.append("<p class='no_entities'>No entities to display for this source.</p>"); + this.$el.append("<p class='no_entities'><?php _e('No entities to display for this source.', 'nggallery'); ?></p>"); }, render: function(){ @@ -916,7 +923,8 @@ jQuery(function($){ this.entities.reset(); }, - initialize: function(){ + initialize: function(options) { + this.options = options || {}; _.each(this.options, function(value, key){ this[key] = value; }, this); @@ -934,7 +942,8 @@ jQuery(function($){ ExcludeButtons: Backbone.View.extend({ className: 'header_row', - initialize: function(){ + initialize: function(options) { + this.options = options || {}; _.each(this.options, function(value, key){ this[key] = value; }, this); @@ -970,7 +979,8 @@ jQuery(function($){ click: 'clicked' }, - initialize: function(){ + initialize: function(options) { + this.options = options || {}; _.each(this.options, function(value, key){ this[key] = value; }, this); @@ -993,7 +1003,8 @@ jQuery(function($){ SortButtons: Backbone.View.extend({ className: 'header_row', - initialize: function(){ + initialize: function(options) { + this.options = options || {}; _.each(this.options, function(value, key){ this[key] = value; }, this); @@ -1014,6 +1025,8 @@ jQuery(function($){ } ]); this.sortdirection_options.on('change:selected', this.sortdirection_changed, this); + this.displayed_gallery.on('change:order_by', this.displayed_gallery_order_changed, this); + this.displayed_gallery.on('change.order_direction', this.displayed_gallery_order_dir_changed, this); }, populate_sorting_fields: function(){ @@ -1054,6 +1067,15 @@ jQuery(function($){ this.sortorder_options.push(this.create_sortorder_option('galdesc', 'Description')); }, + displayed_gallery_order_changed: function(e){ + this.sortorder_options.findWhere({value: e.get('order_by')}).set('selected', true); + }, + + + displayed_gallery_order_dir_changed: function(e){ + this.sortdirection_options.findWhere({value: e.get('order_direction')}).set('selected', true); + }, + sortoption_changed: function(model){ this.sortorder_options.each(function(item){ item.set('selected', model.get('value') == item.get('value') ? true : false, {silent: true}); @@ -1122,7 +1144,8 @@ jQuery(function($){ Button: Backbone.View.extend({ tagName: 'a', - initialize: function(){ + initialize: function(options) { + this.options = options || {}; _.each(this.options, function(value, key){ this[key] = value; }, this); @@ -1157,15 +1180,21 @@ jQuery(function($){ drop: 'item_dropped' }, - initialize: function(){ + initialize: function(options) { + this.options = options || {}; _.each(this.options, function(value, key){ this[key] = value; }, this); this.model.on('change', this.render, this); + if (this.model.get('sortorder') == 0) { + this.model.set('sortorder', -1, {silent: true}); + } this.id = this.model.get('id_field')+'_'+this.model.entity_id() }, item_dropped: function(e, index){ + Ngg.DisplayTab.instance.displayed_gallery.set('order_by', 'sortorder'); + //Ngg.DisplayTab.instance.displayed_gallery.set('order_direction', 'ASC'); this.model.set('sortorder', index); }, @@ -1208,7 +1237,8 @@ jQuery(function($){ this.model.set('exclude', e.target.checked); }, - initialize: function(){ + initialize: function(options) { + this.options = options || {}; _.each(this.options, function(value, key){ this[key] = value; }, this); @@ -1241,11 +1271,11 @@ jQuery(function($){ render: function(){ var select = new Ngg.Views.Chosen({ collection: this.galleries, - placeholder: 'Select a gallery', + placeholder: '<?php _e('Select a gallery', 'nggallery'); ?>', multiple: true, width: 500 }); - var html = $('<tr><td><label>Galleries</label></td><td class="galleries_column"></td></tr>'); + var html = $('<tr><td><label><?php _e('Galleries', 'nggallery'); ?></label></td><td class="galleries_column"></td></tr>'); this.$el.empty(); this.$el.append(html); this.$el.find('.galleries_column').append(select.render().el); @@ -1269,7 +1299,7 @@ jQuery(function($){ width: 500 }); this.$el.empty(); - this.$el.append('<tr><td><label>Albums</label></td><td class="albums_column"></td></tr>'); + this.$el.append('<tr><td><label><?php _e('Albums', 'nggallery'); ?></label></td><td class="albums_column"></td></tr>'); this.$el.find('.albums_column').append(album_select.render().el); return this; } @@ -1375,7 +1405,7 @@ jQuery(function($){ var request = <?php echo $sec_token?>; request = _.extend(request, { action: 'save_displayed_gallery', - displayed_gallery: this.displayed_gallery.toJSON() + displayed_gallery: JSON.stringify(this.displayed_gallery.toJSON()) }); var self = this; @@ -1472,10 +1502,11 @@ jQuery(function($){ this.display_types = new Ngg.DisplayTab.Models.Display_Type_Collection( <?php echo $display_types ?> ); - this.display_type_order_base = <?php echo NEXTGEN_DISPLAY_PRIORITY_BASE; ?>; - this.display_type_order_step = <?php echo NEXTGEN_DISPLAY_PRIORITY_STEP; ?>; + this.display_type_order_base = <?php echo NGG_DISPLAY_PRIORITY_BASE; ?>; + this.display_type_order_step = <?php echo NGG_DISPLAY_PRIORITY_STEP; ?>; this.entities = new Ngg.DisplayTab.Models.Entity_Collection(); this.entities.extra_data.displayed_gallery = this.displayed_gallery; + this.image_key = "<?php echo $image_primary_key ?>"; // Pre-select current displayed gallery values if (this.displayed_gallery.get('source')) { @@ -1663,6 +1694,8 @@ jQuery(function($){ }); Ngg.DisplayTab.instance = new Ngg.DisplayTab.App(); Ngg.DisplayTab.instance.render(); + + window.Ngg = Ngg; // Invoke styling libraries $('span.tooltip, label.tooltip').tooltip(); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/class.cache.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/class.cache.php index 85d03dfddb8e891ae49c5c92eb1d40c73ef1e5c4..0a9ed9da724467905d49de8a25092775197ab7ed 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/class.cache.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/class.cache.php @@ -59,10 +59,10 @@ class Mixin_Cache extends Mixin foreach ($iterator as $file) { if ($file->isFile() || $file->isLink()) { - unlink($file->getPathname()); + @unlink($file->getPathname()); } elseif ($file->isDir() && !$file->isDot() && $recursive) { - rmdir($file->getPathname()); + @rmdir($file->getPathname()); } } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/module.cache.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/module.cache.php index f31fa81f82f0fc4737ca5f4022b1560c8b2f7414..9b809021eedc6729b7bcbf504f97b26d08a39eaa 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/module.cache.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/cache/module.cache.php @@ -15,7 +15,7 @@ class M_Cache extends C_Base_Module 'photocrati-cache', 'Cache', 'Handles clearing of NextGen caches', - '0.1', + '0.2', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.custompost_datamapper_driver.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.custompost_datamapper_driver.php index 2d96435b8046a7b687426d32e8445f34a175f136..11146a02a616cde3a5fd01502aa335e89bebd863 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.custompost_datamapper_driver.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.custompost_datamapper_driver.php @@ -30,6 +30,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin 'is_select' => TRUE, 'is_delete' => FALSE ); + return $this->object; } @@ -252,18 +253,22 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin */ function convert_post_to_entity($post, $model=FALSE) { - $entity = new stdClass(); - foreach ($post as $key => $value) { - if ($key == 'post_content') { - $post_content = $this->object->unserialize($value); - if ($post_content) { - foreach ($post_content as $key2 => $value2) { - $entity->$key2 = $value2; - } + + // Unserialize the post content field + if (is_string($post->post_content)) { + if (($post_content = $this->object->unserialize($post->post_content))) { + foreach ($post_content as $key => $value) { + $post->$key = $value; } } - else $entity->$key = $value; + + } + unset($post->post_content); + + // Copy all fields to the entity + foreach ($post as $key => $value) { + $entity->$key = $value; } $this->object->_convert_to_entity($entity); return $model? $this->object->convert_to_model($entity) : $entity; @@ -282,10 +287,12 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin if (!($entity instanceof stdClass)) $post = $entity->get_entity(); // Create the post content + $post_content = clone $post; + foreach ($this->object->_table_columns as $column) unset($post_content->$column); unset($post->id_field); unset($post->post_content_filtered); unset($post->post_content); - $post->post_content = $this->object->serialize($post); + $post->post_content = $this->object->serialize($post_content); $post->post_content_filtered = $post->post_content; $post->post_type = $this->object->get_object_name(); @@ -335,7 +342,14 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin /* @var $wpdb wpdb */ global $wpdb; if (!is_array($omit)) $omit = array($omit); + + // By default, we omit creating meta values for columns in the posts table + $omit = array_merge($omit, $this->object->_table_columns); + + // Delete the existing meta values $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->postmeta} WHERE post_id = %s", $post_id)); + + // Create query for new meta values $sql_parts = array(); foreach($entity as $key => $value) { if (in_array($key, $omit)) continue; @@ -357,7 +371,9 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin $post = $this->object->_convert_entity_to_post($entity); $primary_key = $this->object->get_primary_key_column(); - if (($post_id = wp_insert_post($post))) { + // TODO: unsilence this. Wordpress 3.9-beta2 is generating an error that should be corrected before its + // final release. + if (($post_id = @wp_insert_post($post))) { $new_entity = $this->object->find($post_id, TRUE); foreach ($new_entity->get_entity() as $key => $value) $entity->$key = $value; @@ -367,8 +383,9 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin $post_id, $entity instanceof stdClass ? $entity : $entity->get_entity() ); - } + $entity->$primary_key = $post_id; + } $entity->id_field = $primary_key; return $post_id; @@ -412,7 +429,7 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin * @param string $sql optionally run the specified query * @return array */ - function run_query($sql=FALSE, $model=FALSE) + function run_query($sql=FALSE, $model=FALSE, $convert_to_entities=TRUE) { $retval = array(); @@ -424,14 +441,13 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin // Execute the query $query = new WP_Query(); + if (isset($this->object->debug)) $this->object->_query_args['debug'] = TRUE; $query->query_vars = $this->object->_query_args; add_action('pre_get_posts', array(&$this, 'set_query_args'), PHP_INT_MAX-1, 1); - foreach ($query->get_posts() as $row) { - $row = $this->object->convert_post_to_entity($this->scrub_result($row), $model); - if (!$model) - $row->id_field = $this->object->get_primary_key_column(); - $retval[] = $row; + if ($convert_to_entities) foreach ($query->get_posts() as $row) { + $retval[] = $this->object->convert_post_to_entity($row, $model); } + else $retval = $query->get_posts(); remove_action('pre_get_posts', array(&$this, 'set_query_args'), PHP_INT_MAX-1, 1); return $retval; @@ -478,19 +494,10 @@ class Mixin_CustomPost_DataMapper_Driver extends Mixin */ function count() { - $retval = 0; + $this->object->select($this->object->get_primary_key_column()); + $retval = $this->object->run_query(FALSE, FALSE, FALSE); - global $wpdb; - $key = $this->object->get_primary_key_column(); - $sql = $wpdb->prepare( - "SELECT COUNT({$key}) FROM {$wpdb->posts} WHERE post_type = %s", - $this->object->get_object_name() - ); - $results = $this->object->run_query($sql); - if ($results && isset($results[0]->$key)) - $retval = (int)$results[0]->$key; - - return $retval; + return count($retval); } @@ -522,17 +529,13 @@ class C_CustomPost_DataMapper_Driver extends C_DataMapper_Driver_Base function define($object_name, $context=FALSE) { + if (strlen($object_name) > 20) throw new Exception("The custom post name can be no longer than 20 characters long"); + parent::define($object_name, $context); $this->add_mixin('Mixin_CustomPost_DataMapper_Driver'); $this->implement('I_CustomPost_DataMapper'); } - function initialize($object_name) - { - if (strlen($object_name) > 20) throw new Exception("The custom post name can be no longer than 20 characters long"); - parent::initialize($object_name); - } - /** * Gets the name of the table diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.customtable_datamapper_driver.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.customtable_datamapper_driver.php index 39d50d59ad28b23f54be92a74659c4fbccefc732..5c9343f86963e5296e58bd01eba7713af08f6d02 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.customtable_datamapper_driver.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.customtable_datamapper_driver.php @@ -18,10 +18,11 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin * specify DB columns * @param string $fields */ - function select($fields='*') + function select($fields=NULL) { // Create a fresh slate $this->object->_init(); + if (!$fields OR $fields == '*') $fields = $this->get_table_name().'.*'; $this->object->_select_clause = "SELECT {$fields}"; return $this->object; @@ -168,7 +169,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin * Returns the generated SQL query to be executed * @return string */ - function get_generated_query() + function get_generated_query($no_entities=FALSE) { $sql = array(); @@ -182,8 +183,8 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin if ($where_clauses) $sql[] = 'WHERE '.implode(' AND ', $where_clauses); if ($this->object->is_select_statement()) { - if ($this->object->_order_clauses) $sql[] = 'ORDER BY '.implode(', ', $this->object->_order_clauses); if ($this->object->_group_by_columns) $sql[] = 'GROUP BY '.implode(', ', $this->object->_group_by_columns); + if ($this->object->_order_clauses) $sql[] = 'ORDER BY '.implode(', ', $this->object->_order_clauses); if ($this->object->_limit_clause) $sql[] = $this->object->_limit_clause; } return implode(' ', $sql); @@ -201,13 +202,14 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin // Or generate SQL query if (!$sql) - $sql = $this->object->get_generated_query(); + $sql = $this->object->get_generated_query($no_entities); // If we have a SQL statement to execute, then heck, execute it! if ($sql) { - if ($this->object->debug) - var_dump($sql); + if ($this->object->debug) { + var_dump($sql); + } $this->_wpdb()->query($sql); @@ -220,11 +222,19 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin $retval = $this->_wpdb()->last_result; } else { + $id_field = $this->get_primary_key_column(); foreach ($this->_wpdb()->last_result as $row) { - $retval[] = $this->_convert_to_entity($this->scrub_result($row)); + if ($row) { + if (isset($row->$id_field)) { + $retval[] = $this->object->_convert_to_entity($row); + } + } } } } + elseif ($this->object->debug) { + var_dump("No entities returned from query"); + } } return $retval; @@ -240,7 +250,7 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin unset($entity->id_field); $primary_key = $this->object->get_primary_key_column(); - if (isset($entity->$primary_key)) { + if (isset($entity->$primary_key) && $entity->$primary_key > 0) { if($this->object->_update($entity)) $retval = intval($entity->$primary_key); } else { @@ -359,68 +369,48 @@ class C_CustomTable_DataMapper_Driver_Mixin extends Mixin return $retval; } - - /** - * Looks up using SQL the columns existing in the database - */ - function lookup_columns() + function _add_column($column_name, $datatype, $default_value=NULL) { - $this->object->_columns = array(); - $sql = "SHOW COLUMNS FROM `{$this->object->get_table_name()}`"; - foreach ($this->object->run_query($sql, TRUE) as $row) { - $this->object->_columns[] = $row->Field; + $sql = "ALTER TABLE `{$this->get_table_name()}` ADD COLUMN `{$column_name}` {$datatype}"; + if ($default_value) { + if (is_string($default_value)) $default_value = str_replace("'", "\\'", $default_value); + $sql .= " NOT NULL DEFAULT " . (is_string($default_value) ? "'{$default_value}" : "{$default_value}"); } - return $this->object->_columns; + $this->object->_wpdb()->query($sql); } - /** - * Determines whether a column is present for the table - * @param string $column_name - * @return string - */ - function has_column($column_name) + function _remove_column($column_name) { - if (empty($this->object->_columns)) $this->object->lookup_columns(); - return array_search($column_name, $this->object->_columns); + $sql = "ALTER TABLE `{$this->get_table_name()}` DROP COLUMN `{$column_name}`"; + $this->object->_wpdb()->query($sql); } /** - * Defines a column for this table - * @param string $column_name - * @param string $datatype + * Migrates the schema of the database */ - function define_column($column_name, $datatype) + function migrate($lookup=TRUE) { - $this->object->_defined_columns[$column_name] = $datatype; - } - - function add_column($column_name, $datatype=FALSE) - { - // If no datatype was specified, perhaps the column was already defined - if (!$datatype && isset($this->object->_defined_columns[$column_name])) { - $datatype = $this->object->_defined_columns[$column_name]; + if (!$this->object->_columns) { + throw new E_ColumnsNotDefinedException("Columns not defined for {$this->get_table_name()}"); } - // Ensure that we have a datatype before continuing... - if ($datatype) { - $sql = "ALTER TABLE `{$this->get_table_name()}` ADD COLUMN ``{$column_name}` {$datatype}"; - $this->object->run_query($sql); - } + if ($lookup) $this->lookup_columns(); - $this->object->lookup_columns(); - } + // Add any missing columns + foreach ($this->object->_columns as $key => $properties) { + if (!in_array($key, $this->object->_table_columns)) { + $this->object->_add_column($key, $properties['type'], $properties['default_value']); + } + } - /** - * Migrates the schema of the database - */ - function migrate() - { - if (empty($this->object->_columns)) $this->object->lookup_columns(); - foreach ($this->object->_columns as $column_name) { - if (!$this->object->has_column($column_name)) { - $this->object->add_column($column_name); + // Remove any columns not defined + foreach ($this->object->_table_columns as $key) { + if (!isset($this->object->_columns[$key])) { + //$this->object->_remove_column($key); } } + + $this->object->lookup_columns(); } @@ -446,21 +436,20 @@ class C_CustomTable_DataMapper_Driver extends C_DataMapper_Driver_Base var $_limit_clause = ''; var $_select_clause = ''; var $_delete_clause = ''; - var $_columns = array(); - var $_defined_columns = array(); function define($object_name, $context=FALSE) { - parent::define($context); + parent::define($object_name, $context); $this->add_mixin('C_CustomTable_DataMapper_Driver_Mixin'); $this->implement('I_CustomTable_DataMapper'); } - function initialize($object_name) + function initialize($object_name=FALSE) { parent::initialize($object_name); if (!isset($this->_primary_key_column)) $this->_primary_key_column = $this->_lookup_primary_key_column(); + $this->migrate(FALSE); } /** diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.datamapper_driver_base.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.datamapper_driver_base.php index 635b61dafe47766e1ac54923109211db39f49af9..4ab5a54684415a337f51b709d472fd2138620b80 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.datamapper_driver_base.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.datamapper_driver_base.php @@ -3,7 +3,13 @@ /** * Thrown when an entity does not exist */ -class E_EntityNotFoundException extends RuntimeException +class E_EntityNotFoundException extends E_NggErrorException +{ + +} + + +class E_ColumnsNotDefinedException extends E_NggErrorException { } @@ -13,7 +19,7 @@ class E_EntityNotFoundException extends RuntimeException * array which is not yet supported due to a problem with references and the * call_user_func_array() function. */ -class E_InvalidEntityException extends RuntimeException +class E_InvalidEntityException extends E_NggErrorException { function __construct($message_or_previous=FALSE, $code=0, $previous=NULL) { @@ -56,6 +62,24 @@ class Mixin_DataMapper_Driver_Base extends Mixin ); } + /** + * Notes that a particular columns is serialized, and should be unserialized when converted to an entity + * @param $column + */ + function add_serialized_column($column) + { + $this->object->_serialized_columns[] = $column; + } + + function unserialize_columns($object) + { + foreach ($this->object->_serialized_columns as $column) { + if (isset($object->$column) && is_string($object->$column)) { + $object->$column = $this->unserialize($object->$column); + } + } + } + /** * Serializes the data * @param mixed $value @@ -76,6 +100,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin function unserialize($value) { $retval = NULL; + if (is_string($value)) { $retval = stripcslashes($value); @@ -343,9 +368,15 @@ class Mixin_DataMapper_Driver_Base extends Mixin // Add name of the id_field to the entity, and convert // the ID to an integer $stdObject->id_field = $key = $this->object->get_primary_key_column(); - if (isset($stdObject->$key)) { - $stdObject->$key = (int) $stdObject->$key; - } + + // Cast columns to their appropriate data type + $this->cast_columns($stdObject); + + // Strip slashes + $this->strip_slashes($stdObject); + + // Unserialize columns + $this->unserialize_columns($stdObject); // Set defaults for this entity $this->object->set_defaults($stdObject); @@ -353,6 +384,47 @@ class Mixin_DataMapper_Driver_Base extends Mixin return $stdObject; } + + function strip_slashes($stdObject) + { + foreach (get_object_vars($stdObject) as $key => $value) { + if (is_string($value)) { + $stdObject->$key = str_replace("\\'", "'", str_replace('\"', '"', str_replace("\\\\", "\\", $value))); + } + elseif(is_object($value)) { + $stdObject->$key = $this->strip_slashes_deep($value); + } + elseif(is_array($value)) { + $stdObject->$key = $this->strip_slashes_deep($value); + } + } + + return $stdObject; + } + + function strip_slashes_deep($input) + { + $retval = $input; + + if (is_object($input)) { + foreach (get_object_vars($input) as $key => $value) { + $retval->$key = $this->strip_slashes_deep($value); + } + } + elseif(is_array($input)) { + foreach ($input as $key => $value) { + $retval[$key] = $this->strip_slashes_deep($value); + } + } + elseif(is_string($input)) { + $retval = str_replace("\\'", "'", str_replace('\"', '"', str_replace("\\\\", "\\", $input))); + + } + + return $retval; + } + + /** * Converts a stdObject entity to a model * @param stdObject $stdObject @@ -386,7 +458,7 @@ class Mixin_DataMapper_Driver_Base extends Mixin $entity = new stdClass; foreach ($properties as $k=>$v) $entity->$k = $v; } - return $factory->create($this->object->get_model_factory_method(), $this->object, $entity, $context); + return $factory->create($this->object->get_model_factory_method(), $entity, $this->object, $context); } @@ -508,45 +580,79 @@ class Mixin_DataMapper_Driver_Base extends Mixin } } - function scrub_result($result) - { - if (is_object($result)) - { - $new_result = new stdClass(); - foreach ($result as $key => $value) { - $new_value = $this->scrub_result($value); - $new_result->$key = $new_value; - } - return $new_result; - } - else if (is_array($result)) { - $new_array = array(); - foreach ($result as $key => $value) { - $new_array[$key] = $this->scrub_result($value); - } - return $new_array; - } else { - return stripslashes($result); - } - } + function define_column($name, $type, $default_value=NULL) + { + $this->object->_columns[$name] = array( + 'type' => $type, + 'default_value' => $default_value + ); + } + + function has_defined_column($name) + { + $columns = $this->object->_columns; + return isset($columns[$name]); + } + + function cast_columns($entity) + { + foreach ($this->object->_columns as $key => $properties) { + $value = property_exists($entity, $key) ? $entity->$key : NULL; + $default_value = $properties['default_value']; + if (!is_null($value) && $value !== $default_value) { + $column_type = $this->object->_columns[$key]['type']; + if (preg_match("/varchar|text/i", $column_type)) { + if (!is_array($value) && !is_object($value)) + $entity->$key = strval($value); + } + else if (preg_match("/decimal|numeric|double/i", $column_type)) { + $entity->$key = doubleval($value); + } + else if (preg_match("/float/i", $column_type)) { + $entity->$key = floatval($value); + } + else if (preg_match("/int/i", $column_type)) { + $entity->$key = intval($value); + } + else if (preg_match("/bool/i", $column_type)) { + $entity->$key = ($value ? TRUE : FALSE); + } + } + + // Add property and default value + else { + $entity->$key = $default_value; + } + } + return $entity; + } } class C_DataMapper_Driver_Base extends C_Component { var $_object_name; var $_model_factory_method = FALSE; + var $_columns = array(); + var $_table_columns = array(); + var $_serialized_columns = array(); function define($object_name, $context=FALSE) { parent::define($context); $this->add_mixin('Mixin_DataMapper_Driver_Base'); $this->implement('I_DataMapper_Driver'); + $this->_object_name = $object_name; } - function initialize($object_name) + function initialize() { parent::initialize(); - $this->_object_name = $object_name; + + if ($this->has_method('define_columns')) { + $this->define_columns(); + } + + $this->lookup_columns(); } /** @@ -569,6 +675,32 @@ class C_DataMapper_Driver_Base extends C_Component return $table_prefix.$this->_object_name; } + + /** + * Looks up using SQL the columns existing in the database + */ + function lookup_columns() + { + global $wpdb; + $this->_table_columns = array(); + $sql = "SHOW COLUMNS FROM `{$this->get_table_name()}`"; + foreach ($wpdb->get_results($sql) as $row) { + $this->_table_columns[] = $row->Field; + } + return $this->_table_columns; + } + + /** + * Determines whether a column is present for the table + * @param string $column_name + * @return string + */ + function has_column($column_name) + { + if (empty($this->object->_table_columns)) $this->object->lookup_columns(); + return array_search($column_name, $this->object->_table_columns) !== FALSE; + } + /** * Sets the name of the factory method used to create a model for this entity * @param string $method_name diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.datamapper_model.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.datamapper_model.php index 3e16760f466600a07936122a91ea1e4db15f2e71..ba1fd5f4e0326d05864043b44c4d0ae93dde2956 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.datamapper_model.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/class.datamapper_model.php @@ -8,7 +8,7 @@ class C_DataMapper_Model extends C_Component /** * Define the model */ - function define($mapper, $properties, $context=FALSE) + function define($mapper=NULL, $properties=array(), $context=FALSE) { parent::define($context); $this->add_mixin('Mixin_Validation'); @@ -23,7 +23,7 @@ class C_DataMapper_Model extends C_Component * @param array|stdClass $properties * @param string $context */ - function initialize($mapper, $properties=FALSE) + function initialize($mapper=NULL, $properties=FALSE) { $this->_mapper = $mapper; $this->_stdObject = $properties ? (object)$properties : new stdClass(); @@ -97,7 +97,9 @@ class C_DataMapper_Model extends C_Component */ function set_defaults() { - $this->get_mapper()->set_defaults($this); + $mapper = $this->get_mapper(); + if ($mapper->has_method('set_defaults')) + $mapper->set_defaults($this); } /** @@ -105,7 +107,7 @@ class C_DataMapper_Model extends C_Component */ function destroy() { - $this->get_mapper()->destroy($this->_stdObject); + return $this->get_mapper()->destroy($this->_stdObject); } @@ -121,16 +123,14 @@ class C_DataMapper_Model extends C_Component /** * Gets/sets the primary key */ - function id() + function id($value=NULL) { $key = $this->get_mapper()->get_primary_key_column(); - $args = func_get_args(); - if ($args) { - return $this->__set($key, $args[0]); - } - else { - return $this->__get($key); + if ($value) { + $this->__set($key, $value); + } + return $this->__get($key); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/module.datamapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/module.datamapper.php index e5836bb953bc11b8adacffa62bbd48f3a629771d..0544724834fdfc6f249645aa4fe173f7fd1656c9 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/module.datamapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/datamapper/module.datamapper.php @@ -14,7 +14,7 @@ class M_DataMapper extends C_Base_Module 'photocrati-datamapper', 'DataMapper', 'Provides a database abstraction layer following the DataMapper pattern', - '0.3', + '0.6', 'http://www.photocrati.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -49,6 +49,7 @@ class M_DataMapper extends C_Base_Module function set_custom_wp_query($sql, &$wp_query) { if ($wp_query->get('datamapper')) { + // Set the custom query if (($custom_sql = $wp_query->get('custom_sql'))) { $sql = $custom_sql; @@ -58,6 +59,8 @@ class M_DataMapper extends C_Base_Module elseif ($wp_query->get('is_delete')) { $sql = preg_replace("/^SELECT.*FROM/i", "DELETE FROM", $sql); } + + if ($wp_query->get('debug')) var_dump($sql); } return $sql; @@ -71,7 +74,7 @@ class M_DataMapper extends C_Base_Module */ function set_custom_wp_query_fields($fields, &$wp_query) { - if ($wp_query->get('datmapper')) { + if ($wp_query->get('datamapper')) { if (($custom_fields = $wp_query->get('fields'))) { $fields = $custom_fields; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/class.dynamic_stylesheet_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/class.dynamic_stylesheet_controller.php index ff99ceb6a85b77fac8f6a5f55a4a2c34bda658cd..4aabfa44eb5d1c3f64c4199859853640a933b23d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/class.dynamic_stylesheet_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_stylesheet/class.dynamic_stylesheet_controller.php @@ -76,7 +76,7 @@ class Mixin_Dynamic_Stylesheet_Instance_Methods extends Mixin $data = $this->object->encode($data); wp_enqueue_style( 'dyncss-' . $index . $data . '@dynamic', - $this->object->get_router()->get_url("/{$this->object->_app}", FALSE) . "/{$index}/{$data}" + $this->object->get_router()->get_url("/{$this->object->_app}", FALSE) . "?index={$index}&data={$data}" ); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/adapter.dynamic_thumbnails_storage_driver.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/adapter.dynamic_thumbnails_storage_driver.php index a0ffa133244d6cf01ab6aef0ad613d1c8eb97215..7b24346fdb80d85d2fb4487c40b90d20fb9a436c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/adapter.dynamic_thumbnails_storage_driver.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/adapter.dynamic_thumbnails_storage_driver.php @@ -22,7 +22,9 @@ class A_Dynamic_Thumbnails_Storage_Driver extends Mixin $params = $dynthumbs->get_params_from_name($size, true); $image_filename = $dynthumbs->get_image_name($image, $params); - $image_path = path_join($folder_path, $image_filename); + $image_path = implode(DIRECTORY_SEPARATOR, array( + rtrim($folder_path, "\\/"), $image_filename + )); if ($check_existance) { @@ -45,23 +47,30 @@ class A_Dynamic_Thumbnails_Storage_Driver extends Mixin return $retval; } - function get_image_url($image, $size='full') + function get_image_url($image, $size='full', $check_existance=FALSE) { $retval = NULL; $dynthumbs = $this->object->get_registry()->get_utility('I_Dynamic_Thumbnails_Manager'); if ($dynthumbs && $dynthumbs->is_size_dynamic($size)) { - $abspath = $this->object->get_image_abspath($image, $size, true); - if ($abspath == null) { + // If abspath is NULL, then we assume we're dealing with a dynamic image + if ($abspath == null) { $params = $dynthumbs->get_params_from_name($size, true); $retval = $dynthumbs->get_image_url($image, $params); } } if ($retval == null) { - $retval = $this->call_parent('get_image_url', $image, $size); + $retval = $this->call_parent('get_image_url', $image, $size, $check_existance); + } + + // Try generating the thumbnail + if ($retval == null) { + $params = array('watermark' => false, 'reflection' => false, 'crop' => true); + $result = $this->generate_image_size($image, $size, $params); + if ($result) $retval = $this->call_parent('get_image_url', $image, $size, $check_existance); } return $retval; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/module.dynamic_thumbnails.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/module.dynamic_thumbnails.php index b5e116ab661288c614fe4290cb4b83ddd8c37bf6..2209802c8960e0fc1f69996111bf37e78825e5d3 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/module.dynamic_thumbnails.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/dynamic_thumbnails/module.dynamic_thumbnails.php @@ -13,7 +13,7 @@ class M_Dynamic_Thumbnails extends C_Base_Module 'photocrati-dynamic_thumbnails', 'Dynamic Thumbnails', 'Adds support for dynamic thumbnails', - '0.3', + '0.5', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/module.frame_communication.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/module.frame_communication.php index 211dce039359a59effd82d82a3ad36e2cf5f4b2a..16421bf38be5eddf718f00864b643aaf49d32ef8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/module.frame_communication.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/frame_communication/module.frame_communication.php @@ -15,7 +15,7 @@ class M_Frame_Communication extends C_Base_Module 'photocrati-frame_communication', 'Frame/iFrame Inter-Communication', 'Provides a means for HTML frames to share server-side events with each other', - '0.2', + '0.3', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com', diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/class.fs.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/class.fs.php index e6b4a055202a518f2be24f041f1cb28da44a05a9..7851e917f554c8ffb7f81eb52b63999c8edfce52 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/class.fs.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/class.fs.php @@ -33,7 +33,7 @@ class C_Fs extends C_Component function initialize() { parent::initialize(); - $this->_document_root = $this->set_document_root($_SERVER['DOCUMENT_ROOT']); + $this->_document_root = $this->set_document_root(ABSPATH); } } @@ -42,8 +42,7 @@ class Mixin_Fs_Instance_Methods extends Mixin function add_trailing_slash($path) { - if (substr($path, -1) != '/') $path .= '/'; - return $path; + return rtrim($path, "/\\").DIRECTORY_SEPARATOR; } @@ -107,8 +106,7 @@ class Mixin_Fs_Instance_Methods extends Mixin */ function remove_path_segment($path, $segment) { - if (substr($segment, -1) == '/') $segment = substr($segment, 0, -1); - $parts = explode($segment, $path); + $parts = explode($segment, rtrim($path, "/\\")); return $this->join_paths($parts); } @@ -276,17 +274,9 @@ class Mixin_Fs_Instance_Methods extends Mixin $params = func_get_args(); $this->_flatten_array($params, $segments); - // if a protocol exists strip it from the string and store it for later - $pattern = "#^[a-zA-Z].+://#i"; - preg_match($pattern, $segments[0], $matches); - if (!empty($matches)) { - $protocol = reset($matches); - $segments[0] = preg_replace($pattern, '', $segments[0], 1); - } - foreach ($segments as $segment) { - $segment = trim($segment, '/\\'); - $pieces = array_values(preg_split('/[\/\\\\]/', $segment)); + $segment = trim($segment, "/\\"); + $pieces = array_values(preg_split('#[/\\\\]#', $segment)); // determine if each piece should be appended to $retval foreach ($pieces as $ndx => $val) { @@ -309,17 +299,13 @@ class Mixin_Fs_Instance_Methods extends Mixin } - $retval = $protocol . implode('/', $retval); - - if ((empty($protocol) && 'WINNT' !== PHP_OS) - && strpos($retval, '/') !== 0 - && is_null($protocol) - && !@file_exists($retval)) - { - $retval = '/' . $retval; + // Join the paths together + $retval = implode(DIRECTORY_SEPARATOR, $retval); + if (strpos($retval, $this->get_document_root()) !== 0) { + $retval = DIRECTORY_SEPARATOR . trim($retval, "/\\"); } - return $retval; + return $retval; } function _flatten_array($obj, &$arr) @@ -362,7 +348,13 @@ class Mixin_Fs_Instance_Methods extends Mixin */ function set_document_root($value) { - // Even for windows hosts we force '/' as the path separator - return $this->_document_root = untrailingslashit(str_replace('\\', '/', $value)); + // some web servers like home.pl and PhpStorm put the document root in "/" or (even weirder) "//" + if ($value == DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR) + $value = DIRECTORY_SEPARATOR; + + if ($value !== DIRECTORY_SEPARATOR) + $value = rtrim($value, "/\\"); + + return ($this->_document_root = $value); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/module.fs.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/module.fs.php index b2c5fba69d5d74d56163a97c82ce88cb31a24ec0..876256cfac75217c95860fc66931af1e46003116 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/module.fs.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/fs/module.fs.php @@ -12,7 +12,7 @@ class M_Fs extends C_Base_Module 'photocrati-fs', 'Filesystem', 'Provides a filesystem abstraction layer for Pope modules', - '0.2', + '0.4', 'http://www.photocrati.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_album_translation.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_album_translation.php new file mode 100644 index 0000000000000000000000000000000000000000..d9d4424805d76957ad4f7791d7830298c1b16cec --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_album_translation.php @@ -0,0 +1,31 @@ +<?php +class A_I18N_Album_Translation extends Mixin +{ + function initialize() + { + if (!is_admin()) + { + $this->object->add_post_hook( + 'set_defaults', + 'Sets NextGEN Album Defaults (translated strings)', + get_class(), + 'translate_album' + ); + } + } + + function translate_album($entity) + { + if (!empty($entity->name)) + $entity->name = M_I18N::translate($entity->name, 'album_' . $entity->{$entity->id_field} . '_name'); + if (!empty($entity->albumdesc)) + $entity->albumdesc = M_I18N::translate($entity->albumdesc, 'album_' . $entity->{$entity->id_field} . '_description'); + + // these fields are set when the album is a child to another album + if (!empty($entity->title)) + $entity->title = M_I18N::translate($entity->title, 'album_' . $entity->{$entity->id_field} . '_name'); + if (!empty($entity->galdesc)) + $entity->galdesc = M_I18N::translate($entity->galdesc, 'album_' . $entity->{$entity->id_field} . '_description'); + } + +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_gallery_translation.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_gallery_translation.php new file mode 100644 index 0000000000000000000000000000000000000000..26baf8253fc95851f00828bd5275cff5e301caf7 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_gallery_translation.php @@ -0,0 +1,25 @@ +<?php +class A_I18N_Gallery_Translation extends Mixin +{ + function initialize() + { + if (!is_admin()) + { + $this->object->add_post_hook( + 'set_defaults', + 'Sets NextGEN Gallery Defaults (translated strings)', + get_class(), + 'translate_gallery' + ); + } + } + + function translate_gallery($entity) + { + if (!empty($entity->title)) + $entity->title = M_I18N::translate($entity->title, 'gallery_' . $entity->{$entity->id_field} . '_name'); + if (!empty($entity->galdesc)) + $entity->galdesc = M_I18N::translate($entity->galdesc, 'gallery_' . $entity->{$entity->id_field} . '_description'); + } + +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_image_translation.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_image_translation.php new file mode 100644 index 0000000000000000000000000000000000000000..73d061dc93c5f27ce6a522ed000bd966e3c67443 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_image_translation.php @@ -0,0 +1,25 @@ +<?php +class A_I18N_Image_Translation extends Mixin +{ + function initialize() + { + if (!is_admin()) + { + $this->object->add_post_hook( + 'set_defaults', + 'Sets NextGEN Image Defaults (translated strings)', + get_class(), + 'translate_image' + ); + } + } + + function translate_image($entity) + { + if (!empty($entity->description)) + $entity->description = M_I18N::translate($entity->description, 'pic_' . $entity->{$entity->id_field} . '_description'); + if (!empty($entity->alttext)) + $entity->alttext = M_I18N::translate($entity->alttext, 'pic_' . $entity->{$entity->id_field} . '_alttext'); + } + +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_routing_app.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_routing_app.php new file mode 100644 index 0000000000000000000000000000000000000000..308010e71f1da8ed7be2d2a03f9a2c978ed3165e --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/adapter.i18n_routing_app.php @@ -0,0 +1,23 @@ +<?php + +class A_I18N_Routing_App extends Mixin +{ + function initialize() + { + $this->object->add_pre_hook( + 'execute_route_handler', + "Suppresses qTranslate's 'Hide Untranslated Content' feature when handling requests", + get_class(), + 'fix_routed_apps_qtranslate_compat' + ); + } + + function fix_routed_apps_qtranslate_compat() + { + if (!empty($GLOBALS['q_config']) && defined('QTRANS_INIT')) + { + global $q_config; + $q_config['hide_untranslated'] = 0; + } + } +} \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-cs_CZ.mo b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-cs_CZ.mo new file mode 100644 index 0000000000000000000000000000000000000000..63e0177f6705df3fd98e3f9da54507ffffe62e63 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-cs_CZ.mo differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-cs_CZ.po b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-cs_CZ.po new file mode 100644 index 0000000000000000000000000000000000000000..8e2cda32462007047228d4d3202c1bfcb112cbc4 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-cs_CZ.po @@ -0,0 +1,21182 @@ +msgid "" +msgstr "" +"Project-Id-Version: WordPress CZ (3.0)\n" +"Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com\n" +"POT-Creation-Date: 2010-06-17 16:04+0000\n" +"PO-Revision-Date: 2010-07-13 00:56+0100\n" +"Last-Translator: Separatista <pavelevap@separatista.net>\n" +"Language-Team: Separatista <pavelevap@separatista.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Country: CZECH REPUBLIC\n" +"X-Poedit-SourceCharset: utf-8\n" +"Plural-Forms: nplurals=3; plural=n>=2 && n<=4 ? 1 : n==1 ? 0 : 2;\n" +"X-Poedit-Language: Czech\n" +"X-Poedit-KeywordsList: __;_e;__ngettext\n" + +#: wp-admin/admin-ajax.php:36 +#, php-format +msgid "<strong>ALERT: You are logged out!</strong> Could not save draft. <a href=\"%s\" target=\"_blank\">Please log in again.</a>" +msgstr "<strong>POZOR: Byli jste odhlášeni!</strong> Koncept nemohl být uložen. <a href=\"%s\" target=\"_blank\">Přihlaste se prosím znovu.</a>" + +#: wp-admin/admin-ajax.php:201 +#: wp-admin/edit-comments.php:289 +#: wp-admin/edit-link-categories.php:108 +#: wp-admin/edit-tags.php:271 +#: wp-admin/edit.php:313 +#: wp-admin/includes/media.php:1924 +#: wp-admin/includes/nav-menu.php:613 +#: wp-admin/includes/nav-menu.php:823 +#: wp-admin/includes/plugin-install.php:298 +#: wp-admin/includes/theme-install.php:384 +#: wp-admin/plugins.php:486 +#: wp-admin/themes.php:88 +#: wp-admin/upload.php:284 +msgid "«" +msgstr "«" + +#: wp-admin/admin-ajax.php:202 +#: wp-admin/edit-comments.php:290 +#: wp-admin/edit-link-categories.php:109 +#: wp-admin/edit-tags.php:272 +#: wp-admin/edit.php:314 +#: wp-admin/includes/media.php:1925 +#: wp-admin/includes/nav-menu.php:614 +#: wp-admin/includes/nav-menu.php:824 +#: wp-admin/includes/plugin-install.php:299 +#: wp-admin/includes/theme-install.php:385 +#: wp-admin/plugins.php:487 +#: wp-admin/themes.php:89 +#: wp-admin/upload.php:285 +msgid "»" +msgstr "»" + +#: wp-admin/admin-ajax.php:370 +#: wp-admin/edit-link-categories.php:28 +#: wp-admin/link-category.php:46 +#, php-format +msgid "Can’t delete the <strong>%s</strong> category: this is the default one" +msgstr "Rubrika <strong>%s</strong> je výchozí, takže ji nelze smazat." + +#: wp-admin/admin-ajax.php:463 +#, php-format +msgid "Comment %d does not exist" +msgstr "Komentář %d neexistuje" + +#: wp-admin/admin-ajax.php:526 +#: wp-admin/includes/taxonomy.php:119 +msgid "You did not enter a category name." +msgstr "Nezadali jste název rubriky." + +#: wp-admin/admin-ajax.php:567 +#: wp-admin/admin-ajax.php:1431 +msgid "An error has occured. Please reload the page and try again." +msgstr "Objevila se neznámá chyba. Obnovte prosím stránku a zkuste to znovu." + +#: wp-admin/admin-ajax.php:620 +msgid "No tags found!" +msgstr "Nebyly nalezeny žádné štítky!" + +#: wp-admin/admin-ajax.php:719 +msgid "Error: you are replying to a comment on a draft post." +msgstr "Chyba: Pokoušíte se odpovídat na komentář u zatím nevydaného konceptu." + +#: wp-admin/admin-ajax.php:734 +msgid "Sorry, you must be logged in to reply to a comment." +msgstr "Omlouváme se, ale pro vložení odpovědi na komentář se musíte nejdříve přihlásit." + +#: wp-admin/admin-ajax.php:738 +#: wp-admin/admin-ajax.php:784 +#: wp-comments-post.php:84 +msgid "Error: please type a comment." +msgstr "Chyba: Napište prosím nějaký text komentáře." + +#: wp-admin/admin-ajax.php:877 +#: wp-admin/admin-ajax.php:882 +#: wp-admin/admin-ajax.php:902 +msgid "Please provide a custom field value." +msgstr "Zadejte prosím nějakou hodnotu uživatelského pole." + +#: wp-admin/admin-ajax.php:900 +msgid "Please provide a custom field name." +msgstr "Zadejte prosím nějaký název uživatelského pole." + +#: wp-admin/admin-ajax.php:949 +#, php-format +msgid "User <a href=\"#%s\">%s</a> added" +msgstr "Uživatel <a href=\"#%s\">%s</a> byl vytvořen" + +#. translators: draft saved date format, see http://php.net/date +#: wp-admin/admin-ajax.php:970 +msgid "g:i:s a" +msgstr "G:i" + +#. translators: %s: date and time +#: wp-admin/admin-ajax.php:972 +#, php-format +msgid "Draft saved at %s." +msgstr "Koncept byl uložen v %s." + +#: wp-admin/admin-ajax.php:990 +#: wp-admin/admin-ajax.php:1202 +msgid "Someone" +msgstr "Někdo" + +#: wp-admin/admin-ajax.php:992 +#, php-format +msgid "Autosave disabled: %s is currently editing this page." +msgstr "Automatické ukládání je vypnuto: %s právě teď upravuje tuto stránku." + +#: wp-admin/admin-ajax.php:992 +#, php-format +msgid "Autosave disabled: %s is currently editing this post." +msgstr "Automatické ukládání je vypnuto: %s právě teď upravuje tento příspěvek." + +#: wp-admin/admin-ajax.php:1001 +#: wp-admin/admin-ajax.php:1191 +#: wp-admin/includes/post.php:143 +#: wp-admin/includes/post.php:1302 +msgid "You are not allowed to edit this page." +msgstr "Nemáte dostatečné oprávnění pro úpravy této stránky." + +#: wp-admin/admin-ajax.php:1004 +#: wp-admin/admin-ajax.php:1194 +#: wp-admin/includes/post.php:145 +#: wp-admin/includes/post.php:1305 +#: wp-admin/upload.php:35 +msgid "You are not allowed to edit this post." +msgstr "Nemáte dostatečné oprávnění pro úpravy tohoto příspěvku." + +#: wp-admin/admin-ajax.php:1203 +#, php-format +msgid "Saving is disabled: %s is currently editing this page." +msgstr "Ukládání je zablokováno: %s právě teď upravuje tuto stránku." + +#: wp-admin/admin-ajax.php:1203 +#, php-format +msgid "Saving is disabled: %s is currently editing this post." +msgstr "Ukládání je zablokováno: %s právě teď upravuje tento příspěvek." + +#: wp-admin/admin-ajax.php:1252 +#: wp-admin/admin-ajax.php:1256 +#: wp-admin/edit-comments.php:13 +#: wp-admin/edit-link-categories.php:18 +#: wp-admin/edit-tags.php:45 +#: wp-admin/edit-tags.php:83 +#: wp-admin/edit-tags.php:97 +#: wp-admin/edit-tags.php:134 +#: wp-admin/edit.php:23 +#: wp-admin/includes/bookmark.php:30 +#: wp-admin/link-category.php:24 +#: wp-admin/link-category.php:39 +#: wp-admin/link-category.php:80 +#: wp-admin/nav-menus.php:23 +#: wp-admin/options.php:31 +#: wp-admin/options.php:55 +#: wp-admin/plugins.php:15 +#: wp-admin/press-this.php:14 +#: wp-admin/sidebar.php:19 +#: wp-admin/themes.php:13 +#: wp-admin/themes.php:24 +#: wp-admin/user-new.php:13 +#: wp-admin/users.php:16 +#: wp-admin/users.php:81 +#: wp-admin/widgets.php:16 +#: wp-content/plugins/akismet/akismet.php:66 +msgid "Cheatin’ uh?" +msgstr "Nepodvádíte?" + +#: wp-admin/admin-ajax.php:1268 +#: wp-admin/edit-link-categories.php:67 +msgid "Category not updated." +msgstr "Rubrika nebyla aktualizována." + +#: wp-admin/admin-ajax.php:1283 +#: wp-admin/admin-ajax.php:1292 +#: wp-admin/edit-tags.php:210 +msgid "Item not updated." +msgstr "Položka nebyla aktualizována." + +#: wp-admin/admin-ajax.php:1332 +#: wp-admin/includes/dashboard.php:435 +#: wp-admin/includes/media.php:1048 +#: wp-admin/includes/media.php:1788 +#: wp-admin/includes/media.php:2103 +#: wp-admin/includes/media.php:2133 +#: wp-admin/includes/media.php:2163 +#: wp-admin/includes/template.php:909 +#: wp-includes/js/tinymce/langs/wp-langs.php:295 +#: wp-includes/post.php:4348 +msgid "Title" +msgstr "Název" + +#: wp-admin/admin-ajax.php:1332 +#: wp-admin/includes/template.php:617 +#: wp-admin/includes/template.php:922 +msgid "Date" +msgstr "Datum" + +#: wp-admin/admin-ajax.php:1332 +#: wp-admin/edit-form-comment.php:35 +#: wp-admin/includes/template.php:1098 +msgid "Status" +msgstr "Stav" + +#: wp-admin/admin-ajax.php:1338 +#: wp-admin/includes/meta-boxes.php:64 +#: wp-admin/includes/meta-boxes.php:89 +#: wp-admin/includes/template.php:1104 +#: wp-admin/includes/template.php:1330 +#: wp-admin/includes/template.php:1555 +#: wp-includes/post.php:515 +#: wp-includes/post.php:535 +#: wp-includes/script-loader.php:304 +msgid "Published" +msgstr "Publikováno" + +#: wp-admin/admin-ajax.php:1341 +#: wp-admin/includes/meta-boxes.php:67 +#: wp-admin/includes/meta-boxes.php:93 +#: wp-admin/includes/template.php:1105 +#: wp-admin/includes/template.php:1335 +#: wp-admin/includes/template.php:1560 +msgid "Scheduled" +msgstr "Naplánováno" + +#: wp-admin/admin-ajax.php:1344 +#: wp-admin/includes/meta-boxes.php:70 +#: wp-admin/includes/meta-boxes.php:95 +#: wp-admin/includes/template.php:1110 +#: wp-includes/post.php:513 +msgid "Pending Review" +msgstr "Čekající na schválení" + +#: wp-admin/admin-ajax.php:1347 +#: wp-admin/includes/meta-boxes.php:74 +#: wp-admin/includes/meta-boxes.php:97 +#: wp-admin/includes/meta-boxes.php:99 +#: wp-admin/includes/template.php:1111 +#: wp-admin/includes/template.php:3521 +#: wp-includes/post.php:512 +#: wp-includes/post.php:533 +msgid "Draft" +msgstr "Koncept" + +#. translators: date format in table columns, see http://php.net/date +#. translators: comment date format. See http://php.net/date +#: wp-admin/admin-ajax.php:1355 +#: wp-admin/edit-attachment-rows.php:169 +#: wp-admin/edit-attachment-rows.php:183 +#: wp-admin/includes/template.php:1320 +#: wp-admin/includes/template.php:1549 +#: wp-admin/includes/template.php:2064 +#: wp-admin/upload.php:451 +msgid "Y/m/d" +msgstr "j.n.Y" + +#: wp-admin/admin-footer.php:23 +msgid "Thank you for creating with <a href=\"http://wordpress.org/\">WordPress</a>." +msgstr "Děkujeme, že používáte <a href=\"http://wordpress.org\">WordPress</a>." + +#: wp-admin/admin-footer.php:23 +msgid "<a href=\"http://codex.wordpress.org/\">Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/\">Manuál</a> (anglicky)" + +#: wp-admin/admin-footer.php:23 +msgid "<a href=\"http://wordpress.org/support/forum/4\">Feedback</a>" +msgstr "<a href=\"http://www.separatista.net\">Česká lokalizace a podpora</a>" + +#: wp-admin/admin-header.php:111 +msgid "Visit Site" +msgstr "Zobrazit web" + +#: wp-admin/admin-header.php:115 +msgid "Your site is asking search engines not to index its content" +msgstr "Vyhledávače mají zakázáno prohledávat a indexovat obsah vašeho webu" + +#: wp-admin/admin-header.php:115 +msgid "Search Engines Blocked" +msgstr "Vyhledávačům vstup zakázán" + +#: wp-admin/admin-header.php:125 +#, php-format +msgid "Howdy, <a href=\"%1$s\" title=\"Edit your profile\">%2$s</a>" +msgstr "Přihlášen: <a href=\"%1$s\" title=\"Upravit profil\">%2$s</a>" + +#: wp-admin/admin-header.php:126 +msgid "Log Out" +msgstr "Odhlásit se" + +#: wp-admin/admin.php:141 +msgid "Invalid plugin page" +msgstr "Nesprávná stránka pluginu" + +#: wp-admin/admin.php:145 +#, php-format +msgid "Cannot load %s." +msgstr "Nepodařilo se načíst %s." + +#: wp-admin/admin.php:166 +msgid "You are not allowed to import." +msgstr "Nemáte dostatečné oprávnění pro import dat." + +#: wp-admin/admin.php:180 +#: wp-admin/import.php:17 +#: wp-admin/menu.php:210 +msgid "Import" +msgstr "Import" + +#: wp-admin/async-upload.php:29 +#: wp-admin/media-upload.php:16 +#: wp-admin/upload.php:15 +#: wp-app.php:599 +#: wp-app.php:787 +msgid "You do not have permission to upload files." +msgstr "Nemáte dostatečné oprávnění pro nahrávání souborů." + +#: wp-admin/async-upload.php:48 +#: wp-includes/script-loader.php:212 +msgid "Dismiss" +msgstr "Zamítnut" + +#: wp-admin/async-upload.php:49 +#: wp-includes/script-loader.php:216 +#, php-format +msgid "“%s” has failed to upload due to an error" +msgstr "Soubor „%s“ se kvůli chybě nepodařilo nahrát" + +#: wp-admin/comment.php:46 +#: wp-admin/edit-form-comment.php:16 +#: wp-admin/edit-form-comment.php:27 +msgid "Edit Comment" +msgstr "Upravit komentář" + +#: wp-admin/comment.php:48 +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 "Pokud je to nezbytné, můžete samozřejmě upravovat i konkrétní komentáře. Často se této možnosti využívá zejména v případech, kdy udělal autor komentáře nějakou pravopisnou či typografickou chybu." + +#: wp-admin/comment.php:49 +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 "Vybraný komentář můžete na této stránce také moderovat pomocí výběru příslušné možnosti v sekci Stav, kde je možné také změnit datum a čas uložení komentáře na webu." + +#: wp-admin/comment.php:50 +#: wp-admin/custom-background.php:87 +#: wp-admin/custom-header.php:95 +#: wp-admin/edit-comments.php:114 +#: wp-admin/edit-form-advanced.php:179 +#: wp-admin/edit-form-advanced.php:189 +#: wp-admin/edit-link-categories.php:56 +#: wp-admin/edit-link-form.php:44 +#: wp-admin/edit-tags.php:191 +#: wp-admin/edit.php:176 +#: wp-admin/edit.php:185 +#: wp-admin/export.php:22 +#: wp-admin/import.php:22 +#: wp-admin/index.php:40 +#: wp-admin/link-manager.php:52 +#: wp-admin/media-upload.php:63 +#: wp-admin/nav-menus.php:458 +#: wp-admin/options-discussion.php:21 +#: wp-admin/options-general.php:60 +#: wp-admin/options-media.php:23 +#: wp-admin/options-permalink.php:25 +#: wp-admin/options-privacy.php:22 +#: wp-admin/options-reading.php:23 +#: wp-admin/options-writing.php:21 +#: wp-admin/plugin-editor.php:115 +#: wp-admin/plugin-install.php:60 +#: wp-admin/plugins.php:321 +#: wp-admin/theme-editor.php:24 +#: wp-admin/theme-install.php:59 +#: wp-admin/themes.php:41 +#: wp-admin/tools.php:17 +#: wp-admin/update-core.php:388 +#: wp-admin/upload.php:171 +#: wp-admin/user-edit.php:43 +#: wp-admin/user-new.php:123 +#: wp-admin/users.php:26 +#: wp-admin/widgets.php:44 +msgid "For more information:" +msgstr "Další informace:" + +#: wp-admin/comment.php:51 +#: wp-admin/edit-comments.php:115 +msgid "<a href=\"http://codex.wordpress.org/Administration_Panels#Comments\" target=\"_blank\">Comments Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Administration_Panels#Comments\" target=\"_blank\">Manuál pro práci s komentáři</a> (anglicky)" + +#: wp-admin/comment.php:52 +msgid "<a href=\"http://wordpress.org/support/\" target=\"_blank\" >Support Forums</a>" +msgstr "Fórum podpory (<a href=\"http://www.separatista.net/forum\" target=\"_blank\">česky</a> - <a href=\"http://wordpress.org/support/\" target=\"_blank\">anglicky</a>)" + +#: wp-admin/comment.php:61 +#: wp-admin/comment.php:214 +#: wp-admin/edit-comments.php:146 +msgid "Oops, no comment with this ID." +msgstr "Komentář s tímto ID nebyl nalezen." + +#: wp-admin/comment.php:61 +#: wp-admin/comment.php:214 +msgid "Go back" +msgstr "Zpět" + +#: wp-admin/comment.php:64 +#: wp-admin/comment.php:216 +#: wp-admin/edit-comments.php:149 +msgid "You are not allowed to edit comments on this post." +msgstr "Nemáte dostatečné oprávnění pro úpravy komentářů u tohoto příspěvku." + +#: wp-admin/comment.php:67 +msgid "This comment is in the Trash. Please move it out of the Trash if you want to edit it." +msgstr "Tento komentář je v koši. Pokud ho chcete upravovat, tak ho prosím nejdříve obnovte na původní místo." + +#: wp-admin/comment.php:110 +msgid "Moderate Comment" +msgstr "Moderovat komentář" + +#: wp-admin/comment.php:115 +msgid "You are about to mark the following comment as spam:" +msgstr "Chystáte se označit následující komentář jako spam:" + +#: wp-admin/comment.php:116 +msgid "Spam Comment" +msgstr "Označit komentář jako spam" + +#: wp-admin/comment.php:119 +msgid "You are about to move the following comment to the Trash:" +msgstr "Chystáte se přesunout následující komentář do koše:" + +#: wp-admin/comment.php:120 +msgid "Trash Comment" +msgstr "Odstranit komentář" + +#: wp-admin/comment.php:123 +msgid "You are about to delete the following comment:" +msgstr "Chystáte se smazat následující komentář:" + +#: wp-admin/comment.php:124 +msgid "Permanently Delete Comment" +msgstr "Smazat komentář" + +#: wp-admin/comment.php:127 +msgid "You are about to approve the following comment:" +msgstr "Chystáte se schválit následující komentář:" + +#: wp-admin/comment.php:128 +msgid "Approve Comment" +msgstr "Schválit komentář" + +#: wp-admin/comment.php:136 +msgid "This comment is currently approved." +msgstr "Tento komentář je momentálně schválen." + +#: wp-admin/comment.php:139 +msgid "This comment is currently marked as spam." +msgstr "Tento komentář je momentálně označen jako spam." + +#: wp-admin/comment.php:142 +msgid "This comment is currently in the Trash." +msgstr "Tento komentář je momentálně v koši." + +#: wp-admin/comment.php:149 +msgid "Caution:" +msgstr "Varování:" + +#: wp-admin/comment.php:153 +#: wp-admin/edit-form-advanced.php:156 +#: wp-admin/edit-form-comment.php:86 +#: wp-admin/includes/meta-boxes.php:509 +#: wp-admin/includes/plugin-install.php:171 +#: wp-admin/includes/template.php:609 +#: wp-admin/includes/template.php:642 +#: wp-admin/includes/template.php:694 +#: wp-admin/includes/template.php:938 +#: wp-admin/includes/theme-install.php:158 +#: wp-includes/js/tinymce/langs/wp-langs.php:256 +#: wp-includes/post-template.php:1216 +#: wp-includes/theme-compat/sidebar.php:21 +msgid "Author" +msgstr "Autor" + +#: wp-admin/comment.php:158 +#: wp-admin/includes/template.php:752 +#: wp-admin/includes/template.php:2258 +#: wp-admin/user-edit.php:304 +#: wp-admin/user-new.php:217 +#: wp-includes/theme-compat/comments-popup.php:80 +#: wp-login.php:473 +msgid "E-mail" +msgstr "Email" + +#: wp-admin/comment.php:164 +#: wp-admin/includes/media.php:2156 +#: wp-admin/includes/nav-menu.php:126 +#: wp-admin/includes/nav-menu.php:536 +#: wp-admin/includes/template.php:706 +#: wp-admin/includes/template.php:2263 +#: wp-admin/includes/template.php:2626 +#: wp-admin/press-this.php:159 +msgid "URL" +msgstr "URL" + +#. translators: field name in comment form +#: wp-admin/comment.php:169 +#: wp-includes/comment-template.php:681 +#: wp-includes/comment-template.php:1508 +msgctxt "noun" +msgid "Comment" +msgstr "Komentář" + +#: wp-admin/comment.php:174 +#: wp-includes/functions.php:2614 +#: wp-includes/functions.php:2616 +msgid "Are you sure you want to do this?" +msgstr "Opravdu to chcete udělat?" + +#: wp-admin/comment.php:180 +#: wp-admin/custom-header.php:525 +#: wp-admin/link-manager.php:191 +msgid "No" +msgstr "Ne" + +#: wp-admin/comment.php:281 +#: wp-admin/includes/media.php:1695 +msgid "Unknown action." +msgstr "Neznámá akce." + +#: wp-admin/custom-background.php:67 +#: wp-includes/js/tinymce/langs/wp-langs.php:324 +msgid "Background" +msgstr "Pozadí" + +#: wp-admin/custom-background.php:83 +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 "Pomocí uživatelského nastavení pozadí můžete jednoduše upravit vzhled webu bez toho, abyste museli zasahovat do zdrojových souborů šablony. Na pozadí je možné zobrazit obrázek nebo jen zvolit nějakou barvu." + +#: wp-admin/custom-background.php:84 +msgid "To use a background image, simply upload it, then choose your display options below. 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 "Pokud chcete mít na pozadí webu svůj vlastní obrázek, stačí ho jen pomocí formuláře nahrát a poté upravit jeho konkrétní zobrazení. Obrázek můžete na pozadí zobrazit třeba jen jednou, nebo i opakovaně a nechat s ním vyplnit celé pozadí na obrazovce. Dále můžete zvolit způsob upevnění pozadí vzhledem k dalšímu obsahu webu, takže nastavené pozadí ve velikosti obrazovky zůstává buď upevněno na stejném místě a posunuje se pouze samotný obsah stránky, nebo se pozadí může automaticky natahovat podle délky zobrazené stránky webu." + +#: wp-admin/custom-background.php:85 +msgid "You can also choose a background color. If you know the hexadecimal code for the color you want, enter it in the Color field. If not, click on the Select a Color link, and a color picker will allow you to choose the exact shade you want." +msgstr "Dále si můžete vybrat vlastní barvu pozadí. Pokud znáte hexadecimální kód požadované barvy, stačí ho pouze zadat do pole Barva. Jinak můžete kliknout na tlačítko Vybrat barvu a zobrazí se pomocný grafický nástroj, s jehož pomocí si určitě vhodnou barvu vyberete." + +#: wp-admin/custom-background.php:86 +msgid "Don’t forget to click on the Save Changes button when you are finished." +msgstr "Nezapomeňte po provedení všech úprav ještě kliknout na tlačítko Uložit změny." + +#: wp-admin/custom-background.php:88 +msgid "<a href=\"http://codex.wordpress.org/Appearance_Background_SubPanel\" target=\"_blank\">Documentation on Custom Background</a>" +msgstr "<a href=\"http://codex.wordpress.org/Appearance_Background_SubPanel\" target=\"_blank\">Manuál pro práci s pozadím</a> (anglicky)" + +#: wp-admin/custom-background.php:89 +#: wp-admin/custom-header.php:97 +#: wp-admin/edit-comments.php:118 +#: wp-admin/edit-form-advanced.php:181 +#: wp-admin/edit-form-advanced.php:191 +#: wp-admin/edit-link-categories.php:58 +#: wp-admin/edit-link-form.php:46 +#: wp-admin/edit-tags.php:198 +#: wp-admin/edit.php:178 +#: wp-admin/edit.php:187 +#: wp-admin/export.php:24 +#: wp-admin/import.php:24 +#: wp-admin/includes/template.php:3638 +#: wp-admin/index.php:42 +#: wp-admin/link-manager.php:54 +#: wp-admin/media-upload.php:65 +#: wp-admin/nav-menus.php:460 +#: wp-admin/options-discussion.php:23 +#: wp-admin/options-general.php:62 +#: wp-admin/options-media.php:25 +#: wp-admin/options-permalink.php:28 +#: wp-admin/options-privacy.php:24 +#: wp-admin/options-reading.php:25 +#: wp-admin/options-writing.php:23 +#: wp-admin/plugin-editor.php:117 +#: wp-admin/plugin-install.php:62 +#: wp-admin/plugins.php:323 +#: wp-admin/theme-editor.php:29 +#: wp-admin/theme-install.php:61 +#: wp-admin/themes.php:43 +#: wp-admin/tools.php:19 +#: wp-admin/update-core.php:390 +#: wp-admin/upload.php:173 +#: wp-admin/user-edit.php:45 +#: wp-admin/user-new.php:125 +#: wp-admin/users.php:29 +#: wp-admin/widgets.php:46 +msgid "<a href=\"http://wordpress.org/support/\" target=\"_blank\">Support Forums</a>" +msgstr "Fórum podpory (<a href=\"http://www.separatista.net/forum\" target=\"_blank\">česky</a> - <a href=\"http://wordpress.org/support/\" target=\"_blank\">anglicky</a>)" + +#: wp-admin/custom-background.php:169 +msgid "Custom Background" +msgstr "Uživatelské nastavení pozadí" + +#: wp-admin/custom-background.php:172 +#, php-format +msgid "Background updated. <a href=\"%s\">Visit your site</a> to see how it looks." +msgstr "Pozadí bylo aktualizováno. Výsledek této změny si můžete prohlédnout přímo <a href=\"%s\">na webu</a>." + +#: wp-admin/custom-background.php:180 +msgid "Background Image" +msgstr "Obrázek na pozadí" + +#: wp-admin/custom-background.php:184 +#: wp-admin/custom-header.php:440 +#: wp-admin/includes/class-wp-upgrader.php:1343 +#: wp-admin/includes/class-wp-upgrader.php:1400 +#: wp-admin/includes/meta-boxes.php:44 +#: wp-admin/includes/template.php:1365 +#: wp-admin/includes/template.php:1587 +#: wp-admin/includes/theme-install.php:305 +#: wp-admin/themes.php:195 +#: wp-includes/js/tinymce/langs/wp-langs.php:62 +#: wp-includes/js/tinymce/langs/wp-langs.php:308 +msgid "Preview" +msgstr "Náhled" + +#: wp-admin/custom-background.php:209 +#: wp-admin/custom-header.php:496 +msgid "Remove Image" +msgstr "Odstranit obrázek" + +#: wp-admin/custom-background.php:213 +msgid "Remove Background Image" +msgstr "Odstranit obrázek z pozadí" + +#: wp-admin/custom-background.php:214 +msgid "This will remove the background image. You will not be able to restore any customizations." +msgstr "Tímto tlačítkem odstraníte aktuální obrázek z pozadí. Všechny provedené úpravy nastavení budou nenávratně ztraceny." + +#: wp-admin/custom-background.php:222 +#: wp-admin/custom-background.php:226 +#: wp-admin/includes/image-edit.php:97 +msgid "Restore Original Image" +msgstr "Obnovit původní obrázek" + +#: wp-admin/custom-background.php:227 +msgid "This will restore the original background image. You will not be able to restore any customizations." +msgstr "Tímto tlačítkem obnovíte původní obrázek na pozadí. Žádné dříve provedené úpravy nastavení však nebude možné obnovit." + +#: wp-admin/custom-background.php:234 +#: wp-admin/custom-header.php:461 +msgid "Upload Image" +msgstr "Nahrát obrázek" + +#: wp-admin/custom-background.php:236 +#: wp-admin/custom-header.php:467 +msgid "Choose an image from your computer:" +msgstr "Vyberte obrázek v počítači:" + +#: wp-admin/custom-background.php:239 +#: wp-admin/custom-header.php:471 +#: wp-admin/includes/media.php:1509 +#: wp-admin/includes/media.php:1510 +#: wp-admin/includes/template.php:3375 +#: wp-admin/plugin-install.php:27 +#: wp-admin/theme-install.php:33 +msgid "Upload" +msgstr "Nahrát soubor" + +#: wp-admin/custom-background.php:247 +msgid "Display Options" +msgstr "Nastavení zobrazení" + +#: wp-admin/custom-background.php:253 +#: wp-admin/widgets.php:278 +msgid "Position" +msgstr "Umístění" + +#: wp-admin/custom-background.php:254 +msgid "Background Position" +msgstr "Umístění obrázku na pozadí" + +#. translators: alignment +#: wp-admin/custom-background.php:257 +#: wp-admin/includes/media.php:818 +#: wp-admin/includes/media.php:2060 +#: wp-includes/js/tinymce/langs/wp-langs.php:43 +#: wp-includes/js/tinymce/langs/wp-langs.php:288 +#: wp-includes/js/tinymce/langs/wp-langs.php:385 +msgid "Left" +msgstr "Doleva" + +#. translators: alignment +#: wp-admin/custom-background.php:261 +#: wp-admin/includes/media.php:818 +#: wp-admin/includes/media.php:2062 +#: wp-includes/js/tinymce/langs/wp-langs.php:44 +#: wp-includes/js/tinymce/langs/wp-langs.php:365 +#: wp-includes/js/tinymce/langs/wp-langs.php:386 +msgid "Center" +msgstr "Na střed" + +#. translators: alignment +#: wp-admin/custom-background.php:265 +#: wp-admin/includes/media.php:818 +#: wp-admin/includes/media.php:2064 +#: wp-includes/js/tinymce/langs/wp-langs.php:45 +#: wp-includes/js/tinymce/langs/wp-langs.php:289 +#: wp-includes/js/tinymce/langs/wp-langs.php:383 +msgid "Right" +msgstr "Doprava" + +#: wp-admin/custom-background.php:271 +msgid "Repeat" +msgstr "Opakování" + +#: wp-admin/custom-background.php:272 +msgid "Background Repeat" +msgstr "Opakované zobrazení obrázku na pozadí" + +#: wp-admin/custom-background.php:273 +msgid "No Repeat" +msgstr "Použít obrázek jenom jednou" + +#: wp-admin/custom-background.php:274 +msgid "Tile" +msgstr "Opakovat obrázek a vyplnit s ním celé pozadí" + +#: wp-admin/custom-background.php:275 +msgid "Tile Horizontally" +msgstr "Opakovat obrázek vodorovně" + +#: wp-admin/custom-background.php:276 +msgid "Tile Vertically" +msgstr "Opakovat obrázek svisle" + +#: wp-admin/custom-background.php:281 +msgid "Attachment" +msgstr "Upevnění" + +#: wp-admin/custom-background.php:282 +msgid "Background Attachment" +msgstr "Upevnění pozadí vzhledem k dalšímu obsahu webu" + +#: wp-admin/custom-background.php:285 +msgid "Scroll" +msgstr "Pozadí se automaticky natahuje podle délky zobrazeného obsahu webu" + +#: wp-admin/custom-background.php:289 +msgid "Fixed" +msgstr "Pozadí ve velikosti obrazovky zůstává upevněno na stejném místě" + +#: wp-admin/custom-background.php:295 +msgid "Color" +msgstr "Barva" + +#: wp-admin/custom-background.php:296 +msgid "Background Color" +msgstr "Barva pozadí" + +#: wp-admin/custom-background.php:298 +#: wp-admin/custom-header.php:537 +msgid "Select a Color" +msgstr "Vybrat barvu" + +#: wp-admin/custom-background.php:306 +#: wp-admin/custom-header.php:558 +#: wp-admin/options-discussion.php:244 +#: wp-admin/options-general.php:342 +#: wp-admin/options-media.php:136 +#: wp-admin/options-permalink.php:254 +#: wp-admin/options-privacy.php:54 +#: wp-admin/options-reading.php:98 +#: wp-admin/options-writing.php:152 +#: wp-admin/options.php:212 +msgid "Save Changes" +msgstr "Uložit změny" + +#: wp-admin/custom-header.php:76 +#: wp-admin/includes/file.php:18 +msgid "Header" +msgstr "Záhlaví" + +#: wp-admin/custom-header.php:92 +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." +msgstr "Na této stránce si můžete nastavit vlastní záhlaví webu. Stačí pouze nahrát obrázek z počítače, případně ho oříznout, aby splňoval požadované rozměry šablony, a nově připravené záhlaví se začne na webu okamžitě zobrazovat." + +#: wp-admin/custom-header.php:93 +msgid "If you want to discard your custom header and go back to the default included in your theme, click on the buttons to remove the custom image and restore the original header image." +msgstr "Pokud se rozhodnete vytvořené záhlaví zrušit a budete se chtít vrátit k výchozímu nastavení záhlaví, které je definováno v aktuálně používané šabloně, stačí pouze postupně kliknout na tlačítka Odstranit obrázek ze záhlaví a Obnovit původní obrázek v záhlaví." + +#: wp-admin/custom-header.php:94 +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 "Některé šablony obsahují už přímo při instalaci různé obrázky, ze kterých si můžete libovolně vybírat při tvorbě vlastního záhlaví. V tomto případě by se měly obrázky na této stránce zobrazit a pokud se vám bude některý z nich líbit, tak si ho můžete kliknutím myši vybrat a pak už stačí jen použít tlačítko Uložit změny." + +#: wp-admin/custom-header.php:96 +msgid "<a href=\"http://codex.wordpress.org/Appearance_Header_SubPanel\" target=\"_blank\">Documentation on Custom Header</a>" +msgstr "<a href=\"http://codex.wordpress.org/Appearance_Header_SubPanel\" target=\"_blank\">Manuál pro práci se záhlavím</a> (anglicky)" + +#: wp-admin/custom-header.php:426 +#: wp-admin/includes/theme-install.php:188 +msgid "Custom Header" +msgstr "Uživatelské nastavení záhlaví" + +#: wp-admin/custom-header.php:430 +#, php-format +msgid "Header updated. <a href=\"%s\">Visit your site</a> to see how it looks." +msgstr "Záhlaví bylo aktualizováno. Výsledek této změny si můžete prohlédnout přímo <a href=\"%s\">na webu</a>." + +#: wp-admin/custom-header.php:434 +msgid "Header Image" +msgstr "Obrázek v záhlaví" + +#: wp-admin/custom-header.php:463 +msgid "You can upload a custom header image to be shown at the top of your site instead of the default one. On the next screen you will be able to crop the image." +msgstr "Můžete si nahrát z počítače vlastní obrázek, který se pak bude zobrazovat v záhlaví webu místo některého z výchozích obrázků. Na stránce, která se automaticky objeví ihned po nahrání, můžete obrázek ručně oříznout na potřebné rozměry." + +#: wp-admin/custom-header.php:464 +#, php-format +msgid "Images of exactly <strong>%1$d × %2$d pixels</strong> will be used as-is." +msgstr "Obrázky s přesnými rozměry <strong>%1$d × %2$d pixelů</strong> není třeba dále upravovat a zobrazí se v této podobě rovnou na webu." + +#: wp-admin/custom-header.php:484 +msgid "Default Images" +msgstr "Výchozí obrázky" + +#: wp-admin/custom-header.php:486 +msgid "If you don‘t want to upload your own image, you can use one of these cool headers." +msgstr "Pokud nechcete nahrávat žádný vlastní obrázek, můžete si rovnou vybrat některé z těchto populárních obrázkových záhlaví." + +#: wp-admin/custom-header.php:498 +msgid "This will remove the header image. You will not be able to restore any customizations." +msgstr "Tímto tlačítkem odstraníte aktuální obrázek ze záhlaví. Všechny provedené úpravy nastavení budou nenávratně ztraceny." + +#: wp-admin/custom-header.php:499 +msgid "Remove Header Image" +msgstr "Odstranit obrázek ze záhlaví" + +#: wp-admin/custom-header.php:506 +msgid "Reset Image" +msgstr "Obnovit obrázek" + +#: wp-admin/custom-header.php:508 +msgid "This will restore the original header image. You will not be able to restore any customizations." +msgstr "Tímto tlačítkem obnovíte původní obrázek v záhlaví. Žádné dříve provedené úpravy nastavení však nebude možné obnovit." + +#: wp-admin/custom-header.php:509 +msgid "Restore Original Header Image" +msgstr "Obnovit původní obrázek v záhlaví" + +#: wp-admin/custom-header.php:517 +msgid "Header Text" +msgstr "Text v záhlaví" + +#: wp-admin/custom-header.php:521 +msgid "Display Text" +msgstr "Zobrazit text" + +#: wp-admin/custom-header.php:526 +#: wp-admin/link-manager.php:191 +msgid "Yes" +msgstr "Ano" + +#: wp-admin/custom-header.php:532 +msgid "Text Color" +msgstr "Barva textu" + +#: wp-admin/custom-header.php:536 +msgid "If you want to hide header text, add <strong>#blank</strong> as text color." +msgstr "Pokud nechcete zobrazovat v záhlaví žádný text, zadejte do pole pro barvu textu hodnotu <strong>#blank</strong>." + +#: wp-admin/custom-header.php:545 +msgid "Reset Text Color" +msgstr "Nastavit výchozí barvu textu" + +#: wp-admin/custom-header.php:547 +msgid "This will restore the original header text. You will not be able to restore any customizations." +msgstr "Tímto tlačítkem obnovíte původní text v záhlaví. Žádné dříve provedené úpravy nastavení však nebude možné obnovit." + +#: wp-admin/custom-header.php:548 +msgid "Restore Original Header Text" +msgstr "Obnovit původní text v záhlaví" + +#: wp-admin/custom-header.php:575 +msgid "Image Upload Error" +msgstr "Při nahrávání obrázku došlo k chybě" + +#: wp-admin/custom-header.php:605 +#: wp-admin/custom-header.php:662 +msgid "Image could not be processed. Please go back and try again." +msgstr "Obrázek se nepodařilo zpracovat. Vraťte se prosím zpět a zkuste to znovu." + +#: wp-admin/custom-header.php:605 +#: wp-admin/custom-header.php:662 +msgid "Image Processing Error" +msgstr "Při zpracování obrázku došlo k chybě" + +#: wp-admin/custom-header.php:619 +msgid "Crop Header Image" +msgstr "Oříznout obrázek pro záhlaví" + +#: wp-admin/custom-header.php:622 +msgid "Choose the part of the image you want to use as your header." +msgstr "Vyberte část obrázku, kterou budete chtít zobrazit v záhlaví." + +#: wp-admin/custom-header.php:623 +msgid "You need Javascript to choose a part of the image." +msgstr "Abyste mohli vybrat vhodnou část obrázku pro záhlaví, musíte mít v prohlížeči povolen Javascript." + +#: wp-admin/custom-header.php:637 +msgid "Crop and Publish" +msgstr "Oříznout obrázek a zobrazit ho v záhlaví webu" + +#: wp-admin/custom-header.php:710 +msgid "You do not have permission to customize headers." +msgstr "Nemáte dostatečné oprávnění pro úpravy záhlaví." + +#: wp-admin/edit-attachment-rows.php:74 +#: wp-admin/edit-attachment-rows.php:87 +#: wp-admin/edit-attachment-rows.php:214 +#: wp-admin/includes/dashboard.php:501 +#: wp-admin/includes/template.php:100 +#: wp-admin/includes/template.php:445 +#: wp-admin/includes/template.php:1345 +#: wp-admin/includes/template.php:1570 +#: wp-admin/link-manager.php:212 +#: wp-admin/upload.php:403 +#: wp-admin/upload.php:406 +#, php-format +msgid "Edit “%s”" +msgstr "Upravit „%s“" + +#: wp-admin/edit-attachment-rows.php:99 +#: wp-admin/edit-attachment-rows.php:214 +#: wp-admin/edit-form-comment.php:62 +#: wp-admin/edit.php:329 +#: wp-admin/edit.php:430 +#: wp-admin/includes/dashboard.php:610 +#: wp-admin/includes/meta-boxes.php:83 +#: wp-admin/includes/meta-boxes.php:129 +#: wp-admin/includes/meta-boxes.php:182 +#: wp-admin/includes/post.php:1123 +#: wp-admin/includes/template.php:102 +#: wp-admin/includes/template.php:448 +#: wp-admin/includes/template.php:1352 +#: wp-admin/includes/template.php:1447 +#: wp-admin/includes/template.php:1574 +#: wp-admin/includes/template.php:1828 +#: wp-admin/includes/template.php:2123 +#: wp-admin/includes/widgets.php:177 +#: wp-admin/link-manager.php:214 +#: wp-admin/plugins.php:588 +#: wp-admin/upload.php:418 +#: wp-includes/script-loader.php:287 +#: wp-includes/script-loader.php:315 +msgid "Edit" +msgstr "Upravit" + +#: wp-admin/edit-attachment-rows.php:102 +#: wp-admin/edit-comments.php:332 +#: wp-admin/edit-comments.php:432 +#: wp-admin/edit.php:327 +#: wp-admin/edit.php:428 +#: wp-admin/includes/template.php:1357 +#: wp-admin/includes/template.php:1579 +#: wp-admin/includes/template.php:2113 +#: wp-admin/upload.php:304 +#: wp-admin/upload.php:481 +#: wp-includes/post-template.php:1174 +msgid "Restore" +msgstr "Obnovit" + +#: wp-admin/edit-attachment-rows.php:104 +#: wp-admin/includes/template.php:1359 +#: wp-admin/includes/template.php:1581 +#: wp-admin/upload.php:421 +msgid "Trash" +msgstr "Odstranit" + +#: wp-admin/edit-attachment-rows.php:107 +#: wp-admin/edit-comments.php:337 +#: wp-admin/edit-comments.php:435 +#: wp-admin/edit-form-comment.php:71 +#: wp-admin/edit.php:331 +#: wp-admin/edit.php:432 +#: wp-admin/includes/dashboard.php:614 +#: wp-admin/includes/media.php:1271 +#: wp-admin/includes/meta-boxes.php:198 +#: wp-admin/includes/template.php:1361 +#: wp-admin/includes/template.php:1583 +#: wp-admin/includes/template.php:2117 +#: wp-admin/upload.php:306 +#: wp-admin/upload.php:424 +#: wp-admin/upload.php:483 +msgid "Delete Permanently" +msgstr "Smazat" + +#: wp-admin/edit-attachment-rows.php:112 +#: wp-admin/includes/template.php:1367 +#: wp-admin/includes/template.php:1589 +#: wp-admin/upload.php:426 +#, php-format +msgid "View “%s”" +msgstr "Zobrazit „%s“" + +#: wp-admin/edit-attachment-rows.php:112 +#: wp-admin/includes/template.php:1367 +#: wp-admin/includes/template.php:1441 +#: wp-admin/includes/template.php:1589 +#: wp-admin/upload.php:426 +msgid "View" +msgstr "Zobrazit" + +#: wp-admin/edit-attachment-rows.php:144 +#: wp-admin/includes/template.php:1412 +msgid "No Tags" +msgstr "Žádné štítky" + +#: wp-admin/edit-attachment-rows.php:158 +#: wp-admin/includes/template.php:1308 +#: wp-admin/includes/template.php:1537 +#: wp-admin/upload.php:440 +msgid "Unpublished" +msgstr "Nepublikováno" + +#: wp-admin/edit-attachment-rows.php:160 +#: wp-admin/includes/dashboard.php:501 +#: wp-admin/includes/template.php:1311 +#: wp-admin/includes/template.php:1540 +#: wp-admin/upload.php:442 +msgid "Y/m/d g:i:s A" +msgstr "j.n.Y, G:i" + +#: wp-admin/edit-attachment-rows.php:165 +#: wp-admin/upload.php:447 +#, php-format +msgid "%s from now" +msgstr "za %s" + +#: wp-admin/edit-attachment-rows.php:167 +#: wp-admin/includes/plugin-install.php:560 +#: wp-admin/includes/template.php:1318 +#: wp-admin/includes/template.php:1547 +#: wp-admin/includes/template.php:2023 +#: wp-admin/includes/theme-install.php:325 +#: wp-admin/upload.php:449 +#, php-format +msgid "%s ago" +msgstr "před %s" + +#: wp-admin/edit-attachment-rows.php:187 +msgid "(Unattached)" +msgstr "(Soubor zatím nebyl přiřazen)" + +#: wp-admin/edit-attachment-rows.php:188 +#: wp-admin/upload.php:428 +msgid "Attach" +msgstr "Přiřadit k příspěvku / stránce" + +#: wp-admin/edit-attachment-rows.php:200 +#: wp-admin/includes/template.php:1422 +#: wp-admin/includes/template.php:1612 +#: wp-admin/includes/template.php:2194 +#, php-format +msgid "%s pending" +msgstr "čekající na schválení: %s" + +#. translators: comment count link +#: wp-admin/edit-attachment-rows.php:203 +#: wp-admin/includes/template.php:1425 +#: wp-admin/includes/template.php:1615 +#: wp-admin/includes/template.php:2197 +msgctxt "comment count" +msgid "0" +msgstr "0" + +#. translators: comment count link +#: wp-admin/edit-attachment-rows.php:203 +#: wp-admin/includes/template.php:1425 +#: wp-admin/includes/template.php:1615 +#: wp-admin/includes/template.php:2197 +msgctxt "comment count" +msgid "1" +msgstr "1" + +#. translators: comment count link: % will be substituted by comment count +#: wp-admin/edit-attachment-rows.php:203 +#: wp-admin/includes/template.php:1425 +#: wp-admin/includes/template.php:1615 +#: wp-admin/includes/template.php:2197 +msgctxt "comment count" +msgid "%" +msgstr "%" + +#: wp-admin/edit-attachment-rows.php:215 +msgid "Get permalink" +msgstr "Získat trvalý odkaz" + +#: wp-admin/edit-attachment-rows.php:234 +msgid "No media attachments found." +msgstr "Nebyly nalezeny žádné mediální soubory." + +#: wp-admin/edit-comments.php:104 +#, php-format +msgid "Comments on “%s”" +msgstr "Komentáře k příspěvku „%s“" + +#: wp-admin/edit-comments.php:106 +#: wp-admin/edit-comments.php:351 +#: wp-admin/edit-form-advanced.php:146 +#: wp-admin/includes/file.php:15 +#: wp-admin/includes/template.php:1058 +#: wp-admin/includes/template.php:3247 +#: wp-admin/includes/template.php:3376 +#: wp-content/plugins/akismet/akismet.php:807 +#: wp-includes/theme-compat/comments-popup.php:33 +msgid "Comments" +msgstr "Komentáře" + +#: wp-admin/edit-comments.php:108 +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 "Komentáře, které vám čtenáři vkládají na web, můžete spravovat podobným způsobem, jako to děláte s příspěvky a dalším obsahem webu. Zobrazení výpisu komentářů i jeho filtrování na této stránce je opět možné libovolně přizpůsobit stejným způsobem jako např. u příspěvků. Pracovat s jednotlivými komentáři lze pak také jednoduše pomocí textových odkazů, které se objeví po přejetí kurzorem myši nad řádkem s konkrétním komentářem, a využívat můžete také hromadné úpravy." + +#: wp-admin/edit-comments.php:109 +msgid "A yellow row means the comment is waiting for you to moderate it." +msgstr "Pokud je nějaký řádek s komentářem žlutě podbarven, znamená to, že tento komentář ještě nebyl moderován." + +#: wp-admin/edit-comments.php:110 +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 "V prvním sloupci „Autor“ je kromě jména autora komentáře, jeho emailové adresy a URL adresy jeho webu uvedena také IP adresa počítače, odkud byl komentář odeslán. Kliknutím na odkaz s IP adresou si můžete ihned zobrazit výpis všech komentářů, které byly z této IP adresy odeslány na váš web." + +#: wp-admin/edit-comments.php:111 +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." +msgstr "Další sloupec „Komentář“ obsahuje nejen samotný text komentáře, ale nad ním vidíte i datum a přesný čas, kdy byl komentář na web vložen. Kliknutím na odkaz s datem/časem pak budete přesměrováni přímo na konkrétní zobrazení tohoto komentáře na webu." + +#: wp-admin/edit-comments.php:112 +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 “#” permalink symbol below leads to that post on your live site. The small bubble with the number in it shows how many 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 "Sloupec „Reakce na příspěvek“ pak obsahuje rovnou tři zajímavé informace. První textový odkaz zobrazuje název příspěvku, ke kterému byl komentář přidán, a kliknutím na něj budete přesměrováni na stránku v administraci, kde budete moci tento příspěvek upravit. Dalším odkazem je znak „#“, který vás přesměruje na konkrétní zobrazení vybraného komentáře na webu, kde si ho můžete prohlédnout v dalších souvislostech. A malá ikonka s číslem zase informuje o počtu všech schválených komentářů k danému příspěvku. Pokud je ikonka šedivá, tak jste už všechny související komentáře moderovali, zatímco když má ikonka barvu modrou, tak na vás ve frontě ke schválení u daného příspěvku ještě nějaké komentáře čekají. Kliknutím na ikonku pak na stránce zobrazíte pouze komentáře, které se vztahují k vybranému příspěvku." + +#: wp-admin/edit-comments.php:113 +msgid "Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link below to learn more." +msgstr "Mnoho lidí na svém webu často využívá výhody klávesových zkratek pro rychlejší a efektivnější moderování komentářů. Pokud se chcete o této možnosti dozvědět další podrobnosti, použijte prosím odkaz níže." + +#: wp-admin/edit-comments.php:116 +msgid "<a href=\"http://codex.wordpress.org/Comment_Spam\" target=\"_blank\">Comment Spam Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Comment_Spam\" target=\"_blank\">Komentářový spam</a> (anglicky)" + +#: wp-admin/edit-comments.php:117 +msgid "<a href=\"http://codex.wordpress.org/Keyboard_Shortcuts\" target=\"_blank\">Keyboard Shortcuts Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Keyboard_Shortcuts\" target=\"_blank\">Přehled klávesových zkratek pro práci s WordPressem</a> (anglicky)" + +#: wp-admin/edit-comments.php:137 +#: wp-admin/edit-link-categories.php:74 +#: wp-admin/edit-tags.php:219 +#: wp-admin/edit.php:202 +#: wp-admin/link-manager.php:88 +#: wp-admin/upload.php:183 +#: wp-admin/users.php:376 +#, php-format +msgid "Search results for “%s”" +msgstr "Výsledky vyhledávání „%s“" + +#: wp-admin/edit-comments.php:167 +#, php-format +msgid "%s comment approved" +msgid_plural "%s comments approved" +msgstr[0] "%s komentář schválen" +msgstr[1] "%s komentáře schváleny" +msgstr[2] "%s komentářů schváleno" + +#: wp-admin/edit-comments.php:171 +#, php-format +msgid "%s comment marked as spam." +msgid_plural "%s comments marked as spam." +msgstr[0] "%s komentář byl označen jako spam." +msgstr[1] "%s komentáře byly označeny jako spam." +msgstr[2] "%s komentářů bylo označeno jako spam." + +#: wp-admin/edit-comments.php:171 +#: wp-admin/edit-comments.php:179 +#: wp-admin/edit.php:234 +#: wp-admin/includes/image-edit.php:56 +#: wp-admin/includes/media.php:1280 +#: wp-admin/includes/template.php:2308 +#: wp-admin/includes/template.php:2311 +#: wp-admin/upload.php:206 +#: wp-admin/upload.php:218 +#: wp-includes/js/tinymce/langs/wp-langs.php:213 +#: wp-includes/js/tinymce/wp-mce-help.php:209 +msgid "Undo" +msgstr "Zpět" + +#: wp-admin/edit-comments.php:175 +#, php-format +msgid "%s comment restored from the spam" +msgid_plural "%s comments restored from the spam" +msgstr[0] "%s komentář byl označen, že není spam" +msgstr[1] "%s komentáře byly označeny, že nejsou spam" +msgstr[2] "%s komentářů bylo označeno, že nejsou spam" + +#: wp-admin/edit-comments.php:179 +#, php-format +msgid "%s comment moved to the Trash." +msgid_plural "%s comments moved to the Trash." +msgstr[0] "%s komentář byl přesunut do koše." +msgstr[1] "%s komentáře byly přesunuty do koše." +msgstr[2] "%s komentářů bylo přesunuto do koše." + +#: wp-admin/edit-comments.php:183 +#, php-format +msgid "%s comment restored from the Trash" +msgid_plural "%s comments restored from the Trash" +msgstr[0] "%s komentář byl obnoven z koše" +msgstr[1] "%s komentáře byly obnoveny z koše" +msgstr[2] "%s komentářů bylo obnoveno z koše" + +#: wp-admin/edit-comments.php:186 +#, php-format +msgid "%s comment permanently deleted" +msgid_plural "%s comments permanently deleted" +msgstr[0] "%s komentář byl nenávratně smazán" +msgstr[1] "%s komentáře byly nenávratně smazány" +msgstr[2] "%s komentářů bylo nenávratně smazáno" + +#: wp-admin/edit-comments.php:191 +msgid "This comment is already approved." +msgstr "Tento komentář už byl schválen." + +#: wp-admin/edit-comments.php:191 +#: wp-admin/edit-comments.php:197 +#: wp-admin/includes/dashboard.php:610 +#: wp-admin/includes/template.php:2123 +#: wp-includes/link-template.php:916 +msgid "Edit comment" +msgstr "Upravit komentář" + +#: wp-admin/edit-comments.php:194 +msgid "This comment is already in the Trash." +msgstr "Tento komentář už je v koši." + +#: wp-admin/edit-comments.php:194 +msgid "View Trash" +msgstr "Zobrazit koš" + +#: wp-admin/edit-comments.php:197 +msgid "This comment is already marked as spam." +msgstr "Tento komentář už byl označen jako spam." + +#: wp-admin/edit-comments.php:215 +msgctxt "comments" +msgid "All" +msgid_plural "All" +msgstr[0] "Celkem" +msgstr[1] "Celkem" +msgstr[2] "Celkem" + +#: wp-admin/edit-comments.php:216 +#, php-format +msgid "Pending <span class=\"count\">(<span class=\"pending-count\">%s</span>)</span>" +msgid_plural "Pending <span class=\"count\">(<span class=\"pending-count\">%s</span>)</span>" +msgstr[0] "Čekající na schválení <span class=\"count\">(<span class=\"pending-count\">%s</span>)</span>" +msgstr[1] "Čekající na schválení <span class=\"count\">(<span class=\"pending-count\">%s</span>)</span>" +msgstr[2] "Čekajících na schválení <span class=\"count\">(<span class=\"pending-count\">%s</span>)</span>" + +#: wp-admin/edit-comments.php:217 +msgid "Approved" +msgid_plural "Approved" +msgstr[0] "Schválený" +msgstr[1] "Schválené" +msgstr[2] "Schválených" + +#: wp-admin/edit-comments.php:218 +#, php-format +msgid "Spam <span class=\"count\">(<span class=\"spam-count\">%s</span>)</span>" +msgid_plural "Spam <span class=\"count\">(<span class=\"spam-count\">%s</span>)</span>" +msgstr[0] "Spam <span class=\"count\">(<span class=\"spam-count\">%s</span>)</span>" +msgstr[1] "Spam <span class=\"count\">(<span class=\"spam-count\">%s</span>)</span>" +msgstr[2] "Spam <span class=\"count\">(<span class=\"spam-count\">%s</span>)</span>" + +#: wp-admin/edit-comments.php:219 +#, php-format +msgid "Trash <span class=\"count\">(<span class=\"trash-count\">%s</span>)</span>" +msgid_plural "Trash <span class=\"count\">(<span class=\"trash-count\">%s</span>)</span>" +msgstr[0] "Koš <span class=\"count\">(<span class=\"trash-count\">%s</span>)</span>" +msgstr[1] "Koš <span class=\"count\">(<span class=\"trash-count\">%s</span>)</span>" +msgstr[2] "Koš <span class=\"count\">(<span class=\"trash-count\">%s</span>)</span>" + +#: wp-admin/edit-comments.php:256 +#: wp-admin/edit-comments.php:258 +msgid "Search Comments" +msgstr "Hledat komentáře" + +#: wp-admin/edit-comments.php:307 +#: wp-admin/edit.php:390 +#: wp-admin/includes/user.php:754 +#: wp-admin/plugins.php:491 +#: wp-admin/themes.php:137 +#: wp-admin/upload.php:291 +#, php-format +msgid "Displaying %s–%s of %s" +msgstr "Zobrazení %s. – %s. z celkem %s" + +#: wp-admin/edit-comments.php:321 +#: wp-admin/edit-comments.php:421 +#: wp-admin/edit-link-categories.php:120 +#: wp-admin/edit-link-categories.php:174 +#: wp-admin/edit-tags.php:283 +#: wp-admin/edit-tags.php:320 +#: wp-admin/edit.php:325 +#: wp-admin/edit.php:426 +#: wp-admin/link-manager.php:125 +#: wp-admin/link-manager.php:272 +#: wp-admin/plugins.php:653 +#: wp-admin/upload.php:302 +#: wp-admin/upload.php:479 +#: wp-admin/users.php:432 +#: wp-admin/users.php:505 +msgid "Bulk Actions" +msgstr "Hromadné úpravy" + +#: wp-admin/edit-comments.php:323 +#: wp-admin/edit-comments.php:423 +#: wp-admin/includes/dashboard.php:609 +#: wp-admin/includes/template.php:2100 +#: wp-admin/includes/template.php:2105 +msgid "Unapprove" +msgstr "Odmítnout" + +#: wp-admin/edit-comments.php:326 +#: wp-admin/edit-comments.php:426 +#: wp-admin/includes/dashboard.php:608 +#: wp-admin/includes/template.php:2102 +#: wp-admin/includes/template.php:2104 +msgid "Approve" +msgstr "Schválit" + +#: wp-admin/edit-comments.php:329 +#: wp-admin/edit-comments.php:429 +msgctxt "comment" +msgid "Mark as Spam" +msgstr "Označit jako spam" + +#: wp-admin/edit-comments.php:334 +#: wp-admin/edit-comments.php:437 +#: wp-admin/includes/template.php:2111 +msgctxt "comment" +msgid "Not Spam" +msgstr "Není spam" + +#: wp-admin/edit-comments.php:339 +#: wp-admin/edit-comments.php:439 +#: wp-admin/edit-form-comment.php:71 +#: wp-admin/edit.php:333 +#: wp-admin/edit.php:434 +#: wp-admin/includes/media.php:1279 +#: wp-admin/includes/meta-boxes.php:200 +#: wp-admin/upload.php:308 +#: wp-admin/upload.php:485 +msgid "Move to Trash" +msgstr "Odstranit" + +#: wp-admin/edit-comments.php:342 +#: wp-admin/edit-comments.php:442 +#: wp-admin/edit-link-categories.php:123 +#: wp-admin/edit-link-categories.php:177 +#: wp-admin/edit-tags.php:286 +#: wp-admin/edit-tags.php:323 +#: wp-admin/edit.php:336 +#: wp-admin/edit.php:437 +#: wp-admin/includes/template.php:3795 +#: wp-admin/link-manager.php:128 +#: wp-admin/link-manager.php:275 +#: wp-admin/plugins.php:670 +#: wp-admin/upload.php:313 +#: wp-admin/upload.php:490 +#: wp-admin/users.php:439 +#: wp-admin/users.php:511 +#: wp-includes/js/tinymce/langs/wp-langs.php:27 +msgid "Apply" +msgstr "Použít" + +#: wp-admin/edit-comments.php:348 +msgid "Show all comment types" +msgstr "Zobrazit všechny typy komentářů" + +#: wp-admin/edit-comments.php:352 +#: wp-admin/includes/template.php:1067 +msgid "Pings" +msgstr "Pingbacky" + +#: wp-admin/edit-comments.php:362 +#: wp-admin/edit.php:379 +#: wp-admin/link-manager.php:149 +#: wp-admin/upload.php:347 +msgid "Filter" +msgstr "Filtrovat" + +#: wp-admin/edit-comments.php:371 +#: wp-admin/edit-comments.php:445 +msgid "Empty Spam" +msgstr "Hromadně smazat spam" + +#: wp-admin/edit-comments.php:373 +#: wp-admin/edit-comments.php:447 +#: wp-admin/edit.php:383 +#: wp-admin/edit.php:439 +#: wp-admin/upload.php:358 +#: wp-admin/upload.php:493 +msgid "Empty Trash" +msgstr "Vysypat koš" + +#: wp-admin/edit-comments.php:471 +msgid "No comments awaiting moderation… yet." +msgstr "Žádné komentáře zatím nečekají na schválení." + +#: wp-admin/edit-comments.php:476 +msgid "No comments found." +msgstr "Nebyly nalezeny žádné komentáře." + +#: wp-admin/edit-form-advanced.php:39 +#, php-format +msgid "Post updated. <a href=\"%s\">View post</a>" +msgstr "Příspěvek byl aktualizován. <a href=\"%s\">Zobrazit příspěvek</a>" + +#: wp-admin/edit-form-advanced.php:40 +#: wp-admin/edit-form-advanced.php:56 +msgid "Custom field updated." +msgstr "Uživatelské pole bylo aktualizováno." + +#: wp-admin/edit-form-advanced.php:41 +#: wp-admin/edit-form-advanced.php:57 +msgid "Custom field deleted." +msgstr "Uživatelské pole bylo smazáno." + +#: wp-admin/edit-form-advanced.php:42 +msgid "Post updated." +msgstr "Příspěvek byl aktualizován." + +#. translators: %s: date and time of the revision +#: wp-admin/edit-form-advanced.php:44 +#, php-format +msgid "Post restored to revision from %s" +msgstr "Byla obnovena následující verze příspěvku %s" + +#: wp-admin/edit-form-advanced.php:45 +#, php-format +msgid "Post published. <a href=\"%s\">View post</a>" +msgstr "Příspěvek byl publikován. <a href=\"%s\">Zobrazit příspěvek</a>" + +#: wp-admin/edit-form-advanced.php:46 +#: wp-admin/sidebar.php:100 +msgid "Post saved." +msgstr "Příspěvek byl aktualizován." + +#: wp-admin/edit-form-advanced.php:47 +#, php-format +msgid "Post submitted. <a target=\"_blank\" href=\"%s\">Preview post</a>" +msgstr "Příspěvek byl odeslán ke schválení. <a target=\"_blank\" href=\"%s\">Zobrazit náhled příspěvku</a>" + +#: wp-admin/edit-form-advanced.php:48 +#, php-format +msgid "Post scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Preview post</a>" +msgstr "Příspěvek bude automaticky publikován: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Zobrazit náhled příspěvku</a>" + +#. translators: Publish box date format, see http://php.net/date +#. translators: Publish box date formt, see http://php.net/date +#: wp-admin/edit-form-advanced.php:50 +#: wp-admin/edit-form-advanced.php:63 +#: wp-admin/edit-form-comment.php:58 +#: wp-admin/includes/meta-boxes.php:159 +msgid "M j, Y @ G:i" +msgstr "j.n.Y, G:i" + +#: wp-admin/edit-form-advanced.php:51 +#, php-format +msgid "Post draft updated. <a target=\"_blank\" href=\"%s\">Preview post</a>" +msgstr "Koncept příspěvku byl uložen. <a target=\"_blank\" href=\"%s\">Zobrazit náhled příspěvku</a>" + +#: wp-admin/edit-form-advanced.php:55 +#, php-format +msgid "Page updated. <a href=\"%s\">View page</a>" +msgstr "Stránka byla aktualizována. <a href=\"%s\">Zobrazit stránku</a>" + +#: wp-admin/edit-form-advanced.php:58 +msgid "Page updated." +msgstr "Stránka byla aktualizována." + +#: wp-admin/edit-form-advanced.php:59 +#, php-format +msgid "Page restored to revision from %s" +msgstr "Byla obnovena verze stránky %s" + +#: wp-admin/edit-form-advanced.php:60 +#, php-format +msgid "Page published. <a href=\"%s\">View page</a>" +msgstr "Stránka byla publikována. <a href=\"%s\">Zobrazit stránku</a>" + +#: wp-admin/edit-form-advanced.php:61 +msgid "Page saved." +msgstr "Stránka byla aktualizována." + +#: wp-admin/edit-form-advanced.php:62 +#, php-format +msgid "Page submitted. <a target=\"_blank\" href=\"%s\">Preview page</a>" +msgstr "Stránka byla odeslána ke schválení. <a target=\"_blank\" href=\"%s\">Zobrazit náhled stránky</a>" + +#: wp-admin/edit-form-advanced.php:63 +#, php-format +msgid "Page scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Preview page</a>" +msgstr "Stránka bude automaticky publikována: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Zobrazit náhled stránky</a>" + +#: wp-admin/edit-form-advanced.php:64 +#, php-format +msgid "Page draft updated. <a target=\"_blank\" href=\"%s\">Preview page</a>" +msgstr "Koncept stránky byl uložen. <a target=\"_blank\" href=\"%s\">Zobrazit náhled stránky</a>" + +#: wp-admin/edit-form-advanced.php:97 +#, php-format +msgid "There is an autosave of this post that is more recent than the version below. <a href=\"%s\">View the autosave</a>" +msgstr "Existuje automaticky uložená verze, která je novější než aktuálně používaná verze. <a href=\"%s\">Zobrazit automaticky uloženou verzi</a>" + +#: wp-admin/edit-form-advanced.php:109 +#: wp-admin/includes/dashboard.php:466 +#: wp-admin/includes/meta-boxes.php:215 +#: wp-admin/includes/meta-boxes.php:216 +#: wp-admin/press-this.php:469 +#: wp-admin/press-this.php:474 +#: wp-admin/sidebar.php:121 +#: wp-includes/script-loader.php:293 +msgid "Publish" +msgstr "Publikovat" + +#: wp-admin/edit-form-advanced.php:126 +msgid "Page Attributes" +msgstr "Vlastnosti stránky" + +#: wp-admin/edit-form-advanced.php:126 +msgid "Attributes" +msgstr "Vlastnosti stránky" + +#: wp-admin/edit-form-advanced.php:130 +msgid "Featured Image" +msgstr "Náhledový obrázek" + +#: wp-admin/edit-form-advanced.php:133 +#: wp-admin/includes/meta-boxes.php:359 +#: wp-includes/post.php:4350 +msgid "Excerpt" +msgstr "Stručný výpis příspěvku" + +#: wp-admin/edit-form-advanced.php:136 +msgid "Send Trackbacks" +msgstr "Odeslat trackbacky" + +#: wp-admin/edit-form-advanced.php:139 +msgid "Custom Fields" +msgstr "Uživatelská pole" + +#: wp-admin/edit-form-advanced.php:143 +#: wp-admin/includes/dashboard.php:290 +#: wp-admin/menu.php:221 +msgid "Discussion" +msgstr "Komentáře" + +#: wp-admin/edit-form-advanced.php:149 +#: wp-admin/includes/meta-boxes.php:491 +#: wp-admin/includes/template.php:45 +#: wp-admin/includes/template.php:722 +#: wp-admin/includes/template.php:732 +#: wp-admin/includes/template.php:742 +#: wp-admin/includes/template.php:914 +msgid "Slug" +msgstr "Název v URL" + +#: wp-admin/edit-form-advanced.php:160 +#: wp-admin/revision.php:97 +#: wp-admin/revision.php:123 +#: wp-includes/post.php:58 +msgid "Revisions" +msgstr "Starší verze" + +#: wp-admin/edit-form-advanced.php:171 +msgid "The title field and the big Post Editing Area are fixed in place, but you can reposition all the other boxes that allow you to add metadata to your post using drag and drop, and can minimize or expand them by clicking the title bar of the box. You can also hide any of the boxes by using the Screen Options tab, where you can also choose a 1- or 2-column layout for this screen." +msgstr "Základní pole pro zadávání názvu a samotného textu příspěvku (oblast editoru) jsou sice umístěna napevno, ale všechny ostatní sekce pro vytváření a správu dodatečných informací k příspěvku si můžete na stránce libovolně rozmístit uchopením a tažením lišty s názvem sekce pomocí kurzoru myši, nebo je kliknutím rozbalit/sbalit. Vybrané sekce můžete také zcela skrýt pomocí zaškrtávacích polí v záložce „Nastavení zobrazených informací“, nebo si přizpůsobit rozmístění informací na stránce volbou počtu sloupců." + +#: wp-admin/edit-form-advanced.php:172 +msgid "<strong>Title</strong> - Enter a title for your post. After you enter a title, you’ll see the permalink below, which you can edit." +msgstr "<strong>Název</strong> - Do úvodního pole můžete vložit nějaký výstižný název vašeho příspěvku. Jakmile ho zadáte, ihned se vám pod ním menším písmem zobrazí automaticky vygenerovaný trvalý odkaz, který můžete také upravovat." + +#: wp-admin/edit-form-advanced.php:173 +msgid "<strong>Post editor</strong> - Enter the text for your post. 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 post text. You can insert media files by clicking the icons above the post editor and following the directions." +msgstr "<strong>Text příspěvku</strong> - Hlavní pole pro psaní konkrétního znění vašeho příspěvku. Můžete využívat dva způsoby práce s textem, mezi kterými přepínáte kliknutím na příslušnou záložku (Editor a HTML). Vizuální editor (tzv. WYSIWYG) vám umožňuje vytvářet texty na web i bez znalosti HTML a vše, co si v editoru pomocí ikonek naklikáte, tak se to pak bude v této podobě zobrazovat i na webu (samozřejmě s odlišnostmi podle definovaných kaskádových stylů ve vaší šabloně). Kliknutím na poslední ikonu v první řadě editoru se vám objeví další rozšířené možnosti (druhá řada ovládacích tlačítek). Pokud využijete HTML podobu editoru, tak můžete do příspěvku kromě textu psát rovnou vlastní HTML značky. Dále můžete do příspěvku také vkládat různé mediální soubory, stačí kliknout na příslušnou ikonku nad editorem a pak už jen následovat další instrukce." + +#: wp-admin/edit-form-advanced.php:174 +msgid "<strong>Publish</strong> - 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 "<strong>Publikovat</strong> - Tato sekce obsahuje základní možnosti nastavení pro publikování napsaného textu na webu. U jednotlivých nabídek Stav, Viditelnost a Publikovat (okamžitě) můžete kliknutím na odkaz Upravit odkrýt další možnosti nastavení. Viditelnost umožňuje např. ochranu příspěvku zadaným heslem nebo naopak jeho zvýraznění na úvodní stránce. Publikovat (okamžitě) pak dovoluje posunout dobu zveřejnění do minulosti i budoucnosti, takže si můžete vydání příspěvku zatím jen naplánovat, nebo ho naopak opatřit dřívějším datem." + +#: wp-admin/edit-form-advanced.php:175 +msgid "<strong>Featured Image</strong> - 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 "<strong>Náhledový obrázek</strong> - Zde můžete zvolit obrázek, který bude spojen s příspěvkem, ale nebude vložen přímo v jeho textu. Tato možnost je užitečná zejména v případě, kdy vaše šablona využívá náhledové obrázky pro graficky přehledné zobrazení příspěvků s ilustračními obrázky na úvodní stránce nebo vlastní proměnlivé záhlaví, atd." + +#: wp-admin/edit-form-advanced.php:176 +msgid "<strong>Send Trackbacks</strong> - 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 "<strong>Odeslat trackbacky</strong> - Trackbacky jsou způsobem, jak upozornit jiný web v případě, že na něj v příspěvku odkazujete. Zadejte do příslušného pole konkrétní URL adresu(y), na kterou chcete trackback odeslat, a po zveřejnění příspěvku vše automaticky proběhne. Pokud odkazujete na jiný web fungující ve WordPressu, tak bude upozorněn automaticky pomocí pingbacku a tuto sekci nemusíte vůbec používat." + +#: wp-admin/edit-form-advanced.php:177 +msgid "<strong>Discussion</strong> - 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 "<strong>Komentáře</strong> - Můžete zakázat/povolit komentáře a pingbacky u konkrétního příspěvku. A pokud u tohoto příspěvku už nějaké komentáře jsou, tak je tady uvidíte a můžete je odtud i přímo moderovat." + +#: wp-admin/edit-form-advanced.php:178 +#, php-format +msgid "You can also create posts with the <a href=\"%s\">Press This bookmarklet</a>." +msgstr "Vytvářet příspěvky můžete také pomocí nástroje <a href=\"%s\">Kliknout a publikovat</a>, což je akční záložka (bookmarklet) pro váš prohlížeč." + +#: wp-admin/edit-form-advanced.php:180 +msgid "<a href=\"http://codex.wordpress.org/Writing_Posts\" target=\"_blank\">Documentation on Writing Posts</a>" +msgstr "<a href=\"http://codex.wordpress.org/Writing_Posts\" target=\"_blank\">Manuál pro vytváření příspěvků</a> (anglicky)" + +#: wp-admin/edit-form-advanced.php:184 +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 "Stránky jsou podobné příspěvkům v tom, že mají svůj název, pole s editorem pro psaní konkrétního textu a obsahují i další související informace, ale odlišují se zejména tím, že nejsou součástí hlavního chronologického sledu publikovaných příspěvků, ale spíše stálými (statickými) texty na webu. Stránky nejsou zařazovány do rubrik a nepoužívají se pro ně ani štítky, ale mohou mít alespoň vlastní hierarchii. Můžete tak označovat některé stránky jako podřazené vůči jiné stránce, a to jednoduchým výběrem z menu „Nadřazená stránka“, čímž vlastně vytvoříte určitou skupinu souvisejících stránek." + +#: wp-admin/edit-form-advanced.php:185 +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. The Page editor mostly works the same Post editor, but there are some Page-specific features in the Page Attributes box:" +msgstr "Vytvoření stránky je stejně jednoduché jako vytvoření příspěvku a celý formulář si můžete také podobně přizpůsobit, např. uchopením lišty s názvem konkrétní sekce a jejím tažení na vybrané místo. Dále můžete využít záložku Nastavení zobrazených informací a jednotlivé sekce libovolně sbalovat/rozbalovat. Samotné hlavní pole s editorem pro psaní konkrétního textu funguje opět stejným způsobem, jediný rozdíl je ve speciální sekci s názvem Vlastnosti stránky:" + +#: wp-admin/edit-form-advanced.php:186 +msgid "<strong>Parent</strong> - 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 "<strong>Nadřazená stránka</strong> - Jednotlivé stránky můžete řadit do vlastní hierarchické struktury, kdy budete mít například hlavní stránku „O mně“, ke které vytvoříte související podstránky „Životopis“, „Zájmy“ a „Rodina“. Neexistuje žádné omezení pro úroveň zanoření jednotlivých stránek." + +#: wp-admin/edit-form-advanced.php:187 +msgid "<strong>Template</strong> - 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 "<strong>Šablona stránky</strong> - Některé šablony ve WordPressu používají pro vybrané stránky speciální šablony stránek. Tímto způsobem lze k vybraným stránkám přidávat různé další funkce nebo upravovat jejich vzhled, aniž by se přitom změnily i ostatní stránky. Pokud nějaké takové šablony stránek ve vaší šabloně existují, budou vám nabídnuty v tomto rozevíracím menu." + +#: wp-admin/edit-form-advanced.php:188 +msgid "<strong>Order</strong> - Pages are usually ordered alphabetically, but you can choose your own order by entering a number (1 for first, etc.) in this field." +msgstr "<strong>Pořadí</strong> - Stránky jsou většinou řazeny podle abecedy, ale pokud chcete, tak můžete jejich pořadí v tomto poli upravit vlastním číslováním, např. zadáním čísla 1 pro první stránku v pořadí, atd." + +#: wp-admin/edit-form-advanced.php:190 +msgid "<a href=\"http://codex.wordpress.org/Pages_Add_New_SubPanel\" target=\"_blank\">Page Creation Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Pages_Add_New_SubPanel\" target=\"_blank\">Manuál pro vytváření stránek</a> (anglicky)" + +#: wp-admin/edit-form-advanced.php:241 +msgid "Enter title here" +msgstr "Zadejte název" + +#: wp-admin/edit-form-advanced.php:249 +msgid "Get Shortlink" +msgstr "Získat zkrácený odkaz" + +#: wp-admin/edit-form-advanced.php:282 +#, php-format +msgid "Last edited by %1$s on %2$s at %3$s" +msgstr "Poslední úpravy provedl %1$s (%2$s v %3$s)" + +#: wp-admin/edit-form-advanced.php:284 +#, php-format +msgid "Last edited on %1$s at %2$s" +msgstr "Poslední úpravy proběhly %1$s v %2$s" + +#: wp-admin/edit-form-comment.php:17 +#, php-format +msgid "Editing Comment # %s" +msgstr "Úprava komentáře # %s" + +#: wp-admin/edit-form-comment.php:42 +msgid "View Comment" +msgstr "Zobrazit tento komentář" + +#. translators: comment type radio button +#. translators: comment status +#: wp-admin/edit-form-comment.php:50 +#: wp-includes/comment.php:319 +msgctxt "adjective" +msgid "Approved" +msgstr "Schválený" + +#. translators: comment type radio button +#: wp-admin/edit-form-comment.php:51 +msgctxt "adjective" +msgid "Pending" +msgstr "Čekající na schválení" + +#. translators: comment type radio button +#. translators: comment status +#: wp-admin/edit-form-comment.php:52 +#: wp-includes/comment.php:321 +msgctxt "adjective" +msgid "Spam" +msgstr "Spam" + +#: wp-admin/edit-form-comment.php:59 +#, php-format +msgid "Submitted on: <b>%1$s</b>" +msgstr "Odesláno: <b>%1$s</b>" + +#: wp-admin/edit-form-comment.php:74 +#: wp-admin/includes/template.php:2274 +msgid "Update Comment" +msgstr "Aktualizovat komentář" + +#: wp-admin/edit-form-comment.php:91 +#: wp-includes/js/tinymce/langs/wp-langs.php:271 +msgid "Name:" +msgstr "Jméno:" + +#: wp-admin/edit-form-comment.php:98 +#, php-format +msgid "E-mail (%s):" +msgstr "Email (%s):" + +#: wp-admin/edit-form-comment.php:98 +msgid "send e-mail" +msgstr "poslat email" + +#: wp-admin/edit-form-comment.php:100 +msgid "E-mail:" +msgstr "Email:" + +#: wp-admin/edit-form-comment.php:109 +msgid "visit site" +msgstr "zobrazit web" + +#: wp-admin/edit-form-comment.php:110 +#, php-format +msgid "URL (%s):" +msgstr "URL (%s):" + +#: wp-admin/edit-form-comment.php:112 +msgid "URL:" +msgstr "URL:" + +#: wp-admin/edit-link-categories.php:48 +#: wp-admin/menu.php:105 +msgid "Link Categories" +msgstr "Rubriky odkazů" + +#: wp-admin/edit-link-categories.php:54 +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 "Pomocí rubrik odkazů můžete vytvářet tematicky podobné skupiny odkazů. Název každé rubriky odkazů musí být jedinečný a rubriky odkazů nemají nic společného s rubrikami pro příspěvky." + +#: wp-admin/edit-link-categories.php:55 +msgid "You can delete link categories, but that action does not delete the links within the category. Instead, it moves them to the default link category." +msgstr "Rubriky odkazů můžete také smazat. Odkazy obsažené ve smazané rubrice však nebudou smazány, ale jen automaticky přesunuty do výchozí rubriky odkazů." + +#: wp-admin/edit-link-categories.php:57 +msgid "<a href=\"http://codex.wordpress.org/Links_Link_Categories_SubPanel\" target=\"_blank\">Link Categories Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Links_Link_Categories_SubPanel\" target=\"_blank\">Manuál pro práci s rubrikami odkazů</a> (anglicky)" + +#: wp-admin/edit-link-categories.php:63 +msgid "Category added." +msgstr "Rubrika byla vytvořena." + +#: wp-admin/edit-link-categories.php:64 +msgid "Category deleted." +msgstr "Rubrika byla smazána." + +#: wp-admin/edit-link-categories.php:65 +msgid "Category updated." +msgstr "Rubrika byla aktualizována." + +#: wp-admin/edit-link-categories.php:66 +msgid "Category not added." +msgstr "Rubrika nebyla vytvořena." + +#: wp-admin/edit-link-categories.php:68 +msgid "Categories deleted." +msgstr "Rubriky smazány." + +#: wp-admin/edit-link-categories.php:84 +#: wp-admin/edit-link-categories.php:86 +#: wp-includes/taxonomy.php:357 +msgid "Search Categories" +msgstr "Hledat rubriky" + +#: wp-admin/edit-link-categories.php:121 +#: wp-admin/edit-link-categories.php:175 +#: wp-admin/edit-tags.php:284 +#: wp-admin/edit-tags.php:321 +#: wp-admin/includes/media.php:1273 +#: wp-admin/includes/meta-boxes.php:606 +#: wp-admin/includes/template.php:105 +#: wp-admin/includes/template.php:452 +#: wp-admin/includes/template.php:1453 +#: wp-admin/includes/template.php:1834 +#: wp-admin/includes/template.php:2403 +#: wp-admin/includes/widgets.php:201 +#: wp-admin/link-manager.php:126 +#: wp-admin/link-manager.php:215 +#: wp-admin/link-manager.php:273 +#: wp-admin/plugins.php:584 +#: wp-admin/plugins.php:667 +#: wp-admin/themes.php:197 +#: wp-admin/users.php:434 +#: wp-admin/users.php:507 +#: wp-admin/widgets.php:312 +msgid "Delete" +msgstr "Smazat" + +#: wp-admin/edit-link-categories.php:186 +#, php-format +msgid "<strong>Note:</strong><br />Deleting a category does not delete the links in that category. Instead, links that were only assigned to the deleted category are set to the category <strong>%s</strong>." +msgstr "<strong>Poznámka:</strong><br />Smazáním rubriky nebudou smazány odkazy v ní obsažené. Všechny tyto odkazy budou přesunuty do výchozí rubriky odkazů <strong>%s</strong>." + +#: wp-admin/edit-link-categories.php:200 +#: wp-admin/edit-link-category-form.php:33 +msgid "Add Link Category" +msgstr "Vytvořit novou rubriku odkazů" + +#: wp-admin/edit-link-categories.php:207 +#: wp-admin/edit-link-category-form.php:72 +msgid "Link Category name" +msgstr "Název rubriky odkazů" + +#: wp-admin/edit-link-categories.php:212 +#: wp-admin/edit-link-category-form.php:77 +msgid "Link Category slug" +msgstr "Název v URL pro rubriku odkazů" + +#: wp-admin/edit-link-categories.php:214 +#: wp-admin/edit-link-category-form.php:79 +#: wp-admin/edit-tag-form.php:44 +#: wp-admin/edit-tags.php:396 +msgid "The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens." +msgstr "„Název v URL“ se používá pro vytvoření uživatelsky přívětivé URL adresy. Obvykle smí obsahovat pouze malá písmena bez diakritiky, číslice a pomlčky." + +#: wp-admin/edit-link-categories.php:218 +#: wp-admin/edit-link-category-form.php:83 +msgid "Description (optional)" +msgstr "Popis (volitelný)" + +#: wp-admin/edit-link-categories.php:220 +#: wp-admin/edit-link-category-form.php:85 +#: wp-admin/edit-tags.php:411 +msgid "The description is not prominent by default; however, some themes may show it." +msgstr "Popis sice není často vyplňován a používán, ale některé šablony ho mohou zobrazovat." + +#: wp-admin/edit-link-categories.php:223 +#: wp-admin/edit-link-category-form.php:34 +msgid "Add Category" +msgstr "Vytvořit novou rubriku" + +#: wp-admin/edit-link-category-form.php:14 +msgid "You do not have sufficient permissions to edit link categories for this site." +msgstr "Nemáte dostatečné oprávnění pro úpravy rubrik odkazů na tomto webu." + +#: wp-admin/edit-link-category-form.php:26 +msgid "Edit Link Category" +msgstr "Upravit rubriku odkazů" + +#: wp-admin/edit-link-category-form.php:27 +#: wp-includes/taxonomy.php:56 +#: wp-includes/taxonomy.php:363 +msgid "Update Category" +msgstr "Aktualizovat rubriku" + +#: wp-admin/edit-link-form.php:14 +#, php-format +msgid "<a href=\"%s\">Links</a> / Edit Link" +msgstr "<a href=\"%s\">Odkazy</a> / Upravit odkaz" + +#: wp-admin/edit-link-form.php:15 +#: wp-admin/includes/meta-boxes.php:612 +msgid "Update Link" +msgstr "Aktualizovat odkaz" + +#: wp-admin/edit-link-form.php:19 +#, php-format +msgid "<a href=\"%s\">Links</a> / Add New Link" +msgstr "<a href=\"%s\">Odkazy</a> / Vytvořit nový odkaz" + +#: wp-admin/edit-link-form.php:20 +#: wp-admin/includes/meta-boxes.php:614 +msgid "Add Link" +msgstr "Vytvořit odkaz" + +#: wp-admin/edit-link-form.php:27 +#: wp-admin/includes/image-edit.php:75 +#: wp-admin/includes/meta-boxes.php:25 +#: wp-admin/includes/meta-boxes.php:581 +#: wp-admin/includes/nav-menu.php:502 +#: wp-admin/includes/widgets.php:206 +#: wp-includes/js/tinymce/langs/wp-langs.php:76 +msgid "Save" +msgstr "Uložit" + +#: wp-admin/edit-link-form.php:28 +#: wp-admin/includes/template.php:611 +#: wp-admin/includes/template.php:707 +#: wp-admin/press-this.php:486 +#: wp-includes/category-template.php:462 +#: wp-includes/default-widgets.php:423 +#: wp-includes/default-widgets.php:429 +#: wp-includes/taxonomy.php:54 +#: wp-includes/theme-compat/sidebar.php:63 +msgid "Categories" +msgstr "Rubriky" + +#: wp-admin/edit-link-form.php:29 +#: wp-admin/includes/meta-boxes.php:678 +#: wp-includes/js/tinymce/langs/wp-langs.php:292 +#: wp-includes/js/tinymce/langs/wp-langs.php:341 +msgid "Target" +msgstr "Zobrazení odkazu" + +#: wp-admin/edit-link-form.php:30 +#: wp-admin/includes/nav-menu.php:160 +#: wp-admin/includes/nav-menu.php:1114 +msgid "Link Relationship (XFN)" +msgstr "Vztah k odkazu (XFN)" + +#: wp-admin/edit-link-form.php:31 +#: wp-includes/js/tinymce/langs/wp-langs.php:304 +#: wp-includes/js/tinymce/wp-mce-help.php:175 +msgid "Advanced" +msgstr "Pokročilé" + +#: wp-admin/edit-link-form.php:41 +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 "V této části administrace můžete jednoduše vytvářet nebo upravovat odkazy vyplněním konkrétních informací v každé části formuláře. Pouze URL adresa odkazovaného webu a jeho název (což je vlastně text odkazu, který se bude na vašem webu zobrazovat) jsou povinné." + +#: wp-admin/edit-link-form.php:42 +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 "Pole pro název, URL adresu a popis odkazovaného webu jsou umístěna napevno, zatímco ostatní sekce formuláře můžete libovolně přemisťovat uchopením lišty s názvem sekce kurzorem myši a jeho tažením až na místo určení. Konkrétní sekce můžete také skrýt pomocí záložky Nastavení zobrazených informací, nebo je rozbalit/sbalit kliknutím na lištu s názvem sekce." + +#: wp-admin/edit-link-form.php:43 +msgid "XFN stands for <a href=\"http://gmpg.org/xfn/\" target=\"_blank\">XHTML Friends Network</a>, 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 "Zkratka XFN představuje službu <a href=\"http://gmpg.org/xfn/\" target=\"_blank\">XHTML Friends Network</a>, což je síť přátel tvořená prostřednictvím XHTML (konkrétně atributů odkazů) a vyplnění této sekce o vašem vztahu k odkazovanému webu je zcela dobrovolné. WordPress jen umožňuje automatické vytváření XFN atributů v odkazu, abyste mohli s jejich pomocí přehledně zobrazovat, jakým způsobem jste spojeni s autory/vlastníky webů, na které odkazujete." + +#: wp-admin/edit-link-form.php:45 +msgid "<a href=\"http://codex.wordpress.org/Links_Add_New_SubPanel\" target=\"_blank\">Documentation on Creating Links</a>" +msgstr "<a href=\"http://codex.wordpress.org/Links_Add_New_SubPanel\" target=\"_blank\">Manuál pro vytváření odkazů</a> (anglicky)" + +#: wp-admin/edit-link-form.php:57 +msgid "Link added." +msgstr "Odkaz byl vytvořen" + +#: wp-admin/edit-link-form.php:84 +#: wp-admin/includes/plugin-install.php:312 +#: wp-admin/includes/plugin-install.php:321 +#: wp-admin/includes/template.php:40 +#: wp-admin/includes/template.php:705 +#: wp-admin/includes/template.php:720 +#: wp-admin/includes/template.php:730 +#: wp-admin/includes/template.php:740 +#: wp-admin/includes/template.php:751 +#: wp-admin/includes/template.php:2253 +#: wp-admin/includes/template.php:2330 +#: wp-admin/includes/template.php:2345 +#: wp-admin/includes/template.php:2434 +#: wp-admin/themes.php:258 +#: wp-admin/user-edit.php:221 +#: wp-includes/comment-template.php:1497 +#: wp-includes/js/tinymce/langs/wp-langs.php:312 +#: wp-includes/theme-compat/comments-popup.php:75 +#: wp-includes/theme-compat/comments.php:78 +msgid "Name" +msgstr "Název" + +#: wp-admin/edit-link-form.php:87 +msgid "Example: Nifty blogging software" +msgstr "Příklad: Čeština pro WordPress" + +#: wp-admin/edit-link-form.php:92 +msgid "Web Address" +msgstr "Adresa webu" + +#: wp-admin/edit-link-form.php:95 +msgid "Example: <code>http://wordpress.org/</code> — don’t forget the <code>http://</code>" +msgstr "Příklad: <code>http://www.separatista.net/</code> — nezapomeňte na <code>http://</code>" + +#: wp-admin/edit-link-form.php:100 +#: wp-admin/includes/media.php:1057 +#: wp-admin/includes/nav-menu.php:166 +#: wp-admin/includes/nav-menu.php:1115 +#: wp-admin/includes/plugin-install.php:315 +#: wp-admin/includes/plugin-install.php:324 +#: wp-admin/includes/template.php:721 +#: wp-admin/includes/template.php:731 +#: wp-admin/includes/template.php:741 +#: wp-admin/plugins.php:513 +#: wp-admin/plugins.php:521 +#: wp-admin/press-this.php:130 +#: wp-admin/press-this.php:165 +#: wp-admin/themes.php:259 +msgid "Description" +msgstr "Popis" + +#: wp-admin/edit-link-form.php:103 +msgid "This will be shown when someone hovers over the link in the blogroll, or optionally below the link." +msgstr "Tento text se bude zobrazovat při najetí kurzoru myši na odkaz nebo (volitelně) pod odkazem." + +#: wp-admin/edit-tag-form.php:14 +msgid "You did not select an item for editing." +msgstr "Nebyla vybrána žádná položka pro úpravy." + +#: wp-admin/edit-tag-form.php:36 +#: wp-admin/edit-tags.php:388 +msgctxt "Taxonomy Name" +msgid "Name" +msgstr "Název" + +#: wp-admin/edit-tag-form.php:38 +#: wp-admin/edit-tags.php:390 +msgid "The name is how it appears on your site." +msgstr "Název se bude v této podobě zobrazovat na webu." + +#: wp-admin/edit-tag-form.php:42 +#: wp-admin/edit-tags.php:394 +msgctxt "Taxonomy Slug" +msgid "Slug" +msgstr "Název v URL" + +#: wp-admin/edit-tag-form.php:49 +#: wp-admin/edit-tags.php:401 +msgctxt "Taxonomy Parent" +msgid "Parent" +msgstr "Hierarchie" + +#: wp-admin/edit-tag-form.php:51 +#: wp-admin/edit-tags.php:402 +#: wp-admin/includes/media.php:818 +#: wp-admin/includes/media.php:912 +#: wp-admin/includes/media.php:2058 +#: wp-admin/includes/media.php:2074 +#: wp-admin/includes/template.php:1854 +#: wp-includes/deprecated.php:707 +#: wp-includes/js/tinymce/langs/wp-langs.php:424 +msgid "None" +msgstr "Žádné" + +#: wp-admin/edit-tag-form.php:53 +#: wp-admin/edit-tags.php:404 +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 "Rubriky mohou být narozdíl od štítků hierarchicky strukturované. Můžete mít tedy například (hlavní) rubriku Filmy a v ní podřazené rubriky Akční, Komedie a Western, do kterých pak už jen přiřazujete konkrétní příspěvky. Můžete si ale vše uspořádat zcela podle sebe." + +#: wp-admin/edit-tag-form.php:59 +#: wp-admin/edit-tags.php:409 +msgctxt "Taxonomy Description" +msgid "Description" +msgstr "Popis" + +#: wp-admin/edit-tag-form.php:61 +msgid "The description is not prominent by default, however some themes may show it." +msgstr "Popis sice není často vyplňován a používán, ale některé šablony ho mohou zobrazovat." + +#: wp-admin/edit-tag-form.php:78 +#: wp-admin/includes/meta-boxes.php:224 +#: wp-admin/includes/meta-boxes.php:225 +#: wp-admin/includes/template.php:1154 +#: wp-admin/includes/template.php:1156 +#: wp-admin/includes/template.php:1159 +#: wp-admin/includes/template.php:2404 +#: wp-admin/menu.php:37 +#: wp-includes/js/tinymce/langs/wp-langs.php:29 +msgid "Update" +msgstr "Aktualizovat" + +#: wp-admin/edit-tags.php:18 +#: wp-includes/taxonomy.php:1589 +#: wp-includes/taxonomy.php:1891 +msgid "Invalid taxonomy" +msgstr "Špatná taxonomie" + +#: wp-admin/edit-tags.php:169 +#, php-format +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 <a href=\"%s\">writing settings</a>." +msgstr "Rubriky můžete použít pro vymezení zájmových oblastí na vašem webu a sdružovat tak s jejich pomocí příspěvky s podobnou tematikou. Výchozí rubrikou pro příspěvky je rubrika s názvem „Nezařazené“, která je automaticky vytvořena během instalace WordPressu. Výchozí rubriku můžete změnit na stránce s <a href=\"%s\">nastavením pro publikování</a>." + +#: wp-admin/edit-tags.php:171 +msgid "You can assign keywords to your posts using Post Tags. Unlike categories, tags have no hierarchy, meaning there’s no relationship from one tag to another." +msgstr "K příspěvkům můžete přiřazovat pomocí štítků jasně určená klíčová slova. Narozdíl od rubrik nejsou štítky hierarachicky strukturované, což znamená že mezi jednotlivými štítky není žádný vzájemný vztah (např. nadřazenost)." + +#: wp-admin/edit-tags.php:173 +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 "Jaký je rozdíl mezi rubrikou a štítkem? Obecně se štítky používají pro nahodile definovaná klíčová slova, která blíže identifikují důležité informace ve vašem příspěvku (např. jména, témata) a jednou se třeba mohou (ale také nemusí) objevit i v dalších příspěvcích. Naopak rubriky jsou předem jasně definované sekce. Pokud si představíte, že je váš web knihou, tak rubriky vlastně odpovídají jejímu obsahu (díly, kapitoly), zatímco štítky mohou představovat slovníček pojmů." + +#: wp-admin/edit-tags.php:176 +msgid "When adding a new category on this screen, you’ll fill in the following fields:" +msgstr "Pro vytvoření nové rubriky na této stránce musíte nejdříve vyplnit následující informace:" + +#: wp-admin/edit-tags.php:178 +msgid "When adding a new tag on this screen, you’ll fill in the following fields:" +msgstr "Pro vytvoření nového štítku na této stránce musíte nejdříve vyplnit následující informace:" + +#: wp-admin/edit-tags.php:181 +msgid "<strong>Name</strong> - The name is how it appears on your site." +msgstr "<strong>Název</strong> - Název se bude v této podobě zobrazovat na webu." + +#: wp-admin/edit-tags.php:183 +msgid "<strong>Slug</strong> - The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens." +msgstr "<strong>Název v URL</strong> - „Název v URL“ se používá pro vytvoření uživatelsky přívětivé URL adresy. Obvykle smí obsahovat pouze malá písmena bez diakritiky, číslice a pomlčky." + +#: wp-admin/edit-tags.php:186 +msgid "<strong>Parent</strong> - 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. To create a subcategory, just choose another category from the Parent dropdown." +msgstr "<strong>Hierarchie</strong> - Rubriky mohou být narozdíl od štítků hierarchicky strukturované. Můžete mít tedy například (hlavní) rubriku Filmy a v ní podřazené rubriky Akční, Komedie a Western, do kterých pak už jen přiřazujete konkrétní příspěvky. Můžete si ale vše uspořádat zcela podle sebe. Abyste vytvořili podrubriku, tak vyberte z nabídky Hierarchie nějakou rubriku, která jí bude nadřazená." + +#: wp-admin/edit-tags.php:188 +msgid "<strong>Description</strong> - The description is not prominent by default; however, some themes may display it." +msgstr "<strong>Popis</strong> - Popis sice není často vyplňován a používán, ale některé šablony ho mohou zobrazovat." + +#: wp-admin/edit-tags.php:190 +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 "Zobrazení této stránky změníte pomocí záložky Nastavení zobrazených informací, kde si můžete libovolně zvolit, které sloupce s informacemi chcete zobrazit/skrýt a kolik položek bude na stránce maximálně zobrazeno." + +#: wp-admin/edit-tags.php:194 +msgid "<a href=\"http://codex.wordpress.org/Manage_Categories_SubPanel\" target=\"_blank\">Categories Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Manage_Categories_SubPanel\" target=\"_blank\">Manuál pro práci s rubrikami</a> (anglicky)" + +#: wp-admin/edit-tags.php:196 +msgid "<a href=\"http://codex.wordpress.org/Post_Tags_SubPanel\" target=\"_blank\">Tags Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Post_Tags_SubPanel\" target=\"_blank\">Manuál pro práci se štítky</a> (anglicky)" + +#: wp-admin/edit-tags.php:206 +msgid "Item added." +msgstr "Položka byla vytvořena." + +#: wp-admin/edit-tags.php:207 +msgid "Item deleted." +msgstr "Položka byla smazána." + +#: wp-admin/edit-tags.php:208 +msgid "Item updated." +msgstr "Položka byla aktualizována." + +#: wp-admin/edit-tags.php:209 +msgid "Item not added." +msgstr "Položka nebyla vytvořena." + +#: wp-admin/edit-tags.php:211 +msgid "Items deleted." +msgstr "Položky byly smazány." + +#: wp-admin/edit-tags.php:334 +#, php-format +msgid "<strong>Note:</strong><br />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 <strong>%s</strong>." +msgstr "<strong>Poznámka:</strong><br />Smazáním rubriky nebudou smazány příspěvky, které jsou v ní obsažené. Všechny tyto příspěvky budou automaticky přesunuty do výchozí rubriky <strong>%s</strong>." + +#: wp-admin/edit-tags.php:336 +#, php-format +msgid "Categories can be selectively converted to tags using the <a href=\"%s\">category to tag converter</a>." +msgstr "Vybrané rubriky mohou být převedeny na štítky pomocí <a href=\"%s\">konvertoru rubrik na štítky</a>." + +#: wp-admin/edit-tags.php:341 +#, php-format +msgid "Tags can be selectively converted to categories using the <a href=\"%s\">tag to category converter</a>" +msgstr "Vybrané štítky mohou být převedeny na rubriky pomocí <a href=\"%s\">konvertoru štítků na rubriky</a>." + +#: wp-admin/edit.php:17 +#: wp-admin/post-new.php:17 +msgid "Invalid post type" +msgstr "Nesprávný typ obsahu" + +#: wp-admin/edit.php:77 +#: wp-admin/post.php:221 +msgid "You are not allowed to move this item to the Trash." +msgstr "Nemáte dostatečné oprávnění pro přesunutí této položky do koše." + +#: wp-admin/edit.php:80 +#: wp-admin/post.php:224 +msgid "Error in moving to Trash." +msgstr "Během přesunování do koše se objevila chyba." + +#: wp-admin/edit.php:90 +msgid "You are not allowed to restore this item from the Trash." +msgstr "Nemáte dostatečné oprávnění pro obnovení této položky z koše." + +#: wp-admin/edit.php:93 +#: wp-admin/post.php:237 +msgid "Error in restoring from Trash." +msgstr "Během obnovování z koše se objevila chyba." + +#: wp-admin/edit.php:105 +#: wp-admin/post.php:247 +msgid "You are not allowed to delete this item." +msgstr "Nemáte dostatečné oprávnění pro smazání této položky." + +#: wp-admin/edit.php:109 +#: wp-admin/edit.php:112 +#: wp-admin/upload.php:111 +msgid "Error in deleting..." +msgstr "Během mazání se objevila chyba..." + +#: wp-admin/edit.php:161 +msgid "You can customize the display of this screen in a number of ways:" +msgstr "Zobrazení informací na této stránce si můžete přizpůsobit několika způsoby:" + +#: wp-admin/edit.php:163 +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 "Pomocí záložky „Nastavení zobrazených informací“ si můžete podle vašich potřeb zobrazit/skrýt vybrané sloupce a také nastavit počet zobrazených příspěvků na stránce." + +#: wp-admin/edit.php:164 +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 "Výpis příspěvků na stránce můžete třídit podle jejich aktuálního stavu pomocí textových odkazů vlevo nahoře (Celkem, Publikované, Plánované, Čekající na schválení, Koncepty nebo Koš). Při vstupu na stránku se vám ve výchozím nastavení zobrazí všechny příspěvky." + +#: wp-admin/edit.php:165 +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 "Příspěvky ve výpisu mohou být zobrazeny přehledně pouze s názvem nebo detailně i s několika úvodními větami. Způsob zobrazení, se kterým se vám lépe pracuje, můžete jednoduše změnit kliknutím na ikonku v pravém horním rohu výpisu." + +#: wp-admin/edit.php:166 +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 "Dále můžete zobrazovat pouze příspěvky z určité rubriky nebo konkrétního měsíce pomocí rozevíracích menu nad výpisem příspěvků. Nastavte si požadované hodnoty a pak už stačí jen kliknout na tlačítko „Filtrovat“. Kromě toho lze výpis příspěvků upřesnit také kliknutím na autora příspěvku, rubriku nebo štítek přímo ve výpisu příspěvků." + +#: wp-admin/edit.php:168 +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 "Když přejedete kurzorem myši přes nějaký řádek ve výpisu příspěvků, zobrazí se vám odkazy s různými možnostmi pro správu tohoto příspěvku. Okamžité tak můžete s příspěvkem provést následující úkony:" + +#: wp-admin/edit.php:170 +msgid "Edit takes you to the editing screen for that post. You can also reach that screen by clicking on the post title." +msgstr "„Upravit“ - budete přesměrováni na stránku pro detailní úpravy tohoto příspěvku. To samé se stane, když kliknete přímo na název příspěvku." + +#: wp-admin/edit.php:171 +msgid "Quick Edit provides inline access to the metadata of your post, allowing you to update post details without leaving this screen." +msgstr "„Rychlé úpravy“ - umožňují okamžitě změnit některé informace o příspěvku, aniž byste museli opustit tuto stránku s výpisem příspěvků." + +#: wp-admin/edit.php:172 +msgid "Trash removes your post from this list and places it in the trash, from which you can permanently delete it." +msgstr "„Odstranit“ - slouží pro přesunutí příspěvku do Koše, kde jsou příspěvky ještě nějakou dobu uchovávány (obvykle 30 dní) než dojde k jejich automatickému a nenávratnému smazání. Koš můžete také kdykoliv ručně vysypat." + +#: wp-admin/edit.php:173 +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 "Pomocí „Náhledu“ uvidíte, jak by vypadal váš aktuální koncept příspěvku na webu, pokud byste ho právě publikovali. Pokud už však příspěvek publikován byl, tak se vám objeví jiný odkaz s názvem „Zobrazit“, pomocí kterého se dostanete přímo na konkrétní příspěvek na webu." + +#: wp-admin/edit.php:175 +msgid "You can also edit multiple posts at once. Select the posts you want to edit using the checkboxes, select Edit from the Bulk Actions menu and click Apply. You will be able to 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 "Je možné také upravovat několik příspěvků najednou. Nejdříve zaškrtnutím označte konkrétní příspěvky, které chcete upravovat, potom vyberte v rozevíracím menu Hromadné úpravy možnost Upravit a nakonec klikněte na tlačítko Použít (stejný postup platí i pro odstranění několika příspěvků najednou). Poté už můžete hromadně měnit některé informace u všech vybraných příspěvků (např. rubriky, autora, atd.). Pokud budete chtít nějaký příspěvek z označené skupiny odebrat, stačí kliknout na malé tlačítko x vedle jeho názvu v zobrazené oblasti pro hromadné úpravy." + +#: wp-admin/edit.php:177 +msgid "<a href=\"http://codex.wordpress.org/Posts_Edit_SubPanel\" target=\"_blank\">Edit Posts Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Posts_Edit_SubPanel\" target=\"_blank\">Manuál pro práci s příspěvky</a> (anglicky)" + +#: wp-admin/edit.php:182 +msgid "Pages are similar to 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 "Stránky jsou podobné příspěvkům v tom, že mají svůj název, pole s editorem pro psaní konkrétního textu a obsahují i další související informace, ale odlišují se zejména tím, že nejsou součástí hlavního chronologického sledu publikovaných příspěvků, ale spíše stálými (statickými) texty na webu. Stránky nejsou zařazovány do rubrik a nepoužívají se pro ně ani štítky, ale mohou mít alespoň vlastní hierarchii. Můžete tak označovat některé stránky jako podřazené vůči jiné stránce, a to jednoduchým výběrem z menu „Nadřazená stránka“ (objeví se po kliknutí na odkaz Rychlé úpravy u konkrétní stránky), čímž vlastně vytvoříte určitou skupinu souvisejících stránek." + +#: wp-admin/edit.php:183 +msgid "Managing Pages is very similar to managing Posts, and the screens can be customized in the same way." +msgstr "Práce se stránkami je téměř stejná jako správa příspěvků a zobrazení tohoto přehledného výpisu stránek si tak můžete přizpůsobit stejným způsobem jako u příspěvků." + +#: wp-admin/edit.php:184 +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 "Se stránkami můžete také provádět některé další činnosti, např. filtrovat zobrazené stránky s použitím horního rozevíracího menu či kliknutím na autora stránky nebo na některý z textových odkazů nad výpisem. Můžete i jednoduše spravovat stránky pomocí textových odkazů, které se objeví po přejetí kurzorem myši nad konkrétním řádkem ve výpisu stránek, nebo využít menu pro hromadné úpravy, s jehož pomocí snadno upravíte některé informace u všech vybraných (zaškrtnutých) stránek najednou." + +#: wp-admin/edit.php:186 +msgid "<a href=\"http://codex.wordpress.org/Pages_Edit_SubPanel\" target=\"_blank\">Page Management Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Pages_Edit_SubPanel\" target=\"_blank\">Manuál pro práci se stránkami</a> (anglicky)" + +#: wp-admin/edit.php:207 +msgid "This has been saved." +msgstr "Uloženo." + +#: wp-admin/edit.php:207 +#: wp-content/plugins/akismet/akismet.php:887 +#: wp-includes/post.php:953 +msgid "View Post" +msgstr "Zobrazit příspěvek" + +#: wp-admin/edit.php:207 +#: wp-admin/press-this.php:558 +#: wp-includes/post.php:951 +msgid "Edit Post" +msgstr "Upravit příspěvek" + +#: wp-admin/edit.php:214 +#, php-format +msgid "%s post updated." +msgid_plural "%s posts updated." +msgstr[0] "%s příspěvek byl aktualizován." +msgstr[1] "%s příspěvky byly aktualizovány." +msgstr[2] "%s příspěvků bylo aktualizováno." + +#: wp-admin/edit.php:222 +#, php-format +msgid "%s item not updated, somebody is editing it." +msgid_plural "%s items not updated, somebody is editing them." +msgstr[0] "%s položka nebyla aktualizována, protože ji právě někdo upravuje." +msgstr[1] "%s položky nebyly aktualizovány, protože je právě někdo upravuje." +msgstr[2] "%s položek nebylo aktualizováno, protože je právě někdo upravuje." + +#: wp-admin/edit.php:227 +#, php-format +msgid "Item permanently deleted." +msgid_plural "%s items permanently deleted." +msgstr[0] "Položka byla nenávratně smazána." +msgstr[1] "%s položky byly nenávratně smazány." +msgstr[2] "%s položek bylo nenávratně smazáno." + +#: wp-admin/edit.php:232 +#, php-format +msgid "Item moved to the trash." +msgid_plural "%s items moved to the trash." +msgstr[0] "Položka byla přesunuta do koše." +msgstr[1] "%s položky byly přesunuty do koše." +msgstr[2] "%s položek bylo přesunuto do koše." + +#: wp-admin/edit.php:239 +#, php-format +msgid "Item restored from the Trash." +msgid_plural "%s items restored from the Trash." +msgstr[0] "Položka byla obnovena z koše." +msgstr[1] "%s položky byly obnoveny z koše." +msgstr[2] "%s položek bylo obnoveno z koše." + +#: wp-admin/edit.php:261 +#, php-format +msgctxt "posts" +msgid "Mine <span class=\"count\">(%s)</span>" +msgid_plural "Mine <span class=\"count\">(%s)</span>" +msgstr[0] "Moje <span class=\"count\">(%s)</span>" +msgstr[1] "Moje <span class=\"count\">(%s)</span>" +msgstr[2] "Moje <span class=\"count\">(%s)</span>" + +#: wp-admin/edit.php:272 +#, php-format +msgctxt "posts" +msgid "All <span class=\"count\">(%s)</span>" +msgid_plural "All <span class=\"count\">(%s)</span>" +msgstr[0] "Celkem <span class=\"count\">(%s)</span>" +msgstr[1] "Celkem <span class=\"count\">(%s)</span>" +msgstr[2] "Celkem <span class=\"count\">(%s)</span>" + +#: wp-admin/edit.php:351 +#: wp-admin/includes/media.php:1945 +#: wp-admin/upload.php:325 +msgid "Show all dates" +msgstr "Zobrazit všechna data" + +#: wp-admin/edit.php:373 +msgid "View all categories" +msgstr "Zobrazit všechny rubriky" + +#: wp-admin/edit.php:405 +msgid "List View" +msgstr "Přehledné zobrazení" + +#: wp-admin/edit.php:406 +msgid "Excerpt View" +msgstr "Detailní zobrazení" + +#: wp-admin/export.php:13 +msgid "You do not have sufficient permissions to export the content of this site." +msgstr "Nemáte dostatečné oprávnění pro exportování obsahu z tohoto webu." + +#: wp-admin/export.php:17 +#: wp-admin/menu.php:211 +msgid "Export" +msgstr "Export" + +#: wp-admin/export.php:20 +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 set filters to have the WXR file only include a certain date, author, category, tag, all posts or all pages, certain publishing statuses." +msgstr "Hlavním důvodem pro export souboru s obsahem webu je zejména možnost jeho následného importu někde jinde. Soubor je označován zkratkou WXR, má přehlednou strukturu podobnou formátu XML a obsahuje příspěvky, stránky, komentáře, uživatelská pole, rubriky a štítky. Můžete si nastavit také různá omezení (podle data, autorů, rubrik, štítků, typů obsahu a aktuálního stavu), aby soubor obsahoval pouze opravdu potřebné informace." + +#: wp-admin/export.php:21 +msgid "Once generated, your WXR file can be imported by another WordPress site or by another blogging platform able to access this format." +msgstr "Jakmile bude exportní soubor vygenerován, můžete ho importovat na jiném webu ve WordPressu, nebo ho použít i v odlišném redakční systému pro správu obsahu, který tento formát podporuje." + +#: wp-admin/export.php:23 +msgid "<a href=\"http://codex.wordpress.org/Tools_Export_SubPanel\" target=\"_blank\">Export Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Tools_Export_SubPanel\" target=\"_blank\">Manuál pro exportování obsahu z WordPressu</a> (anglicky)" + +#: wp-admin/export.php:71 +msgid "When you click the button below WordPress will create an XML file for you to save to your computer." +msgstr "Kliknutím na tlačítko Stáhnout soubor s exportem se na základě nastavených omezení vytvoří příslušný XML soubor, který si můžete uložit na svém počítači." + +#: wp-admin/export.php:72 +msgid "This format, which we call WordPress eXtended RSS or WXR, will contain your posts, pages, comments, custom fields, categories, and tags." +msgstr "Formát souboru je nazýván jako <em>Rozšířené RSS WordPressu</em> (<em>WXR</em>, z anglického <em>WordPress eXtended RSS</em>) a obsahuje příspěvky, stránky, komentáře, uživatelská pole, rubriky a štítky." + +#: wp-admin/export.php:73 +msgid "Once you’ve saved the download file, you can use the Import function on another WordPress site to import this site." +msgstr "Po získání vygenerovaného souboru ho můžete importovat na jiném webu používajícím WordPress, a to prostřednictvím nabídky Nástroje - Import z levého menu." + +#: wp-admin/export.php:75 +msgid "Filters" +msgstr "Omezení exportu" + +#: wp-admin/export.php:79 +msgid "Start Date" +msgstr "Počáteční datum" + +#: wp-admin/export.php:82 +#: wp-admin/export.php:91 +msgid "All Dates" +msgstr "Všechna data" + +#: wp-admin/export.php:88 +msgid "End Date" +msgstr "Koncové datum" + +#: wp-admin/export.php:97 +msgid "Authors" +msgstr "Autoři" + +#: wp-admin/export.php:100 +msgid "All Authors" +msgstr "Všichni autoři" + +#: wp-admin/export.php:111 +msgid "All Terms" +msgstr "Všechny" + +#: wp-admin/export.php:117 +msgid "Content Types" +msgstr "Typy obsahu" + +#: wp-admin/export.php:120 +msgid "All Content" +msgstr "Všechny" + +#: wp-admin/export.php:128 +msgid "Statuses" +msgstr "Stav" + +#: wp-admin/export.php:131 +msgid "All Statuses" +msgstr "Vše" + +#: wp-admin/export.php:139 +msgid "Download Export File" +msgstr "Stáhnout soubor s exportem" + +#: wp-admin/import.php:15 +msgid "You do not have sufficient permissions to import content in this site." +msgstr "Nemáte dostatečné oprávnění pro importování obsahu na tento web." + +#: wp-admin/import.php:20 +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 "Na této stránce naleznete odkazy na pluginy, které umožňují jednoduše importovat obsah webu z různých redakčních systémů pro správu obsahu do WordPressu. Vyberte si, který systém jste dosud používali a nyní chcete obsah příslušného webu převést do WordPressu, a v nově otevřeném okně klikněte na tlačítko Instalovat. Pokud chcete importovat obsah webu z nějakého systému, který zde není výslovně uveden, použijte přímý odkaz na vyhledávací formulář pro další importovací nástroje dostupné v oficiálním adresáři pluginů pro WordPress." + +#: wp-admin/import.php:21 +msgid "In previous versions of WordPress, all the importers were built-in, but they have been turned into plugins as of version 3.0 since most people only use them once or infrequently." +msgstr "Předchozí verze WordPressu obsahovaly všechny importovací nástroje již v základním instalačním balíčku, ale od verze 3.0 jsou změněny na samostatné pluginy, protože je většina lidí použije obvykle jenom jednou (či nahodile)." + +#: wp-admin/import.php:23 +msgid "<a href=\"http://codex.wordpress.org/Tools_Import_SubPanel\" target=\"_blank\">Import Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Tools_Import_SubPanel\" target=\"_blank\">Manuál pro importování obsahu do WordPressu</a> (anglicky)" + +#: wp-admin/import.php:30 +msgid "Blogger" +msgstr "Blogger" + +#: wp-admin/import.php:30 +msgid "Install the Blogger importer to import posts, comments, and users from a Blogger blog." +msgstr "Instalovat importovací nástroj pro Blogger, který vám umožní převést všechny příspěvky, komentáře a uživatele z vašeho účtu u Bloggeru do WordPressu." + +#: wp-admin/import.php:31 +#: wp-admin/tools.php:46 +msgid "Categories and Tags Converter" +msgstr "Převaděč rubrik a štítků" + +#: wp-admin/import.php:31 +msgid "Install the category/tag converter to convert existing categories to tags or tags to categories, selectively." +msgstr "Instalovat nástroj pro převod vybraných rubrik na štítky (a naopak)." + +#: wp-admin/import.php:32 +msgid "LiveJournal" +msgstr "LiveJournal" + +#: wp-admin/import.php:32 +msgid "Install the LiveJournal importer to import posts from LiveJournal using their API." +msgstr "Instalovat importovací nástroj pro LiveJournal, s jehož pomocí můžete využít API LiveJournalu a importovat tak všechny příspěvky do WordPressu." + +#: wp-admin/import.php:33 +msgid "Movable Type and TypePad" +msgstr "Movable Type a TypePad" + +#: wp-admin/import.php:33 +msgid "Install the Movable Type importer to import posts and comments from a Movable Type or TypePad blog." +msgstr "Instalovat importovací nástroj pro Movable Type, který vám umožní importovat příspěvky a komentáře z vašeho účtu u TypePadu či vlastní instalace Movable Type." + +#: wp-admin/import.php:34 +#: wp-admin/includes/upgrade.php:129 +msgid "Blogroll" +msgstr "Odkazy" + +#: wp-admin/import.php:34 +msgid "Install the blogroll importer to import links in OPML format." +msgstr "Instalovat importovací nástroj pro odkazy v podobě OPML souboru." + +#: wp-admin/import.php:35 +#: wp-includes/default-widgets.php:702 +msgid "RSS" +msgstr "RSS" + +#: wp-admin/import.php:35 +msgid "Install the RSS importer to import posts from an RSS feed." +msgstr "Instalovat importovací nástroj pro obsah libovolného RSS zdroje." + +#: wp-admin/import.php:36 +msgid "Install the WordPress importer to import posts, pages, comments, custom fields, categories, and tags from a WordPress export file." +msgstr "Instalovat importovací nástroj pro příspěvky, stránky, komentáře, uživatelská pole, rubriky a štítky obsažené v exportním souboru WordPressu." + +#: wp-admin/import.php:53 +msgid "ERROR:" +msgstr "CHYBA:" + +#: wp-admin/import.php:53 +#, php-format +msgid "The <strong>%s</strong> importer is invalid or is not installed." +msgstr "Importovací nástroj pro <strong>%s</strong> není nainstalovaný nebo je neplatný." + +#: wp-admin/import.php:55 +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 "Pokud máte stávající obsah (příspěvky, komentáře atd.) uložen v jiném publikačním systému, můžete vše jednoduše převést na tento web ve WordPressu. Nejdříve vyberte systém, ze kterého chcete konkrétní data importovat:" + +#: wp-admin/import.php:87 +msgid "No importers are available." +msgstr "Není k dispozici žádný nástroj pro import." + +#: wp-admin/import.php:107 +msgid "Activate importer" +msgstr "Aktivovat importovací nástroj" + +#: wp-admin/import.php:113 +msgid "Install importer" +msgstr "Instalovat importovací nástroj" + +#: wp-admin/includes/bookmark.php:191 +msgid "Could not update link in the database" +msgstr "Nepodařilo se aktualizovat odkaz v databázi" + +#: wp-admin/includes/bookmark.php:198 +msgid "Could not insert link into the database" +msgstr "Nepodařilo se uložit odkaz do databáze" + +#: wp-admin/includes/class-wp-filesystem-base.php:201 +#, php-format +msgid "Changing to %s" +msgstr "Změna na %s" + +#: wp-admin/includes/class-wp-filesystem-base.php:210 +#, php-format +msgid "Found %s" +msgstr "Nalezen %s" + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:28 +msgid "The ftp PHP extension is not available" +msgstr "FTP rozšíření pro PHP není k dispozici" + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:44 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:38 +msgid "FTP hostname is required" +msgstr "Je vyžadován název cílového FTP serveru." + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:53 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:47 +msgid "FTP username is required" +msgstr "Pro přístup na FTP je vyžadováno uživatelské jméno." + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:58 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:52 +msgid "FTP password is required" +msgstr "Pro přístup na FTP je vyžadováno heslo." + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:74 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:64 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:69 +#, php-format +msgid "Failed to connect to FTP Server %1$s:%2$s" +msgstr "Nepodařilo se připojit k FTP serveru %1$s:%2$s" + +#: wp-admin/includes/class-wp-filesystem-ftpext.php:79 +#: wp-admin/includes/class-wp-filesystem-ftpsockets.php:74 +#: wp-admin/includes/class-wp-filesystem-ssh2.php:117 +#, php-format +msgid "Username/Password incorrect for %s" +msgstr "Uživatelské jméno nebo heslo pro %s není správné" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:57 +msgid "The ssh2 PHP extension is not available" +msgstr "Rozšíření ssh2 pro PHP není k dispozici" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:61 +msgid "The ssh2 PHP extension is available, however, we require the PHP5 function <code>stream_get_contents()</code>" +msgstr "Rozšíření ssh2 pro PHP je sice k dispozici, avšak vyžadujeme verzi PHP 5 a vyšší kvůli použití funkce <code>stream_get_contents()</code>" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:72 +msgid "SSH2 hostname is required" +msgstr "Je vyžadován název cílového SSH2 serveru" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:88 +msgid "SSH2 username is required" +msgstr "Je vyžadováno uživatelské jméno pro SSH2" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:96 +msgid "SSH2 password is required" +msgstr "Je vyžadováno heslo pro SSH2" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:111 +#, php-format +msgid "Failed to connect to SSH2 Server %1$s:%2$s" +msgstr "Nepodařilo se připojit k SSH2 serveru %1$s:%2$s" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:122 +#, php-format +msgid "Public and Private keys incorrect for %s" +msgstr "Veřejné a soukromé klíče pro %s nejsou správné" + +#: wp-admin/includes/class-wp-filesystem-ssh2.php:138 +#, php-format +msgid "Unable to perform command: %s" +msgstr "Nebylo možné provést příkaz: %s" + +#: wp-admin/includes/class-wp-upgrader.php:44 +msgid "Invalid Data provided." +msgstr "Poskytnutá data nebyla správná." + +#: wp-admin/includes/class-wp-upgrader.php:45 +#: wp-admin/includes/file.php:529 +#: wp-admin/includes/plugin.php:639 +#: wp-admin/includes/theme.php:83 +msgid "Could not access filesystem." +msgstr "Nepodařilo se připojit k souborovému systému." + +#: wp-admin/includes/class-wp-upgrader.php:46 +#: wp-admin/includes/plugin.php:642 +#: wp-admin/includes/theme.php:86 +msgid "Filesystem error." +msgstr "Chyba souborového systému." + +#: wp-admin/includes/class-wp-upgrader.php:47 +msgid "Unable to locate WordPress Root directory." +msgstr "Nepodařilo se najít hlavní adresář s WordPressem." + +#: wp-admin/includes/class-wp-upgrader.php:48 +msgid "Unable to locate WordPress Content directory (wp-content)." +msgstr "Nepodařilo se najít adresář WordPressu s uživatelským obsahem (wp-content)." + +#: wp-admin/includes/class-wp-upgrader.php:49 +#: wp-admin/includes/plugin.php:647 +msgid "Unable to locate WordPress Plugin directory." +msgstr "Nepodařilo se najít adresář s pluginy pro WordPress." + +#: wp-admin/includes/class-wp-upgrader.php:50 +msgid "Unable to locate WordPress Theme directory." +msgstr "Nepodařilo se najít adresář se šablonami pro WordPress." + +#. translators: %s: directory name +#: wp-admin/includes/class-wp-upgrader.php:52 +#, php-format +msgid "Unable to locate needed folder (%s)." +msgstr "Nepodařilo se najít potřebný adresář (%s)." + +#: wp-admin/includes/class-wp-upgrader.php:54 +msgid "Download failed." +msgstr "Stažení se nezdařilo." + +#: wp-admin/includes/class-wp-upgrader.php:55 +#: wp-admin/includes/update-core.php:307 +msgid "Installing the latest version…" +msgstr "Instalace nejnovější verze…" + +#: wp-admin/includes/class-wp-upgrader.php:56 +msgid "Destination folder already exists." +msgstr "Cílový adresář již existuje." + +#: wp-admin/includes/class-wp-upgrader.php:57 +#: wp-admin/includes/file.php:623 +#: wp-admin/includes/file.php:704 +#: wp-admin/includes/file.php:752 +msgid "Could not create directory." +msgstr "Nepodařilo se vytvořit adresář." + +#: wp-admin/includes/class-wp-upgrader.php:58 +#: wp-admin/includes/file.php:589 +#: wp-admin/includes/file.php:672 +msgid "Incompatible Archive." +msgstr "Formát archivu není kompatibilní." + +#: wp-admin/includes/class-wp-upgrader.php:60 +msgid "Enabling Maintenance mode…" +msgstr "Režim údržby webu byl zapnut…" + +#: wp-admin/includes/class-wp-upgrader.php:61 +msgid "Disabling Maintenance mode…" +msgstr "Režim údržby webu byl vypnut…" + +#: wp-admin/includes/class-wp-upgrader.php:370 +msgid "The plugin is at the latest version." +msgstr "Používáte nejnovější verzi tohoto pluginu." + +#: wp-admin/includes/class-wp-upgrader.php:371 +#: wp-admin/includes/class-wp-upgrader.php:606 +#: wp-admin/includes/class-wp-upgrader.php:853 +msgid "Upgrade package not available." +msgstr "Aktualizační balíček není k dispozici." + +#: wp-admin/includes/class-wp-upgrader.php:372 +#: wp-admin/includes/class-wp-upgrader.php:607 +#: wp-admin/includes/class-wp-upgrader.php:854 +#, php-format +msgid "Downloading update from <span class=\"code\">%s</span>…" +msgstr "Aktualizace je stahována z <span class=\"code\">%s</span>…" + +#: wp-admin/includes/class-wp-upgrader.php:373 +#: wp-admin/includes/class-wp-upgrader.php:608 +#: wp-admin/includes/class-wp-upgrader.php:855 +msgid "Unpacking the update…" +msgstr "Rozbalování aktualizačního balíčku…" + +#: wp-admin/includes/class-wp-upgrader.php:374 +msgid "Deactivating the plugin…" +msgstr "Plugin byl deaktivován…" + +#: wp-admin/includes/class-wp-upgrader.php:375 +msgid "Removing the old version of the plugin…" +msgstr "Odstraňování staré verze pluginu…" + +#: wp-admin/includes/class-wp-upgrader.php:376 +msgid "Could not remove the old plugin." +msgstr "Nepodařilo se odstranit starou verzi pluginu." + +#: wp-admin/includes/class-wp-upgrader.php:377 +msgid "Plugin upgrade failed." +msgstr "Aktualizace pluginu se nezdařila." + +#: wp-admin/includes/class-wp-upgrader.php:378 +msgid "Plugin upgraded successfully." +msgstr "Plugin byl úspěšně aktualizován." + +#: wp-admin/includes/class-wp-upgrader.php:382 +#: wp-admin/includes/class-wp-upgrader.php:616 +msgid "Install package not available." +msgstr "Instalační balíček není k dispozici." + +#: wp-admin/includes/class-wp-upgrader.php:383 +#: wp-admin/includes/class-wp-upgrader.php:617 +#, php-format +msgid "Downloading install package from <span class=\"code\">%s</span>…" +msgstr "Instalační balíček je stahován z <span class=\"code\">%s</span>…" + +#: wp-admin/includes/class-wp-upgrader.php:384 +#: wp-admin/includes/class-wp-upgrader.php:618 +msgid "Unpacking the package…" +msgstr "Rozbalování instalačního balíčku…" + +#: wp-admin/includes/class-wp-upgrader.php:385 +msgid "Installing the plugin…" +msgstr "Instalace pluginu…" + +#: wp-admin/includes/class-wp-upgrader.php:386 +msgid "Plugin install failed." +msgstr "Instalace pluginu se nezdařila." + +#: wp-admin/includes/class-wp-upgrader.php:387 +msgid "Plugin installed successfully." +msgstr "Plugin byl úspěšně nainstalován." + +#: wp-admin/includes/class-wp-upgrader.php:605 +msgid "The theme is at the latest version." +msgstr "Používáte nejnovější verzi této šablony." + +#: wp-admin/includes/class-wp-upgrader.php:609 +msgid "Removing the old version of the theme…" +msgstr "Odstraňování staré verze šablony…" + +#: wp-admin/includes/class-wp-upgrader.php:610 +msgid "Could not remove the old theme." +msgstr "Nepodařilo se odstranit starou verzi šablony." + +#: wp-admin/includes/class-wp-upgrader.php:611 +msgid "Theme upgrade failed." +msgstr "Aktualizace šablony se nezdařila." + +#: wp-admin/includes/class-wp-upgrader.php:612 +msgid "Theme upgraded successfully." +msgstr "Šablona byla úspěšně aktualizována." + +#: wp-admin/includes/class-wp-upgrader.php:619 +msgid "Installing the theme…" +msgstr "Instalace šablony…" + +#: wp-admin/includes/class-wp-upgrader.php:620 +msgid "Theme install failed." +msgstr "Instalace šablony se nezdařila." + +#: wp-admin/includes/class-wp-upgrader.php:621 +msgid "Theme installed successfully." +msgstr "Šablona byla úspěšně nainstalována." + +#: wp-admin/includes/class-wp-upgrader.php:852 +msgid "WordPress is at the latest version." +msgstr "Používáte nejnovější verzi WordPressu." + +#: wp-admin/includes/class-wp-upgrader.php:856 +msgid "Could not copy files." +msgstr "Nepodařilo se zkopírovat soubory." + +#: wp-admin/includes/class-wp-upgrader.php:1009 +#: wp-admin/update.php:52 +msgid "Upgrade Plugin" +msgstr "Aktualizace pluginu" + +#: wp-admin/includes/class-wp-upgrader.php:1023 +msgid "Reactivating the plugin…" +msgstr "Nová verze pluginu byla aktivována…" + +#: wp-admin/includes/class-wp-upgrader.php:1028 +#: wp-admin/includes/class-wp-upgrader.php:1269 +#: wp-admin/includes/class-wp-upgrader.php:1271 +#: wp-admin/plugins.php:578 +msgid "Activate this plugin" +msgstr "Aktivovat tento plugin" + +#: wp-admin/includes/class-wp-upgrader.php:1028 +#: wp-admin/includes/class-wp-upgrader.php:1271 +msgid "Activate Plugin" +msgstr "Aktivovat plugin" + +#: wp-admin/includes/class-wp-upgrader.php:1029 +#: wp-admin/includes/class-wp-upgrader.php:1187 +msgid "Goto plugins page" +msgstr "Přehled pluginů" + +#: wp-admin/includes/class-wp-upgrader.php:1029 +#: wp-admin/includes/class-wp-upgrader.php:1187 +#: wp-admin/includes/class-wp-upgrader.php:1281 +msgid "Return to Plugins page" +msgstr "Zpět na přehled pluginů" + +#: wp-admin/includes/class-wp-upgrader.php:1038 +#: wp-admin/includes/class-wp-upgrader.php:1193 +#: wp-admin/includes/class-wp-upgrader.php:1224 +#: wp-admin/includes/class-wp-upgrader.php:1290 +#: wp-admin/includes/class-wp-upgrader.php:1357 +#: wp-admin/includes/class-wp-upgrader.php:1411 +#: wp-admin/update-core.php:344 +msgid "Actions:" +msgstr "Akce:" + +#: wp-admin/includes/class-wp-upgrader.php:1072 +msgid "The update process is starting. This process may take awhile on some hosts, so please be patient." +msgstr "Proces aktualizace byl zahájen. U některých poskytovatelů hostingu může aktualizace nějakou dobu trvat, takže prosíme o trpělivost." + +#: wp-admin/includes/class-wp-upgrader.php:1073 +#, php-format +msgid "An error occured while updating %1$s: <strong>%2$s</strong>." +msgstr "Během aktualizace %1$s se objevila následující chyba: <strong>%2$s</strong>." + +#: wp-admin/includes/class-wp-upgrader.php:1074 +#, php-format +msgid "The update of %1$s failed." +msgstr "Aktualizace %1$s se nezdařila." + +#: wp-admin/includes/class-wp-upgrader.php:1075 +#, php-format +msgid "%1$s updated successfully." +msgstr "Plugin %1$s byl úspěšně aktualizován." + +#: wp-admin/includes/class-wp-upgrader.php:1075 +msgid "Show Details" +msgstr "Zobrazit podrobnější informace" + +#: wp-admin/includes/class-wp-upgrader.php:1075 +msgid "Hide Details" +msgstr "Skrýt podrobnější informace" + +#: wp-admin/includes/class-wp-upgrader.php:1076 +msgid "All updates have been completed." +msgstr "Všechny zvolené aktualizace byly úspěšně dokončeny." + +#: wp-admin/includes/class-wp-upgrader.php:1174 +#, php-format +msgid "Updating Plugin %1$s (%2$d/%3$d)" +msgstr "Aktualizace pluginu %1$s (%2$d. z celkem %3$d)" + +#: wp-admin/includes/class-wp-upgrader.php:1188 +#: wp-admin/includes/class-wp-upgrader.php:1219 +msgid "Goto WordPress Updates page" +msgstr "Přehled aktualizací pro WordPress" + +#: wp-admin/includes/class-wp-upgrader.php:1188 +#: wp-admin/includes/class-wp-upgrader.php:1219 +msgid "Return to WordPress Updates" +msgstr "Zpět na přehled aktualizací" + +#: wp-admin/includes/class-wp-upgrader.php:1205 +#, php-format +msgid "Updating Theme %1$s (%2$d/%3$d)" +msgstr "Aktualizace šablony %1$s (%2$d. z celkem %3$d)" + +#: wp-admin/includes/class-wp-upgrader.php:1218 +msgid "Goto themes page" +msgstr "Přehled šablon" + +#: wp-admin/includes/class-wp-upgrader.php:1218 +#: wp-admin/includes/class-wp-upgrader.php:1350 +#: wp-admin/includes/class-wp-upgrader.php:1407 +msgid "Return to Themes page" +msgstr "Zpět na přehled šablon" + +#: wp-admin/includes/class-wp-upgrader.php:1257 +#, php-format +msgid "Successfully installed the plugin <strong>%s %s</strong>." +msgstr "Plugin <strong>%s %s</strong> byl úspěšně nainstalován." + +#: wp-admin/includes/class-wp-upgrader.php:1269 +msgid "Activate Plugin & Run Importer" +msgstr "Aktivovat plugin & spustit importovací nástroj" + +#: wp-admin/includes/class-wp-upgrader.php:1274 +#: wp-admin/plugins.php:581 +msgid "Activate this plugin for all sites in this network" +msgstr "Aktivovat tento plugin pro celou síť webů najednou" + +#: wp-admin/includes/class-wp-upgrader.php:1274 +#: wp-admin/plugins.php:581 +#: wp-admin/plugins.php:658 +msgid "Network Activate" +msgstr "Aktivovat v síti webů" + +#: wp-admin/includes/class-wp-upgrader.php:1277 +msgid "Return to Importers" +msgstr "Zpět na Import" + +#: wp-admin/includes/class-wp-upgrader.php:1279 +msgid "Return to Plugin Installer" +msgstr "Zpět na Instalaci pluginů" + +#. translators: 1: theme name, 2: version +#: wp-admin/includes/class-wp-upgrader.php:1324 +#, php-format +msgid "Successfully installed the theme <strong>%1$s %2$s</strong>." +msgstr "Šablona <strong>%1$s %2$s</strong> byla úspěšně nainstalována." + +#: wp-admin/includes/class-wp-upgrader.php:1343 +#: wp-admin/includes/class-wp-upgrader.php:1400 +#: wp-admin/includes/template.php:1365 +#: wp-admin/includes/template.php:1587 +#: wp-admin/includes/theme-install.php:305 +#: wp-admin/includes/theme-install.php:313 +#: wp-admin/themes.php:195 +#, php-format +msgid "Preview “%s”" +msgstr "Náhled „%s“" + +#: wp-admin/includes/class-wp-upgrader.php:1344 +#: wp-admin/includes/class-wp-upgrader.php:1401 +#: wp-admin/themes.php:192 +#, php-format +msgid "Activate “%s”" +msgstr "Aktivovat „%s“" + +#: wp-admin/includes/class-wp-upgrader.php:1344 +#: wp-admin/includes/class-wp-upgrader.php:1401 +#: wp-admin/plugins.php:578 +#: wp-admin/plugins.php:655 +#: wp-admin/themes.php:194 +msgid "Activate" +msgstr "Aktivovat" + +#: wp-admin/includes/class-wp-upgrader.php:1348 +msgid "Return to Theme Installer" +msgstr "Zpět na Instalaci šablon" + +#: wp-admin/includes/class-wp-upgrader.php:1350 +msgid "Themes page" +msgstr "Správa šablon" + +#: wp-admin/includes/class-wp-upgrader.php:1378 +#: wp-admin/update.php:156 +msgid "Upgrade Theme" +msgstr "Aktualizovat šablonu" + +#: wp-admin/includes/class-wp-upgrader.php:1436 +msgid "Please select a file" +msgstr "Vyberte prosím soubor" + +#: wp-admin/includes/class-wp-upgrader.php:1450 +#: wp-admin/includes/file.php:338 +#: wp-admin/includes/file.php:454 +#, php-format +msgid "The uploaded file could not be moved to %s." +msgstr "Nahraný soubor nemohl být přesunut do %s." + +#: wp-admin/includes/comment.php:39 +msgid "You are not allowed to edit comments on this post, so you cannot edit this comment." +msgstr "Nemáte dostatečné oprávnění pro úpravy komentářů u tohoto příspěvku, takže nemůžete změnit ani tento komentář." + +#: wp-admin/includes/dashboard.php:28 +msgid "Right Now" +msgstr "Aktuální přehled" + +#: wp-admin/includes/dashboard.php:37 +#: wp-includes/default-widgets.php:606 +#: wp-includes/default-widgets.php:640 +msgid "Recent Comments" +msgstr "Nejnovější komentáře" + +#: wp-admin/includes/dashboard.php:52 +msgid "Incoming Links" +msgstr "Příchozí odkazy" + +#: wp-admin/includes/dashboard.php:56 +#: wp-admin/menu.php:184 +#: wp-admin/plugins.php:326 +#: wp-admin/update-core.php:169 +#: wp-admin/update-core.php:181 +#: wp-includes/js/tinymce/langs/wp-langs.php:254 +msgid "Plugins" +msgstr "Pluginy" + +#: wp-admin/includes/dashboard.php:60 +msgid "QuickPress" +msgstr "Rychlý příspěvek" + +#: wp-admin/includes/dashboard.php:64 +msgid "Recent Drafts" +msgstr "Nejnovější koncepty" + +#: wp-admin/includes/dashboard.php:70 +msgid "http://wordpress.org/development/" +msgstr "http://wordpress.org/development/" + +#: wp-admin/includes/dashboard.php:71 +msgid "http://wordpress.org/development/feed/" +msgstr "http://wordpress.org/development/feed/" + +#: wp-admin/includes/dashboard.php:72 +msgid "WordPress Blog" +msgstr "Blog vývojářů WordPressu" + +#: wp-admin/includes/dashboard.php:85 +msgid "http://planet.wordpress.org/" +msgstr "http://planet.wordpress.org/" + +#: wp-admin/includes/dashboard.php:86 +msgid "http://planet.wordpress.org/feed/" +msgstr "http://planet.wordpress.org/feed/" + +#: wp-admin/includes/dashboard.php:87 +msgid "Other WordPress News" +msgstr "Další užitečné novinky a informace o WordPressu" + +#: wp-admin/includes/dashboard.php:103 +#: wp-admin/includes/dashboard.php:510 +#: wp-admin/includes/dashboard.php:565 +msgid "View all" +msgstr "Zobrazit všechny" + +#: wp-admin/includes/dashboard.php:128 +#: wp-admin/includes/image-edit.php:74 +#: wp-admin/includes/media.php:1276 +#: wp-admin/includes/media.php:1510 +#: wp-admin/includes/meta-boxes.php:103 +#: wp-admin/includes/meta-boxes.php:149 +#: wp-admin/includes/nav-menu.php:189 +#: wp-admin/includes/template.php:65 +#: wp-admin/includes/template.php:1151 +#: wp-admin/includes/template.php:2272 +#: wp-admin/includes/template.php:2455 +#: wp-admin/includes/template.php:2542 +#: wp-admin/includes/theme-install.php:512 +#: wp-admin/press-this.php:114 +#: wp-admin/press-this.php:144 +#: wp-admin/press-this.php:172 +#: wp-admin/press-this.php:294 +#: wp-admin/widgets.php:310 +#: wp-includes/js/tinymce/langs/wp-langs.php:30 +#: wp-includes/script-loader.php:286 +#: wp-includes/script-loader.php:314 +msgid "Cancel" +msgstr "Zrušit" + +#: wp-admin/includes/dashboard.php:133 +msgid "Configure" +msgstr "Nastavení" + +#: wp-admin/includes/dashboard.php:145 +#: wp-includes/post-template.php:1014 +msgid "Submit" +msgstr "Potvrdit" + +#: wp-admin/includes/dashboard.php:219 +#: wp-admin/includes/dashboard.php:446 +#: wp-includes/post.php:4349 +msgid "Content" +msgstr "Obsah" + +#: wp-admin/includes/dashboard.php:224 +msgid "Post" +msgid_plural "Posts" +msgstr[0] "příspěvek" +msgstr[1] "příspěvky" +msgstr[2] "příspěvků" + +#: wp-admin/includes/dashboard.php:252 +msgid "Page" +msgid_plural "Pages" +msgstr[0] "stránka" +msgstr[1] "stránky" +msgstr[2] "stránek" + +#: wp-admin/includes/dashboard.php:264 +#: wp-includes/taxonomy.php:55 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "rubriku" +msgstr[1] "rubriky" +msgstr[2] "rubrik" + +#: wp-admin/includes/dashboard.php:276 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "štítek" +msgstr[1] "štítky" +msgstr[2] "štítků" + +#: wp-admin/includes/dashboard.php:295 +#: wp-includes/theme-compat/comments-popup.php:56 +msgid "Comment" +msgid_plural "Comments" +msgstr[0] "komentář" +msgstr[1] "komentáře" +msgstr[2] "komentářů" + +#: wp-admin/includes/dashboard.php:307 +msgctxt "Right Now" +msgid "Approved" +msgid_plural "Approved" +msgstr[0] "schválený" +msgstr[1] "schválené" +msgstr[2] "schválených" + +#: wp-admin/includes/dashboard.php:319 +msgid "Pending" +msgid_plural "Pending" +msgstr[0] "čekající na schválení" +msgstr[1] "čekající na schválení" +msgstr[2] "čekajících na schválení" + +#: wp-admin/includes/dashboard.php:331 +msgctxt "comment" +msgid "Spam" +msgid_plural "Spam" +msgstr[0] "spam" +msgstr[1] "spamy" +msgstr[2] "spamů" + +#: wp-admin/includes/dashboard.php:361 +#: wp-admin/includes/dashboard.php:371 +msgid "Change Theme" +msgstr "Změnit šablonu" + +#: wp-admin/includes/dashboard.php:365 +#, php-format +msgid "Theme <span class=\"b\">%1$s</span> with <span class=\"b\"><a href=\"widgets.php\">%2$s Widget</a></span>" +msgid_plural "Theme <span class=\"b\">%1$s</span> with <span class=\"b\"><a href=\"widgets.php\">%2$s Widgets</a></span>" +msgstr[0] "Používáte šablonu <span class=\"b\">%1$s</span>, kde máte aktivní <span class=\"b\"><a href=\"widgets.php\">%2$s widget</a></span>." +msgstr[1] "Používáte šablonu <span class=\"b\">%1$s</span>, kde máte aktivní <span class=\"b\"><a href=\"widgets.php\">%2$s widgety</a></span>." +msgstr[2] "Používáte šablonu <span class=\"b\">%1$s</span>, kde máte aktivních <span class=\"b\"><a href=\"widgets.php\">%2$s widgetů</a></span>." + +#: wp-admin/includes/dashboard.php:367 +#, php-format +msgid "Theme <span class=\"b\">%1$s</span> with <span class=\"b\">%2$s Widget</span>" +msgid_plural "Theme <span class=\"b\">%1$s</span> with <span class=\"b\">%2$s Widgets</span>" +msgstr[0] "Používáte šablonu <span class=\"b\">%1$s</span>, kde máte aktivní <span class=\"b\">%2$s widget</span>." +msgstr[1] "Používáte šablonu <span class=\"b\">%1$s</span>, kde máte aktivní <span class=\"b\">%2$s widgety</span>." +msgstr[2] "Používáte šablonu <span class=\"b\">%1$s</span>, kde máte aktivních <span class=\"b\">%2$s widgetů</span>." + +#: wp-admin/includes/dashboard.php:372 +#, php-format +msgid "Theme <span class=\"b\"><a href=\"themes.php\">%1$s</a></span>" +msgstr "Používáte šablonu <span class=\"b\"><a href=\"themes.php\">%1$s</a></span>" + +#: wp-admin/includes/dashboard.php:374 +#, php-format +msgid "Theme <span class=\"b\">%1$s</span>" +msgstr "Používáte šablonu <span class=\"b\">%1$s</span>" + +#: wp-admin/includes/dashboard.php:395 +#, php-format +msgid "Post published. <a href=\"%s\">View post</a> | <a href=\"%s\">Edit post</a>" +msgstr "Příspěvek byl publikován. <a href=\"%s\">Zobrazit příspěvek</a> | <a href=\"%s\">Upravit příspěvek</a>" + +#: wp-admin/includes/dashboard.php:397 +#, php-format +msgid "Post submitted. <a href=\"%s\">Preview post</a> | <a href=\"%s\">Edit post</a>" +msgstr "Příspěvek byl uložen. <a href=\"%s\">Zobrazit náhled příspěvku</a> | <a href=\"%s\">Upravit příspěvek</a>" + +#: wp-admin/includes/dashboard.php:399 +#, php-format +msgid "Draft saved. <a href=\"%s\">Preview post</a> | <a href=\"%s\">Edit post</a>" +msgstr "Koncept byl uložen. <a href=\"%s\">Zobrazit náhled příspěvku</a> | <a href=\"%s\">Upravit příspěvek</a>" + +#: wp-admin/includes/dashboard.php:412 +#, php-format +msgid "You can also try %s, easy blogging from anywhere on the Web." +msgstr "Můžete také vyzkoušet funkci %s, což je jednoduchý způsob publikace pomocí jediného kliknutí z jakékoli navštívené stránky." + +#: wp-admin/includes/dashboard.php:412 +#: wp-admin/options-writing.php:71 +#: wp-admin/options-writing.php:75 +#: wp-admin/press-this.php:306 +#: wp-admin/press-this.php:454 +#: wp-admin/tools.php:31 +#: wp-admin/tools.php:36 +msgid "Press This" +msgstr "Kliknout a publikovat" + +#: wp-admin/includes/dashboard.php:453 +#: wp-admin/includes/template.php:613 +#: wp-includes/default-widgets.php:1003 +msgid "Tags" +msgstr "Štítky" + +#: wp-admin/includes/dashboard.php:463 +#: wp-admin/includes/meta-boxes.php:31 +#: wp-admin/press-this.php:472 +#: wp-includes/script-loader.php:298 +msgid "Save Draft" +msgstr "Uložit koncept" + +#: wp-admin/includes/dashboard.php:464 +msgid "Reset" +msgstr "Smazat" + +#: wp-admin/includes/dashboard.php:466 +#: wp-admin/includes/meta-boxes.php:219 +#: wp-admin/includes/meta-boxes.php:220 +#: wp-admin/press-this.php:476 +msgid "Submit for Review" +msgstr "Odeslat ke schválení" + +#: wp-admin/includes/dashboard.php:480 +#: wp-admin/includes/dashboard.php:700 +#: wp-admin/includes/dashboard.php:788 +#: wp-admin/includes/dashboard.php:810 +#: wp-admin/includes/dashboard.php:849 +#: wp-admin/includes/dashboard.php:949 +msgid "Loading…" +msgstr "Načítání…" + +#: wp-admin/includes/dashboard.php:480 +#: wp-admin/includes/dashboard.php:700 +#: wp-admin/includes/dashboard.php:788 +#: wp-admin/includes/dashboard.php:810 +#: wp-admin/includes/dashboard.php:849 +msgid "This widget requires JavaScript." +msgstr "Tento widget vyžaduje JavaScript." + +#: wp-admin/includes/dashboard.php:513 +msgid "There are no drafts at the moment" +msgstr "Zatím nemáte žádné koncepty." + +#: wp-admin/includes/dashboard.php:574 +#: wp-admin/includes/meta-boxes.php:456 +#: wp-includes/theme-compat/comments-popup.php:62 +msgid "No comments yet." +msgstr "Zatím nemáte žádné komentáře." + +#: wp-admin/includes/dashboard.php:608 +#: wp-admin/includes/template.php:2102 +#: wp-admin/includes/template.php:2104 +msgid "Approve this comment" +msgstr "Schválit tento komentář" + +#: wp-admin/includes/dashboard.php:609 +#: wp-admin/includes/template.php:2100 +#: wp-admin/includes/template.php:2105 +msgid "Unapprove this comment" +msgstr "Odmítnout tento komentář" + +#: wp-admin/includes/dashboard.php:611 +#: wp-admin/includes/template.php:2126 +msgid "Reply to this comment" +msgstr "Odpovědět na tento komentář" + +#: wp-admin/includes/dashboard.php:611 +#: wp-admin/includes/template.php:2126 +#: wp-includes/comment-template.php:1014 +msgid "Reply" +msgstr "Odpovědět" + +#: wp-admin/includes/dashboard.php:612 +#: wp-admin/includes/template.php:2109 +msgid "Mark this comment as spam" +msgstr "Označit tento komentář jako spam" + +#. translators: mark as spam link +#: wp-admin/includes/dashboard.php:612 +#: wp-admin/includes/template.php:2109 +msgctxt "verb" +msgid "Spam" +msgstr "Spam" + +#: wp-admin/includes/dashboard.php:616 +#: wp-admin/includes/template.php:2119 +msgid "Move this comment to the trash" +msgstr "Přesunout tento komentář do koše" + +#: wp-admin/includes/dashboard.php:616 +#: wp-admin/includes/template.php:2119 +msgctxt "verb" +msgid "Trash" +msgstr "Odstranit" + +#. translators: 1: comment author, 2: post link, 3: notification if the comment is pending +#: wp-admin/includes/dashboard.php:642 +#, php-format +msgid "From %1$s on %2$s%3$s" +msgstr "Od %1$s u %2$s%3$s" + +#: wp-admin/includes/dashboard.php:643 +msgid "[Pending]" +msgstr "[Čekající na schválení]" + +#: wp-admin/includes/dashboard.php:650 +#: wp-includes/comment-template.php:683 +#: wp-includes/theme-compat/comments-popup.php:56 +msgid "Pingback" +msgstr "Pingback" + +#: wp-admin/includes/dashboard.php:653 +#: wp-includes/comment-template.php:682 +#: wp-includes/theme-compat/comments-popup.php:56 +msgid "Trackback" +msgstr "Trackback" + +#. translators: %1$s is type of comment, %2$s is link to the post +#: wp-admin/includes/dashboard.php:662 +#, php-format +msgctxt "dashboard" +msgid "%1$s on %2$s" +msgstr "%1$s u %2$s" + +#: wp-admin/includes/dashboard.php:695 +#: wp-includes/default-widgets.php:686 +msgid "Number of comments to show:" +msgstr "Počet zobrazených komentářů:" + +#: wp-admin/includes/dashboard.php:696 +msgid "(at most 30)" +msgstr "(maximálně 30)" + +#: wp-admin/includes/dashboard.php:716 +#: wp-admin/includes/dashboard.php:832 +#: wp-includes/default-widgets.php:788 +#, php-format +msgid "<strong>RSS Error</strong>: %s" +msgstr "<strong>Chyba RSS zdroje</strong>: %s" + +#: wp-admin/includes/dashboard.php:723 +msgid "This dashboard widget queries <a href=\"http://blogsearch.google.com/\">Google Blog Search</a> so that when another blog links to your site it will show up here. It has found no incoming links… yet. It’s okay — there is no rush." +msgstr "Tento nástěnkový widget využívá službu <a href=\"http://blogsearch.google.com/\">Google Blog Search</a>, která bude automaticky sledovat, jestli někdo odkazuje na váš web. Zatím sice nebyl žádný příchozí odkaz nalezen, ale to je v pořádku. Neděje se nic podivného, jen o vás musí nejdříve někdo něco napsat a potom se tady hned objeví konkrétní odkaz." + +#: wp-admin/includes/dashboard.php:747 +#: wp-admin/includes/dashboard.php:749 +#: wp-admin/includes/post.php:1217 +msgid "Somebody" +msgstr "Někdo" + +#. translators: incoming links feed, %1$s is other person, %3$s is content +#: wp-admin/includes/dashboard.php:761 +#, php-format +msgid "%1$s linked here <a href=\"%2$s\">saying</a>, \"%3$s\"" +msgstr "%1$s odkazuje na tento web a <a href=\"%2$s\">píše</a>: \"%3$s\"" + +#. translators: incoming links feed, %1$s is other person, %3$s is content +#: wp-admin/includes/dashboard.php:764 +#, php-format +msgid "%1$s linked here saying, \"%3$s\"" +msgstr "%1$s odkazuje na tento web a píše: \"%3$s\"" + +#. translators: incoming links feed, %4$s is the date +#: wp-admin/includes/dashboard.php:769 +#, php-format +msgid "on %4$s" +msgstr "u %4$s" + +#: wp-admin/includes/dashboard.php:867 +msgid "Most Popular" +msgstr "Nejoblíbenější" + +#: wp-admin/includes/dashboard.php:867 +msgid "Newest Plugins" +msgstr "Nejnovější" + +#: wp-admin/includes/dashboard.php:867 +msgid "Recently Updated" +msgstr "Naposledy aktualizované" + +#: wp-admin/includes/dashboard.php:925 +#: wp-admin/includes/theme-install.php:304 +msgid "Install" +msgstr "Instalovat" + +#: wp-admin/includes/dashboard.php:1024 +#: wp-includes/default-widgets.php:734 +msgid "Unknown Feed" +msgstr "Neznámý RSS zdroj" + +#: wp-admin/includes/file.php:11 +msgid "Main Index Template" +msgstr "Zobrazení úvodní stránky" + +#: wp-admin/includes/file.php:12 +#: wp-admin/includes/file.php:39 +msgid "Stylesheet" +msgstr "Kaskádové styly (CSS)" + +#: wp-admin/includes/file.php:13 +msgid "Visual Editor Stylesheet" +msgstr "CSS vizuálního editoru" + +#: wp-admin/includes/file.php:14 +msgid "RTL Stylesheet" +msgstr "CSS s podporou RTL (text psaný zprava doleva)" + +#: wp-admin/includes/file.php:16 +msgid "Popup Comments" +msgstr "Komentáře v novém okně" + +#: wp-admin/includes/file.php:17 +msgid "Footer" +msgstr "Zápatí" + +#: wp-admin/includes/file.php:19 +#: wp-admin/sidebar.php:27 +#: wp-admin/sidebar.php:87 +#: wp-admin/widgets.php:278 +#: wp-includes/widgets.php:490 +msgid "Sidebar" +msgstr "Postranní panel" + +#: wp-admin/includes/file.php:20 +#: wp-includes/default-widgets.php:219 +#: wp-includes/default-widgets.php:226 +#: wp-includes/theme-compat/sidebar.php:57 +msgid "Archives" +msgstr "Archiv" + +#: wp-admin/includes/file.php:21 +msgid "Author Template" +msgstr "Zobrazení autora" + +#: wp-admin/includes/file.php:22 +msgid "Tag Template" +msgstr "Zobrazení štítku" + +#: wp-admin/includes/file.php:23 +msgid "Category Template" +msgstr "Zobrazení rubriky" + +#: wp-admin/includes/file.php:24 +#: wp-admin/includes/meta-boxes.php:551 +msgid "Page Template" +msgstr "Šablona stránky" + +#: wp-admin/includes/file.php:25 +#: wp-admin/plugin-install.php:26 +#: wp-admin/theme-install.php:32 +msgid "Search Results" +msgstr "Výsledky vyhledávání" + +#: wp-admin/includes/file.php:26 +msgid "Search Form" +msgstr "Vyhledávací formulář" + +#: wp-admin/includes/file.php:27 +msgid "Single Post" +msgstr "Zobrazení příspěvku" + +#: wp-admin/includes/file.php:28 +msgid "404 Template" +msgstr "Chybová stránka 404" + +#: wp-admin/includes/file.php:29 +msgid "Links Template" +msgstr "Zobrazení odkazů" + +#: wp-admin/includes/file.php:30 +msgid "Theme Functions" +msgstr "Funkce šablony" + +#: wp-admin/includes/file.php:31 +msgid "Attachment Template" +msgstr "Zobrazení souboru" + +#: wp-admin/includes/file.php:32 +msgid "Image Attachment Template" +msgstr "Zobrazení obrázku" + +#: wp-admin/includes/file.php:33 +msgid "Video Attachment Template" +msgstr "Zobrazení videa" + +#: wp-admin/includes/file.php:34 +msgid "Audio Attachment Template" +msgstr "Zobrazení audia" + +#: wp-admin/includes/file.php:35 +msgid "Application Attachment Template" +msgstr "Zobrazení jiného souboru" + +#: wp-admin/includes/file.php:36 +msgid "my-hacks.php (legacy hacks support)" +msgstr "my-hacks.php (podpora pro další úpravy)" + +#: wp-admin/includes/file.php:37 +msgid ".htaccess (for rewrite rules )" +msgstr ".htaccess (pravidla pro přesměrování pomocí rewrite)" + +#: wp-admin/includes/file.php:39 +msgid "Comments Template" +msgstr "Zobrazení komentářů" + +#: wp-admin/includes/file.php:39 +msgid "Popup Comments Template" +msgstr "Zobrazení komentářů v novém okně" + +#: wp-admin/includes/file.php:220 +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 "Nelze bohužel upravovat soubory se znaky „..“ v názvu. Pokud se pokoušíte upravit soubor z hlavního adresáře WordPressu, stačí sem napsat pouze jeho název." + +#: wp-admin/includes/file.php:226 +msgid "Sorry, that file cannot be edited." +msgstr "Tento soubor nelze bohužel upravovat." + +#: wp-admin/includes/file.php:264 +#: wp-admin/includes/file.php:384 +msgid "The uploaded file exceeds the <code>upload_max_filesize</code> directive in <code>php.ini</code>." +msgstr "Velikost nahrávaného souboru překročila nastavení <code>upload_max_filesize</code> v souboru <code>php.ini</code>." + +#: wp-admin/includes/file.php:265 +#: wp-admin/includes/file.php:385 +msgid "The uploaded file exceeds the <em>MAX_FILE_SIZE</em> directive that was specified in the HTML form." +msgstr "Velikost nahrávaného souboru překročila nastavení <em>MAX_FILE_SIZE</em>, které bylo definováno v HTML formuláři." + +#: wp-admin/includes/file.php:266 +#: wp-admin/includes/file.php:386 +msgid "The uploaded file was only partially uploaded." +msgstr "Soubor byl nahrán pouze částečně." + +#: wp-admin/includes/file.php:267 +#: wp-admin/includes/file.php:387 +msgid "No file was uploaded." +msgstr "Žádný soubor nebyl nahrán." + +#: wp-admin/includes/file.php:269 +#: wp-admin/includes/file.php:389 +msgid "Missing a temporary folder." +msgstr "Dočasný adresář neexistuje." + +#: wp-admin/includes/file.php:270 +#: wp-admin/includes/file.php:390 +msgid "Failed to write file to disk." +msgstr "Nepodařilo se zapsat soubor na disk." + +#: wp-admin/includes/file.php:271 +#: wp-admin/includes/file.php:391 +msgid "File upload stopped by extension." +msgstr "Nahrávání souboru bylo přerušeno kvůli rozšíření." + +#: wp-admin/includes/file.php:288 +#: wp-admin/includes/file.php:407 +msgid "Invalid form submission." +msgstr "Odeslání formuláře se nezdařilo." + +#: wp-admin/includes/file.php:297 +msgid "File is empty. Please upload something more substantial." +msgstr "Soubor je prázdný. Zkuste prosím příště nahrát něco smysluplnějšího." + +#: wp-admin/includes/file.php:299 +#: 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 "Soubor je prázdný (má nulovou velikost). Zkuste prosím nahrát nějaký jiný soubor. Tato chyba může být také způsobena i zákazem nahrávání souborů (file_uploads), nebo nahráváním větších souborů než jaký je povolený limit (post_max_size a upload_max_filesize) v konfiguraci vašeho serveru (php.ini)." + +#: wp-admin/includes/file.php:305 +msgid "Specified file failed upload test." +msgstr "Vybraný soubor neprošel kontrolou během nahrávání." + +#: wp-admin/includes/file.php:318 +#: wp-admin/includes/file.php:432 +msgid "File type does not meet security guidelines. Try another." +msgstr "Tento typ souboru nesplňuje bezpečnostní pravidla. Zkuste nahrát jiný soubor." + +#: wp-admin/includes/file.php:415 +msgid "File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini." +msgstr "Soubor je prázdný! Nahrajte, prosím, nějaký jiný soubor. Tato chyba může být způsobena zákazem nahrávání souborů v konfiguraci vašeho serveru (php.ini)." + +#: wp-admin/includes/file.php:419 +msgid "Specified file does not exist." +msgstr "Vybraný soubor neexistuje." + +#: wp-admin/includes/file.php:482 +msgid "Invalid URL Provided." +msgstr "Poskytnuté URL není správné." + +#: wp-admin/includes/file.php:486 +#: wp-admin/includes/file.php:490 +msgid "Could not create Temporary file." +msgstr "Nepodařilo se vytvořit dočasný soubor." + +#: wp-admin/includes/file.php:593 +#: wp-admin/includes/file.php:629 +msgid "Could not retrieve file from archive." +msgstr "Nepodařilo se získat soubor z archivu." + +#: wp-admin/includes/file.php:639 +msgid "Could not extract file from archive." +msgstr "Nepodařilo se rozbalit archiv." + +#: wp-admin/includes/file.php:642 +#: wp-admin/includes/file.php:717 +#: wp-admin/includes/file.php:746 +msgid "Could not copy file." +msgstr "Soubor se nepodařilo zkopírovat." + +#: wp-admin/includes/file.php:675 +msgid "Empty archive." +msgstr "Archiv je prázdný." + +#: wp-admin/includes/file.php:937 +msgid "<strong>Error:</strong> There was an error connecting to the server, Please verify the settings are correct." +msgstr "<strong>Chyba:</strong> Při připojování k serveru došlo k chybě. Ověřte prosím, že je vše správně nastaveno." + +#: wp-admin/includes/file.php:945 +msgid "FTP" +msgstr "FTP" + +#: wp-admin/includes/file.php:947 +msgid "FTPS (SSL)" +msgstr "FTPS (SSL)" + +#: wp-admin/includes/file.php:949 +msgid "SSH2" +msgstr "SSH2" + +#: wp-admin/includes/file.php:970 +msgid "Connection Information" +msgstr "Informace o připojení" + +#: wp-admin/includes/file.php:972 +#: wp-admin/includes/template.php:750 +#: wp-admin/install.php:101 +#: wp-admin/install.php:225 +#: wp-admin/user-edit.php:225 +#: wp-admin/user-new.php:212 +#: wp-includes/general-template.php:258 +#: wp-login.php:469 +#: wp-login.php:591 +msgid "Username" +msgstr "Uživatelské jméno" + +#: wp-admin/includes/file.php:973 +#: wp-admin/includes/template.php:953 +#: wp-admin/install.php:229 +#: wp-admin/options-writing.php:94 +#: wp-admin/user-new.php:235 +#: wp-includes/general-template.php:259 +#: wp-login.php:595 +msgid "Password" +msgstr "Heslo" + +#: wp-admin/includes/file.php:974 +msgid "To perform the requested action, WordPress needs to access to your web server." +msgstr "Pro splnění požadované akce se WordPress musí připojit k webovému serveru." + +#: wp-admin/includes/file.php:978 +msgid "Please enter your FTP or SSH credentials to proceed." +msgstr "Zadejte prosím přihlašovací údaje k FTP nebo SSH, aby bylo možné pokračovat." + +#: wp-admin/includes/file.php:979 +msgid "FTP/SSH Username" +msgstr "Uživatelské jméno (FTP/SSH)" + +#: wp-admin/includes/file.php:980 +msgid "FTP/SSH Password" +msgstr "Heslo (FTP/SSH)" + +#: wp-admin/includes/file.php:982 +msgid "Please enter your FTP credentials to proceed." +msgstr "Zadejte prosím přihlašovací údaje k FTP, aby bylo možné pokračovat." + +#: wp-admin/includes/file.php:983 +msgid "FTP Username" +msgstr "Uživatelské jméno (FTP)" + +#: wp-admin/includes/file.php:984 +msgid "FTP Password" +msgstr "Heslo (FTP)" + +#: wp-admin/includes/file.php:988 +msgid "If you do not remember your credentials, you should contact your web host." +msgstr "Pokud přihlašovací údaje neznáte, kontaktujte prosím svého poskytovatele hostingu." + +#: wp-admin/includes/file.php:992 +msgid "Hostname" +msgstr "Server" + +#: wp-admin/includes/file.php:1008 +msgid "Authentication Keys" +msgstr "Autentifikační klíče" + +#: wp-admin/includes/file.php:1010 +msgid "Public Key:" +msgstr "Veřejný klíč:" + +#: wp-admin/includes/file.php:1011 +msgid "Private Key:" +msgstr "Soukromý klíč:" + +#: wp-admin/includes/file.php:1014 +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 "Vložte umístění na serveru, kde jsou uložené klíče. Pokud je vyžadováno heslo, vložte ho do horního pole." + +#: wp-admin/includes/file.php:1019 +#: wp-admin/includes/file.php:1021 +msgid "Connection Type" +msgstr "Typ spojení" + +#: wp-admin/includes/file.php:1042 +msgid "Proceed" +msgstr "Spustit" + +#: wp-admin/includes/image-edit.php:19 +#: wp-admin/includes/image-edit.php:544 +msgid "Image data does not exist. Please re-upload the image." +msgstr "Příslušná obrázková data bohužel neexistují. Zkuste prosím nahrát obrázek znovu." + +#: wp-admin/includes/image-edit.php:40 +msgid "Crop" +msgstr "Oříznout" + +#: wp-admin/includes/image-edit.php:44 +msgid "Rotate counter-clockwise" +msgstr "Otočit doleva" + +#: wp-admin/includes/image-edit.php:45 +msgid "Rotate clockwise" +msgstr "Otočit doprava" + +#: wp-admin/includes/image-edit.php:47 +msgid "Image rotation is not supported by your web host (function imagerotate() is missing)" +msgstr "Váš poskytovatel hostingu bohužel nepodporuje otáčení obrázků (funkce imagerotate() není dostupná)" + +#: wp-admin/includes/image-edit.php:53 +msgid "Flip vertically" +msgstr "Překlopit svisle" + +#: wp-admin/includes/image-edit.php:54 +msgid "Flip horizontally" +msgstr "Překlopit vodorovně" + +#: wp-admin/includes/image-edit.php:57 +#: wp-includes/js/tinymce/langs/wp-langs.php:214 +#: wp-includes/js/tinymce/wp-mce-help.php:209 +msgid "Redo" +msgstr "Znovu" + +#: wp-admin/includes/image-edit.php:82 +msgid "Scale Image" +msgstr "Změnit velikost obrázku" + +#: wp-admin/includes/image-edit.php:84 +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 if you make the image larger it may become fuzzy." +msgstr "Můžete změnit velikost původního obrázku pouze se zachováním vzájemného poměru jeho stran. Pokud se chystáte obrázek ještě dále upravovat (např. oříznout, otočit, atd.), tak by měla být nejdříve změněna právě jeho velikost, aby byl výsledek všech provedených úprav co nejlepší. A ještě jedno upozornění: Když budete obrázek zvětšovat (objeví se varovný červený vykřičník), tak může být ve výsledku nepěkně rozmazaný." + +#: wp-admin/includes/image-edit.php:85 +#, php-format +msgid "Original dimensions %s" +msgstr "Aktuální rozměry: %s" + +#: wp-admin/includes/image-edit.php:89 +#: wp-includes/js/tinymce/langs/wp-langs.php:320 +msgid "Scale" +msgstr "Změnit velikost" + +#: wp-admin/includes/image-edit.php:99 +msgid "Discard any changes and restore the original image." +msgstr "Zrušíte všechny dosavadní úpravy a obnovíte původní obrázek." + +#: wp-admin/includes/image-edit.php:102 +msgid "Previously edited copies of the image will not be deleted." +msgstr "Dříve upravované verze tohoto obrázku nebudou smazány." + +#: wp-admin/includes/image-edit.php:106 +msgid "Restore image" +msgstr "Obnovit obrázek" + +#: wp-admin/includes/image-edit.php:117 +msgid "Image Crop" +msgstr "Oříznout obrázek" + +#: wp-admin/includes/image-edit.php:118 +#: wp-admin/includes/image-edit.php:164 +msgid "(help)" +msgstr "(Nápověda)" + +#: wp-admin/includes/image-edit.php:120 +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 "Obrázek může být jednoduše oříznut tak, že na něj kliknete levým tlačítkem myši a tažením vyberete požadovanou část obrázku (dole pak můžete vidět aktuální rozměry vybrané oblasti)." + +#: wp-admin/includes/image-edit.php:121 +#: wp-admin/user-edit.php:208 +msgid "Keyboard Shortcuts" +msgstr "Klávesové zkratky" + +#: wp-admin/includes/image-edit.php:123 +msgid "Arrow: move by 10px" +msgstr "Šipka: posun vybrané oblasti o 10 pixelů ve směru šipky" + +#: wp-admin/includes/image-edit.php:124 +msgid "Shift + arrow: move by 1px" +msgstr "Shift + šipka: posun vybrané oblasti o 1 pixel ve směru šipky" + +#: wp-admin/includes/image-edit.php:125 +msgid "Ctrl + arrow: resize by 10px" +msgstr "Ctrl + šipka: změna velikosti vybrané oblasti o 10 pixelů ve směru šipky" + +#: wp-admin/includes/image-edit.php:126 +msgid "Ctrl + Shift + arrow: resize by 1px" +msgstr "Ctrl + Shift + šipka: změna velikosti vybrané oblasti o 1 pixel ve směru šipky" + +#: wp-admin/includes/image-edit.php:127 +msgid "Shift + drag: lock aspect ratio" +msgstr "Shift + tažení myši: zachování poměru stran u vybírané oblasti podle původního obrázku" + +#: wp-admin/includes/image-edit.php:130 +msgid "Crop Aspect Ratio" +msgstr "Oříznutí se zachováním zvoleného poměru stran" + +#: wp-admin/includes/image-edit.php:131 +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 "Můžete nejdříve zadat poměr stran pro vybíranou část obrázku a poté ho zachovat držením klávesy Shift, zatímco označujete potřebnou oblast myší. Poměr stran můžete nastavit např. 1:1 (čtverec), 4:3, 16:9, atd. Pokud už máte nějakou oblast vybranou a poměr stran vložíte až potom, tak bude podle něj celá vybraná oblast okamžitě upravena." + +#: wp-admin/includes/image-edit.php:133 +msgid "Crop Selection" +msgstr "Oříznutí podle zadaných rozměrů vybrané oblasti" + +#: wp-admin/includes/image-edit.php:134 +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 "I když jste již třeba s výběrem oblasti pro oříznutí začali, tak může být dodatečně upravena i ručním vložením nových hodnot (pixelů). Všimněte si, že jsou tyto hodnoty automaticky přizpůsobovány původním rozměrům obrázku. Minimální rozměry vybrané oblasti pro oříznutí však musí dosahovat alespoň velikosti náhledu (viz menu Nastavení - Média)." + +#: wp-admin/includes/image-edit.php:139 +msgid "Aspect ratio:" +msgstr "Poměr stran:" + +#: wp-admin/includes/image-edit.php:148 +msgid "Selection:" +msgstr "Rozměry vybrané oblasti:" + +#: wp-admin/includes/image-edit.php:163 +msgid "Thumbnail Settings" +msgstr "Náhled a jeho přizpůsobení" + +#: wp-admin/includes/image-edit.php:165 +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 "Náhled může být upraven i jinak než původní obrázek (a jeho další velikosti), např. když chcete vytvořit přesně čtvercový tvar nebo oříznout jen malou část původního obrázku, která má na úvodní stránce webu v podobě náhledu upoutat čtenáře. Můžete si tedy vybrat, zda se provedené úpravy obrázku projeví ve všech jeho velikostech, nebo třeba jen u náhledu." + +#: wp-admin/includes/image-edit.php:169 +msgid "Current thumbnail" +msgstr "Aktuální náhled" + +#: wp-admin/includes/image-edit.php:173 +msgid "Apply changes to:" +msgstr "Použít provedené úpravy na:" + +#: wp-admin/includes/image-edit.php:177 +msgid "All image sizes" +msgstr "Všechny velikosti obrázku" + +#: wp-admin/includes/image-edit.php:181 +#: wp-admin/includes/media.php:844 +#: wp-includes/js/tinymce/langs/wp-langs.php:426 +msgid "Thumbnail" +msgstr "Náhled" + +#: wp-admin/includes/image-edit.php:185 +msgid "All sizes except thumbnail" +msgstr "Všechny velikosti obrázku kromě náhledu" + +#: wp-admin/includes/image-edit.php:195 +msgid "There are unsaved changes that will be lost. 'OK' to continue, 'Cancel' to return to the Image Editor." +msgstr "Některé úpravy obrázku zatím nejsou uloženy a budou ztraceny. Kliknutím na tlačítko 'OK' budete pokračovat bez uložení těchto úprav, nebo se můžete pomocí tlačítka 'Storno' vrátit zpět k neuloženému obrázku." + +#: wp-admin/includes/image-edit.php:427 +msgid "Cannot load image metadata." +msgstr "Nepodařilo se načíst obrázková metadata." + +#: wp-admin/includes/image-edit.php:482 +msgid "Cannot save image metadata." +msgstr "Nepodařilo se uložit obrázková metadata." + +#: wp-admin/includes/image-edit.php:487 +msgid "Image metadata is inconsistent." +msgstr "Obrázková metadata jsou nekonzistentní." + +#: wp-admin/includes/image-edit.php:489 +msgid "Image restored successfully." +msgstr "Původní obrázek byl úspěšně obnoven." + +#: wp-admin/includes/image-edit.php:502 +msgid "Unable to create new image." +msgstr "Nepodařilo se vytvořit nový obrázek." + +#: wp-admin/includes/image-edit.php:528 +msgid "Error while saving the scaled image. Please reload the page and try again." +msgstr "Během ukládání upraveného obrázku se objevila neznámá chyba. Obnovte prosím stránku a zkuste to znovu." + +#: wp-admin/includes/image-edit.php:536 +msgid "Nothing to save, the image has not changed." +msgstr "Není třeba nic ukládat, obrázek se vůbec nezměnil." + +#: wp-admin/includes/image-edit.php:579 +msgid "Unable to save the image." +msgstr "Obrázek se nepodařilo uložit." + +#: wp-admin/includes/image-edit.php:664 +msgid "Image saved" +msgstr "Obrázek byl uložen." + +#: wp-admin/includes/media.php:18 +msgid "From Computer" +msgstr "Nahrát z počítače" + +#: wp-admin/includes/media.php:19 +msgid "From URL" +msgstr "Přidat z URL adresy" + +#: wp-admin/includes/media.php:20 +msgid "Gallery" +msgstr "Galerie" + +#: wp-admin/includes/media.php:21 +#: wp-admin/upload.php:124 +msgid "Media Library" +msgstr "Knihovna médií" + +#: wp-admin/includes/media.php:53 +#, php-format +msgid "Gallery (%s)" +msgstr "Galerie (%s)" + +#: wp-admin/includes/media.php:304 +msgid "Uploads" +msgstr "Nahrané soubory" + +#: wp-admin/includes/media.php:304 +#: wp-admin/includes/template.php:3456 +msgid "WordPress" +msgstr "WordPress" + +#: wp-admin/includes/media.php:367 +#: wp-includes/js/tinymce/langs/wp-langs.php:413 +msgid "Add an Image" +msgstr "Přidat obrázek" + +#: wp-admin/includes/media.php:369 +#: wp-includes/js/tinymce/langs/wp-langs.php:414 +msgid "Add Video" +msgstr "Přidat video" + +#: wp-admin/includes/media.php:371 +#: wp-includes/js/tinymce/langs/wp-langs.php:415 +msgid "Add Audio" +msgstr "Přidat audio" + +#: wp-admin/includes/media.php:373 +#: wp-includes/js/tinymce/langs/wp-langs.php:412 +msgid "Add Media" +msgstr "Přidat další soubory" + +#: wp-admin/includes/media.php:375 +#, php-format +msgid "Upload/Insert %s" +msgstr "Nahrát/vložit: %s" + +#: wp-admin/includes/media.php:533 +#: wp-admin/includes/media.php:637 +#: wp-admin/includes/media.php:695 +#: wp-admin/includes/media.php:750 +msgid "Saved." +msgstr "Uloženo." + +#: wp-admin/includes/media.php:844 +#: wp-admin/install.php:256 +#: wp-includes/js/tinymce/langs/wp-langs.php:427 +msgid "Medium" +msgstr "Střední velikost" + +#: wp-admin/includes/media.php:844 +msgid "Large" +msgstr "Velký obrázek" + +#: wp-admin/includes/media.php:844 +#: wp-includes/js/tinymce/langs/wp-langs.php:428 +msgid "Full Size" +msgstr "Původní velikost" + +#: wp-admin/includes/media.php:881 +#: wp-includes/js/tinymce/langs/wp-langs.php:425 +msgid "Size" +msgstr "Velikost" + +#: wp-admin/includes/media.php:913 +#: wp-admin/includes/media.php:1072 +msgid "File URL" +msgstr "URL souboru" + +#: wp-admin/includes/media.php:914 +msgid "Post URL" +msgstr "URL zobrazeného souboru" + +#: wp-admin/includes/media.php:937 +#: wp-admin/includes/media.php:2048 +msgid "Alternate Text" +msgstr "Alternativní text" + +#: wp-admin/includes/media.php:938 +#: wp-admin/includes/media.php:2051 +msgid "Alt text for the image, e.g. “The Mona Lisa”" +msgstr "Alternativní text obrázku, např. „Moje babička v kuchyni“" + +#. translators: alignment +#: wp-admin/includes/media.php:942 +#: wp-admin/includes/media.php:2055 +#: wp-includes/js/tinymce/langs/wp-langs.php:42 +#: wp-includes/js/tinymce/langs/wp-langs.php:281 +msgid "Alignment" +msgstr "Zarovnání" + +#: wp-admin/includes/media.php:989 +msgid "Empty Title filled from filename." +msgstr "Nevyplněný název bude automaticky doplněn podle příslušného názvu souboru." + +#: wp-admin/includes/media.php:1053 +msgid "Caption" +msgstr "Titulek" + +#: wp-admin/includes/media.php:1062 +#: wp-includes/js/tinymce/langs/wp-langs.php:291 +msgid "Link URL" +msgstr "URL odkazu" + +#: wp-admin/includes/media.php:1065 +#: wp-admin/includes/media.php:2076 +#: wp-includes/js/tinymce/langs/wp-langs.php:431 +msgid "Enter a link URL or click above for presets." +msgstr "Vložte ručně URL odkazu nebo klikněte na výše nabízené možnosti." + +#: wp-admin/includes/media.php:1068 +#: wp-admin/includes/media.php:1745 +#: wp-admin/includes/meta-boxes.php:557 +#: wp-admin/includes/meta-boxes.php:558 +#: wp-admin/includes/template.php:1018 +msgid "Order" +msgstr "Pořadí" + +#: wp-admin/includes/media.php:1076 +msgid "Location of the uploaded file." +msgstr "Umístění nahraného souboru." + +#: wp-admin/includes/media.php:1170 +#: wp-admin/includes/media.php:1731 +msgid "Show" +msgstr "Zobrazit" + +#: wp-admin/includes/media.php:1171 +#: wp-admin/includes/media.php:1732 +msgid "Hide" +msgstr "Skrýt" + +#: wp-admin/includes/media.php:1226 +#: wp-includes/js/tinymce/langs/wp-langs.php:421 +msgid "Edit Image" +msgstr "Upravit obrázek" + +#: wp-admin/includes/media.php:1244 +msgid "File name:" +msgstr "Název souboru:" + +#: wp-admin/includes/media.php:1245 +msgid "File type:" +msgstr "Typ souboru:" + +#: wp-admin/includes/media.php:1246 +msgid "Upload date:" +msgstr "Datum nahrání souboru:" + +#: wp-admin/includes/media.php:1248 +msgid "Dimensions:" +msgstr "Rozměry:" + +#: wp-admin/includes/media.php:1268 +#: wp-admin/includes/media.php:2184 +#: wp-admin/includes/media.php:2193 +msgid "Insert into Post" +msgstr "Vložit do příspěvku" + +#: wp-admin/includes/media.php:1274 +#, php-format +msgid "You are about to delete <strong>%s</strong>." +msgstr "Chystáte se smazat <strong>%s</strong>." + +#: wp-admin/includes/media.php:1275 +#: wp-admin/upgrade.php:62 +#: wp-admin/upgrade.php:94 +msgid "Continue" +msgstr "Pokračovat" + +#: wp-admin/includes/media.php:1294 +#: wp-includes/script-loader.php:381 +msgid "Use as featured image" +msgstr "Použít jako náhledový obrázek" + +#: wp-admin/includes/media.php:1437 +#, php-format +msgid "Sorry, you have filled your storage quota (%s MB)." +msgstr "Omlouváme se, ale už jste zcela zaplnili svůj vymezený prostor (%s MB)." + +#: wp-admin/includes/media.php:1449 +msgid "Select Files" +msgstr "Vybrat soubory" + +#: wp-admin/includes/media.php:1496 +msgid "Choose files to upload" +msgstr "Vyberte soubory k nahrání" + +#: wp-admin/includes/media.php:1498 +msgid "Cancel Upload" +msgstr "Zrušit nahrávání" + +#: wp-admin/includes/media.php:1500 +#: wp-admin/includes/media.php:1513 +#, php-format +msgid "Maximum upload file size: %d%s" +msgstr "Maximální velikost nahrávaného souboru: %d%s" + +#: wp-admin/includes/media.php:1502 +msgid "After a file has been uploaded, you can add titles and descriptions." +msgstr "Jakmile bude soubor nahrán, můžete přidat jeho titulek a popis." + +#: wp-admin/includes/media.php:1515 +msgid "If you want to use all capabilities of the uploader, like uploading multiple files at once, please upgrade to lighttpd 1.5." +msgstr "Pokud chcete využívat všechny možnosti našeho nahrávacího skriptu (např. nahrávání více souborů najednou), proveďte prosím upgrade lighttpd na verzi 1.5." + +#: wp-admin/includes/media.php:1546 +msgid "Add media files from your computer" +msgstr "Nahrát mediální soubor z počítače" + +#: wp-admin/includes/media.php:1575 +#: wp-admin/includes/media.php:1755 +#: wp-admin/includes/media.php:1995 +#: wp-admin/media-upload.php:92 +msgid "Save all changes" +msgstr "Uložit všechny změny" + +#: wp-admin/includes/media.php:1607 +msgid "Add media file from URL" +msgstr "Přidat mediální soubor z URL adresy" + +#: wp-admin/includes/media.php:1730 +msgid "All Tabs:" +msgstr "Podrobné informace:" + +#: wp-admin/includes/media.php:1734 +msgid "Sort Order:" +msgstr "Nastavit pořadí:" + +#: wp-admin/includes/media.php:1735 +#: wp-admin/includes/media.php:1803 +msgid "Ascending" +msgstr "Vzestupně" + +#: wp-admin/includes/media.php:1736 +#: wp-admin/includes/media.php:1806 +msgid "Descending" +msgstr "Sestupně" + +#: wp-admin/includes/media.php:1737 +msgctxt "verb" +msgid "Clear" +msgstr "Vymazat pořadí" + +#: wp-admin/includes/media.php:1744 +#: wp-admin/menu.php:96 +#: wp-admin/menu.php:222 +#: wp-includes/post.php:42 +msgid "Media" +msgstr "Média" + +#: wp-admin/includes/media.php:1746 +#: wp-includes/post-template.php:1217 +msgid "Actions" +msgstr "Akce" + +#: wp-admin/includes/media.php:1762 +msgid "Gallery Settings" +msgstr "Nastavení galerie" + +#: wp-admin/includes/media.php:1767 +msgid "Link thumbnails to:" +msgstr "Náhled bude odkazovat na:" + +#: wp-admin/includes/media.php:1772 +msgid "Image File" +msgstr "Soubor s obrázkem" + +#: wp-admin/includes/media.php:1775 +msgid "Attachment Page" +msgstr "Stránku se zobrazením přílohy" + +#: wp-admin/includes/media.php:1782 +msgid "Order images by:" +msgstr "Seřadit obrázky podle:" + +#: wp-admin/includes/media.php:1787 +msgid "Menu order" +msgstr "Aktuální pořadí" + +#: wp-admin/includes/media.php:1789 +msgid "Date/Time" +msgstr "Datum/Čas" + +#: wp-admin/includes/media.php:1790 +msgid "Random" +msgstr "Náhodný" + +#: wp-admin/includes/media.php:1798 +msgid "Order:" +msgstr "Seřadit:" + +#: wp-admin/includes/media.php:1813 +msgid "Gallery columns:" +msgstr "Počet sloupců galerie:" + +#: wp-admin/includes/media.php:1832 +msgid "Insert gallery" +msgstr "Vložit galerii do příspěvku" + +#: wp-admin/includes/media.php:1833 +msgid "Update gallery settings" +msgstr "Aktualizovat nastavení galerie" + +#: wp-admin/includes/media.php:1876 +#: wp-admin/includes/media.php:1878 +#: wp-admin/upload.php:267 +#: wp-admin/upload.php:269 +msgid "Search Media" +msgstr "Vyhledat média" + +#: wp-admin/includes/media.php:1901 +msgid "All Types" +msgstr "Všechny typy souborů" + +#: wp-admin/includes/media.php:1965 +msgid "Filter »" +msgstr "Zobrazit výběr »" + +#: wp-admin/includes/media.php:2014 +msgid "Image Caption" +msgstr "Titulek obrázku" + +#: wp-admin/includes/media.php:2028 +msgid "Insert an image from another web site" +msgstr "Vložit obrázek z jiného webu" + +#: wp-admin/includes/media.php:2032 +#: wp-includes/js/tinymce/langs/wp-langs.php:274 +msgid "Image URL" +msgstr "URL obrázku" + +#: wp-admin/includes/media.php:2040 +msgid "Image Title" +msgstr "Název obrázku" + +#: wp-admin/includes/media.php:2070 +msgid "Link Image To:" +msgstr "Obrázek bude odkazovat na:" + +#: wp-admin/includes/media.php:2075 +msgid "Link to image" +msgstr "Odkaz na obrázek" + +#: wp-admin/includes/media.php:2096 +msgid "Audio File URL" +msgstr "URL audio souboru" + +#: wp-admin/includes/media.php:2108 +msgid "Link text, e.g. “Still Alive by Jonathan Coulton”" +msgstr "Text odkazu, např. „Záznam koncertu“" + +#: wp-admin/includes/media.php:2126 +msgid "Video URL" +msgstr "URL videa" + +#: wp-admin/includes/media.php:2138 +msgid "Link text, e.g. “Lucy on YouTube“" +msgstr "Text odkazu, např. „Video ze svatby“" + +#: wp-admin/includes/media.php:2168 +msgid "Link text, e.g. “Ransom Demands (PDF)”" +msgstr "Text odkazu, např. „Aktuální ceníky (PDF)“" + +#: wp-admin/includes/media.php:2224 +#, php-format +msgid "You are using the Flash uploader. Problems? Try the <a href=\"%s\">Browser uploader</a> instead." +msgstr "Používáte nahrávání pomocí Flashe. Objevily se nějaké problémy? Zkuste raději <a href=\"%s\">jednoduché nahrávání pomocí prohlížeče</a>." + +#: wp-admin/includes/media.php:2235 +msgid "You are using the Browser uploader." +msgstr "V tuto chvíli používáte jednoduché nahrávání pomocí prohlížeče." + +#: wp-admin/includes/media.php:2239 +#, php-format +msgid "Try the <a href=\"%s\">Flash uploader</a> instead." +msgstr "Používáte jednoduché nahrávání pomocí prohlížeče. Vyzkoušejte místo něj také <a href=\"%s\">nahrávání pomocí Flashe</a>." + +#: wp-admin/includes/meta-boxes.php:33 +#: wp-includes/script-loader.php:297 +msgid "Save as Pending" +msgstr "Uložit do fronty na schválení" + +#: wp-admin/includes/meta-boxes.php:41 +msgid "Preview Changes" +msgstr "Zobrazit náhled" + +#: wp-admin/includes/meta-boxes.php:56 +msgid "Status:" +msgstr "Stav:" + +#: wp-admin/includes/meta-boxes.php:61 +#: wp-admin/includes/meta-boxes.php:91 +#: wp-includes/script-loader.php:303 +msgid "Privately Published" +msgstr "Publikován jako soukromý" + +#: wp-admin/includes/meta-boxes.php:77 +msgid "Unsaved" +msgstr "Neuloženo" + +#: wp-admin/includes/meta-boxes.php:102 +#: wp-admin/includes/meta-boxes.php:148 +#: wp-admin/includes/template.php:2541 +#: wp-includes/script-loader.php:285 +msgid "OK" +msgstr "OK" + +#: wp-admin/includes/meta-boxes.php:110 +msgid "Visibility:" +msgstr "Viditelnost:" + +#: wp-admin/includes/meta-boxes.php:115 +#: wp-admin/includes/meta-boxes.php:145 +#: wp-admin/includes/template.php:965 +#: wp-admin/includes/template.php:1107 +#: wp-admin/includes/template.php:3519 +#: wp-includes/post.php:514 +#: wp-includes/post.php:534 +#: wp-includes/script-loader.php:299 +msgid "Private" +msgstr "Soukromé" + +#: wp-admin/includes/meta-boxes.php:118 +#: wp-admin/includes/meta-boxes.php:143 +#: wp-admin/includes/template.php:3517 +msgid "Password protected" +msgstr "Chráněno heslem" + +#: wp-admin/includes/meta-boxes.php:121 +#: wp-includes/script-loader.php:301 +msgid "Public, Sticky" +msgstr "Veřejný, zvýrazněný" + +#: wp-admin/includes/meta-boxes.php:124 +#: wp-admin/includes/meta-boxes.php:139 +#: wp-includes/script-loader.php:300 +msgid "Public" +msgstr "Veřejné" + +#: wp-admin/includes/meta-boxes.php:141 +msgid "Stick this post to the front page" +msgstr "Zvýraznit příspěvek na úvodní stránce" + +#: wp-admin/includes/meta-boxes.php:144 +#: wp-includes/post-template.php:1014 +msgid "Password:" +msgstr "Heslo:" + +#: wp-admin/includes/meta-boxes.php:162 +#, php-format +msgid "Scheduled for: <b>%1$s</b>" +msgstr "Naplánováno na: <b>%1$s</b>" + +#: wp-admin/includes/meta-boxes.php:164 +#, php-format +msgid "Published on: <b>%1$s</b>" +msgstr "Publikováno: <b>%1$s</b>" + +#: wp-admin/includes/meta-boxes.php:166 +#: wp-admin/includes/meta-boxes.php:174 +msgid "Publish <b>immediately</b>" +msgstr "Publikovat <b>okamžitě</b>" + +#: wp-admin/includes/meta-boxes.php:168 +#, php-format +msgid "Schedule for: <b>%1$s</b>" +msgstr "Naplánovat na: <b>%1$s</b>" + +#: wp-admin/includes/meta-boxes.php:170 +#, php-format +msgid "Publish on: <b>%1$s</b>" +msgstr "Publikovat: <b>%1$s</b>" + +#: wp-admin/includes/meta-boxes.php:212 +#: wp-admin/includes/meta-boxes.php:213 +#: wp-includes/script-loader.php:294 +msgid "Schedule" +msgstr "Naplánovat" + +#: wp-admin/includes/meta-boxes.php:265 +#: wp-admin/includes/meta-boxes.php:661 +#: wp-admin/includes/widgets.php:177 +#: wp-admin/press-this.php:546 +#: wp-includes/script-loader.php:230 +#: wp-includes/script-loader.php:282 +msgid "Add" +msgstr "Vytvořit" + +#: wp-admin/includes/meta-boxes.php:275 +#: wp-admin/includes/meta-boxes.php:320 +msgid "You cannot modify this taxonomy." +msgstr "Nemůžete bohužel upravovat tuto taxonomii." + +#: wp-admin/includes/meta-boxes.php:301 +#: wp-admin/includes/meta-boxes.php:636 +#: wp-admin/includes/nav-menu.php:852 +#: wp-admin/press-this.php:492 +msgid "Most Used" +msgstr "Nejpoužívanější" + +#. translators: %s: add new taxonomy label +#: wp-admin/includes/meta-boxes.php:328 +#: wp-admin/press-this.php:514 +#, php-format +msgid "+ %s" +msgstr "+ %s" + +#: wp-admin/includes/meta-boxes.php:360 +msgid "Excerpts are optional hand-crafted summaries of your content that can be used in your theme. <a href=\"http://codex.wordpress.org/Excerpt\" target=\"_blank\">Learn more about manual excerpts.</a>" +msgstr "Stručné výpisy jsou volitelné, ručně psané souhrny obsahu příspěvku, které můžete použít v šabloně. <a href=\"http://codex.wordpress.org/Excerpt\" target=\"_blank\">Podrobnosti o stručných výpisech naleznete v dokumentaci.</a>" + +#: wp-admin/includes/meta-boxes.php:375 +msgid "Already pinged:" +msgstr "Už odkázáno (pingem):" + +#: wp-admin/includes/meta-boxes.php:384 +msgid "Send trackbacks to:" +msgstr "Zaslat trackbacky na:" + +#: wp-admin/includes/meta-boxes.php:384 +msgid "Separate multiple URLs with spaces" +msgstr "Více URL oddělte mezerami" + +#: wp-admin/includes/meta-boxes.php:385 +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 <a href=\"http://codex.wordpress.org/Introduction_to_Blogging#Managing_Comments\" target=\"_blank\">pingbacks</a>, no other action necessary." +msgstr "Trackbacky jsou způsobem, jak upozornit jiný web v případě, že se o něm ve svém článku zmiňujete. Pokud však odkazujete na web fungující ve WordPressu, tak bude upozorněn automaticky pomocí <a href=\"http://codex.wordpress.org/Introduction_to_Blogging#Managing_Comments\" target=\"_blank\">pingbacku</a> a žádná další akce už není potřeba." + +#: wp-admin/includes/meta-boxes.php:408 +msgid "Custom fields can be used to add extra metadata to a post that you can <a href=\"http://codex.wordpress.org/Using_Custom_Fields\" target=\"_blank\">use in your theme</a>." +msgstr "Uživatelská pole mohou být použita k přidávání dodatečných informací, které pak můžete <a href=\"http://codex.wordpress.org/Using_Custom_Fields\" target=\"_blank\">použít v šabloně</a>." + +#: wp-admin/includes/meta-boxes.php:424 +msgid "Allow comments." +msgstr "Povolit komentáře." + +#: wp-admin/includes/meta-boxes.php:425 +#, php-format +msgid "Allow <a href=\"%s\" target=\"_blank\">trackbacks and pingbacks</a> on this page." +msgstr "Povolit <a href=\"%s\" target=\"_blank\">trackbacky a pingbacky</a>." + +#: wp-admin/includes/meta-boxes.php:425 +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:470 +msgid "Show comments" +msgstr "Zobrazit komentáře" + +#: wp-admin/includes/meta-boxes.php:538 +msgid "(no parent)" +msgstr "(nemá nadřazenou stránku)" + +#: wp-admin/includes/meta-boxes.php:541 +#: wp-admin/includes/meta-boxes.php:542 +#: wp-admin/includes/template.php:1004 +msgid "Parent" +msgstr "Nadřazená stránka" + +#: wp-admin/includes/meta-boxes.php:550 +#: wp-admin/includes/template.php:1025 +msgid "Template" +msgstr "Šablona stránky" + +#: wp-admin/includes/meta-boxes.php:552 +#: wp-admin/includes/template.php:1030 +msgid "Default Template" +msgstr "Výchozí šablona" + +#: wp-admin/includes/meta-boxes.php:559 +msgid "Need help? Use the Help tab in the upper right of your screen." +msgstr "Potřebujete pomoc? Pokud si nevíte s něčím rady, použijte záložku Nápověda, kterou naleznete v pravém horním rohu." + +#: wp-admin/includes/meta-boxes.php:587 +msgid "Visit Link" +msgstr "Navštívit odkaz" + +#: wp-admin/includes/meta-boxes.php:595 +msgid "Keep this link private" +msgstr "Soukromý odkaz" + +#: wp-admin/includes/meta-boxes.php:606 +#: wp-admin/link-manager.php:215 +#, php-format +msgid "" +"You are about to delete this link '%s'\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Chystáte se smazat odkaz '%s'\n" +" Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#: wp-admin/includes/meta-boxes.php:635 +#: wp-includes/taxonomy.php:359 +msgid "All Categories" +msgstr "Všechny rubriky" + +#: wp-admin/includes/meta-boxes.php:657 +#: wp-admin/includes/meta-boxes.php:659 +msgid "+ Add New Category" +msgstr "+ vytvořit novou rubriku" + +#: wp-admin/includes/meta-boxes.php:660 +msgid "New category name" +msgstr "Název nové rubriky" + +#: wp-admin/includes/meta-boxes.php:681 +msgid "<code>_blank</code> — new window or tab." +msgstr "<code>_blank</code> — Otevřít odkaz v novém okně nebo záložce prohlížeče." + +#: wp-admin/includes/meta-boxes.php:684 +msgid "<code>_top</code> — current window or tab, with no frames." +msgstr "<code>_top</code> - Otevřít odkaz v aktuálním okně nebo záložce prohlížeče, a to v celém rozsahu i při použití rámů na webu." + +#: wp-admin/includes/meta-boxes.php:687 +msgid "<code>_none</code> — same window or tab." +msgstr "<code>_none</code> — Otevřít odkaz v aktuálním okně nebo záložce prohlížeče." + +#: wp-admin/includes/meta-boxes.php:689 +msgid "Choose the target frame for your link." +msgstr "Vyberte si cílové zobrazení (atribut target) svého odkazu." + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:736 +msgid "rel:" +msgstr "rel:" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:743 +#: wp-admin/includes/meta-boxes.php:744 +msgid "identity" +msgstr "identita" + +#: wp-admin/includes/meta-boxes.php:747 +msgid "another web address of mine" +msgstr "moje další webová adresa" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:751 +#: wp-admin/includes/meta-boxes.php:752 +msgid "friendship" +msgstr "přátelství" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:754 +msgid "contact" +msgstr "kontakt" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:756 +msgid "acquaintance" +msgstr "známost" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:758 +msgid "friend" +msgstr "přítel" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:760 +#: wp-admin/includes/meta-boxes.php:793 +#: wp-admin/includes/meta-boxes.php:816 +msgid "none" +msgstr "žádný" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:764 +#: wp-admin/includes/meta-boxes.php:765 +msgid "physical" +msgstr "osobní" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:768 +msgid "met" +msgstr "setkání" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:772 +#: wp-admin/includes/meta-boxes.php:773 +msgid "professional" +msgstr "pracovní" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:776 +msgid "co-worker" +msgstr "spolupracovník" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:779 +msgid "colleague" +msgstr "kolega" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:783 +#: wp-admin/includes/meta-boxes.php:784 +msgid "geographical" +msgstr "geografický" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:787 +msgid "co-resident" +msgstr "spolubydlící" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:790 +msgid "neighbor" +msgstr "soused" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:797 +#: wp-admin/includes/meta-boxes.php:798 +msgid "family" +msgstr "rodina" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:801 +msgid "child" +msgstr "dítě" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:804 +msgid "kin" +msgstr "příbuzný" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:807 +msgid "parent" +msgstr "rodič" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:810 +msgid "sibling" +msgstr "sourozenec" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:813 +msgid "spouse" +msgstr "manžel(ka)" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:820 +#: wp-admin/includes/meta-boxes.php:821 +msgid "romantic" +msgstr "romantický" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:824 +msgid "muse" +msgstr "múza" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:827 +msgid "crush" +msgstr "zamilovaný(á)" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:830 +msgid "date" +msgstr "partner(ka)" + +#. translators: xfn: http://gmpg.org/xfn/ +#: wp-admin/includes/meta-boxes.php:833 +msgid "sweetheart" +msgstr "miláček" + +#: wp-admin/includes/meta-boxes.php:840 +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 <a href=\"http://gmpg.org/xfn/\">XFN</a>." +msgstr "Pokud odkazujete na nějakou osobu, můžete také specifikovat váš vztah k ní. Pro více informací o této možnosti navštivte web <a href=\"http://gmpg.org/xfn/\">XFN</a>." + +#: wp-admin/includes/meta-boxes.php:856 +msgid "Image Address" +msgstr "URL adresa obrázku" + +#: wp-admin/includes/meta-boxes.php:860 +msgid "RSS Address" +msgstr "Adresa RSS" + +#: wp-admin/includes/meta-boxes.php:864 +msgid "Notes" +msgstr "Poznámky" + +#: wp-admin/includes/meta-boxes.php:868 +#: wp-admin/includes/plugin-install.php:314 +#: wp-admin/includes/plugin-install.php:323 +#: wp-admin/includes/template.php:710 +msgid "Rating" +msgstr "Hodnocení" + +#: wp-admin/includes/meta-boxes.php:877 +msgid "(Leave at 0 for no rating.)" +msgstr "(Pokud nechcete hodnotit, tak ponechte 0.)" + +#: wp-admin/includes/misc.php:596 +#: wp-admin/user-edit.php:201 +msgid "Admin Color Scheme" +msgstr "Barevné schéma administrace" + +#. translators: %s: title of menu item in draft status +#: wp-admin/includes/nav-menu.php:76 +#, php-format +msgid "%s (Pending)" +msgstr "%s (Nepublikováno)" + +#: wp-admin/includes/nav-menu.php:100 +msgid "Move up" +msgstr "Posunout nahoru" + +#: wp-admin/includes/nav-menu.php:113 +msgid "Move down" +msgstr "Posunout dolů" + +#: wp-admin/includes/nav-menu.php:115 +#: wp-admin/includes/nav-menu.php:117 +msgid "Edit Menu Item" +msgstr "Upravit položku menu" + +#: wp-admin/includes/nav-menu.php:133 +msgid "Navigation Label" +msgstr "Text odkazu" + +#: wp-admin/includes/nav-menu.php:139 +msgid "Title Attribute" +msgstr "Atribut title" + +#: wp-admin/includes/nav-menu.php:145 +#: wp-admin/includes/nav-menu.php:1112 +msgid "Link Target" +msgstr "Zobrazení odkazu" + +#: wp-admin/includes/nav-menu.php:147 +msgid "Same window or tab" +msgstr "V aktuálním okně (záložce)" + +#: wp-admin/includes/nav-menu.php:148 +msgid "New window or tab" +msgstr "V novém okně (záložce)" + +#: wp-admin/includes/nav-menu.php:154 +msgid "CSS Classes (optional)" +msgstr "CSS třídy (volitelné)" + +#: wp-admin/includes/nav-menu.php:168 +msgid "The description will be displayed in the menu if the current theme supports it." +msgstr "Popis bude zobrazen přímo v menu pouze v případě, že to aktuálně používaná šablona podporuje." + +#: wp-admin/includes/nav-menu.php:175 +#, php-format +msgid "Original: %s" +msgstr "Původní odkaz: %s" + +#: wp-admin/includes/nav-menu.php:188 +#: wp-admin/includes/template.php:1836 +#: wp-admin/users.php:436 +#: wp-admin/users.php:509 +msgid "Remove" +msgstr "Odstranit" + +#: wp-admin/includes/nav-menu.php:372 +msgid "Theme Locations" +msgstr "Umístění v šabloně" + +#: wp-admin/includes/nav-menu.php:373 +msgid "Custom Links" +msgstr "Uživatelské odkazy" + +#: wp-admin/includes/nav-menu.php:469 +#: wp-admin/nav-menus.php:453 +msgid "The current theme does not natively support menus, but you can use the “Custom Menu” widget to add any menus you create here to the theme’s sidebar." +msgstr "Aktuálně používaná šablona sice nepodporuje přímé zobrazování menu, ale přesto můžete použít alespoň widget „Menu“, pomocí kterého jednoduše zobrazíte vytvořené menu např. v postranním panelu." + +#: wp-admin/includes/nav-menu.php:478 +#, php-format +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] "Ve vaší šabloně je definována %s oblast, kam můžete umístit vlastní menu. Zvolte si konkrétní menu, které zde chcete zobrazit." +msgstr[1] "Ve vaší šabloně jsou definovány %s oblasti, kam můžete umístit vlastní menu. Zvolte si konkrétní menu, která zde chcete zobrazit." +msgstr[2] "Ve vaší šabloně je definováno %s oblastí, kam můžete umístit vlastní menu. Zvolte si konkrétní menu, která zde chcete zobrazit." + +#: wp-admin/includes/nav-menu.php:543 +msgid "Label" +msgstr "Text" + +#: wp-admin/includes/nav-menu.php:544 +msgid "Menu Item" +msgstr "Položka menu" + +#: wp-admin/includes/nav-menu.php:551 +#: wp-admin/includes/nav-menu.php:765 +#: wp-admin/includes/nav-menu.php:937 +msgid "Add to Menu" +msgstr "Přidat do menu" + +#: wp-admin/includes/nav-menu.php:595 +#: wp-admin/includes/nav-menu.php:807 +msgid "No items." +msgstr "Žádné položky." + +#: wp-admin/includes/nav-menu.php:645 +msgid "Most Recent" +msgstr "Nejnovější" + +#: wp-admin/includes/nav-menu.php:646 +#: wp-admin/includes/nav-menu.php:853 +msgid "View All" +msgstr "Zobrazit vše" + +#: wp-admin/includes/nav-menu.php:647 +#: wp-admin/includes/nav-menu.php:676 +#: wp-admin/includes/nav-menu.php:678 +#: wp-admin/includes/nav-menu.php:854 +#: wp-admin/includes/nav-menu.php:903 +#: wp-admin/includes/nav-menu.php:905 +#: wp-admin/includes/plugin-install.php:132 +#: wp-admin/includes/template.php:3274 +#: wp-admin/includes/template.php:3276 +#: wp-admin/includes/theme-install.php:162 +#: wp-admin/plugin-install.php:24 +#: wp-admin/theme-install.php:30 +#: wp-content/plugins/akismet/akismet.php:769 +#: wp-includes/default-widgets.php:176 +#: wp-includes/general-template.php:163 +msgid "Search" +msgstr "Hledat" + +#: wp-admin/includes/nav-menu.php:690 +#: wp-admin/includes/nav-menu.php:917 +#: wp-content/plugins/akismet/akismet.php:933 +msgid "No results found." +msgstr "Nebylo nic nalezeno." + +#: wp-admin/includes/nav-menu.php:714 +#, php-format +msgctxt "nav menu front page title" +msgid "Home: %s" +msgstr "Úvodní stránka: %s" + +#: wp-admin/includes/nav-menu.php:724 +msgctxt "nav menu home label" +msgid "Home" +msgstr "Úvodní stránka" + +#: wp-admin/includes/nav-menu.php:760 +#: wp-admin/includes/nav-menu.php:932 +#: wp-admin/update-core.php:190 +#: wp-admin/update-core.php:197 +#: wp-admin/update-core.php:263 +#: wp-admin/update-core.php:270 +#: wp-includes/js/tinymce/langs/wp-langs.php:116 +msgid "Select All" +msgstr "Vybrat vše" + +#: wp-admin/includes/nav-menu.php:1067 +msgid "Select menu items (pages, categories, links) from the boxes at left to begin building your custom menu." +msgstr "Zaškrtnutím si vyberte konkrétní položky budoucího menu (např. stránky, rubriky) z příslušných sekcí v levém sloupci (můžete si vytvořit i vlastní uživatelské odkazy) a pomocí tlačítka Přidat do menu tak začnete postupně vytvářet své vlastní menu." + +#: wp-admin/includes/nav-menu.php:1078 +#, php-format +msgid "The Walker class named <strong>%s</strong> does not exist." +msgstr "PHP třída Walker s názvem <strong>%s</strong> neexistuje." + +#: wp-admin/includes/nav-menu.php:1087 +msgid "Click Save Menu to make pending menu items public." +msgstr "Kliknutím na tlačítko Aktualizovat menu budou všechny provedené úpravy menu okamžitě zveřejněny." + +#: wp-admin/includes/nav-menu.php:1110 +msgid "Show advanced menu properties" +msgstr "Zobrazit pokročilé vlastnosti jednotlivých položek menu" + +#: wp-admin/includes/nav-menu.php:1113 +msgid "CSS Classes" +msgstr "CSS třídy" + +#: wp-admin/includes/plugin-install.php:46 +msgid "An Unexpected HTTP Error occurred during the API request." +msgstr "Během zpracování API požadavku došlo k neočekávané HTTP chybě." + +#: wp-admin/includes/plugin-install.php:50 +msgid "An unknown error occurred." +msgstr "Objevila se nějaká neznámá chyba." + +#: wp-admin/includes/plugin-install.php:130 +msgid "Plugins extend and expand the functionality of WordPress. You may automatically install plugins from the <a href=\"http://wordpress.org/extend/plugins/\">WordPress Plugin Directory</a> or upload a plugin in .zip format via this page." +msgstr "Pluginy významně zlepšují a rozšiřují možnosti WordPressu. Můžete je vyhledat a automaticky instalovat z <a href=\"http://wordpress.org/extend/plugins/\">oficiálního adresáře pluginů pro WordPress</a>, nebo nahrát získaný instalační balíček ve formátu .zip." + +#: wp-admin/includes/plugin-install.php:133 +msgid "Search for plugins by keyword, author, or tag." +msgstr "Vyhledávání pluginů podle názvu, autora nebo štítku." + +#: wp-admin/includes/plugin-install.php:136 +msgid "Popular tags" +msgstr "Nejoblíbenější štítky" + +#: wp-admin/includes/plugin-install.php:137 +msgid "You may also browse based on the most popular tags in the Plugin Directory:" +msgstr "Můžete si také vybrat plugin podle nejoblíbenějších štítků v oficiálním adresáři pluginů pro WordPress:" + +#: wp-admin/includes/plugin-install.php:154 +#, php-format +msgid "%d plugin" +msgstr "%d plugin" + +#: wp-admin/includes/plugin-install.php:154 +#, php-format +msgid "%d plugins" +msgstr "%d pluginů" + +#: wp-admin/includes/plugin-install.php:170 +#: wp-admin/includes/theme-install.php:157 +msgid "Term" +msgstr "Název" + +#: wp-admin/includes/plugin-install.php:172 +msgctxt "Plugin Installer" +msgid "Tag" +msgstr "Štítek" + +#: wp-admin/includes/plugin-install.php:175 +#: wp-admin/includes/plugin-install.php:176 +#: wp-admin/plugins.php:681 +msgid "Search Plugins" +msgstr "Hledat pluginy" + +#: wp-admin/includes/plugin-install.php:192 +#: wp-admin/includes/plugin-install.php:208 +#: wp-admin/includes/plugin-install.php:244 +#: wp-admin/includes/plugin-install.php:261 +msgid "Try again" +msgstr "Zkuste to znovu" + +#: wp-admin/includes/plugin-install.php:221 +msgid "Install a plugin in .zip format" +msgstr "Instalovat plugin v podobě .zip souboru" + +#: wp-admin/includes/plugin-install.php:222 +msgid "If you have a plugin in a .zip format, you may install it by uploading it here." +msgstr "Pokud máte nějaký plugin v podobě instalačního balíčku, můžete ho zde nahrát do WordPressu, čímž bude automaticky nainstalován." + +#: wp-admin/includes/plugin-install.php:225 +msgid "Plugin zip file" +msgstr ".zip soubor pluginu" + +#: wp-admin/includes/plugin-install.php:227 +#: wp-admin/includes/plugin-install.php:370 +#: wp-admin/includes/plugin-install.php:536 +#: wp-admin/includes/theme-install.php:284 +#: wp-admin/includes/theme-install.php:518 +msgid "Install Now" +msgstr "Instalovat" + +#: wp-admin/includes/plugin-install.php:313 +#: wp-admin/includes/plugin-install.php:322 +#: wp-includes/js/tinymce/langs/wp-langs.php:257 +msgid "Version" +msgstr "Verze" + +#: wp-admin/includes/plugin-install.php:331 +msgid "No plugins match your request." +msgstr "Nebyl nalezen žádný plugin, který by odpovídal vašemu požadavku." + +#: wp-admin/includes/plugin-install.php:355 +#: wp-admin/includes/plugin.php:132 +#: wp-admin/plugins.php:623 +#, php-format +msgid "By %s" +msgstr "Autor: %s" + +#: wp-admin/includes/plugin-install.php:362 +#, php-format +msgid "More information about %s" +msgstr "Podrobnější informace o pluginu %s" + +#: wp-admin/includes/plugin-install.php:362 +#: wp-admin/includes/theme-install.php:320 +msgid "Details" +msgstr "Podrobnosti" + +#: wp-admin/includes/plugin-install.php:370 +#, php-format +msgid "Install %s" +msgstr "Instalovat %s" + +#: wp-admin/includes/plugin-install.php:374 +#, php-format +msgid "Update to version %s" +msgstr "Aktualizovat na nejnovější verzi %s" + +#: wp-admin/includes/plugin-install.php:374 +msgid "Update Now" +msgstr "Aktualizovat" + +#: wp-admin/includes/plugin-install.php:378 +msgid "This plugin is already installed and is up to date" +msgstr "Nejnovější verze tohoto pluginu už byla nainstalována" + +#: wp-admin/includes/plugin-install.php:378 +msgid "Installed" +msgstr "Přehled pluginů" + +#: wp-admin/includes/plugin-install.php:391 +#: wp-admin/includes/plugin-install.php:575 +#: wp-admin/includes/plugin-install.php:583 +#: wp-admin/includes/theme-install.php:333 +#, php-format +msgid "(based on %s rating)" +msgid_plural "(based on %s ratings)" +msgstr[0] "(hodnotil %s uživatel)" +msgstr[1] "(hodnotili %s uživatelé)" +msgstr[2] "(hodnotilo %s uživatelů)" + +#: wp-admin/includes/plugin-install.php:393 +#: wp-admin/includes/plugin-install.php:577 +#: wp-admin/includes/theme-install.php:335 +msgid "5 stars" +msgstr "5 hvězdiček" + +#: wp-admin/includes/plugin-install.php:394 +#: wp-admin/includes/plugin-install.php:578 +#: wp-admin/includes/theme-install.php:336 +msgid "4 stars" +msgstr "4 hvězdičky" + +#: wp-admin/includes/plugin-install.php:395 +#: wp-admin/includes/plugin-install.php:579 +#: wp-admin/includes/theme-install.php:337 +msgid "3 stars" +msgstr "3 hvězdičky" + +#: wp-admin/includes/plugin-install.php:396 +#: wp-admin/includes/plugin-install.php:580 +#: wp-admin/includes/theme-install.php:338 +msgid "2 stars" +msgstr "2 hvězdičky" + +#: wp-admin/includes/plugin-install.php:397 +#: wp-admin/includes/plugin-install.php:581 +#: wp-admin/includes/theme-install.php:339 +msgid "1 star" +msgstr "1 hvězdička" + +#: wp-admin/includes/plugin-install.php:511 +#: wp-admin/update.php:105 +msgid "Plugin Install" +msgstr "Instalace pluginů" + +#: wp-admin/includes/plugin-install.php:540 +#: wp-admin/includes/theme-install.php:523 +msgid "Install Update Now" +msgstr "Instalovat aktuální verzi" + +#: wp-admin/includes/plugin-install.php:543 +#, php-format +msgid "Newer Version (%s) Installed" +msgstr "Novější verze pluginu (%s) byla nainstalována" + +#: wp-admin/includes/plugin-install.php:546 +msgid "Latest Version Installed" +msgstr "Nejnovější verze pluginu byla nainstalována" + +#. translators: For Your Information +#: wp-admin/includes/plugin-install.php:552 +msgid "FYI" +msgstr "Základní informace" + +#: wp-admin/includes/plugin-install.php:555 +#: wp-admin/includes/theme-install.php:322 +#: wp-includes/js/tinymce/wp-mce-help.php:242 +msgid "Version:" +msgstr "Verze:" + +#: wp-admin/includes/plugin-install.php:557 +#: wp-admin/includes/theme-install.php:323 +msgid "Author:" +msgstr "Autor:" + +#: wp-admin/includes/plugin-install.php:559 +#: wp-admin/includes/theme-install.php:325 +msgid "Last Updated:" +msgstr "Poslední aktualizace:" + +#: wp-admin/includes/plugin-install.php:562 +#: wp-admin/includes/theme-install.php:327 +msgid "Requires WordPress Version:" +msgstr "Nejnižší požadovaná verze WordPressu:" + +#: wp-admin/includes/plugin-install.php:562 +#: wp-admin/includes/theme-install.php:327 +#, php-format +msgid "%s or higher" +msgstr "%s a novější" + +#: wp-admin/includes/plugin-install.php:564 +#: wp-admin/includes/theme-install.php:329 +msgid "Compatible up to:" +msgstr "Kompatibilní až do verze:" + +#: wp-admin/includes/plugin-install.php:566 +#: wp-admin/includes/theme-install.php:331 +msgid "Downloaded:" +msgstr "Počet stažení:" + +#: wp-admin/includes/plugin-install.php:566 +#: wp-admin/includes/theme-install.php:331 +#, php-format +msgid "%s time" +msgid_plural "%s times" +msgstr[0] "%s-krát" +msgstr[1] "%s-krát" +msgstr[2] "%s-krát" + +#: wp-admin/includes/plugin-install.php:568 +msgid "WordPress.org Plugin Page »" +msgstr "Oficiální stránka pluginu v adresáři WordPressu »" + +#: wp-admin/includes/plugin-install.php:570 +msgid "Plugin Homepage »" +msgstr "Domácí stránka pluginu »" + +#: wp-admin/includes/plugin-install.php:574 +msgid "Average Rating" +msgstr "Průměrné hodnocení" + +#: wp-admin/includes/plugin-install.php:589 +msgid "<strong>Warning:</strong> This plugin has <strong>not been tested</strong> with your current version of WordPress." +msgstr "<strong>Upozornění:</strong> Tento plugin zatím <strong>nebyl testován</strong> na vámi používané verzi WordPressu." + +#: wp-admin/includes/plugin-install.php:592 +msgid "<strong>Warning:</strong> This plugin has <strong>not been marked as compatible</strong> with your version of WordPress." +msgstr "<strong>Upozornění:</strong> Tento plugin pravděpodobně není <strong>kompatibilní</strong> s vámi používanou verzí WordPressu." + +#: wp-admin/includes/plugin.php:92 +#, php-format +msgid "The <code>%1$s</code> plugin header is deprecated. Use <code>%2$s</code> instead." +msgstr "Hlavička pluginu <code>%1$s</code> už není nadále podporována. Použijte raději <code>%2$s</code>." + +#: wp-admin/includes/plugin.php:123 +msgid "Visit plugin homepage" +msgstr "Navštívit web pluginu" + +#: wp-admin/includes/plugin.php:128 +#: wp-admin/plugins.php:622 +#: wp-includes/theme.php:242 +msgid "Visit author homepage" +msgstr "Navštívit autorův web" + +#: wp-admin/includes/plugin.php:373 +msgid "Advanced caching plugin." +msgstr "Plugin pro pokročilé cachování." + +#: wp-admin/includes/plugin.php:374 +msgid "Custom database class." +msgstr "Vlastní databázová třída." + +#: wp-admin/includes/plugin.php:375 +msgid "Custom database error message." +msgstr "Vlastní zpráva o databázové chybě." + +#: wp-admin/includes/plugin.php:376 +msgid "Custom install script." +msgstr "Vlastní instalační skript." + +#: wp-admin/includes/plugin.php:377 +msgid "Custom maintenance message." +msgstr "Vlastní zpráva o probíhající údržbě webu." + +#: wp-admin/includes/plugin.php:378 +msgid "External object cache." +msgstr "Externí objektová cache." + +#: wp-admin/includes/plugin.php:382 +msgid "Executed before Multisite is loaded." +msgstr "Skript provedený před načtením sítě webů." + +#: wp-admin/includes/plugin.php:383 +msgid "Custom site deleted message." +msgstr "Vlastní zpráva o smazaném síťovém webu." + +#: wp-admin/includes/plugin.php:384 +msgid "Custom site inactive message." +msgstr "Vlastní zpráva o neaktivním síťovém webu." + +#: wp-admin/includes/plugin.php:385 +msgid "Custom site suspended message." +msgstr "Vlastní zpráva o pozastaveném síťovém webu." + +#: wp-admin/includes/plugin.php:498 +msgid "The plugin generated unexpected output." +msgstr "Plugin vygeneroval neočekávaný výstup." + +#: wp-admin/includes/plugin.php:584 +msgid "One of the plugins is invalid." +msgstr "Jeden z pluginů je špatný." + +#: wp-admin/includes/plugin.php:670 +#, php-format +msgid "Could not fully remove the plugin(s) %s." +msgstr "Nepodařilo se zcela smazat plugin(y) %s." + +#: wp-admin/includes/plugin.php:731 +msgid "Invalid plugin path." +msgstr "Neplatná cesta k pluginu." + +#: wp-admin/includes/plugin.php:733 +msgid "Plugin file does not exist." +msgstr "Plugin neexistuje." + +#: wp-admin/includes/plugin.php:737 +msgid "The plugin does not have a valid header." +msgstr "Plugin patrně nemá platnou hlavičku se základními informacemi." + +#: wp-admin/includes/plugin.php:1479 +#: wp-admin/includes/plugin.php:1502 +#: wp-admin/includes/template.php:2985 +#: wp-admin/includes/template.php:3025 +msgid "The miscellaneous options group has been removed. Use another settings group." +msgstr "Stránka pro Ostatní nastavení byla odstraněna, použijte prosím nějakou jinou nabídku z levého menu." + +#: wp-admin/includes/post.php:52 +msgid "You are not allowed to edit pages as this user." +msgstr "Nemáte dostatečné oprávnění pro úpravy stránek." + +#: wp-admin/includes/post.php:53 +msgid "You are not allowed to create pages as this user." +msgstr "Nemáte dostatečné oprávnění pro vytváření nových stránek." + +#: wp-admin/includes/post.php:57 +msgid "You are not allowed to edit posts as this user." +msgstr "Nemáte dostatečné oprávnění pro úpravy příspěvků." + +#: wp-admin/includes/post.php:58 +msgid "You are not allowed to post as this user." +msgstr "Nemáte dostatečné oprávnění pro vytváření nových příspěvků." + +#: wp-admin/includes/post.php:242 +msgid "You are not allowed to edit pages." +msgstr "Nemáte dostatečné oprávnění pro úpravy stránek." + +#: wp-admin/includes/post.php:244 +msgid "You are not allowed to edit posts." +msgstr "Nemáte dostatečné oprávnění pro úpravy příspěvků." + +#: wp-admin/includes/post.php:379 +msgid "Auto Draft" +msgstr "Automaticky vytvořený koncept" + +#: wp-admin/includes/post.php:497 +msgid "You are not allowed to create pages on this site." +msgstr "Nemáte dostatečné oprávnění pro vytváření nových stránek na tomto webu. " + +#: wp-admin/includes/post.php:499 +msgid "You are not allowed to create posts or drafts on this site." +msgstr "Nemáte dostatečné oprávnění pro vytváření nových příspěvků či konceptů na tomto webu." + +#: wp-admin/includes/post.php:924 +msgid "Images" +msgstr "Obrázky" + +#: wp-admin/includes/post.php:924 +msgid "Manage Images" +msgstr "Správa obrázků" + +#: wp-admin/includes/post.php:924 +#, php-format +msgid "Image <span class=\"count\">(%s)</span>" +msgid_plural "Images <span class=\"count\">(%s)</span>" +msgstr[0] "Obrázek <span class=\"count\">(%s)</span>" +msgstr[1] "Obrázky <span class=\"count\">(%s)</span>" +msgstr[2] "Obrázků <span class=\"count\">(%s)</span>" + +#: wp-admin/includes/post.php:925 +msgid "Audio" +msgstr "Audio" + +#: wp-admin/includes/post.php:925 +msgid "Manage Audio" +msgstr "Správa audio souborů" + +#: wp-admin/includes/post.php:925 +#, php-format +msgid "Audio <span class=\"count\">(%s)</span>" +msgid_plural "Audio <span class=\"count\">(%s)</span>" +msgstr[0] "Audio <span class=\"count\">(%s)</span>" +msgstr[1] "Audio <span class=\"count\">(%s)</span>" +msgstr[2] "Audio <span class=\"count\">(%s)</span>" + +#: wp-admin/includes/post.php:926 +msgid "Video" +msgstr "Video" + +#: wp-admin/includes/post.php:926 +msgid "Manage Video" +msgstr "Správa video souborů" + +#: wp-admin/includes/post.php:926 +#, php-format +msgid "Video <span class=\"count\">(%s)</span>" +msgid_plural "Video <span class=\"count\">(%s)</span>" +msgstr[0] "Video <span class=\"count\">(%s)</span>" +msgstr[1] "Video <span class=\"count\">(%s)</span>" +msgstr[2] "Video <span class=\"count\">(%s)</span>" + +#: wp-admin/includes/post.php:1086 +msgid "Click to edit this part of the permalink" +msgstr "Po kliknutí na tuto část trvalého odkazu ji můžete změnit." + +#: wp-admin/includes/post.php:1088 +msgid "Temporary permalink. Click to edit this part." +msgstr "Tento trvalý odkaz je pouze dočasný. Kliknutím můžete tuto část změnit." + +#: wp-admin/includes/post.php:1092 +#: wp-admin/includes/post.php:1120 +msgid "Permalink:" +msgstr "Trvalý odkaz:" + +#: wp-admin/includes/post.php:1094 +msgid "Change Permalinks" +msgstr "Změnit trvalé odkazy" + +#: wp-admin/includes/post.php:1143 +#: wp-admin/includes/post.php:1144 +msgid "Set featured image" +msgstr "Zvolit náhledový obrázek" + +#: wp-admin/includes/post.php:1156 +msgid "Remove featured image" +msgstr "Odebrat náhledový obrázek" + +#: wp-admin/includes/post.php:1221 +#, php-format +msgid "Warning: %s is currently editing this post" +msgstr "Upozornění: %s právě teď upravuje tento příspěvek" + +#: wp-admin/includes/post.php:1224 +#, php-format +msgid "Warning: %s is currently editing this page" +msgstr "Upozornění: %s právě teď upravuje tuto stránku" + +#: wp-admin/includes/post.php:1227 +#, php-format +msgid "Warning: %s is currently editing this." +msgstr "Upozornění: %s to právě teď také upravuje" + +#: wp-admin/includes/post.php:1286 +msgid "Preview not available. Please save as a draft first." +msgstr "Náhled není k dispozici. Příspěvek prosím nejdříve uložte jako koncept." + +#: wp-admin/includes/schema.php:200 +msgid "My Site" +msgstr "Můj nový web" + +#. translators: blog tagline +#: wp-admin/includes/schema.php:202 +msgid "Just another WordPress site" +msgstr "Další web používající WordPress" + +#. translators: default date format, see http://php.net/date +#: wp-admin/includes/schema.php:223 +#: wp-admin/options-general.php:254 +msgid "F j, Y" +msgstr "j.n.Y" + +#. translators: default time format, see http://php.net/date +#: wp-admin/includes/schema.php:225 +#: wp-admin/options-general.php:287 +msgid "g:i a" +msgstr "G.i" + +#. translators: links last updated date format, see http://php.net/date +#: wp-admin/includes/schema.php:227 +msgid "F j, Y g:i a" +msgstr "j.n.Y, G:i" + +#. translators: blog tagline +#: wp-admin/includes/schema.php:326 +#, php-format +msgid "Just another %s site" +msgstr "Další nový web projektu %s" + +#. translators: user role +#: wp-admin/includes/schema.php:395 +msgctxt "User role" +msgid "Administrator" +msgstr "Administrátor" + +#. translators: user role +#: wp-admin/includes/schema.php:397 +msgctxt "User role" +msgid "Editor" +msgstr "Šéfredaktor" + +#. translators: user role +#: wp-admin/includes/schema.php:399 +msgctxt "User role" +msgid "Author" +msgstr "Redaktor" + +#. translators: user role +#: wp-admin/includes/schema.php:401 +msgctxt "User role" +msgid "Contributor" +msgstr "Spolupracovník" + +#. translators: user role +#: wp-admin/includes/schema.php:403 +msgctxt "User role" +msgid "Subscriber" +msgstr "Návštěvník" + +#: wp-admin/includes/schema.php:638 +msgid "You must provide a domain name." +msgstr "Musíte zadat doménové jméno." + +#: wp-admin/includes/schema.php:640 +msgid "You must provide a name for your network of sites." +msgstr "Musíte zadat pro vytvářenou síť webů nějaký název." + +#: wp-admin/includes/schema.php:644 +msgid "The network already exists." +msgstr "Síť webů již existuje." + +#: wp-admin/includes/schema.php:648 +msgid "You must provide a valid e-mail address." +msgstr "Musíte zadat platnou emailovou adresu." + +#: wp-admin/includes/schema.php:682 +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" +"Login Here: BLOG_URLwp-login.php\n" +"\n" +"We hope you enjoy your new site.\n" +"Thanks!\n" +"\n" +"--The Team @ SITE_NAME" +msgstr "" +"Vítejte,\n" +"\n" +"váš nový web (součást projektu SITE_NAME) byl úspěšně založen:\n" +"BLOG_URL\n" +"\n" +"Můžete se přihlásit s administrátorským účtem. Použijte následující informace:\n" +"Uživatelské jméno: USERNAME\n" +"Heslo: PASSWORD\n" +"Přihlašovací URL adresa: BLOG_URLwp-login.php\n" +"\n" +"Doufáme, že budete se správou webu v redakčním systému WordPress spokojeni.\n" +"Děkujeme!\n" +"\n" +"--Tým autorů WordPressu @ SITE_NAME" + +#: wp-admin/includes/schema.php:710 +#: wp-admin/includes/upgrade.php:199 +msgid "Welcome to <a href=\"SITE_URL\">SITE_NAME</a>. This is your first post. Edit or delete it, then start blogging!" +msgstr "Vítejte na webu <a href=\"SITE_URL\">SITE_NAME</a>. Toto je váš první testovací příspěvek. Můžete ho upravit nebo smazat a postupně pak začít s tvorbou vlastního webu." + +#: wp-admin/includes/schema.php:767 +msgid "Warning! Wildcard DNS may not be configured correctly!" +msgstr "Varování! Zástupný znak (wildcard) na DNS serveru patrně není správně nastaven!" + +#: wp-admin/includes/schema.php:768 +#, php-format +msgid "The installer attempted to contact a random hostname (<code>%1$s</code>) on your domain." +msgstr "Během instalace došlo k pokusu o připojení k náhodnému hostname (<code>%1$s</code>) vaší domény." + +#: wp-admin/includes/schema.php:770 +#, php-format +msgid "This resulted in an error message: %s" +msgstr "Objevila se však následující chyba: %s" + +#: wp-admin/includes/schema.php:772 +msgid "To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a <code>*</code> hostname record pointing at your web server in your DNS configuration tool." +msgstr "Pokud chcete využívat pro jednotlivé weby subdomény, musíte mít na DNS serveru nejdříve definovaný příslušný zástupný znak (wildcard). Obvykle to znamená vytvoření nového DNS záznamu pro další server v podobě symbolu <code>*</code>, který bude automaticky směrovat všechny subdomény na váš webový server." + +#: wp-admin/includes/schema.php:773 +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 "Stále můžete bez problémů používat váš hlavní web, ale žádná vytvořená subdoména s novým webem patrně nebude dostupná. Pokud jste si ale jisti, že máte DNS záznamy nastavené správně, můžete toto upozornění ignorovat." + +#: wp-admin/includes/template.php:37 +#: wp-admin/includes/template.php:895 +#: wp-admin/includes/template.php:2124 +msgid "Quick Edit" +msgstr "Rychlé úpravy" + +#: wp-admin/includes/template.php:103 +#: wp-admin/includes/template.php:449 +#: wp-admin/includes/template.php:1353 +#: wp-admin/includes/template.php:1575 +#: wp-admin/includes/template.php:2124 +msgid "Quick Edit" +msgstr "Rychlé úpravy" + +#. translators: manage posts column name +#: wp-admin/includes/template.php:608 +msgctxt "column name" +msgid "Title" +msgstr "Název" + +#. translators: column name +#: wp-admin/includes/template.php:641 +msgctxt "column name" +msgid "File" +msgstr "Mediální soubor" + +#. translators: column name +#: wp-admin/includes/template.php:645 +msgctxt "column name" +msgid "Attached to" +msgstr "Přiřazen k" + +#. translators: column name +#: wp-admin/includes/template.php:649 +msgctxt "column name" +msgid "Date" +msgstr "Datum" + +#. translators: column name +#: wp-admin/includes/template.php:696 +msgctxt "column name" +msgid "Comment" +msgstr "Komentář" + +#: wp-admin/includes/template.php:698 +msgid "In Response To" +msgstr "Reakce na příspěvek" + +#: wp-admin/includes/template.php:708 +msgid "Relationship" +msgstr "Vztah k odkazu" + +#: wp-admin/includes/template.php:709 +msgid "Visible" +msgstr "Viditelnost" + +#: wp-admin/includes/template.php:723 +#: wp-admin/includes/template.php:743 +#: wp-admin/includes/template.php:754 +#: wp-admin/menu.php:82 +#: wp-admin/menu.php:83 +msgid "Posts" +msgstr "Příspěvky" + +#: wp-admin/includes/template.php:733 +#: wp-admin/link-manager.php:44 +#: wp-admin/menu.php:101 +#: wp-admin/menu.php:102 +#: wp-includes/default-widgets.php:95 +msgid "Links" +msgstr "Odkazy" + +#: wp-admin/includes/template.php:753 +#: wp-admin/user-new.php:251 +msgid "Role" +msgstr "Úroveň" + +#: wp-admin/includes/template.php:895 +msgid "Bulk Edit" +msgstr "Hromadné úpravy" + +#: wp-admin/includes/template.php:936 +#: wp-admin/includes/template.php:1008 +#: wp-admin/includes/template.php:1028 +#: wp-admin/includes/template.php:1060 +#: wp-admin/includes/template.php:1069 +#: wp-admin/includes/template.php:1101 +#: wp-admin/includes/template.php:1122 +msgid "— No Change —" +msgstr "— Žádná změna —" + +#. translators: Between password field and private checkbox on post quick edit interface +#: wp-admin/includes/template.php:960 +msgid "–OR–" +msgstr "–NEBO–" + +#: wp-admin/includes/template.php:980 +msgid "[more]" +msgstr "[více]" + +#: wp-admin/includes/template.php:981 +msgid "[less]" +msgstr "[méně]" + +#: wp-admin/includes/template.php:1006 +msgid "Main Page (no parent)" +msgstr "Hlavní stránka (nemá žádnou nadřazenou)" + +#: wp-admin/includes/template.php:1061 +#: wp-admin/includes/template.php:1070 +msgid "Allow" +msgstr "Povolit" + +#: wp-admin/includes/template.php:1062 +#: wp-admin/includes/template.php:1071 +msgid "Do not allow" +msgstr "Nepovolit" + +#: wp-admin/includes/template.php:1083 +msgid "Allow Comments" +msgstr "Povolit komentáře" + +#: wp-admin/includes/template.php:1088 +msgid "Allow Pings" +msgstr "Povolit odkazování (pingbacky)" + +#: wp-admin/includes/template.php:1120 +#: wp-admin/includes/template.php:1123 +#: wp-admin/includes/template.php:3526 +msgid "Sticky" +msgstr "Zvýrazněný" + +#: wp-admin/includes/template.php:1124 +msgid "Not Sticky" +msgstr "Není zvýrazněný" + +#: wp-admin/includes/template.php:1132 +msgid "Make this post sticky" +msgstr "Zvýraznit tento příspěvek" + +#: wp-admin/includes/template.php:1333 +#: wp-admin/includes/template.php:1558 +msgid "Missed schedule" +msgstr "Zmeškaná publikace" + +#: wp-admin/includes/template.php:1337 +#: wp-admin/includes/template.php:1562 +msgid "Last Modified" +msgstr "Naposledy změněno" + +#: wp-admin/includes/template.php:1352 +msgid "Edit this item" +msgstr "Upravit tuto položku" + +#: wp-admin/includes/template.php:1353 +msgid "Edit this item inline" +msgstr "Upravit základní informace u této položky" + +#: wp-admin/includes/template.php:1357 +msgid "Restore this item from the Trash" +msgstr "Obnovit tuto položku z koše" + +#: wp-admin/includes/template.php:1359 +msgid "Move this item to the Trash" +msgstr "Přesunout tuto položku do koše" + +#: wp-admin/includes/template.php:1361 +msgid "Delete this item permanently" +msgstr "Nenávratně smazat tuto položku" + +#: wp-admin/includes/template.php:1396 +#: wp-admin/includes/upgrade.php:109 +#: wp-includes/category-template.php:182 +msgid "Uncategorized" +msgstr "Nezařazené" + +#: wp-admin/includes/template.php:1574 +msgid "Edit this page" +msgstr "Upravit tuto stránku" + +#: wp-admin/includes/template.php:1579 +msgid "Remove this page from the Trash" +msgstr "Obnovit tuto stránku z koše" + +#: wp-admin/includes/template.php:1581 +msgid "Move this page to the Trash" +msgstr "Přesunout tuto stránku do koše" + +#: wp-admin/includes/template.php:1583 +msgid "Delete this page permanently" +msgstr "Smazat tuto stránku" + +#: wp-admin/includes/template.php:1879 +#: wp-includes/pluggable.php:1205 +#, php-format +msgid "E-mail: %s" +msgstr "Email: %s" + +#: wp-admin/includes/template.php:1888 +msgid "View posts by this author" +msgstr "Zobrazit příspěvky tohoto autora" + +#: wp-admin/includes/template.php:2025 +msgid "Y/m/d \\a\\t g:i A" +msgstr "j.n.Y, G:i" + +#. translators: 2: comment date, 3: comment time +#: wp-admin/includes/template.php:2063 +#, php-format +msgid "<a href=\"%1$s\">%2$s at %3$s</a>" +msgstr "<a href=\"%1$s\">%2$s v %3$s</a>" + +#: wp-admin/includes/template.php:2071 +#, php-format +msgid "In reply to <a href=\"%1$s\">%2$s</a>." +msgstr "Reakce na komentář, jehož autorem byl <a href=\"%1$s\">%2$s</a>." + +#: wp-admin/includes/template.php:2175 +msgid "Y/m/d \\a\\t g:ia" +msgstr "j.n.Y, G:i" + +#: wp-admin/includes/template.php:2249 +msgid "Reply to Comment" +msgstr "Odpovědět na komentář" + +#: wp-admin/includes/template.php:2275 +msgid "Submit Reply" +msgstr "Odeslat odpověď" + +#: wp-admin/includes/template.php:2308 +#, php-format +msgid "Comment by %s moved to the trash." +msgstr "Komentář byl přesunut do koše (autorem komentáře byl %s)." + +#: wp-admin/includes/template.php:2311 +#, php-format +msgid "Comment by %s marked as spam." +msgstr "Komentář byl označen jako spam (autorem komentáře byl %s)." + +#: wp-admin/includes/template.php:2331 +#: wp-admin/includes/template.php:2346 +#: wp-admin/includes/template.php:2408 +#: wp-admin/includes/template.php:2435 +msgid "Value" +msgstr "Hodnota" + +#: wp-admin/includes/template.php:2400 +msgid "Key" +msgstr "Identifikátor" + +#: wp-admin/includes/template.php:2430 +msgid "Add New Custom Field:" +msgstr "Přidat nové uživatelské pole:" + +#: wp-admin/includes/template.php:2444 +#: wp-admin/options-reading.php:60 +#: wp-admin/options-reading.php:61 +#: wp-admin/widgets.php:295 +msgid "— Select —" +msgstr "— Vyberte —" + +#: wp-admin/includes/template.php:2454 +msgid "Enter new" +msgstr "Vytvořit nové uživatelské pole" + +#: wp-admin/includes/template.php:2464 +msgid "Add Custom Field" +msgstr "Přidat uživatelské pole" + +#. translators: 1: month input, 2: day input, 3: year input, 4: hour input, 5: minute input +#: wp-admin/includes/template.php:2526 +#, php-format +msgid "%1$s%2$s, %3$s @ %4$s : %5$s" +msgstr "%2$s.%1$s.%3$s, %4$s:%5$s" + +#: wp-admin/includes/template.php:2631 +msgid "Thumbnail linked to file" +msgstr "Náhled odkazuje na soubor" + +#: wp-admin/includes/template.php:2631 +msgid "Image linked to file" +msgstr "Obrázek odkazuje na soubor" + +#: wp-admin/includes/template.php:2635 +msgid "Thumbnail linked to page" +msgstr "Náhled odkazuje na stránku" + +#: wp-admin/includes/template.php:2635 +msgid "Image linked to page" +msgstr "Obrázek odkazuje na stránku" + +#: wp-admin/includes/template.php:2640 +msgid "Link to file" +msgstr "Odkaz na soubor" + +#: wp-admin/includes/template.php:2644 +msgid "Link to page" +msgstr "Odkaz na stránku" + +#: wp-admin/includes/template.php:2742 +msgid "Before you can upload your import file, you will need to fix the following error:" +msgstr "Před nahráním importního souboru budete muset ještě vyřešit následující chybu:" + +#: wp-admin/includes/template.php:2748 +msgid "Choose a file from your computer:" +msgstr "Vyberte soubor na svém počítači:" + +#: wp-admin/includes/template.php:2748 +#, php-format +msgid "Maximum size: %s" +msgstr "Maximální velikost: %s" + +#: wp-admin/includes/template.php:2754 +msgid "Upload file and import" +msgstr "Nahrát soubor a importovat" + +#: wp-admin/includes/template.php:2865 +#: wp-admin/press-this.php:466 +#: wp-admin/press-this.php:485 +#: wp-admin/press-this.php:535 +msgid "Click to toggle" +msgstr "Kliknutím rozbalit/sbalit" + +#: wp-admin/includes/template.php:3265 +msgid "Find Posts or Pages" +msgstr "Vyhledat příspěvky nebo stránky" + +#: wp-admin/includes/template.php:3292 +#: wp-admin/includes/widgets.php:202 +#: wp-includes/js/tinymce/langs/wp-langs.php:31 +#: wp-includes/js/tinymce/wp-mce-help.php:258 +#: wp-includes/script-loader.php:171 +#: wp-login.php:544 +msgid "Close" +msgstr "Zavřít" + +#: wp-admin/includes/template.php:3293 +#: wp-admin/nav-menus.php:500 +#: wp-admin/plugin-editor.php:188 +#: wp-admin/theme-editor.php:151 +msgid "Select" +msgstr "Vybrat" + +#: wp-admin/includes/template.php:3335 +msgid "New Media" +msgstr "Nahrát nový mediální soubor" + +#: wp-admin/includes/template.php:3338 +#: wp-admin/media.php:45 +#: wp-admin/media.php:90 +msgid "Edit Media" +msgstr "Upravit mediální soubor" + +#: wp-admin/includes/template.php:3343 +msgid "New Link" +msgstr "Vytvořit odkaz" + +#: wp-admin/includes/template.php:3345 +msgid "Edit Links" +msgstr "Správa odkazů" + +#: wp-admin/includes/template.php:3348 +msgid "New User" +msgstr "Vytvořit uživatele" + +#: wp-admin/includes/template.php:3351 +msgid "Edit Users" +msgstr "Správa uživatelů" + +#: wp-admin/includes/template.php:3354 +#: wp-admin/plugin-install.php:17 +msgid "Install Plugins" +msgstr "Instalace pluginů" + +#: wp-admin/includes/template.php:3357 +msgid "Manage Plugins" +msgstr "Správa pluginů" + +#: wp-admin/includes/template.php:3360 +#: wp-admin/theme-install.php:17 +#: wp-admin/update.php:209 +msgid "Install Themes" +msgstr "Instalace šablon" + +#: wp-admin/includes/template.php:3363 +#: wp-admin/themes.php:31 +msgid "Manage Themes" +msgstr "Správa šablon" + +#: wp-admin/includes/template.php:3366 +#: wp-admin/includes/template.php:3372 +#: wp-includes/post.php:952 +msgid "New Post" +msgstr "Vytvořit příspěvek" + +#: wp-admin/includes/template.php:3373 +msgid "Drafts" +msgstr "Koncepty" + +#: wp-admin/includes/template.php:3374 +#: wp-includes/post.php:952 +msgid "New Page" +msgstr "Vytvořit stránku" + +#: wp-admin/includes/template.php:3424 +#: wp-includes/script-loader.php:343 +msgid "(no title)" +msgstr "(bez názvu)" + +#. translators: post state +#: wp-admin/includes/template.php:3524 +msgctxt "post state" +msgid "Pending" +msgstr "Čekající na schválení" + +#: wp-admin/includes/template.php:3586 +msgid "Enable accessibility mode" +msgstr "Zapnout Režim pro správu widgetů se zachováním pravidel přístupnosti webu" + +#: wp-admin/includes/template.php:3586 +msgid "Disable accessibility mode" +msgstr "Vypnout Režim pro správu widgetů se zachováním pravidel přístupnosti webu" + +#: wp-admin/includes/template.php:3598 +msgctxt "Metaboxes" +msgid "Show on screen" +msgstr "Zobrazit následující informace:" + +#: wp-admin/includes/template.php:3605 +msgctxt "Columns" +msgid "Show on screen" +msgstr "Zobrazit následující sloupce:" + +#: wp-admin/includes/template.php:3615 +msgctxt "Screen Options" +msgid "Show on screen" +msgstr "Zobrazit následující informace:" + +#: wp-admin/includes/template.php:3636 +msgid "<a href=\"http://codex.wordpress.org/\" target=\"_blank\">Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/\" target=\"_blank\">Manuál</a> (anglicky)" + +#: wp-admin/includes/template.php:3649 +#: wp-includes/js/tinymce/langs/wp-langs.php:238 +#: wp-includes/js/tinymce/langs/wp-langs.php:252 +#: wp-includes/js/tinymce/langs/wp-langs.php:409 +#: wp-includes/js/tinymce/wp-mce-help.php:234 +msgid "Help" +msgstr "Nápověda" + +#: wp-admin/includes/template.php:3653 +msgid "Screen Options" +msgstr "Nastavení zobrazených informací" + +#: wp-admin/includes/template.php:3683 +msgid "Most of the modules on this screen can be moved. If you hover your mouse over the title bar of a module you’ll notice the 4 arrow cursor appears to let you know it is movable. Click on it, hold down the mouse button and start dragging the module to a new location. As you drag the module, notice the dotted gray box that also moves. This box indicates where the module will be placed when you release the mouse button." +msgstr "S většinou objektů na této stránce lze jednoduše pohybovat. Pokud přejedete myší přes název objektu, změní se kurzor na směrovou růžici, což znamená, že je možné s tímto objektem pohybovat. Klikněte na vybraný objekt, držte stisknuté tlačítko myši a přesuňte ho tam, kde ho chcete přesně mít. Během samotného přesunování objektu můžete vidět tečkované šedé ohraničení, které ukazuje, kam bude objekt umístěn až uvolníte tlačítko myši." + +#: wp-admin/includes/template.php:3684 +msgid "The same modules can be expanded and collapsed by clicking once on their title bar and also completely hidden from the Screen Options tab." +msgstr "Objekty na stránce mohou být zobrazovány buď zasunuté nebo vysunuté, což nastavíte jediným kliknutím na jejich Název. Můžete je také zcela skrýt pomocí nabídky Nastavení zobrazených informací." + +#: wp-admin/includes/template.php:3690 +msgid "Search help" +msgstr "Vyhledávání pluginů" + +#: wp-admin/includes/template.php:3691 +msgid "You may search based on 3 criteria:" +msgstr "Můžete vyhledávat podle 3 základních možností:" + +#: wp-admin/includes/template.php:3692 +msgid "<strong>Term:</strong> Searches theme names and descriptions for the specified term." +msgstr "<strong>Název:</strong> Vyhledají se pluginy, které obsahují zadané slovo přímo v názvu nebo stručném popisu." + +#: wp-admin/includes/template.php:3693 +msgid "<strong>Tag:</strong> Searches for themes tagged as such." +msgstr "<strong>Štítek:</strong> Vyhledají se pluginy, které mají přiřazen zadaný štítek." + +#: wp-admin/includes/template.php:3694 +msgid "<strong>Author:</strong> Searches for themes created by the Author, or which the Author contributed to." +msgstr "<strong>Autor:</strong> Vyhledají se pluginy, které vytvořil (nebo na nich spolupracoval) zadaný autor." + +#: wp-admin/includes/template.php:3724 +msgid "Screen Layout" +msgstr "Rozmístění na stránce" + +#: wp-admin/includes/template.php:3724 +msgid "Number of Columns:" +msgstr "Počet sloupců:" + +#: wp-admin/includes/template.php:3747 +msgctxt "sites per page (screen options)" +msgid "Sites" +msgstr "webů na stránku" + +#: wp-admin/includes/template.php:3750 +msgctxt "users per page (screen options)" +msgid "Users" +msgstr "uživatelů na stránku" + +#: wp-admin/includes/template.php:3753 +msgctxt "comments per page (screen options)" +msgid "Comments" +msgstr "komentářů na stránku" + +#: wp-admin/includes/template.php:3756 +msgctxt "items per page (screen options)" +msgid "Media items" +msgstr "mediálních souborů na stránku" + +#: wp-admin/includes/template.php:3763 +msgctxt "plugins per page (screen options)" +msgid "Plugins" +msgstr "pluginů na stránku" + +#: wp-admin/includes/theme-install.php:57 +msgid "An Unexpected HTTP Error occured during the API request.</p> <p><a href=\"?\" onclick=\"document.location.reload(); return false;\">Try again</a>" +msgstr "Objevila se neočekávaná chyba HTTP protokolu během zpracovávání požadavků API.</p> <p><a href=\"?\" onclick=\"document.location.reload(); return false;\">Zkuste to znovu</a>" + +#: wp-admin/includes/theme-install.php:61 +msgid "An unknown error occured" +msgstr "Objevila se nějaká neznámá chyba" + +#: wp-admin/includes/theme-install.php:153 +msgid "Search for themes by keyword, author, or tag." +msgstr "Vyhledávání šablon podle názvu, autora nebo štítku." + +#: wp-admin/includes/theme-install.php:159 +msgctxt "Theme Installer" +msgid "Tag" +msgstr "Štítek" + +#: wp-admin/includes/theme-install.php:176 +msgid "Feature Filter" +msgstr "Vyhledávání podle vlastností" + +#: wp-admin/includes/theme-install.php:178 +msgid "Find a theme based on specific features" +msgstr "Vyhledávání šablon podle specifických požadavků" + +#: wp-admin/includes/theme-install.php:182 +msgid "Colors" +msgstr "Barvy" + +#: wp-admin/includes/theme-install.php:182 +msgid "Black" +msgstr "Černá" + +#: wp-admin/includes/theme-install.php:182 +#: wp-includes/general-template.php:2058 +msgid "Blue" +msgstr "Modrá" + +#: wp-admin/includes/theme-install.php:182 +msgid "Brown" +msgstr "Hnědá" + +#: wp-admin/includes/theme-install.php:183 +msgid "Green" +msgstr "Zelená" + +#: wp-admin/includes/theme-install.php:183 +msgid "Orange" +msgstr "Oranžová" + +#: wp-admin/includes/theme-install.php:183 +msgid "Pink" +msgstr "Růžová" + +#: wp-admin/includes/theme-install.php:183 +msgid "Purple" +msgstr "Purpurová" + +#: wp-admin/includes/theme-install.php:183 +msgid "Red" +msgstr "Červená" + +#: wp-admin/includes/theme-install.php:184 +msgid "Silver" +msgstr "Stříbrná" + +#: wp-admin/includes/theme-install.php:184 +msgid "Tan" +msgstr "Žlutohnědá" + +#: wp-admin/includes/theme-install.php:184 +msgid "White" +msgstr "Bílá" + +#: wp-admin/includes/theme-install.php:184 +msgid "Yellow" +msgstr "Žlutá" + +#: wp-admin/includes/theme-install.php:184 +msgid "Dark" +msgstr "Tmavá" + +#: wp-admin/includes/theme-install.php:185 +msgid "Light" +msgstr "Světlá" + +#: wp-admin/includes/theme-install.php:185 +msgid "Columns" +msgstr "Počet sloupců" + +#: wp-admin/includes/theme-install.php:185 +msgid "One Column" +msgstr "1 sloupec" + +#: wp-admin/includes/theme-install.php:185 +msgid "Two Columns" +msgstr "2 sloupce" + +#: wp-admin/includes/theme-install.php:186 +msgid "Three Columns" +msgstr "3 sloupce" + +#: wp-admin/includes/theme-install.php:186 +msgid "Four Columns" +msgstr "4 sloupce" + +#: wp-admin/includes/theme-install.php:186 +msgid "Left Sidebar" +msgstr "Postranní panel vlevo" + +#: wp-admin/includes/theme-install.php:187 +msgid "Right Sidebar" +msgstr "Postranní panel vpravo" + +#: wp-admin/includes/theme-install.php:187 +#: wp-admin/options-media.php:46 +#: wp-admin/options-media.php:92 +#: wp-includes/js/tinymce/langs/wp-langs.php:434 +msgid "Width" +msgstr "Šířka" + +#: wp-admin/includes/theme-install.php:187 +msgid "Fixed Width" +msgstr "Pevná šířka" + +#: wp-admin/includes/theme-install.php:187 +msgid "Flexible Width" +msgstr "Proměnlivá šířka" + +#: wp-admin/includes/theme-install.php:188 +msgid "Features" +msgstr "Další možnosti" + +#: wp-admin/includes/theme-install.php:188 +msgid "Custom Colors" +msgstr "Uživatelské nastavení barev" + +#: wp-admin/includes/theme-install.php:188 +msgid "Theme Options" +msgstr "Rozšířené možnosti nastavení" + +#: wp-admin/includes/theme-install.php:189 +msgid "Threaded Comments" +msgstr "Vlákna v komentářích" + +#: wp-admin/includes/theme-install.php:189 +msgid "Sticky Post" +msgstr "Zvýrazněné příspěvky" + +#: wp-admin/includes/theme-install.php:189 +msgid "Microformats" +msgstr "Mikroformáty" + +#: wp-admin/includes/theme-install.php:190 +msgid "Subject" +msgstr "Použití" + +#: wp-admin/includes/theme-install.php:190 +msgid "Holiday" +msgstr "Prázdniny" + +#: wp-admin/includes/theme-install.php:190 +msgid "Photoblogging" +msgstr "Fotoblog" + +#: wp-admin/includes/theme-install.php:190 +msgid "Seasonal" +msgstr "Sezónní" + +#: wp-admin/includes/theme-install.php:221 +msgid "Find Themes" +msgstr "Hledat šablony" + +#: wp-admin/includes/theme-install.php:278 +msgid "Install a theme in .zip format" +msgstr "Instalovat šablonu v podobě .zip souboru" + +#: wp-admin/includes/theme-install.php:279 +msgid "If you have a theme in a .zip format, you may install it by uploading it here." +msgstr "Pokud máte šablonu v podobě .zip souboru, můžete ji tady nahrát a nainstalovat." + +#: wp-admin/includes/theme-install.php:304 +#, php-format +msgid "Install “%s”" +msgstr "Instalovat „%s“" + +#: wp-admin/includes/theme-install.php:397 +msgid "No themes found" +msgstr "Nebyla nalezena žádná šablona" + +#: wp-admin/includes/theme-install.php:464 +msgid "Theme Install" +msgstr "Instalace šablon" + +#: wp-admin/includes/theme-install.php:467 +msgid "<strong>Error:</strong> This theme is currently not available. Please try again later." +msgstr "<strong>Chyba:</strong> Tato šablona není v současné chvíli dostupná. Zkuste to prosím za chvíli znovu." + +#: wp-admin/includes/theme-install.php:473 +msgid "<strong>Warning:</strong> This theme has <strong>not been tested</strong> with your current version of WordPress." +msgstr "<strong>Upozornění:</strong> Tato šablona zatím <strong>nebyla testována</strong> na vámi používané verzi WordPressu." + +#: wp-admin/includes/theme-install.php:475 +msgid "<strong>Warning:</strong> This theme has not been marked as <strong>compatible</strong> with your version of WordPress." +msgstr "<strong>Upozornění:</strong> Tato šablona pravděpodobně není <strong>kompatibilní</strong> s vámi používanou verzí WordPressu." + +#: wp-admin/includes/theme-install.php:508 +#, php-format +msgid "by %s" +msgstr "Autor: %s" + +#: wp-admin/includes/theme-install.php:509 +#, php-format +msgid "Version: %s" +msgstr "Verze: %s" + +#: wp-admin/includes/theme-install.php:528 +#, php-format +msgid "Newer version (%s) is installed." +msgstr "Novější verze šablony (%s) byla nainstalována." + +#: wp-admin/includes/theme-install.php:533 +msgid "This version is already installed." +msgstr "Tato verze již byla nainstalována." + +#: wp-admin/includes/theme.php:91 +msgid "Unable to locate WordPress theme directory." +msgstr "Nepodařilo se najít adresář se šablonami pro WordPress." + +#: wp-admin/includes/theme.php:98 +#, php-format +msgid "Could not fully remove the theme %s." +msgstr "Nepodařilo se zcela smazat šablonu %s." + +#: wp-admin/includes/theme.php:242 +msgid "Upgrading this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to upgrade." +msgstr "Aktualizací této šablony přijdete o všechny své vlastní úpravy, které jste zatím udělali. Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#: wp-admin/includes/theme.php:245 +#, php-format +msgid "There is a new version of %1$s available. <a href=\"%2$s\" class=\"thickbox\" title=\"%1$s\">View version %3$s Details</a>." +msgstr "Nová verze šablony %1$s je k dispozici. <a href=\"%2$s\" class=\"thickbox\" title=\"%1$s\">Prohlédněte si informace o nové verzi %3$s</a>." + +#: wp-admin/includes/theme.php:247 +#, php-format +msgid "There is a new version of %1$s available. <a href=\"%2$s\" class=\"thickbox\" title=\"%1$s\">View version %3$s Details</a> <em>automatic upgrade unavailable for this theme</em>." +msgstr "Nová verze šablony %1$s je k dispozici. <a href=\"%2$s\" class=\"thickbox\" title=\"%1$s\">Prohlédněte si informace o nové verzi %3$s</a>. <em>Automatická aktualizace u této šablony není dostupná.</em>" + +#: wp-admin/includes/theme.php:249 +#, php-format +msgid "There is a new version of %1$s available. <a href=\"%2$s\" class=\"thickbox\" title=\"%1$s\">View version %3$s Details</a> or <a href=\"%4$s\" %5$s>upgrade automatically</a>." +msgstr "Nová verze šablony %1$s je k dispozici. <a href=\"%2$s\" class=\"thickbox\" title=\"%1$s\">Prohlédněte si informace o nové verzi %3$s</a> nebo <a href=\"%4$s\" %5$s>spusťte automatickou aktualizaci</a>." + +#: wp-admin/includes/update-core.php:285 +#, php-format +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 "Automatická aktualizace nemůže být bohužel provedena, protože WordPress %1$s vyžaduje alespoň PHP %2$s a MySQL %3$s. Na vašem serveru jsou však používány starší verze PHP %4$s a MySQL %5$s." + +#: wp-admin/includes/update-core.php:287 +#, php-format +msgid "The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s." +msgstr "Automatická aktualizace nemůže být bohužel provedena, protože WordPress %1$s vyžaduje alespoň PHP %2$s a na vašem serveru je používána starší verze PHP %3$s." + +#: wp-admin/includes/update-core.php:289 +#, php-format +msgid "The update cannot be installed because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s." +msgstr "Automatická aktualizace nemůže být bohužel provedena, protože WordPress %1$s vyžaduje alespoň MySQL %2$s a na vašem serveru je používána starší verze MySQL %3$s." + +#: wp-admin/includes/update-core.php:292 +msgid "Verifying the unpacked files…" +msgstr "Ověřování rozbalených souborů#8230;" + +#: wp-admin/includes/update-core.php:304 +msgid "The update could not be unpacked" +msgstr "Aktualizace nemohla být rozbalena" + +#: wp-admin/includes/update-core.php:332 +msgid "Upgrading database…" +msgstr "Aktualizace databáze…" + +#: wp-admin/includes/update.php:89 +#: wp-admin/includes/update.php:112 +#: wp-admin/plugins.php:618 +#, php-format +msgid "Version %s" +msgstr "Verze %s" + +#: wp-admin/includes/update.php:103 +#, php-format +msgid "You are using a development version (%1$s). Cool! Please <a href=\"%2$s\">stay updated</a>." +msgstr "Používáte vývojářskou verzi WordPressu (%1$s). Děkujeme! Pravidelně, prosím, aktualizujte na <a href=\"%2$s\">nejnovější verzi</a>." + +#: wp-admin/includes/update.php:107 +#, php-format +msgid "<a href=\"%1$s\">Get Version %2$s</a>" +msgstr "<a href=\"%1$s\">Stáhnout verzi %2$s</a>" + +#: wp-admin/includes/update.php:133 +#, php-format +msgid "<a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> is available! <a href=\"%2$s\">Please update now</a>." +msgstr "Byl vydán nový <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a>! Doporučujeme <a href=\"%2$s\">provést aktualizaci</a>." + +#: wp-admin/includes/update.php:135 +#, php-format +msgid "<a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> is available! Please notify the site administrator." +msgstr "Byl vydán nový <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a>! Upozorněte prosím administrátora webu na potřebu aktualizace." + +#: wp-admin/includes/update.php:148 +#, php-format +msgid "You are using <span class=\"b\">WordPress %s</span>." +msgstr "Používáte <span class=\"b\">WordPress %s</span>." + +#: wp-admin/includes/update.php:150 +#, php-format +msgid "Update to %s" +msgstr "Aktualizovat na verzi %s" + +#: wp-admin/includes/update.php:150 +msgid "Latest" +msgstr "Nejnovější" + +#: wp-admin/includes/update.php:197 +#, php-format +msgid "There is a new version of %1$s available. <a href=\"%2$s\" class=\"thickbox\" title=\"%3$s\">View version %4$s Details</a>." +msgstr "Nová verze %1$s je k dispozici. <a href=\"%2$s\" class=\"thickbox\" title=\"%3$s\">Prohlédněte si informace o nové verzi %4$s</a>." + +#: wp-admin/includes/update.php:199 +#, php-format +msgid "There is a new version of %1$s available. <a href=\"%2$s\" class=\"thickbox\" title=\"%3$s\">View version %4$s Details</a> <em>automatic upgrade unavailable for this plugin</em>." +msgstr "Nová verze %1$s je k dispozici. <a href=\"%2$s\" class=\"thickbox\" title=\"%3$s\">Prohlédněte si informace o nové verzi %4$s</a>. <em>Automatická aktualizace není u tohoto pluginu dostupná.</em>" + +#: wp-admin/includes/update.php:201 +#, php-format +msgid "There is a new version of %1$s available. <a href=\"%2$s\" class=\"thickbox\" title=\"%3$s\">View version %4$s Details</a> or <a href=\"%5$s\">upgrade automatically</a>." +msgstr "Nová verze %1$s je k dispozici. <a href=\"%2$s\" class=\"thickbox\" title=\"%3$s\">Prohlédněte si informace o nové verzi %4$s</a> nebo <a href=\"%5$s\">spusťte automatickou aktualizaci</a>." + +#: wp-admin/includes/update.php:259 +#, php-format +msgid "An automated WordPress update has failed to complete - <a href=\"%s\">please attempt the update again now</a>." +msgstr "Automatická aktualizace WordPressu bohužel selhala - <a href=\"%s\">zkuste prosím spustit aktualizaci ještě jednou</a>." + +#: wp-admin/includes/update.php:261 +msgid "An automated WordPress update has failed to complete! Please notify the site administrator." +msgstr "Automatická aktualizace WordPressu bohužel selhala! Kontaktujte, prosím, administrátora webu." + +#: wp-admin/includes/upgrade.php:68 +msgid "<strong><em>Note that password</em></strong> carefully! It is a <em>random</em> password that was generated just for you." +msgstr "<strong><em>Určitě si heslo pečlivě poznamenejte!</em></strong> Toto heslo bylo <em>náhodně</em> vygenerováno pouze pro vás a nikde jinde ho už nenajdete." + +#: wp-admin/includes/upgrade.php:74 +msgid "Your chosen password." +msgstr "Zvolené heslo." + +#: wp-admin/includes/upgrade.php:77 +msgid "User already exists. Password inherited." +msgstr "Uživatel již existuje, jeho heslo zůstalo nezměněno." + +#: wp-admin/includes/upgrade.php:87 +msgid "The password you chose during the install." +msgstr "Heslo zadané během instalace." + +#. translators: Default category slug +#: wp-admin/includes/upgrade.php:111 +msgctxt "Default category slug" +msgid "Uncategorized" +msgstr "Nezařazené" + +#. translators: Default link category slug +#: wp-admin/includes/upgrade.php:131 +msgctxt "Default link category slug" +msgid "Blogroll" +msgstr "Odkazy" + +#: wp-admin/includes/upgrade.php:204 +msgid "Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!" +msgstr "Vítejte ve WordPressu. Toto je váš první testovací příspěvek. Můžete ho upravit, nebo smazat a postupně pak začít s tvorbou vlastního webu." + +#: wp-admin/includes/upgrade.php:213 +msgid "Hello world!" +msgstr "Ahoj všichni!" + +#. translators: Default post slug +#: wp-admin/includes/upgrade.php:215 +msgctxt "Default post slug" +msgid "hello-world" +msgstr "ahoj-vsichni" + +#: wp-admin/includes/upgrade.php:227 +msgid "Mr WordPress" +msgstr "Instalátor WordPressu" + +#: wp-admin/includes/upgrade.php:229 +msgid "Hi, this is a comment.<br />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 "Toto je komentář.<br />Přihlaste se do administrace a podívejte se do menu Komentáře, kde ho také naleznete a můžete ho upravit nebo smazat." + +#: wp-admin/includes/upgrade.php:246 +msgid "This is an example of a WordPress page, you could edit this to put information about yourself or your site so readers know where you are coming from. You can create as many pages like this one or sub-pages as you like and manage all of your content inside of WordPress." +msgstr "Toto je první ukázková stránka, která byla automaticky vytvořena během instalace WordPressu, a je možné ji jednoduše upravovat a doplnit třeba některé osobní informace (např. odkud pocházíte, co děláte), které by mohly zajímat vaše čtenáře. Můžete také vytvářet další podobné stránky a jejich podstránky, čímž vlastně začnete vytvářet a spravovat obsah webu." + +#: wp-admin/includes/upgrade.php:256 +#: wp-includes/js/tinymce/langs/wp-langs.php:251 +#: wp-includes/js/tinymce/wp-mce-help.php:177 +msgid "About" +msgstr "Něco o mně" + +#. translators: Default page slug +#: wp-admin/includes/upgrade.php:258 +msgctxt "Default page slug" +msgid "about" +msgstr "neco-o-me" + +#: wp-admin/includes/upgrade.php:314 +#, php-format +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 "" +"Váš nový web v systému WordPress byl úspěšně nainstalován:\n" +"\n" +"%1$s\n" +"\n" +"Můžete se přihlásit s administrátorským účtem. Použijte následující informace:\n" +"\n" +"Uživatelské jméno: %2$s\n" +"Heslo: %3$s\n" +"\n" +"Doufáme, že budete se správou svého webu v redakčním systému WordPress spokojeni. Děkujeme!\n" +"\n" +"-- Tým autorů WordPressu a překladatelé\n" +"http://cs.wordpress.org/\n" + +#: wp-admin/includes/upgrade.php:329 +msgid "New WordPress Site" +msgstr "Nový web využívající WordPress" + +#: wp-admin/includes/user.php:34 +#: wp-admin/includes/user.php:88 +#: wp-admin/users.php:64 +msgid "You can’t give users that role." +msgstr "Nemůžete přiřadit tomuto uživateli zvolenou úroveň." + +#: wp-admin/includes/user.php:133 +#: wp-login.php:282 +msgid "<strong>ERROR</strong>: Please enter a username." +msgstr "<strong>CHYBA</strong>: Zadejte své uživatelské jméno." + +#: wp-admin/includes/user.php:140 +#: wp-admin/includes/user.php:142 +msgid "<strong>ERROR</strong>: You entered your new password only once." +msgstr "<strong>CHYBA</strong>: Zadali jste své nové heslo pouze jednou. Vraťte se zpět a napište ho dvakrát." + +#: wp-admin/includes/user.php:145 +msgid "<strong>ERROR</strong>: Please enter your password." +msgstr "<strong>CHYBA</strong>: Zadejte své heslo." + +#: wp-admin/includes/user.php:147 +msgid "<strong>ERROR</strong>: Please enter your password twice." +msgstr "<strong>CHYBA</strong>: Zadejte své heslo dvakrát." + +#: wp-admin/includes/user.php:152 +msgid "<strong>ERROR</strong>: Passwords may not contain the character \"\\\"." +msgstr "<strong>CHYBA</strong>: Heslo nemůže obsahovat tyto znaky: \"\\\"." + +#: wp-admin/includes/user.php:156 +msgid "<strong>ERROR</strong>: Please enter the same password in the two password fields." +msgstr "<strong>CHYBA</strong>: Zadejte stejné heslo do obou polí určených pro heslo." + +#: wp-admin/includes/user.php:162 +#: wp-login.php:284 +msgid "<strong>ERROR</strong>: This username is invalid because it uses illegal characters. Please enter a valid username." +msgstr "<strong>CHYBA</strong>: Uživatelské jméno není platné, protože obsahuje nepovolené znaky. Zadejte prosím správné uživatelské jméno." + +#: wp-admin/includes/user.php:165 +msgid "<strong>ERROR</strong>: This username is already registered. Please choose another one." +msgstr "<strong>CHYBA</strong>: Toto uživatelské jméno je na tomto webu již registrováno. Vyberte si nějaké jiné." + +#: wp-admin/includes/user.php:169 +msgid "<strong>ERROR</strong>: Please enter an e-mail address." +msgstr "<strong>CHYBA</strong>: Zadejte emailovou adresu." + +#: wp-admin/includes/user.php:171 +msgid "<strong>ERROR</strong>: The e-mail address isn’t correct." +msgstr "<strong>CHYBA</strong>: Zadaná emailová adresa není správná." + +#: wp-admin/includes/user.php:173 +#: wp-login.php:297 +msgid "<strong>ERROR</strong>: This email is already registered, please choose another one." +msgstr "<strong>CHYBA</strong>: Tato emailová adresa je již registrována, zvolte si prosím nějakou jinou." + +#: wp-admin/includes/user.php:715 +msgid "No matching users were found!" +msgstr "Nebyl nalezen žádný odpovídající uživatel!" + +#: wp-admin/includes/user.php:855 +msgid "Notice:" +msgstr "Upozornění:" + +#: wp-admin/includes/user.php:856 +msgid "You’re using the auto-generated password for your account. Would you like to change it to something you’ll remember easier?" +msgstr "Stále ještě používáte pro svůj účet automaticky vygenerované heslo. Nechcete si ho raději změnit na něco lépe zapamatovatelného?" + +#: wp-admin/includes/user.php:858 +msgid "Yes, take me to my profile page" +msgstr "Ano, chci si heslo změnit na stránce s Profilem" + +#: wp-admin/includes/user.php:859 +msgid "No thanks, do not remind me again" +msgstr "Ne, děkuji za upozornění, ale už mi to nepřipomínejte" + +#: wp-admin/includes/widgets.php:189 +#: wp-admin/widgets.php:273 +#: wp-includes/widgets.php:67 +msgid "There are no options for this widget." +msgstr "Pro tento widget není k dispozici žádné nastavení." + +#: wp-admin/index.php:24 +#: wp-admin/menu.php:41 +#: wp-admin/menu.php:43 +#: wp-admin/menu.php:47 +msgid "Dashboard" +msgstr "Nástěnka" + +#: wp-admin/index.php:29 +msgid "Welcome to your WordPress Dashboard! You will find helpful tips in the Help tab of each screen to assist you as you get to know the application." +msgstr "Vítejte v administraci WordPressu! Právě se nacházíte na úvodní stránce s několika přehlednými informacemi, kterou nazýváme „Nástěnka“. Na každé stránce administrace naleznete pod záložkou „Nápověda“ různé užitečné tipy, které vám usnadní práci s redakčním systémem WordPress." + +#: wp-admin/index.php:30 +msgid "The left-hand navigation menu provides links to the administration screens in your WordPress application. You can expand or collapse navigation sections by clicking on the arrow that appears on the right side of each navigation item when you hover over it. You can also minimize the navigation menu to a narrow icon strip by clicking on the separator lines between navigation sections that end in double arrowheads; when minimized, the submenu items will be displayed on hover." +msgstr "Po levé straně vidíte hlavní navigační menu, které obsahuje odkazy na jednotlivé stránky v administraci WordPressu. Konkrétní nabídku pro každou položku z tohoto menu můžete snadno rozbalit a sbalit kliknutím na malou šipku, která se objeví na pravé straně každé položky tohoto menu, když přes ní přejedete kurzorem myši. Celé menu můžete také zmenšit na úzký pruh grafických ikonek, a to kliknutím na některou z oddělovacích čar hlavních částí menu s malou dvojitou šipkou na levém konci. Pokud máte menu minimalizované, tak stačí jen přejet kurzorem myši přes konkrétní ikonku a ihned se objeví další související nabídka (tzv. submenu)." + +#: wp-admin/index.php:31 +msgid "You can configure your dashboard by choosing which modules to display, how many columns to display them in, and where each module should be placed. You can hide/show modules and select the number of columns in the Screen Options tab. To rearrange the modules, drag and drop by clicking on the title bar of the selected module and releasing when you see a gray dotted-line box appear in the location you want to place the module. You can also expand or collapse each module by clicking once on the the module’s title bar. In addition, some modules are configurable, and will show a “Configure” link in the title bar when you hover over it." +msgstr "Nástěnku si můžete libovolně přizpůsobit tak, že si zvolíte, které její části (budeme je dále nazývat widgety) chcete mít zobrazené, v kolika sloupcích budou uspořádané a kde přesně budou umístěny. Záložka s názvem „Nastavení zobrazených informací“ vám umožní skrývat/zobrazovat jednotlivé widgety a zvolit si počet sloupců, do kterých budou uspořádány. Pokud budete chtít widgety ještě přerovnat, stačí kliknutím tlačítka myši uchopit lištu s názvem konkrétního widgetu a držením tohoto tlačítka widget přenést tam, kde ho chcete mít. Až uvidíte čárkovaný šedý obdélník, tak můžete tlačítko myši uvolnit a widget bude na toto místo přesunut. Jednotlivé widgety můžete také rozbalit či sbalit, a to kliknutím na malou šipku, která se objeví po přejetí kurzorem myši nad lištou s názvem widgetu. Kromě toho je možné upravovat nastavení některých widgetů, které poznáte tak, že se objeví odkaz „Nastavení“ při přejetí kurzorem myši přes jejich lištu s názvem." + +#: wp-admin/index.php:32 +msgid "The modules on your Dashboard screen are:" +msgstr "Přehled základních widgetů na Nástěnce:" + +#: wp-admin/index.php:33 +msgid "<strong>Right Now</strong> - Displays a summary of the content on your site and identifies which theme and version of WordPress you are using." +msgstr "<strong>Aktuální přehled</strong> - Zobrazuje přehled o aktuálním obsahu vašeho webu a upozorňuje na právě používanou šablonu a verzi WordPressu." + +#: wp-admin/index.php:34 +msgid "<strong>Recent Comments</strong> - Shows the most recent comments on your posts (configurable, up to 30) and allows you to moderate them." +msgstr "<strong>Nejnovější komentáře</strong> - Zobrazuje naposledy přidané komentáře k příspěvkům na vašem webu (můžete si nastavit jejich počet, maximálně však 30) a umožňuje tyto komentáře přímo moderovat (schvalovat/odmítat)." + +#: wp-admin/index.php:35 +msgid "<strong>Incoming Links</strong> - Shows links to your site found by Google Blog Search." +msgstr "<strong>Příchozí odkazy</strong> - Zobrazuje všechny odkazy směřující na váš web, které byly nalezeny službou Google Blog Search." + +#: wp-admin/index.php:36 +msgid "<strong>QuickPress</strong> - Allows you to create a new post and either publish it or save it as a draft." +msgstr "<strong>Rychlý příspěvek</strong> - Umožňuje vytvořit bez dalšího klikání krátký příspěvek a rovnou ho publikovat nebo uložit jako koncept." + +#: wp-admin/index.php:37 +msgid "<strong>Recent Drafts</strong> - Displays links to the 5 most recent draft posts you’ve started." +msgstr "<strong>Nejnovější koncepty</strong> - Zobrazuje odkazy na 5 naposledy uložených příspěvků, které jste sice začali psát, ale zatím jste je nedokončili a nepublikovali." + +#: wp-admin/index.php:38 +msgid "<strong>Other WordPress News</strong> - Shows the feed from <a href=\"http://planet.wordpress.org\" target=\"_blank\">WordPress Planet</a>. You can configure it to show a different feed of your choosing." +msgstr "<strong>Další užitečné novinky a informace o WordPressu</strong> - Zobrazuje aktuální články z RSS zdroje na anglickém webu <a href=\"http://planet.wordpress.org\" target=\"_blank\">WordPress Planet</a>. Nastavení tohoto widgetu si můžete libovolně měnit, např. zvolit jiný RSS zdroj." + +#: wp-admin/index.php:39 +msgid "<strong>Plugins</strong> - Features the most popular, newest, and recently updated plugins from the WordPress.org Plugin Directory." +msgstr "<strong>Pluginy</strong> - Upozorňuje na nejoblíbenější, nejnovější a naposledy aktualizované pluginy z oficiálního adresáře pluginů WordPressu." + +#: wp-admin/index.php:41 +msgid "<a href=\"http://codex.wordpress.org/Dashboard_SubPanel\" target=\"_blank\">Dashboard Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Dashboard_SubPanel\" target=\"_blank\">Manuál pro Nástěnku</a> (anglicky)" + +#: wp-admin/install.php:60 +msgid "WordPress › Installation" +msgstr "Instalace › WordPressu" + +#: wp-admin/install.php:92 +#, php-format +msgid "<strong>ERROR</strong>: %s" +msgstr "<strong>CHYBA</strong>: %s" + +#: wp-admin/install.php:97 +#: wp-admin/options-general.php:77 +#: xmlrpc.php:406 +msgid "Site Title" +msgstr "Název webu" + +#: wp-admin/install.php:105 +msgid "User(s) already exists." +msgstr "Uživatel(é) již existuje." + +#: wp-admin/install.php:108 +msgid "Usernames can have only alphanumeric characters, spaces, underscores, hyphens, periods and the @ symbol." +msgstr "Uživatelská jména mohou obsahovat pouze alfanumerické znaky (číslice, velká a malá písmena anglické abecedy), mezery, podtržítka, tečky, pomlčky a symbol @." + +#: wp-admin/install.php:116 +msgid "Password, twice" +msgstr "Zadejte heslo, dvakrát" + +#: wp-admin/install.php:117 +msgid "A password will be automatically generated for you if you leave this blank." +msgstr "Pokud necháte toto pole nevyplněné, bude vám heslo automaticky vygenerováno." + +#: wp-admin/install.php:122 +#: wp-admin/install.php:253 +#: wp-admin/user-edit.php:350 +#: wp-admin/user-new.php:240 +#: wp-includes/script-loader.php:252 +msgid "Strength indicator" +msgstr "Indikátor síly hesla" + +#: wp-admin/install.php:123 +#: wp-admin/user-edit.php:351 +#: wp-admin/user-new.php:241 +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 "Nápověda: Vaše heslo by mělo mít alespoň 7 znaků. Pro bezpečnější a silnější heslo je vhodné používat také velká a malá písmena, číslice a symboly jako např. ! \" ? $ % ^ & )." + +#: wp-admin/install.php:128 +msgid "Your E-mail" +msgstr "Váš email:" + +#: wp-admin/install.php:130 +msgid "Double-check your email address before continuing." +msgstr "Raději si ještě jednou překontrolujte zadanou emailovou adresu, protože na ni bude zasláno administrátorské heslo." + +#: wp-admin/install.php:133 +msgid "Allow my site to appear in search engines like Google and Technorati." +msgstr "Povolit vyhledávačům (např. Google, Seznam, Bing) zobrazovat tento web ve výsledcích vyhledávaní." + +#: wp-admin/install.php:136 +msgid "Install WordPress" +msgstr "Instalovat WordPress" + +#: wp-admin/install.php:144 +msgid "Already Installed" +msgstr "WordPress byl již nainstalován" + +#: wp-admin/install.php:144 +msgid "You appear to have already installed WordPress. To reinstall please clear your old database tables first." +msgstr "WordPress byl již pravděpodobně nainstalován. Pokud jej chcete přeinstalovat, vymažte nejprve stávající tabulky v databázi." + +#: wp-admin/install.php:144 +#: wp-admin/install.php:238 +#: wp-includes/general-template.php:261 +#: wp-login.php:582 +#: wp-login.php:601 +msgid "Log In" +msgstr "Přihlásit se" + +#: wp-admin/install.php:153 +#, php-format +msgid "You cannot install because <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> 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 "Instalace nemůže pokračovat, protože <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> vyžaduje alespoň PHP %2$s a MySQL %3$s. Na vašem serveru jsou však bohužel používány starší verze PHP %4$s a MySQL %5$s." + +#: wp-admin/install.php:155 +#, php-format +msgid "You cannot install because <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> requires PHP version %2$s or higher. You are running version %3$s." +msgstr "Instalace nemůže pokračovat, protože <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> vyžaduje alespoň PHP %2$s a na vašem serveru je bohužel používána starší verze PHP %3$s." + +#: wp-admin/install.php:157 +#, php-format +msgid "You cannot install because <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> requires MySQL version %2$s or higher. You are running version %3$s." +msgstr "Instalace nemůže pokračovat, protože <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> vyžaduje alespoň MySQL %2$s a na vašem serveru je používána bohužel starší verze MySQL %3$s." + +#: wp-admin/install.php:161 +msgid "Insufficient Requirements" +msgstr "Nejsou splněny minimální požadavky" + +#: wp-admin/install.php:169 +msgid "Welcome" +msgstr "Vítejte" + +#: wp-admin/install.php:170 +#, php-format +msgid "Welcome to the famous five minute WordPress installation process! You may want to browse the <a href=\"%s\">ReadMe documentation</a> 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 "Vítejte u jednoduché několikaminutové instalace redakčního systému WordPress! Pokud máte chvíli času, můžete si prohlédnout <a href=\"%s\">základní manuál</a> (v angličtině). Jinak stačí pouze vyplnit všechny potřebné informace a po velmi krátké instalaci budete moci plně využívat nejznámější a nejrozšiřitelnější publikační systém na světě." + +#: wp-admin/install.php:172 +msgid "Information needed" +msgstr "Potřebné informace" + +#: wp-admin/install.php:173 +msgid "Please provide the following information. Don’t worry, you can always change these settings later." +msgstr "Zadejte prosím následující informace. Nebojte se, všechno lze později v administraci vašeho webu jednoduše změnit." + +#: wp-admin/install.php:194 +msgid "you must provide a valid username." +msgstr "musíte zadat platné uživatelské jméno." + +#: wp-admin/install.php:197 +msgid "the username you provided has invalid characters." +msgstr "zadané uživatelské jméno obsahuje neplatné znaky." + +#: wp-admin/install.php:201 +msgid "your passwords do not match. Please try again" +msgstr "zadaná hesla se neshodují. Zkuste to prosím znovu" + +#: wp-admin/install.php:205 +msgid "you must provide an e-mail address." +msgstr "musíte zadat platnou emailovou adresu." + +#: wp-admin/install.php:209 +msgid "that isn’t a valid e-mail address. E-mail addresses look like: <code>username@example.com</code>" +msgstr "toto není platná emailová adresa. Emailové adresy obvykle vypadají takto: <code>jan.novak@seznam.cz</code>" + +#: wp-admin/install.php:219 +msgid "Success!" +msgstr "Hotovo!" + +#: wp-admin/install.php:221 +msgid "WordPress has been installed. Were you expecting more steps? Sorry to disappoint." +msgstr "Instalace WordPress byla úspěšně dokončena. Očekávali jste něco složitějšího? Bohužel vás zklameme, můžete pokračovat přihlášením do administrace." + +#: wp-admin/install.php:254 +#: wp-includes/script-loader.php:253 +msgid "Very weak" +msgstr "Příliš slabé" + +#: wp-admin/install.php:255 +#: wp-includes/script-loader.php:254 +msgid "Weak" +msgstr "Slabé" + +#: wp-admin/install.php:257 +#: wp-includes/script-loader.php:257 +msgid "Strong" +msgstr "Silné" + +#: wp-admin/install.php:258 +#: wp-includes/script-loader.php:258 +msgid "Mismatch" +msgstr "Nesouhlasí" + +#: wp-admin/link-add.php:13 +msgid "You do not have sufficient permissions to add links to this site." +msgstr "Nemáte dostatečné oprávnění pro vytváření odkazů na tomto webu." + +#: wp-admin/link-add.php:15 +msgid "Add New Link" +msgstr "Vytvořit nový odkaz" + +#: wp-admin/link-category.php:64 +#: wp-includes/taxonomy.php:362 +msgid "Edit Category" +msgstr "Upravit rubriku" + +#: wp-admin/link-manager.php:18 +#: wp-admin/link-manager.php:60 +#: wp-admin/link.php:18 +msgid "You do not have sufficient permissions to edit the links for this site." +msgstr "Nemáte dostatečné oprávnění pro úpravy odkazů na tomto webu." + +#: wp-admin/link-manager.php:48 +#, php-format +msgid "You can add links here to be displayed on your site, usually using <a href=\"%s\">Widgets</a>. By default, links to several sites in the WordPress community are included as examples." +msgstr "Na této stránce můžete spravovat odkazy, které se pak budou zobrazovat na vašem webu, a to obvykle za pomoci <a href=\"%s\">widgetů</a>. Během instalace WordPressu bylo automaticky vytvořeno několik ukázkových odkazů, které směřují na stránky s informacemi o WordPressu." + +#: wp-admin/link-manager.php:49 +msgid "Links may be separated into categories; these are different than the categories used on your posts." +msgstr "Jednotlivé odkazy mohou být přiřazovány do různých rubrik odkazů, které se však liší od rubrik používaných pro příspěvky." + +#: wp-admin/link-manager.php:50 +msgid "You can customize the display of this screen using the Screen Options tab and/or the dropdown filters above the links table." +msgstr "Zobrazení této stránky si můžete přizpůsobit pomocí záložky Nastavení zobrazených informací a (nebo) odkazy filtrovat s využitím nabídky rozevíracích menu nad výpisem odkazů." + +#: wp-admin/link-manager.php:51 +msgid "If you delete a link, it will be removed permanently, as Links do not have a Trash function yet." +msgstr "Pokud nějaký odkaz smažete, tak bude bohužel nenávratně ztracen, protože pro odkazy zatím není využívána možnost jejich pouze přechodného odstranění v podobě Koše." + +#: wp-admin/link-manager.php:53 +msgid "<a href=\"http://codex.wordpress.org/Links_Edit_SubPanel\" target=\"_blank\">Link Management Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Links_Edit_SubPanel\" target=\"_blank\">Manuál pro práci s odkazy</a> (anglicky)" + +#. translators: add new links +#: wp-admin/link-manager.php:86 +#: wp-admin/menu.php:104 +msgctxt "link" +msgid "Add New" +msgstr "Vytvořit odkaz" + +#: wp-admin/link-manager.php:95 +#, php-format +msgid "%s link deleted." +msgid_plural "%s links deleted" +msgstr[0] "%s odkaz byl smazán." +msgstr[1] "%s odkazy byly smazány." +msgstr[2] "%s odkazů bylo smazáno." + +#: wp-admin/link-manager.php:103 +#: wp-admin/link-manager.php:105 +msgid "Search Links" +msgstr "Hledat odkazy" + +#: wp-admin/link-manager.php:133 +msgid "View all Categories" +msgstr "Zobrazit všechny rubriky" + +#: wp-admin/link-manager.php:139 +msgid "Order by Link ID" +msgstr "Seřadit podle ID" + +#: wp-admin/link-manager.php:140 +msgid "Order by Name" +msgstr "Seřadit podle názvu" + +#: wp-admin/link-manager.php:141 +msgid "Order by Address" +msgstr "Seřadit podle URL adresy" + +#: wp-admin/link-manager.php:142 +msgid "Order by Rating" +msgstr "Seřadit podle hodnocení" + +#: wp-admin/link-manager.php:228 +#, php-format +msgid "Visit %s" +msgstr "Navštívit %s" + +#: wp-admin/link-manager.php:279 +msgid "No links found." +msgstr "Nebyly nalezeny žádné odkazy." + +#: wp-admin/link-parse-opml.php:90 +#, php-format +msgid "XML error: %1$s at line %2$s" +msgstr "Chyba v XML: %1$s na řádku %2$s" + +#: wp-admin/link.php:104 +#: wp-includes/link-template.php:957 +msgid "Edit Link" +msgstr "Upravit odkaz" + +#: wp-admin/link.php:109 +msgid "Link not found." +msgstr "Odkaz nebyl nalezen." + +#: wp-admin/maint/repair.php:13 +msgid "WordPress › Database Repair" +msgstr "WordPress › Správa databáze" + +#: wp-admin/maint/repair.php:22 +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 "Abyste mohli použít nástroj pro automatickou opravu některých databázových problémů, přidejte prosím následující řádek do souboru wp-config.php a potom tuto stránku obnovte." + +#: wp-admin/maint/repair.php:71 +#, php-format +msgid "Some database problems could not be repaired. Please copy-and-paste the following list of errors to the <a href=\"%s\">WordPress support forums</a> to get additional assistance." +msgstr "Některé problémy v databázi nemohly být bohužel opraveny. Zkopírujte si prosím následující výpis s chybami a vložte ho na oficiální <a href=\"%s\">Fórum podpory WordPressu</a> (anglicky), kde se vám určitě někdo pokusí co nejdříve pomoci." + +#: wp-admin/maint/repair.php:77 +msgid "Repairs complete. Please remove the following line from wp-config.php to prevent this page from being used by unauthorized users." +msgstr "Databáze byla prohlédnuta a nalezené problémy opraveny. Nezapomeňte prosím odstranit následující řádek ze souboru wp-config.php, aby nemohla být tato stránka používána neoprávněnými uživateli." + +#: wp-admin/maint/repair.php:81 +msgid "One or more database tables is unavailable. To allow WordPress to attempt to repair these tables, press the \"Repair Database\" button. Repairing can take awhile, so please be patient." +msgstr "Jedna nebo více tabulek v databázi není dostupných. WordPress se může pokusit tyto tabulky opravit, což mu povolíte kliknutím na tlačítko \"Opravit databázi\". Opravení databáze může nějakou chvíli trvat, takže buďte prosím trpěliví." + +#: wp-admin/maint/repair.php:83 +msgid "WordPress can automatically look for some common database problems and repair them. Repairing can take awhile, so please be patient." +msgstr "WordPress umí automaticky vyhledat některé běžné databázové problémy a opravit je. Opravení databáze může nějakou chvíli trvat, takže buďte prosím trpěliví." + +#: wp-admin/maint/repair.php:85 +msgid "Repair Database" +msgstr "Opravit databázi" + +#: wp-admin/maint/repair.php:86 +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 se také může pokusit databázi optimalizovat, což může vést v některých případech ke zlepšení výkonu databáze. Opravení a optimalizace databáze může nějakou chvíli trvat a během optimalizace bude databáze uzamčena." + +#: wp-admin/maint/repair.php:87 +msgid "Repair and Optimize Database" +msgstr "Opravit a optimalizovat databázi" + +#: wp-admin/media-upload.php:32 +msgid "You are not allowed to be here" +msgstr "Nemáte dostatečné oprávnění pro tuto činnost." + +#: wp-admin/media-upload.php:57 +msgid "Upload New Media" +msgstr "Nahrát nový mediální soubor" + +#: wp-admin/media-upload.php:61 +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." +msgstr "Mediální soubory můžete do WordPressu nahrávat ještě než k nim vytvoříte příspěvek/stránku. Tímto způsobem si můžete nahrát nějaký mediální soubor pro pozdější použití v plánovaném příspěvku/stránce a (nebo) můžete do Knihovny médií nahrát nějaký soubor (např. dokument), čímž získáte jeho URL adresu na vašem webu, kterou pak můžete dále poskytnout svým známým, aby si od vás tento soubor mohli stáhnout." + +#: wp-admin/media-upload.php:62 +msgid "There are two options for uploading files: <em>Select Files</em> will open the Flash-based uploader (multiple file upload allowed), or you can use the <em>Browser Uploader</em>. Clicking <em>Select Files</em> opens a navigation window showing you files in your operating system. Selecting <em>Open</em> after clicking on the file you want activates a progress bar on the uploader screen. Basic image editing is available after upload is complete. Make sure you click <em>Save</em> before leaving this screen." +msgstr "Nahrávat soubory můžete dvěma základními způsoby. Výchozí tlačítko <em>Vybrat soubory</em> spustí nástroj pro nahrávání souborů pomocí Flashe (umožňuje nahrávat více souborů najednou), nebo můžete použít <em>jednoduché nahrávání pomocí prohlížeče</em>. Kliknutím na <em>Vybrat soubory</em> se otevře nové navigační okno, které zobrazuje složky a soubory na vašem počítači. Nalezněte konkrétní soubor, který chcete nahrát, a poté už stačí jen kliknout na tlačítko <em>Otevřít</em> a na stránce pro nahrávání souborů se automaticky spustí animovaná lišta, která detailně zobrazuje informace o průběhu nahrávání. Ihned po úspěšném nahrání souboru se vám zobrazí formulář, kde můžete ještě doplnit a upravit další informace. Nezapomeňte nakonec kliknout na tlačítko <em>Uložit všechny změny</em>, abyste o provedené úpravy nepřišli." + +#: wp-admin/media-upload.php:64 +msgid "<a href=\"http://codex.wordpress.org/Media_Add_New_SubPanel\" target=\"_blank\">Documentation on Uploading Media Files</a>" +msgstr "<a href=\"http://codex.wordpress.org/Media_Add_New_SubPanel\" target=\"_blank\">Manuál pro nahrávání souborů</a> (anglicky)" + +#: wp-admin/media.php:23 +#: wp-admin/media.php:57 +msgid "You are not allowed to edit this attachment." +msgstr "Nemáte dostatečné oprávnění pro úpravy této přílohy." + +#: wp-admin/media.php:61 +msgid "You attempted to edit an attachment that doesn’t exist. Perhaps it was deleted?" +msgstr "Pokoušíte se upravovat soubor, který neexistuje. Nemohl být smazán?" + +#: wp-admin/media.php:62 +msgid "You can’t edit this attachment because it is in the Trash. Please move it out of the Trash and try again." +msgstr "Nemůžete upravovat tento soubor, protože byl přesunut do koše. Nejdříve ho prosím obnovte na původní místo a potom to zkuste znovu." + +#: wp-admin/media.php:78 +#: wp-admin/upload.php:189 +#: wp-admin/upload.php:215 +msgid "Media attachment updated." +msgstr "Mediální soubor byl aktualizován." + +#: wp-admin/media.php:94 +#: wp-admin/media.php:104 +msgid "Update Media" +msgstr "Aktualizovat mediální soubor" + +#. translators: Network menu item +#: wp-admin/menu.php:30 +msgid "Super Admin" +msgstr "Správa webů" + +#: wp-admin/menu.php:31 +msgid "Admin" +msgstr "Administrace" + +#. translators: Sites menu item +#: wp-admin/menu.php:33 +msgid "Sites" +msgstr "Weby" + +#: wp-admin/menu.php:34 +#: wp-admin/menu.php:192 +#: wp-admin/menu.php:198 +#: wp-admin/users.php:18 +msgid "Users" +msgstr "Uživatelé" + +#: wp-admin/menu.php:35 +#: wp-admin/menu.php:159 +#: wp-admin/menu.php:164 +#: wp-admin/update-core.php:245 +#: wp-admin/update-core.php:253 +msgid "Themes" +msgstr "Šablony" + +#: wp-admin/menu.php:36 +msgid "Options" +msgstr "Nastavení" + +#: wp-admin/menu.php:50 +msgid "My Sites" +msgstr "Moje weby" + +#: wp-admin/menu.php:67 +#, php-format +msgid "%d WordPress Update" +msgstr "%d aktualizace WordPressu" + +#: wp-admin/menu.php:69 +#, php-format +msgid "%d Plugin Update" +msgid_plural "%d Plugin Updates" +msgstr[0] "%d aktualizace pluginu" +msgstr[1] "%d aktualizace pluginů" +msgstr[2] "%d aktualizací pluginů" + +#: wp-admin/menu.php:71 +#, php-format +msgid "%d Theme Update" +msgid_plural "%d Themes Updates" +msgstr[0] "%d aktualizace šablony" +msgstr[1] "%d aktualizace šablon" +msgstr[2] "%d aktualizací šablon" + +#: wp-admin/menu.php:75 +#, php-format +msgid "Updates %s" +msgstr "Aktualizace %s" + +#. translators: add new post +#: wp-admin/menu.php:85 +#: wp-includes/post.php:949 +msgctxt "post" +msgid "Add New" +msgstr "Vytvořit příspěvek" + +#: wp-admin/menu.php:97 +msgid "Library" +msgstr "Knihovna médií" + +#. translators: add new file +#: wp-admin/menu.php:99 +#: wp-admin/upload.php:181 +msgctxt "file" +msgid "Add New" +msgstr "Nahrát soubor" + +#: wp-admin/menu.php:107 +#: wp-admin/menu.php:108 +#: wp-includes/default-widgets.php:19 +#: wp-includes/default-widgets.php:25 +#: wp-includes/post-template.php:759 +#: wp-includes/theme-compat/sidebar.php:55 +msgid "Pages" +msgstr "Stránky" + +#. translators: add new page +#: wp-admin/menu.php:110 +#: wp-includes/post.php:949 +msgctxt "page" +msgid "Add New" +msgstr "Vytvořit stránku" + +#: wp-admin/menu.php:120 +#, php-format +msgid "Comments %s" +msgstr "Komentáře %s" + +#: wp-admin/menu.php:158 +#: wp-admin/menu.php:163 +msgid "Appearance" +msgstr "Vzhled" + +#: wp-admin/menu.php:161 +#: wp-admin/menu.php:166 +#: wp-admin/nav-menus.php:469 +msgid "Menus" +msgstr "Menu" + +#: wp-admin/menu.php:173 +msgctxt "theme editor" +msgid "Editor" +msgstr "Editor" + +#: wp-admin/menu.php:183 +#, php-format +msgid "Plugins %s" +msgstr "Pluginy %s" + +#. translators: add new plugin +#: wp-admin/menu.php:186 +#: wp-admin/plugins.php:374 +msgctxt "plugin" +msgid "Add New" +msgstr "Instalace pluginů" + +#: wp-admin/menu.php:187 +msgctxt "plugin editor" +msgid "Editor" +msgstr "Editor" + +#: wp-admin/menu.php:194 +#: wp-admin/user-edit.php:29 +msgid "Profile" +msgstr "Profil" + +#: wp-admin/menu.php:199 +#: wp-admin/users.php:374 +msgctxt "user" +msgid "Add New" +msgstr "Vytvořit uživatele" + +#: wp-admin/menu.php:201 +#: wp-admin/menu.php:204 +msgid "Your Profile" +msgstr "Profil" + +#: wp-admin/menu.php:205 +#: wp-admin/user-new.php:108 +#: wp-admin/user-new.php:159 +msgid "Add New User" +msgstr "Vytvořit nového uživatele" + +#: wp-admin/menu.php:208 +#: wp-admin/menu.php:209 +#: wp-admin/tools.php:12 +msgid "Tools" +msgstr "Nástroje" + +#: wp-admin/menu.php:213 +msgid "Delete Site" +msgstr "Smazat web" + +#: wp-admin/menu.php:215 +msgid "Network" +msgstr "Síť webů" + +#: wp-admin/menu.php:217 +#: wp-admin/options.php:21 +msgid "Settings" +msgstr "Nastavení" + +#: wp-admin/menu.php:218 +msgctxt "settings screen" +msgid "General" +msgstr "Obecné" + +#: wp-admin/menu.php:219 +msgid "Writing" +msgstr "Publikování" + +#: wp-admin/menu.php:220 +msgid "Reading" +msgstr "Zobrazování" + +#: wp-admin/menu.php:223 +msgid "Privacy" +msgstr "Viditelnost" + +#: wp-admin/menu.php:224 +msgid "Permalinks" +msgstr "Trvalé odkazy" + +#: wp-admin/menu.php:443 +msgid "You do not have sufficient permissions to access this page." +msgstr "Nemáte dostatečné oprávnění pro přístup na tuto stránku." + +#: wp-admin/nav-menus.php:19 +msgid "Your theme does not support navigation menus or widgets." +msgstr "Aktuálně používaná šablona nepodporuje přímé zobrazení navigačního menu ani widgety." + +#: wp-admin/nav-menus.php:237 +msgid "The menu item has been successfully deleted." +msgstr "Položka menu byla úspěšně smazána." + +#: wp-admin/nav-menus.php:256 +msgid "The menu has been successfully deleted." +msgstr "Menu bylo úspěšně smazáno." + +#: wp-admin/nav-menus.php:299 +#, php-format +msgid "The <strong>%s</strong> menu has been successfully created." +msgstr "Menu s názvem <strong>%s</strong> bylo úspěšně vytvořeno." + +#: wp-admin/nav-menus.php:302 +#: wp-admin/nav-menus.php:312 +msgid "Please enter a valid menu name." +msgstr "Zadejte prosím platný název menu." + +#: wp-admin/nav-menus.php:388 +#, php-format +msgid "The <strong>%s</strong> menu has been updated." +msgstr "Menu s názvem <strong>%s</strong> bylo úspěšně aktualizováno." + +#: wp-admin/nav-menus.php:455 +msgid "This feature is new in version 3.0; to use a custom menu in place of your theme’s default menus, support for this feature must be registered in the theme’s functions.php file. If your theme does not support the custom menus feature yet (the new default theme, Twenty Ten, does), you can learn about adding support yourself by following the below link." +msgstr "Jednou z novinek WordPressu 3.0 je i možnost tvorby vlastního menu. Abyste mohli vytvořené menu na vybraném místě webu vůbec zobrazit, musí být tato funkcionalita nejdříve řádně zaregistrována ve vaší šabloně (soubor functions.php), kde bude také definována konkrétní oblast pro zobrazení menu (příslušný soubor šablony). Pokud vaše stávající šablona zobrazení vlastního menu na konkrétním místě webu zatím neumožňuje (podporuje ho např. nová výchozí šablona WordPressu s názvem TwentyTen), můžete po prostudování manuálu (viz spodní odkaz) zkusit šablonu sami upravit." + +#: wp-admin/nav-menus.php:456 +msgid "You can create custom menus for your site. These menus may contain links to pages, categories, custom links or other content types (use the Screen Options tab to decide which ones to show on the screen). You can specify a different navigation label for a menu item as well as other attributes. You can create multiple menus. If your theme includes more than one menu, you can choose which custom menu to associate with each. You can also use custom menus in conjunction with the Custom Menus widget." +msgstr "Na této stránce můžete vytvářet již konkrétní menu na váš web. Tato menu mohou obsahovat odkazy na stránky a rubriky, uživatelské odkazy i další obsah webu. Zobrazení konkrétních sekcí můžete upravovat pomocí záložky Nastavení zobrazených informací, kde si zaškrtnutím vyberete sekce, které budou následně zobrazeny na stránce a budete z nich moci jednoduše přidávat vybraný obsah do menu. Pro každou položku menu můžete nejen upravit konkrétní text odkazu, ale i doplnit některé další informace. Můžete si také vytvořit více různých menu a pokud vaše šablona podporuje více než jednu oblast pro menu, tak můžete jednoduše nastavit, kde bude konkrétní menu umístěno. Vytvořené menu můžete zobrazit na webu také pomocí widgetu s názvem Menu." + +#: wp-admin/nav-menus.php:457 +msgid "To create a new custom menu, click on the + tab, give the menu a name, and click Create Menu. Next, add menu items from the appropriate boxes. You’ll be able to edit the information for each menu item, and can drag and drop to put them in order. You can also drag a menu item a little to the right to make it a submenu, to create menus with hierarchy. You’ll see when the position of the drop target shifts over to create the nested placement. Don’t forget to click Save when you’re finished." +msgstr "Pokud chcete vytvořit nové menu, klikněte nejdříve na záložku se symbolem „+“, zadejte nějaký vhodný název menu a poté klikněte na tlačítko Vytvořit menu. Dále už stačí pouze přidávat jednotlivé položky menu z příslušných sekcí v levé části stránky. U každé položky menu pak můžete ještě dále upravovat její vlastnosti a také jednoduše měnit její pořadí tak, že ji uchopíte kurzorem myši a přetáhnete na určené místo. Jednotlivé položky můžete přesunovat nejen nahoru a dolů, ale také trochu doprava, čímž je označíte jako podřazené a vytvoříte v menu hierarchii. Během samotného přesunování vybraných položek menu se bude automaticky zobrazovat jejich možné umístění, abyste mohli kurzor myši na vhodném místě uvolnit. Nezapomeňte po všech provedených změnách ještě kliknout na tlačítko Aktualizovat menu." + +#: wp-admin/nav-menus.php:459 +msgid "<a href=\"http://codex.wordpress.org/Appearance_Menus_SubPanel\" target=\"_blank\">Menus Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Appearance_Menus_SubPanel\" target=\"_blank\">Manuál pro práci s menu</a> (anglicky)" + +#: wp-admin/nav-menus.php:490 +#: wp-includes/default-widgets.php:1104 +msgid "Select Menu:" +msgstr "Vyberte menu:" + +#: wp-admin/nav-menus.php:497 +msgid "Add New Menu" +msgstr "Vytvořit nové menu" + +#: wp-admin/nav-menus.php:522 +#: wp-admin/nav-menus.php:532 +msgid "Add menu" +msgstr "Vytvořit menu" + +#: wp-admin/nav-menus.php:542 +msgid "Menu Name" +msgstr "Název menu" + +#: wp-admin/nav-menus.php:543 +msgid "Enter menu name here" +msgstr "Zadejte název menu" + +#: wp-admin/nav-menus.php:557 +msgid "Automatically add new top-level pages" +msgstr "Automaticky přidávat nově publikované hlavní stránky" + +#: wp-admin/nav-menus.php:562 +msgid "Create Menu" +msgstr "Vytvořit menu" + +#: wp-admin/nav-menus.php:562 +msgid "Save Menu" +msgstr "Aktualizovat menu" + +#: wp-admin/nav-menus.php:567 +msgid "Delete Menu" +msgstr "Smazat menu" + +#: wp-admin/nav-menus.php:588 +msgid "To create a custom menu, give it a name above and click Create Menu. Then choose items like pages, categories or custom links from the left column to add to this menu." +msgstr "Pro vytvoření vlastního menu zadejte nejdříve jeho název a pak klikněte na tlačítko Vytvořit menu. Potom už můžete z levé části stránky vybírat a přidávat do menu konkrétní položky, jako např. stránky, rubriky nebo uživatelské odkazy." + +#: wp-admin/nav-menus.php:589 +msgid "After you have added your items, drag and drop to put them in the order you want. You can also click each item to reveal additional configuration options." +msgstr "Až přidáte do menu všechny potřebné položky, tak je uchopením a tažením kurzoru myši můžete přesunovat a měnit tak jednoduše jejich pořadí. Kliknutím na konkrétní položku menu pak odkryjete její pokročilé vlastnosti, které můžete libovolně doplňovat." + +#: wp-admin/nav-menus.php:590 +msgid "When you have finished building your custom menu, make sure you click the Save Menu button." +msgstr "Až budete s vytvořeným menu spokojeni, nezapomeňte ještě kliknout na tlačítko Aktualizovat menu, aby byly všechny změny správně uloženy." + +#: wp-admin/options-discussion.php:13 +#: wp-admin/options-general.php:13 +#: wp-admin/options-media.php:13 +#: wp-admin/options-permalink.php:13 +#: wp-admin/options-privacy.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 "Nemáte dostatečné opravnění pro úpravy nastavení na tomto webu." + +#: wp-admin/options-discussion.php:15 +msgid "Discussion Settings" +msgstr "Nastavení komentářů" + +#: wp-admin/options-discussion.php:19 +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 link below to get information on what each discussion setting does." +msgstr "Na této stránce naleznete mnoho různých možností pro úpravy nastavení komentářů na webu. Můžete si tak přizpůsobit vkládání komentářů, jejich (automatické) schvalování, zobrazování na webu a další související funkce (např. emailové upozornění, avataři). Možností je dokonce tolik, že se nám sem ani všechno nevešlo :-) Pokud chcete znát o některých nastaveních podrobnější informace, použijte prosím spodní odkaz na manuál." + +#: wp-admin/options-discussion.php:20 +#: wp-admin/options-media.php:22 +#: wp-admin/options-permalink.php:24 +#: wp-admin/options-privacy.php:21 +#: wp-admin/options-reading.php:22 +#: wp-admin/options-writing.php:20 +msgid "You must click the Save Changes button at the bottom of the screen for new settings to take effect." +msgstr "Nakonec musíte ještě dole na obrazovce kliknout na tlačítko „Uložit změny“, aby byly provedené úpravy nastavení uloženy a mohly se na webu projevit." + +#: wp-admin/options-discussion.php:22 +msgid "<a href=\"http://codex.wordpress.org/Settings_Discussion_SubPanel\" target=\"_blank\">Discussion Settings Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Settings_Discussion_SubPanel\" target=\"_blank\">Manuál pro nastavení komentářů</a> (anglicky)" + +#: wp-admin/options-discussion.php:38 +#: wp-admin/options-discussion.php:39 +msgid "Default article settings" +msgstr "Základní nastavení" + +#: wp-admin/options-discussion.php:42 +msgid "Attempt to notify any blogs linked to from the article." +msgstr "Pokusit se upozornit všechny webové stránky, na které je v příspěvku odkazováno." + +#: wp-admin/options-discussion.php:46 +msgid "Allow link notifications from other blogs (pingbacks and trackbacks.)" +msgstr "Povolit oznamování příchozích odkazů z jiných webů (pingbacky a trackbacky)." + +#: wp-admin/options-discussion.php:50 +msgid "Allow people to post comments on new articles" +msgstr "Povolit návštěvníkům webu přidávat komentáře k příspěvkům a stránkám" + +#: wp-admin/options-discussion.php:52 +msgid "These settings may be overridden for individual articles." +msgstr "Toto nastavení se dá ještě změnit u konkrétního příspěvku nebo stránky." + +#: wp-admin/options-discussion.php:56 +#: wp-admin/options-discussion.php:57 +msgid "Other comment settings" +msgstr "Další nastavení komentářů" + +#: wp-admin/options-discussion.php:58 +msgid "Comment author must fill out name and e-mail" +msgstr "Autor komentáře musí vyplnit své jméno a email" + +#: wp-admin/options-discussion.php:62 +msgid "Users must be registered and logged in to comment" +msgstr "Přidávat komentáře mohou pouze registrovaní a přihlášení uživatelé" + +#: wp-admin/options-discussion.php:63 +msgid " (Signup has been disabled. Only members of this site can comment.)" +msgstr " (Registrace není v současné době povolena. Pouze zaregistrovaní uživatelé mohou přidávat komentáře.)" + +#: wp-admin/options-discussion.php:69 +#, php-format +msgid "Automatically close comments on articles older than %s days" +msgstr "Automaticky zakázat přidávání komentářů u příspěvků starších než %s dní." + +#: wp-admin/options-discussion.php:85 +#, php-format +msgid "Enable threaded (nested) comments %s levels deep" +msgstr "Povolit vlákna v komentářích až do %s. úrovně" + +#: wp-admin/options-discussion.php:94 +msgid "last" +msgstr "poslední" + +#: wp-admin/options-discussion.php:96 +msgid "first" +msgstr "první" + +#: wp-admin/options-discussion.php:98 +#, php-format +msgid "Break comments into pages with %1$s top level comments per page and the %2$s page displayed by default" +msgstr "Rozdělit komentáře na jednotlivé stránky s omezeným počtem %1$s komentářů nejvyšší úrovně na stránku a jako výchozí zobrazit %2$s stránku" + +#: wp-admin/options-discussion.php:106 +msgid "older" +msgstr "nejstarších" + +#: wp-admin/options-discussion.php:108 +msgid "newer" +msgstr "nejnovějších" + +#: wp-admin/options-discussion.php:110 +#, php-format +msgid "Comments should be displayed with the %s comments at the top of each page" +msgstr "Komentáře by měly být na každé této stránce seřazeny od %s" + +#: wp-admin/options-discussion.php:116 +#: wp-admin/options-discussion.php:117 +msgid "E-mail me whenever" +msgstr "Upozornit emailem" + +#: wp-admin/options-discussion.php:120 +msgid "Anyone posts a comment" +msgstr "Když někdo přidá komentář" + +#: wp-admin/options-discussion.php:124 +msgid "A comment is held for moderation" +msgstr "Když nějaký komentář čeká na schválení" + +#: wp-admin/options-discussion.php:128 +#: wp-admin/options-discussion.php:129 +msgid "Before a comment appears" +msgstr "Před zobrazením komentáře na webu" + +#: wp-admin/options-discussion.php:132 +msgid "An administrator must always approve the comment" +msgstr "Administrátor musí každý komentář schválit (bez ohledu na možnosti níže)" + +#: wp-admin/options-discussion.php:134 +msgid "Comment author must have a previously approved comment" +msgstr "Autor komentáře musí mít alespoň jeden již dříve schválený komentář" + +#: wp-admin/options-discussion.php:138 +#: wp-admin/options-discussion.php:139 +msgid "Comment Moderation" +msgstr "Schvalování komentářů" + +#: wp-admin/options-discussion.php:140 +#, php-format +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 "Zdržet komentář ve frontě, pokud obsahuje více než %s odkazů (základní charakteristikou komentářového spamu je velké množství odkazů)." + +#: wp-admin/options-discussion.php:142 +msgid "When a comment contains any of these words in its content, name, URL, e-mail, or IP, it will be held in the <a href=\"edit-comments.php?comment_status=moderated\">moderation queue</a>. One word or IP per line. It will match inside words, so “press” will match “WordPress”." +msgstr "Pokud komentář obsahuje (v samotném textu, názvu, URL, emailu nebo IP adrese) některý z níže uvedených výrazů, pak bude automaticky zadržen <a href=\"edit-comments.php?comment_status=moderated\">ve frontě</a>. Každý výraz zadejte na samostaný řádek. Budou zachytávány i komentáře, které obsahují pouze části těchto výrazů, takže pokud níže zadáte např. výraz „press“, tak budou zachyceny i komentáře obsahující „WordPress“." + +#: wp-admin/options-discussion.php:149 +#: wp-admin/options-discussion.php:150 +msgid "Comment Blacklist" +msgstr "Černá listina pro komentáře" + +#: wp-admin/options-discussion.php:151 +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 "Pokud komentář obsahuje (v samotném textu, názvu, URL, emailu nebo IP adrese) některý z níže uvedených výrazů, pak bude automaticky označen jako spam. Každý výraz zadejte na samostaný řádek. Budou zachytávány i komentáře, které obsahují pouze části těchto výrazů, takže pokud níže zadáte např. výraz „press“, tak budou jako spam označeny i komentáře obsahující „WordPress“." + +#: wp-admin/options-discussion.php:160 +msgid "Avatars" +msgstr "Avataři" + +#: wp-admin/options-discussion.php:162 +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 "Avatar je obrázek, který vás doprovází při návštěvách různých internetových stránek (pokud avatary podporují) a objevuje se většinou u vašeho jména v komentářích. Níže můžete povolit zobrazování avatarů pro všechny návštěvníky, kteří mají svůj avatar registrován a zanechají na vašem webu nějaký komentář." + +#: wp-admin/options-discussion.php:168 +#: wp-admin/options-discussion.php:169 +msgid "Avatar Display" +msgstr "Zobrazování avatarů" + +#: wp-admin/options-discussion.php:171 +msgid "Don’t show Avatars" +msgstr "Nezobrazovat avatary" + +#: wp-admin/options-discussion.php:171 +msgid "Show Avatars" +msgstr "Zobrazovat avatary" + +#: wp-admin/options-discussion.php:180 +#: wp-admin/options-discussion.php:181 +msgid "Maximum Rating" +msgstr "Maximální hodnocení" + +#. translators: Content suitability rating: http://bit.ly/89QxZA +#: wp-admin/options-discussion.php:186 +msgid "G — Suitable for all audiences" +msgstr "G — Vhodné pro všechny návštěvníky" + +#. translators: Content suitability rating: http://bit.ly/89QxZA +#: wp-admin/options-discussion.php:188 +msgid "PG — Possibly offensive, usually for audiences 13 and above" +msgstr "PG — Ostřejší, možná i urážlivý či útočný, obvykle pro návštěvníky starší 13 let" + +#. translators: Content suitability rating: http://bit.ly/89QxZA +#: wp-admin/options-discussion.php:190 +msgid "R — Intended for adult audiences above 17" +msgstr "R — Určený návštěvníkům starším 17 let" + +#. translators: Content suitability rating: http://bit.ly/89QxZA +#: wp-admin/options-discussion.php:192 +msgid "X — Even more mature than above" +msgstr "X — Vhodný pouze pro dospělé" + +#: wp-admin/options-discussion.php:203 +#: wp-admin/options-discussion.php:204 +msgid "Default Avatar" +msgstr "Výchozí avatar" + +#: wp-admin/options-discussion.php:206 +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 "Uživatelé bez svého vlastního avataru si mohou nechat zobrazovat buď všeobecné logo, nebo si mohou nechat nějaký avatar automaticky vygenerovat na základě své emailové adresy." + +#: wp-admin/options-discussion.php:210 +msgid "Mystery Man" +msgstr "Tajemná osoba" + +#: wp-admin/options-discussion.php:211 +msgid "Blank" +msgstr "Bez avataru" + +#: wp-admin/options-discussion.php:212 +msgid "Gravatar Logo" +msgstr "Logo Gravataru" + +#: wp-admin/options-discussion.php:213 +msgid "Identicon (Generated)" +msgstr "Identicon (automaticky vygenerován)" + +#: wp-admin/options-discussion.php:214 +msgid "Wavatar (Generated)" +msgstr "Wavatar (automaticky vygenerován)" + +#: wp-admin/options-discussion.php:215 +msgid "MonsterID (Generated)" +msgstr "MonsterID (automaticky vygenerován)" + +#: wp-admin/options-general.php:15 +msgid "General Settings" +msgstr "Základní nastavení" + +#. translators: date and time format for exact current time, mainly about timezones, see http://php.net/date +#: wp-admin/options-general.php:18 +msgctxt "timezone date format" +msgid "Y-m-d G:i:s" +msgstr "j.n.Y, G:i" + +#: wp-admin/options-general.php:54 +msgid "The fields on this screen determine some of the basics of your site setup." +msgstr "Na této stránce si můžete snadno přizpůsobit některá základní nastavení vašeho webu." + +#: wp-admin/options-general.php:55 +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 "Ve většině šablon je velmi důležitý zejména samotný název webu, který je obvykle zobrazován (a graficky zvýrazněn) hned na začátku každé stránky. Kromě toho je název webu uveden také v horní liště prohlížeče a slouží i pro základní identifikaci vašeho RSS zdroje. Popis webu je v šablonách také často používán a měl by stručně a jasně informovat o tom, co mohou návštěvníci na vašem webu nalézt." + +#: wp-admin/options-general.php:56 +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 "URL adresy nainstalovaného WordPressu a úvodní stránky webu mohou být stejné (http://www.separatista.net) nebo různé, např. když WordPress na serveru nainstalujete do podadresáře (http://www.separatista.net/wordpress), ale úvodní stránku webu chcete uvádět bez názvu tohoto podadresáře (http://www.separatista.net)." + +#: wp-admin/options-general.php:57 +msgid "If you want site visitors to be able to register themselves, as opposed to being registered 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 administrator." +msgstr "Pokud chcete návštěvníkům dovolit, aby se mohli na vašem webu sami zaregistrovat (a nemusel je ručně registrovat např. Administrátor), zašktrněte příslušné pole u nabídky „Členství“. Zároveň si můžete vybrat výchozí úroveň nově zaregistrovaných uživatelů, která bude automaticky přednastavena i v případě ruční registrace Administrátorem." + +#: wp-admin/options-general.php:58 +msgid "UTC means Coordinated Universal Time." +msgstr "UTC je zkratka pro anglický výraz Coordinated Universal Time, tedy česky koordinovaný světový čas (někdy také nazývaný jako Zulu time)." + +#: wp-admin/options-general.php:59 +msgid "Remember to click the Save Changes button at the bottom of the screen for new settings to take effect." +msgstr "Nezapomeňte také dole na obrazovce kliknout na tlačítko „Uložit změny“, aby byly provedené úpravy nastavení uloženy a mohly se na webu projevit." + +#: wp-admin/options-general.php:61 +msgid "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=\"_blank\">Documentation on General Settings</a>" +msgstr "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=\"_blank\">Manuál pro základní nastavení</a> (anglicky)" + +#: wp-admin/options-general.php:81 +msgid "Tagline" +msgstr "Popis webu" + +#: wp-admin/options-general.php:83 +msgid "In a few words, explain what this site is about." +msgstr "Několika slovy popište, o čem je váš web." + +#: wp-admin/options-general.php:87 +msgid "WordPress address (URL)" +msgstr "URL adresa instalace WordPressu" + +#: wp-admin/options-general.php:91 +msgid "Site address (URL)" +msgstr "URL adresa webu" + +#: wp-admin/options-general.php:93 +msgid "Enter the address here if you want your site homepage <a href=\"http://codex.wordpress.org/Giving_WordPress_Its_Own_Directory\">to be different from the directory</a> you installed WordPress." +msgstr "Pokud chcete mít úvodní stránku svého webu <a href=\"http://codex.wordpress.org/Giving_WordPress_Its_Own_Directory\">umístěnou jinde</a>, než je adresář s nainstalovaným WordPressem, zadejte sem její požadovanou URL adresu." + +#: wp-admin/options-general.php:96 +#: wp-admin/options-general.php:115 +msgid "E-mail address" +msgstr "Email" + +#: wp-admin/options-general.php:98 +msgid "This address is used for admin purposes, like new user notification." +msgstr "Tato emailová adresa bude použita pouze pro účely administrace WordPressu (např. upozornění při registraci nového uživatele)." + +#: wp-admin/options-general.php:101 +#: wp-admin/options-general.php:102 +msgid "Membership" +msgstr "Členství" + +#: wp-admin/options-general.php:104 +msgid "Anyone can register" +msgstr "Zaregistrovat se může kdokoliv" + +#: wp-admin/options-general.php:108 +msgid "New User Default Role" +msgstr "Výchozí úroveň nového uživatele" + +#: wp-admin/options-general.php:117 +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. <strong>The new address will not become active until confirmed.</strong>" +msgstr "Tato emailová adresa bude použita pouze pro účely administrace WordPressu. Pokud ji změníte, bude vám na novou adresu automaticky poslán ověřovací email, jehož přijetí musíte potvrdit. <strong>Nová emailová adresa nebude aktivní, dokud nebude ověřena.</strong>" + +#: wp-admin/options-general.php:122 +#, php-format +msgid "There is a pending change of the admin e-mail to <code>%1$s</code>. <a href=\"%2$s\">Cancel</a>" +msgstr "Právě probíhá změna administrátorské emailové adresy na <code>%1$s</code>. <a href=\"%2$s\">Zrušit</a>" + +#: wp-admin/options-general.php:132 +#: wp-admin/options-general.php:188 +msgid "Timezone" +msgstr "Časové pásmo" + +#: wp-admin/options-general.php:154 +#, php-format +msgid "UTC %s" +msgstr "UTC %s" + +#: wp-admin/options-general.php:158 +msgid "hours" +msgstr "hodin" + +#: wp-admin/options-general.php:159 +#: wp-admin/options-general.php:195 +#, php-format +msgid "<abbr title=\"Coordinated Universal Time\">UTC</abbr> time is <code>%s</code>" +msgstr "Aktuální <abbr title=\"Coordinated Universal Time, česky koordinovaný světový čas, někdy nazývaný také jako Zulu time\">UTC</abbr> čas je <code>%s</code>" + +#: wp-admin/options-general.php:161 +#, php-format +msgid "UTC %1$s is <code>%2$s</code>" +msgstr "UTC %1$s je <code>%2$s</code>" + +#: wp-admin/options-general.php:164 +msgid "Unfortunately, you have to manually update this for daylight saving time. The PHP Date/Time library is not supported by your web host." +msgstr "Bohužel musíte nastavení časového pásma při přechodu mezi letním a zimním časem měnit ručně, protože váš poskytovatel hostingu nepodporuje PHP knihovnu pro snadnější práci s datem a časem (Date/Time)." + +#: wp-admin/options-general.php:197 +#, php-format +msgid "Local time is <code>%1$s</code>" +msgstr "Místní čas je <code>%1$s</code>" + +#: wp-admin/options-general.php:200 +msgid "Choose a city in the same timezone as you." +msgstr "Vyberte město, které je ve vašem časovém pásmu." + +#: wp-admin/options-general.php:209 +msgid "This timezone is currently in daylight saving time." +msgstr "V tomto časovém pásmu se v současné době používá letní čas." + +#: wp-admin/options-general.php:211 +msgid "This timezone is currently in standard time." +msgstr "V tomto časovém pásmu se v současné době nepoužívá letní čas." + +#: wp-admin/options-general.php:230 +#, php-format +msgid "Daylight saving time begins on: <code>%s</code>." +msgstr "Letní čas začíná: <code>%s</code>." + +#: wp-admin/options-general.php:231 +#, php-format +msgid "Standard time begins on: <code>%s</code>." +msgstr "Letní čas končí: <code>%s</code>." + +#: wp-admin/options-general.php:235 +msgid "This timezone does not observe daylight saving time." +msgstr "V tomto časovém pásmu se letní čas nevyužívá." + +#: wp-admin/options-general.php:248 +#: wp-admin/options-general.php:250 +#: xmlrpc.php:416 +msgid "Date Format" +msgstr "Formát data" + +#: wp-admin/options-general.php:273 +#: wp-admin/options-general.php:305 +msgid "Custom:" +msgstr "Vlastní:" + +#: wp-admin/options-general.php:275 +msgid "<a href=\"http://codex.wordpress.org/Formatting_Date_and_Time\">Documentation on date formatting</a>. Click “Save Changes” to update sample output." +msgstr "<a href=\"http://codex.wordpress.org/Formatting_Date_and_Time\">Dokumentace pro formátování data</a>. Pro aktuální zobrazení změn ukázkového data musíte nejprve provedené změny nastavení uložit." + +#: wp-admin/options-general.php:281 +#: wp-admin/options-general.php:283 +#: xmlrpc.php:421 +msgid "Time Format" +msgstr "Formát času" + +#: wp-admin/options-general.php:311 +msgid "Week Starts On" +msgstr "První den v týdnu" + +#: wp-admin/options-general.php:327 +msgid "Site language:" +msgstr "Jazykové nastavení:" + +#: wp-admin/options-media.php:15 +msgid "Media Settings" +msgstr "Nastavení médií" + +#: wp-admin/options-media.php:19 +msgid "You can set maximum sizes for images inserted into your written content; you can also insert an image as Full Size." +msgstr "Pokud nechcete vkládat do obsahu vašich textů ve WordPressu původní velikost nahraného obrázku, můžete si na této stránce nastavit maximální rozměry pro několik automaticky generovaných formátů obrázků, které pak budete moci libovolně používat." + +#: wp-admin/options-media.php:20 +msgid "The Embed option allows you embed a video, image, or other media content into your content automatically by typing the URL (of the web page where the file lives) on its own line when you create your content." +msgstr "Funkce pro vkládání externího mediálního obsahu umožňuje automaticky vložit video, obrázek nebo jiný mediální obsah do obsahu vašich textů jednoduše tak, že během práce v editoru vložíte (napíšete) na samostatný řádek URL adresu stránky, kde je mediální obsah aktuálně umístěn (např. YouTube)." + +#: wp-admin/options-media.php:21 +msgid "Uploading Options gives you folder and path choices for storing your files in your installation’s directory." +msgstr "Můžete také doplnit (upravit) konkrétní cestu a vlastní adresář (musí být v rámci adresáře s nainstalovaným WordPressem) pro ukládání nahraných souborů." + +#: wp-admin/options-media.php:24 +msgid "<a href=\"http://codex.wordpress.org/Settings_Media_SubPanel\" target=\"_blank\">Documentation on Media Settings</a>" +msgstr "<a href=\"http://codex.wordpress.org/Settings_Media_SubPanel\" target=\"_blank\">Manuál pro nastavení médií</a> (anglicky)" + +#: wp-admin/options-media.php:39 +msgid "Image sizes" +msgstr "Velikosti obrázků" + +#: wp-admin/options-media.php:40 +msgid "The sizes listed below determine the maximum dimensions in pixels to use when inserting an image into the body of a post." +msgstr "Uvedené hodnoty definují maximální rozměry (v pixelech), na základě kterých budou automaticky vytvořeny různé velikosti nahraného obrázku, které pak bude možné použít pro vkládání do obsahu příspěvků." + +#: wp-admin/options-media.php:44 +msgid "Thumbnail size" +msgstr "Velikost náhledu" + +#: wp-admin/options-media.php:48 +#: wp-admin/options-media.php:94 +#: wp-includes/js/tinymce/langs/wp-langs.php:435 +#: wp-includes/js/tinymce/langs/wp-langs.php:440 +msgid "Height" +msgstr "Výška" + +#: wp-admin/options-media.php:51 +msgid "Crop thumbnail to exact dimensions (normally thumbnails are proportional)" +msgstr "Oříznout náhled podle přesných rozměrů (obvykle se však náhledy neořezávají, ale zmenšují se s ohledem na proporce původního obrázku)" + +#: wp-admin/options-media.php:56 +#: wp-admin/options-media.php:57 +msgid "Medium size" +msgstr "Střední velikost" + +#: wp-admin/options-media.php:58 +#: wp-admin/options-media.php:68 +msgid "Max Width" +msgstr "Maximální šířka" + +#: wp-admin/options-media.php:60 +#: wp-admin/options-media.php:70 +msgid "Max Height" +msgstr "Maximální výška" + +#: wp-admin/options-media.php:66 +#: wp-admin/options-media.php:67 +msgid "Large size" +msgstr "Velký obrázek" + +#: wp-admin/options-media.php:78 +msgid "Embeds" +msgstr "Vkládání externího mediálního obsahu" + +#: wp-admin/options-media.php:83 +msgid "Auto-embeds" +msgstr "Automatické vkládání" + +#: wp-admin/options-media.php:84 +#: wp-admin/options-media.php:85 +msgid "Attempt to automatically embed all plain text URLs" +msgstr "Pokusit se automaticky vkládat média ze všech samostatně uvedených URL adres služeb, které WordPress podporuje." + +#: wp-admin/options-media.php:90 +msgid "Maximum embed size" +msgstr "Maximální velikost vložených médií" + +#: wp-admin/options-media.php:96 +msgid "If the width value is left blank, embeds will default to the max width of your theme." +msgstr "Pokud není šířka uvedena, budou mít vkládaná média automaticky nastavenou maximální šířku podle aktuálně používané šablony." + +#: wp-admin/options-media.php:104 +msgid "Uploading Files" +msgstr "Nahrávání souborů" + +#: wp-admin/options-media.php:107 +msgid "Store uploads in this folder" +msgstr "Ukládat nahrané soubory v adresáři" + +#: wp-admin/options-media.php:109 +msgid "Default is <code>wp-content/uploads</code>" +msgstr "Výchozím adresářem pro nahrávání je <code>wp-content/uploads</code>" + +#: wp-admin/options-media.php:114 +msgid "Full URL path to files" +msgstr "Celá URL cesta k souborům" + +#: wp-admin/options-media.php:116 +msgid "Configuring this is optional. By default, it should be blank." +msgstr "Toto nastavení je volitelné a obvykle zůstává nevyplněno." + +#: wp-admin/options-media.php:124 +msgid "Organize my uploads into month- and year-based folders" +msgstr "Ukládat nahrané soubory do podadresářů přehledně pojmenovaných po jednotlivých měsících a letech" + +#: wp-admin/options-permalink.php:15 +msgid "Permalink Settings" +msgstr "Nastavení trvalých odkazů" + +#: wp-admin/options-permalink.php:19 +msgid "This screen provides some common options for your default permalinks URL structure." +msgstr "Na této stránce naleznete některé běžné možnosti úprav výchozí struktury trvalých odkazů." + +#: wp-admin/options-permalink.php:20 +msgid "If you pick an option other than Default, your general URL path with structure tags, terms surrounded by <code>%</code>, will also appear in the custom structure field and your path can be further modified there." +msgstr "Pokud si zvolíte jinou možnost nastavení trvalých odkazů než Výchozí, tak bude v poli Vlastní struktura automaticky vygenerován obecný zápis zvolené struktury trvalých odkazů, který se skládá ze zástupných výrazů pro konkrétní obsah webu doplněných ještě z obou stran o znak <code>%</code>. Tento předpřipravený zápis můžete ještě libovolně upravit podle svých představ." + +#: wp-admin/options-permalink.php:21 +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 <code>%category%</code> or <code>%tag%</code>." +msgstr "Ke každému příspěvku můžete samozřejmě přiřadit i více rubrik (či štítků) najednou, ale pouze název jedné z nich se může objevit jako součást příslušného trvalého odkazu (vždy půjde o rubriku s nejnižším ID). Toto pravidlo se aplikuje v případě, že používáte Vlastní strukturu trvalých odkazů, která obsahuje zástupný výraz <code>%category%</code> (v případě rubriky) nebo <code>%tag%</code> (pro štítek)." + +#: wp-admin/options-permalink.php:22 +msgid "Note that permalinks beginning with the category, tag, author or postname structure tags require more advanced server resources. Double-check your hosting details to make sure those are in place or start your permalinks with other structure tags." +msgstr "Upozornění: Vlastní struktura trvalých odkazů začínající zástupným výrazem pro rubriku, štítek, autora nebo název příspěvku je mnohem náročnější na výkon serveru. Raději nejdříve zkontrolujte parametry svého hostingu, abyste měli jistotu, že bude vše v pořádku fungovat, nebo zvolte jinou strukturu trvalých odkazů." + +#: wp-admin/options-permalink.php:23 +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 <code>/topics/uncategorized</code> instead of <code>/category/uncategorized</code>." +msgstr "Volitelně můžete také nastavit vlastní zkrácené názvy pro základní URL rubrik („category“) a štítků („tag“), které budou následně automaticky používány u všech příslušných trvalých odkazů. Výpis příspěvků z rubriky „Nezařazené“ tak může mít např. URL adresu <code>/rubriky/nezarazene</code> místo výchozí <code>/category/nezarazene</code>." + +#: wp-admin/options-permalink.php:26 +msgid "<a href=\"http://codex.wordpress.org/Settings_Permalinks_SubPanel\" target=\"_blank\">Permalinks Settings Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Settings_Permalinks_SubPanel\" target=\"_blank\">Manuál pro nastavení trvalých odkazů</a> (anglicky)" + +#: wp-admin/options-permalink.php:27 +msgid "<a href=\"http://codex.wordpress.org/Using_Permalinks\" target=\"_blank\">Using Permalinks Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Using_Permalinks\" target=\"_blank\">Použití trvalých odkazů ve WordPressu</a> (anglicky)" + +#: wp-admin/options-permalink.php:160 +msgid "You should update your web.config now" +msgstr "Teď byste měli aktualizovat svůj soubor web.config." + +#: wp-admin/options-permalink.php:162 +msgid "Permalink structure updated. Remove write access on web.config file now!" +msgstr "Stuktura trvalých odkazů byla aktualizována. Nyní odeberte právo zápisu do souboru web.config!" + +#: wp-admin/options-permalink.php:164 +msgid "Permalink structure updated" +msgstr "Struktura trvalých odkazů byla aktualizována" + +#: wp-admin/options-permalink.php:167 +msgid "You should update your .htaccess now." +msgstr "Teď byste měli aktualizovat soubor .htaccess." + +#: wp-admin/options-permalink.php:169 +#: wp-admin/options-permalink.php:172 +msgid "Permalink structure updated." +msgstr "Struktura trvalých odkazů byla aktualizována." + +#: wp-admin/options-permalink.php:185 +msgid "By default WordPress uses web <abbr title=\"Universal Resource Locator\">URL</abbr>s 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 <a href=\"http://codex.wordpress.org/Using_Permalinks\">number of tags are available</a>, and here are some examples to get you started." +msgstr "Ve výchozím nastavení trvalých odkazů používá WordPress <abbr title=\"Universal Resource Locator\">URL</abbr> adresy, které obsahují otazníky a čísla. Můžete si však vytvořit vlastní strukturu trvalých odkazů, čímž vylepšíte vzhled a použitelnost odkazů (nejen pro vyhledávače) při zachování jejich zpětné kompatibility s výchozím nastavením. K dispozici je <a href=\"http://codex.wordpress.org/Using_Permalinks\">mnoho možností</a>, z několika jednoduchých příkladů si můžete vybrat níže." + +#: wp-admin/options-permalink.php:201 +msgid "Common settings" +msgstr "Základní nastavení" + +#: wp-admin/options-permalink.php:204 +msgid "Default" +msgstr "Výchozí" + +#: wp-admin/options-permalink.php:208 +msgid "Day and name" +msgstr "Datum a název" + +#: wp-admin/options-permalink.php:212 +msgid "Month and name" +msgstr "Rok, měsíc a název" + +#: wp-admin/options-permalink.php:216 +msgid "Numeric" +msgstr "Číselné" + +#: wp-admin/options-permalink.php:222 +msgid "Custom Structure" +msgstr "Vlastní struktura" + +#: wp-admin/options-permalink.php:232 +msgid "Optional" +msgstr "Volitelné nastavení" + +#: wp-admin/options-permalink.php:234 +msgid "If you like, you may enter custom structures for your category and tag <abbr title=\"Universal Resource Locator\">URL</abbr>s here. For example, using <kbd>topics</kbd> as your category base would make your category links like <code>http://example.org/topics/uncategorized/</code>. If you leave these blank the defaults will be used." +msgstr "Můžete zadat také vlastní zkrácené názvy pro základní <abbr title=\"Universal Resource Locator\">URL</abbr> adresy rubrik a štítků. Použitím slova <kbd>rubriky</kbd> tak např. dosáhnete toho, že odkazy na rubriky budou zobrazovány ve tvaru <code>http://www.priklad.cz/rubriky/nezarazene/</code> (konkrétní příklad pro rubriku s názvem „Nezařazené“), zatímco pokud toto pole nevyplníte, tak bude použito výchozí nastavení (tedy slovo <code>category</code>)." + +#: wp-admin/options-permalink.php:236 +msgid "If you like, you may enter custom structures for your category and tag <abbr title=\"Universal Resource Locator\">URL</abbr>s here. For example, using <code>topics</code> as your category base would make your category links like <code>http://example.org/index.php/topics/uncategorized/</code>. If you leave these blank the defaults will be used." +msgstr "Můžete zadat také vlastní zkrácené názvy pro základní <abbr title=\"Universal Resource Locator\">URL</abbr> adresy rubrik a štítků. Použitím slova <code>rubriky</code> tak např. dosáhnete toho, že odkazy na rubriky budou zobrazovány ve tvaru <code>http://www.priklad.cz/rubriky/nezarazene/</code> (konkrétní příklad pro rubriku s názvem „Nezařazené“), zatímco pokud toto pole nevyplníte, tak bude použito výchozí nastavení (tedy slovo <code>category</code>)." + +#. translators: prefix for category permalinks +#: wp-admin/options-permalink.php:241 +msgid "Category base" +msgstr "Zkrácený název pro základní URL rubrik" + +#: wp-admin/options-permalink.php:245 +msgid "Tag base" +msgstr "Zkrácený název pro základní URL štítků" + +#: wp-admin/options-permalink.php:261 +msgid "If your <code>web.config</code> file were <a href=\"http://codex.wordpress.org/Changing_File_Permissions\">writable</a>, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your <code>web.config</code> file. Click in the field and press <kbd>CTRL + a</kbd> to select all. Then insert this rule inside of the <code>/<configuration>/<system.webServer>/<rewrite>/<rules></code> element in <code>web.config</code> file." +msgstr "Kdyby měl váš soubor<code>web.config</code> povolené <a href=\"http://codex.wordpress.org/Changing_File_Permissions\">právo zápisu</a>, mohli bychom to udělat automaticky. Bohužel do něj však nelze zapisovat, takže tady máte alespoň pravidla pro přesměrování trvalých odkazů, která byste měli do svého souboru <code>web.config</code> ručně vložit. Klikněte na ně a stiskněte klávesy <kbd>CTRL + a</kbd>, čímž je všechny najednou označíte. Potom je vložte do svého souboru <code>.htaccess</code> v části <code>/<configuration>/<system.webServer>/<rewrite>/<rules></code>." + +#: wp-admin/options-permalink.php:266 +msgid "If you temporarily make your <code>web.config</code> file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved." +msgstr "Pokud jste dočasně povolili právo zápisu do vašeho souboru <code>web.config</code>, abychom mohli automaticky vytvořit pravidla pro přesměrování trvalých odkazů, nezapomeňte prosím toto právo po uložení nové struktury trvalých odkazů zase odebrat." + +#: wp-admin/options-permalink.php:268 +msgid "If the root directory of your site were <a href=\"http://codex.wordpress.org/Changing_File_Permissions\">writable</a>, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your <code>web.config</code> file. Create a new file, called <code>web.config</code> in the root directory of your site. Click in the field and press <kbd>CTRL + a</kbd> to select all. Then insert this code into the <code>web.config</code> file." +msgstr "Kdyby měl váš hlavní adresář webu povolené <a href=\"http://codex.wordpress.org/Changing_File_Permissions\">právo zápisu</a>, mohli bychom to udělat automaticky. Bohužel však do něj zapisovat nelze, takže tady alespoň vidíte pravidla pro přesměrování trvalých odkazů, která byste měli mít ve vašem souboru <code>web.config</code>. Vytvořte tedy v hlavním adresáři svého webu nový soubor s názvem <code>web.config</code>. Poté klikněte do pole s vygenerovanými pravidly pro přesměrování trvalých odkazů a stiskněte klávesy <kbd>CTRL + a</kbd>, čímž je všechny najednou označíte. Potom je vložte do svého souboru <code>web.config</code>." + +#: wp-admin/options-permalink.php:273 +msgid "If you temporarily make your site’s root directory writable for us to generate the <code>web.config</code> file automatically, do not forget to revert the permissions after the file has been created." +msgstr "Pokud jste dočasně povolili právo zápisu do vašeho hlavního adresáře webu, aby mohl WordPress automaticky vytvořit soubor <code>web.config</code> s pravidly pro přesměrování trvalých odkazů, nezapomeňte prosím toto právo hned po vytvoření souboru zase odebrat." + +#: wp-admin/options-permalink.php:278 +msgid "If your <code>.htaccess</code> file were <a href=\"http://codex.wordpress.org/Changing_File_Permissions\">writable</a>, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your <code>.htaccess</code> file. Click in the field and press <kbd>CTRL + a</kbd> to select all." +msgstr "Níže uvedená pravidla pro přesměrování by měla být obsažena v souboru <code>.htaccess</code>, do něhož ale momentálně nelze <a href=\"http://codex.wordpress.org/Changing_File_Permissions\">zapisovat</a>. Pokud by to šlo, proběhlo by vše automaticky, ale v tomto případě je třeba, abyste tato pravidla pro mod_rewrite vložili do souboru <code>.htaccess</code> ručně. Pokud chcete zkopírovat všechno najednou, klikněte do vygenerovaného pole s textem a stiskněte klávesy <kbd>CTRL + a</kbd>." + +#: wp-admin/options-privacy.php:15 +msgid "Privacy Settings" +msgstr "Nastavení viditelnosti webu" + +#: wp-admin/options-privacy.php:19 +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 second option here. Note that your privacy is not complete; your site is still visible on the web." +msgstr "Můžete si vybrat, zda bude váš web viditelný i pro vyhledávače, pingovací služby a různé další roboty. Pokud jim nechcete přístup povolit, tak označte kliknutím druhou možnost. I v tomto případě však bude váš web nadále dostupný na internetu pro všechny běžné uživatele, kteří např. přímo zadají jeho URL adresu do prohlížeče." + +#: wp-admin/options-privacy.php:20 +msgid "When this setting is in effect a reminder is shown in the header of these administration screens that says, “Search Engines Blocked,” to remind you that your site is not being crawled." +msgstr "Pokud mají vyhledávače přístup na web zakázán, zobrazí se vám v záhlaví administrace upozornění s textem „Vyhledávačům vstup zakázán“, abyste časem třeba nezapomněli, že jste toto omezení pro vyhledávače vůbec někdy nastavili." + +#: wp-admin/options-privacy.php:23 +msgid "<a href=\"http://codex.wordpress.org/Settings_Privacy_SubPanel\" target=\"_blank\">Privacy Settings Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Settings_Privacy_SubPanel\" target=\"_blank\">Manuál pro nastavení viditelnosti webu</a> (anglicky)" + +#: wp-admin/options-privacy.php:39 +#: wp-admin/options-privacy.php:40 +msgid "Site Visibility" +msgstr "Viditelnost webu" + +#: wp-admin/options-privacy.php:42 +msgid "I would like my site to be visible to everyone, including search engines (like Google, Bing, Technorati) and archivers" +msgstr "Chci umožnit prohlížení mého webu všem návštěvníkům, tedy včetně vyhledávačů (např. Google, Seznam, Bing), archivovacích služeb a dalších robotů" + +#: wp-admin/options-privacy.php:44 +msgid "I would like to block search engines, but allow normal visitors" +msgstr "Chci povolit přístup na můj web pouze lidem, kteří znají jeho adresu, a nechci tu žádné vyhledávače a roboty" + +#: wp-admin/options-reading.php:15 +msgid "Reading Settings" +msgstr "Nastavení zobrazování webu" + +#: wp-admin/options-reading.php:19 +msgid "This screen contains the settings that affect the display of your content." +msgstr "Tato stránka obsahuje různá nastavení, která ovlivňují zobrazování vašeho webu." + +#: wp-admin/options-reading.php:20 +#, php-format +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 <a href=\"%s\">Pages</a>. One will become the front page, and the other will be where your posts are displayed." +msgstr "Můžete si např. zvolit, co bude zobrazené na úvodní stránce. Pro klasické blogy se nejčastěji používá výpis nejnovějších příspěvků, pro jiné weby může být zase vhodnější třeba statická stránka. Pokud ale chcete na úvodní stránce zobrazit nějakou statickou stránku, musíte si nejdříve alespoň dvě libovolné stránky <a href=\"%s\">vytvořit</a>. Z nich může být poté jedna vybrána jako úvodní stránka, zatímco na té druhé se budou zobrazovat nejnovější příspěvky." + +#: wp-admin/options-reading.php:21 +msgid "You can also control the display of your content in RSS feeds, including the maximum numbers of posts to display, whether to show full text or a summary, and the character set encoding." +msgstr "Dále můžete upravovat ještě zobrazování obsahu vašeho webu v RSS zdroji, a to nastavením maximálního počtu zobrazených položek a formy jejich zobrazení (celý text nebo jen úryvek). Neméně důležité je i kódování znaků, kde však doporučujeme raději nic neměnit." + +#: wp-admin/options-reading.php:24 +msgid "<a href=\"http://codex.wordpress.org/Settings_Reading_SubPanel\" target=\"_blank\">Reading Settings Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Settings_Reading_SubPanel\" target=\"_blank\">Manuál pro nastavení zobrazování webu</a> (anglicky)" + +#: wp-admin/options-reading.php:47 +#: wp-admin/options-reading.php:48 +msgid "Front page displays" +msgstr "Na úvodní stránce zobrazit" + +#: wp-admin/options-reading.php:51 +msgid "Your latest posts" +msgstr "Nejnovější příspěvky" + +#: wp-admin/options-reading.php:56 +#, php-format +msgid "A <a href=\"%s\">static page</a> (select below)" +msgstr "<a href=\"%s\">Statickou stránku</a> (vyberte níže)" + +#: wp-admin/options-reading.php:60 +#, php-format +msgid "Front page: %s" +msgstr "Úvodní stránka: %s" + +#: wp-admin/options-reading.php:61 +#, php-format +msgid "Posts page: %s" +msgstr "Stránka příspěvků: %s" + +#: wp-admin/options-reading.php:64 +msgid "<strong>Warning:</strong> these pages should not be the same!" +msgstr "<strong>Varování:</strong> tyto dvě stránky by neměly být stejné!" + +#: wp-admin/options-reading.php:70 +msgid "Blog pages show at most" +msgstr "Na webu zobrazit maximálně" + +#: wp-admin/options-reading.php:72 +msgid "posts" +msgstr "příspěvků" + +#: wp-admin/options-reading.php:76 +msgid "Syndication feeds show the most recent" +msgstr "V RSS zobrazit nejvíce" + +#: wp-admin/options-reading.php:77 +msgid "items" +msgstr "položek" + +#: wp-admin/options-reading.php:80 +#: wp-admin/options-reading.php:81 +msgid "For each article in a feed, show" +msgstr "Položky v RSS zobrazovat jako" + +#: wp-admin/options-reading.php:82 +msgid "Full text" +msgstr "Celý text" + +#: wp-admin/options-reading.php:83 +msgid "Summary" +msgstr "Pouze několik úvodních vět" + +#: wp-admin/options-reading.php:88 +msgid "Encoding for pages and feeds" +msgstr "Kódování webu a RSS" + +#: wp-admin/options-reading.php:90 +msgid "The <a href=\"http://codex.wordpress.org/Glossary#Character_set\">character encoding</a> of your site (UTF-8 is recommended, if you are adventurous there are some <a href=\"http://en.wikipedia.org/wiki/Character_set\">other encodings</a>)" +msgstr "<a href=\"http://codex.wordpress.org/Glossary#Character_set\">Kódování znaků</a> na vašem webu (doporučujeme ponechat všeobecně používané kódování UTF-8, ale pokud si chcete zariskovat, tak můžete samozřejmě použít i <a href=\"http://en.wikipedia.org/wiki/Character_set\">jiná kódování</a>)." + +#: wp-admin/options-writing.php:15 +msgid "Writing Settings" +msgstr "Nastavení pro publikování" + +#: wp-admin/options-writing.php:19 +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 these administration screens, while the rest control external publishing methods. For more information on any of these methods, use the documentation links below." +msgstr "Ve WordPressu můžete publikovat obsah na webu několika různými způsoby a na této stránce vidíte jejich hlavní přehled a příslušná nastavení. Hned nahoře si můžete částečně přizpůsobit vestavěný editor, který je uživateli využíván nejčastěji, zatímco níže na stránce si můžete nastavit další možnosti. Pro podrobnější informace o konkrétním způsobu publikování použijte odkaz na manuál." + +#: wp-admin/options-writing.php:22 +msgid "<a href=\"http://codex.wordpress.org/Settings_Writing_SubPanel\" target=\"_blank\">Writing Settings Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Settings_Writing_SubPanel\" target=\"_blank\">Manuál pro nastavení publikování</a> (anglicky)" + +#: wp-admin/options-writing.php:38 +msgid "Size of the post box" +msgstr "Velikost pole pro psaní v editoru" + +#: wp-admin/options-writing.php:40 +msgid "lines" +msgstr "řádků" + +#: wp-admin/options-writing.php:43 +#: wp-admin/options-writing.php:44 +msgid "Formatting" +msgstr "Formátování" + +#: wp-admin/options-writing.php:47 +msgid "Convert emoticons like <code>:-)</code> and <code>:-P</code> to graphics on display" +msgstr "Převést smajlíky jako např. <code>:-)</code> a <code>:-P</code> do grafické podoby" + +#: wp-admin/options-writing.php:48 +msgid "WordPress should correct invalidly nested XHTML automatically" +msgstr "WordPress by se měl pokusit automaticky opravit nevalidní XHTML" + +#: wp-admin/options-writing.php:52 +msgid "Default Post Category" +msgstr "Výchozí rubrika pro příspěvky" + +#: wp-admin/options-writing.php:60 +msgid "Default Link Category" +msgstr "Výchozí rubrika pro odkazy" + +#: wp-admin/options-writing.php:72 +#: wp-admin/tools.php:32 +msgid "Press This is a bookmarklet: a little app that runs in your browser and lets you grab bits of the web." +msgstr "„Kliknout a publikovat“ je akční záložka (bookmarklet), což je jednoduchá javascriptová aplikace spouštěná přímo z internetového prohlížeče, která umožňuje jednoduše kopírovat vybraný obsah navštívených stránek a rovnou ho publikovat na vašem webu jako příspěvky." + +#: wp-admin/options-writing.php:73 +#: wp-admin/tools.php:34 +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 "Můžete tedy nástroj „Kliknout a publikovat“ použít pro jednoduché získání textu, obrázků nebo videí z prohlížených internetových stránek. Automaticky předpřipravený příspěvek pak stačí už jen trochu upravit a doplnit (rubriky a štítky) a poté ho můžete ihned zveřejnit na svém webu." + +#: wp-admin/options-writing.php:74 +#: wp-admin/tools.php:35 +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 "Uchopte a přeneste pomocí kurzoru myši následující odkaz do svých oblíbených záložek ve vašem prohlížeči (nebo použijte pravé tlačítko myši), abyste mohli tento nástroj využívat pro rychlé publikování příspěvků." + +#: wp-admin/options-writing.php:78 +msgid "Post via e-mail" +msgstr "Publikování příspěvků prostřednictvím emailu" + +#: wp-admin/options-writing.php:79 +#, php-format +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: <kbd>%s</kbd>, <kbd>%s</kbd>, <kbd>%s</kbd>." +msgstr "Abyste mohli publikovat své příspěvky prostřednictvím emailu, musíte si nejdříve vytvořit tajnou emailovou schránku s POP3 přístupem. Všechny emaily přijaté na tuto adresu budou publikovány, takže je nutné ji opravdu dobře utajit. Pro vaši inspiraci nabízíme tři náhodné řetězce znaků, které můžete použít jako název této schránky: <kbd>%s</kbd>, <kbd>%s</kbd> nebo <kbd>%s</kbd>." + +#: wp-admin/options-writing.php:83 +msgid "Mail Server" +msgstr "Mail server" + +#: wp-admin/options-writing.php:85 +msgid "Port" +msgstr "Port" + +#: wp-admin/options-writing.php:90 +msgid "Login Name" +msgstr "Uživatelské jméno" + +#: wp-admin/options-writing.php:100 +msgid "Default Mail Category" +msgstr "Výchozí rubrika pro publikování prostřednictvím emailu" + +#: wp-admin/options-writing.php:111 +msgid "Remote Publishing" +msgstr "Vzdálené publikování prostřednictvím jiných nástrojů" + +#: wp-admin/options-writing.php:112 +msgid "To post to WordPress from a desktop blogging client or remote website that uses the Atom Publishing Protocol or one of the XML-RPC publishing interfaces you must enable them below." +msgstr "Abyste mohli publikovat své příspěvky pomocí příslušného programu přímo ze svého počítače, nebo prostřednictvím jiných internetových stránek, které používají publikační protokol Atom nebo některý z protokolů XML-RPC, tak je musíte nejdříve povolit." + +#: wp-admin/options-writing.php:115 +#: wp-admin/options-writing.php:116 +msgid "Atom Publishing Protocol" +msgstr "Atom" + +#: wp-admin/options-writing.php:119 +msgid "Enable the Atom Publishing Protocol." +msgstr "Povolit publikační protokol Atom" + +#: wp-admin/options-writing.php:123 +#: wp-admin/options-writing.php:124 +msgid "XML-RPC" +msgstr "XML-RPC" + +#: wp-admin/options-writing.php:127 +msgid "Enable the WordPress, Movable Type, MetaWeblog and Blogger XML-RPC publishing protocols." +msgstr "Povolit publikační protokol XML-RPC WordPressu, Movable Type, MetaWeblogu a Bloggeru." + +#: wp-admin/options-writing.php:134 +msgid "Update Services" +msgstr "Aktualizační služby" + +#: wp-admin/options-writing.php:138 +msgid "When you publish a new post, WordPress automatically notifies the following site update services. For more about this, see <a href=\"http://codex.wordpress.org/Update_Services\">Update Services</a> on the Codex. Separate multiple service <abbr title=\"Universal Resource Locator\">URL</abbr>s with line breaks." +msgstr "Během publikování nového příspěvku může WordPress automaticky upozornit některé z aktualizačních služeb. Více informací najdete v <a href=\"http://codex.wordpress.org/Update_Services\">manuálu</a>. Oddělujte jednotlivé <abbr title=\"Universal Resource Locator\">URL</abbr>adresy těchto služeb mezerami." + +#: wp-admin/options-writing.php:144 +#, php-format +msgid "WordPress is not notifying any <a href=\"http://codex.wordpress.org/Update_Services\">Update Services</a> because of your site’s <a href=\"%s\">privacy settings</a>." +msgstr "S ohledem na <a href=\"%s\">nastavení viditelnosti</a> vašeho webu nebude WordPress upozorňovat žádnou <a href=\"http://codex.wordpress.org/Update_Services\">aktualizační službu</a>." + +#: wp-admin/options.php:109 +msgid "Error: options page not found." +msgstr "Chyba: Stránka s Nastavením pro vývojáře nebyla nalezena." + +#: wp-admin/options.php:113 +msgid "You do not have sufficient permissions to modify unregistered settings for this site." +msgstr "Nemáte dostatečné oprávnění pro úpravy neregistrovaných nastavení na tomto webu." + +#: wp-admin/options.php:136 +#, php-format +msgid "The <code>%1$s</code> setting is unregistered. Unregistered settings are deprecated. See http://codex.wordpress.org/Settings_API" +msgstr "Nastavení <code>%1$s</code> není správně zaregistrováno. Neregistrovaná nastavení nejsou již nadále podporována, podrobnosti naleznete v manuálu: http://codex.wordpress.org/Settings_API" + +#: wp-admin/options.php:154 +msgid "Settings saved." +msgstr "Nastavení bylo uloženo." + +#: wp-admin/options.php:169 +msgid "All Settings" +msgstr "Nastavení pro vývojáře (výpis databázové tabulky „options“)" + +#: wp-admin/plugin-editor.php:13 +msgid "You do not have sufficient permissions to edit plugins for this site." +msgstr "Nemáte dostatečné opravnění pro úpravy pluginů na tomto webu." + +#: wp-admin/plugin-editor.php:15 +msgid "Edit Plugins" +msgstr "Editor pluginů" + +#: wp-admin/plugin-editor.php:25 +msgid "There are no plugins installed on this site." +msgstr "Nebyly nalezeny žádné nainstalované pluginy." + +#: wp-admin/plugin-editor.php:99 +msgid "No such file exists! Double check the name and try again." +msgstr "Žádný takový soubor neexistuje! Zkontrolujte raději ještě jednou jeho název a zkuste to znovu." + +#: wp-admin/plugin-editor.php:106 +msgid "Files of this type are not editable." +msgstr "Soubory v tomto formátu nelze upravovat." + +#: wp-admin/plugin-editor.php:111 +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 "Pokud chcete trochu pozměnit nějaký plugin, můžete použít editor na této stránce, s jehož pomocí jednoduše upravíte konkrétní PHP soubory. Během případné automatické aktualizace na novější verzi však budou smazány všechny úpravy, které jste v souborech pluginu dosud udělali." + +#: wp-admin/plugin-editor.php:112 +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 "Nejdříve si z horního rozevíracího menu vyberte plugin, který budete chtít upravit, a klikněte myší na tlačítko Vybrat (jako výchozí je na stránce nastaven první plugin podle abecedy). V pravém sloupci se pak zobrazí seznam všech příslušných souborů pluginu. Po kliknutí na název konkrétního souboru se jeho obsah zobrazí v editoru pro přímé úpravy. Po provedených úpravách nezapomeňte ještě kliknout na tlačítko Aktualizovat soubor." + +#: wp-admin/plugin-editor.php:113 +msgid "The Documentation menu below the editor lists the PHP functions recognized in the plugin file. Clicking Lookup takes you to a web page about that particular function." +msgstr "Pokud upravujete PHP soubory, tak se pod editorem automaticky zobrazí rozevírací menu s aktuálně použitými funkcemi WordPressu, jejichž detailní dokumentaci si můžete nechat zobrazit. Vyberte si libovolnou funkci a kliknutím na tlačítko Hledat budete přesměrováni na stránku s manuálem k této funkci (anglicky)." + +#: wp-admin/plugin-editor.php:114 +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 a plugin or start from scratch, check out the links below." +msgstr "Pokud potřebujete upravovat některé pluginy, ale nechcete, aby byly během automatické aktualizace na novější verzi vždy smazány všechny dosavadní úpravy, měli byste do budoucna raději zvážit vytvoření vlastního pluginu. Podrobnější informace o vytváření pluginů a jejich úpravách naleznete na níže uvedených odkazech." + +#: wp-admin/plugin-editor.php:116 +msgid "<a href=\"http://codex.wordpress.org/Plugins_Editor_SubPanel\" target=\"_blank\">Documentation on Editing Plugins</a>" +msgstr "<a href=\"http://codex.wordpress.org/Plugins_Editor_SubPanel\" target=\"_blank\">Manuál pro úpravy pluginů</a> (anglicky)" + +#: wp-admin/plugin-editor.php:131 +msgid "Function Name…" +msgstr "Název funkce…" + +#: wp-admin/plugin-editor.php:142 +#: wp-admin/theme-editor.php:123 +msgid "File edited successfully." +msgstr "Soubor byl úspěšně změněn." + +#: wp-admin/plugin-editor.php:144 +msgid "This plugin has been deactivated because your changes resulted in a <strong>fatal error</strong>." +msgstr "Tento plugin byl automaticky deaktivován, protože vaše úpravy způsobily nějakou <strong>závažnou chybu</strong>." + +#: wp-admin/plugin-editor.php:160 +#, php-format +msgid "Editing <strong>%s</strong> (active)" +msgstr "Upravujete soubor <strong>%s</strong> (aktivní plugin)" + +#: wp-admin/plugin-editor.php:162 +#, php-format +msgid "Browsing <strong>%s</strong> (active)" +msgstr "Prohlížíte soubor <strong>%s</strong> (aktivní plugin)" + +#: wp-admin/plugin-editor.php:165 +#, php-format +msgid "Editing <strong>%s</strong> (inactive)" +msgstr "Upravujete soubor <strong>%s</strong> (neaktivní plugin)" + +#: wp-admin/plugin-editor.php:167 +#, php-format +msgid "Browsing <strong>%s</strong> (inactive)" +msgstr "Prohlížíte soubor <strong>%s</strong> (neaktivní plugin)" + +#: wp-admin/plugin-editor.php:173 +msgid "Select plugin to edit:" +msgstr "Vyberte plugin, který chcete upravit:" + +#: wp-admin/plugin-editor.php:195 +msgid "Plugin Files" +msgstr "Soubory pluginu" + +#: wp-admin/plugin-editor.php:224 +#: wp-admin/theme-editor.php:219 +msgid "Documentation:" +msgstr "Manuál:" + +#: wp-admin/plugin-editor.php:224 +#: wp-admin/theme-editor.php:221 +msgid "Lookup" +msgstr "Hledat" + +#: wp-admin/plugin-editor.php:228 +msgid "<strong>Warning:</strong> Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated." +msgstr "<strong>Varování:</strong> Úpravy aktivovaného pluginu nejsou doporučeny. Pokud vaše úpravy způsobí nějakou závažnou chybu, bude plugin automaticky deaktivován." + +#: wp-admin/plugin-editor.php:233 +msgid "Update File and Attempt to Reactivate" +msgstr "Aktualizovat soubor a pokusit se znovu aktivovat plugin" + +#: wp-admin/plugin-editor.php:235 +#: wp-admin/theme-editor.php:229 +msgid "Update File" +msgstr "Aktualizovat soubor" + +#: wp-admin/plugin-editor.php:239 +#: wp-admin/theme-editor.php:233 +msgid "You need to make this file writable before you can save your changes. See <a href=\"http://codex.wordpress.org/Changing_File_Permissions\">the Codex</a> for more information." +msgstr "Pokud chcete uložit upravený soubor, musí mít nastaveno <a href=\"http://codex.wordpress.org/Changing_File_Permissions\" title=\"Přečtěte si v manuálu o nastavení práv k souborům\">právo zápisu</a>, např. CHMOD 666." + +#: wp-admin/plugin-install.php:13 +msgid "You do not have sufficient permissions to install plugins on this site." +msgstr "Nemáte dostatečné oprávnění pro instalaci pluginů na tomto webu." + +#: wp-admin/plugin-install.php:28 +msgctxt "Plugin Installer" +msgid "Featured" +msgstr "Doporučené" + +#: wp-admin/plugin-install.php:29 +msgctxt "Plugin Installer" +msgid "Popular" +msgstr "Oblíbené" + +#: wp-admin/plugin-install.php:30 +msgctxt "Plugin Installer" +msgid "Newest" +msgstr "Nejnovější" + +#: wp-admin/plugin-install.php:31 +msgctxt "Plugin Installer" +msgid "Recently Updated" +msgstr "Naposledy aktualizované" + +#: wp-admin/plugin-install.php:56 +#, php-format +msgid "Plugins hook into WordPress to extend its functionality with custom features. Plugins are developed independently from WordPress core by thousands of developers all over the world. All plugins in the official <a href=\"%s\" target=\"_blank\">WordPress.org Plugin Directory</a> are compatible with the WordPress GPL v2 license. You can find new plugins to install by searching or browsing the Directory right here in your own Plugins section." +msgstr "Pluginy jsou vlastně samostatné doplňky napojené na jádro WordPressu a neomezeně tak rozšiřují jeho možnosti. Pluginy jsou vytvářeny nezávisle na WordPressu a jejich programováním se zabývají tisíce vývojářů po celém světě. Všechny pluginy dostupné v <a href=\"%s\" target=\"_blank\">oficiálním adresáři pluginů pro WordPress</a> jsou kompatibilní se základní licencí WordPressu GPLv2. Zajímavé nové pluginy na váš web můžete nalézt pomocí této stránky (v sekci Pluginy), která umožňuje přehledně prohlížet a vyhledávat pluginy v oficiálním adresáři." + +#: wp-admin/plugin-install.php:57 +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 a popular tags. Tags in larger type mean more plugins have been labeled with that tag." +msgstr "Pokud přesně víte, jaký plugin potřebujete, tak je pro vás nejlepší volbou vychozí možnost Hledat. Můžete vyhledávat v oficiálním adresáři pluginů pro WordPress zadáním klíčového slova, autora či příslušného štítku. Nebo si můžete jen tak prohlížet zajímavé pluginy z určité oblasti kliknutím na některý z Nejoblíbenějších štítků. Čím větší je název štítku, tím více pluginů je k němu přiřazeno." + +#: wp-admin/plugin-install.php:58 +msgid "If you just want to get an idea of what’s available, you can browse Featured, Popular, Newest, and Recently Updated plugins by using the links in the upper left of the screen. These sections rotate regularly." +msgstr "Základní přehled o existujících pluginech získáte kliknutím na textové odkazy Doporučené, Oblíbené, Nejnovější a Naposledy aktualizované v horní části stránky. Pluginy zobrazené v těchto sekcích se průběžně mění." + +#: wp-admin/plugin-install.php:59 +msgid "If you want to install a plugin that you’ve downloaded elsewhere, click Upload in the upper left. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin." +msgstr "Pokud chcete nainstalovat plugin, který jste si stáhli někde jinde v podobě .zip souboru, klikněte vlevo nahoře na textový odkaz Nahrát soubor. Dostanete se na stránku, kde budete moci instalační balíček pluginu vyhledat na svém počítači, nahrát ho do WordPressu a poté aktivovat." + +#: wp-admin/plugin-install.php:61 +msgid "<a href=\"http://codex.wordpress.org/Plugins_Add_New_SubPanel\" target=\"_blank\">Documentation on Installing Plugins</a>" +msgstr "<a href=\"http://codex.wordpress.org/Plugins_Add_New_SubPanel\" target=\"_blank\">Manuál pro instalaci pluginů</a> (anglicky)" + +#: wp-admin/plugins.php:21 +msgid "You do not have sufficient permissions to manage plugins for this site." +msgstr "Nemáte dostatečné opravnění pro správu pluginů na tomto webu." + +#: wp-admin/plugins.php:56 +#: wp-admin/plugins.php:86 +#: wp-admin/plugins.php:140 +msgid "You do not have sufficient permissions to activate plugins for this site." +msgstr "Nemáte dostatečné opravnění pro aktivaci pluginů na tomto webu." + +#: wp-admin/plugins.php:120 +msgid "Upgrade Plugins" +msgstr "Aktualizovat pluginy" + +#: wp-admin/plugins.php:166 +#: wp-admin/plugins.php:179 +msgid "You do not have sufficient permissions to deactivate plugins for this site." +msgstr "Nemáte dostatečné opravnění pro deaktivaci pluginů na tomto webu." + +#: wp-admin/plugins.php:202 +msgid "You do not have sufficient permissions to delete plugins for this site." +msgstr "Nemáte dostatečné opravnění pro mazání pluginů na tomto webu." + +#: wp-admin/plugins.php:249 +msgid "Delete Plugin" +msgid_plural "Delete Plugins" +msgstr[0] "Smazat plugin" +msgstr[1] "Smazat pluginy" +msgstr[2] "Smazat pluginy" + +#: wp-admin/plugins.php:251 +msgid "You are about to remove the following plugin:" +msgid_plural "You are about to remove the following plugins:" +msgstr[0] "Chystáte se smazat následující plugin:" +msgstr[1] "Chystáte se smazat následující pluginy:" +msgstr[2] "Chystáte se smazat následující pluginy:" + +#. translators: 1: plugin name, 2: plugin author +#: wp-admin/plugins.php:258 +#, php-format +msgid "<strong>%1$s</strong> by <em>%2$s</em> (will also <strong>delete its data</strong>)" +msgstr "<strong>%1$s</strong> (autorem pluginu je <em>%2$s</em>) - kromě souborů budou <strong>smazána i všechna data</strong>" + +#. translators: 1: plugin name, 2: plugin author +#: wp-admin/plugins.php:262 +#, php-format +msgid "<strong>%1$s</strong> by <em>%2$s</em>" +msgstr "<strong>%1$s</strong> (autorem pluginu je <em>%2$s</em>)" + +#: wp-admin/plugins.php:269 +msgid "Are you sure you wish to delete these files and data?" +msgstr "Opravdu chcete smazat všechny související soubory a data?" + +#: wp-admin/plugins.php:271 +msgid "Are you sure you wish to delete these files?" +msgstr "Opravdu chcete smazat tyto soubory?" + +#: wp-admin/plugins.php:281 +msgid "Yes, Delete these files and data" +msgstr "Ano, chci smazat soubory i data" + +#: wp-admin/plugins.php:281 +msgid "Yes, Delete these files" +msgstr "Ano, chci je smazat" + +#: wp-admin/plugins.php:284 +msgid "No, Return me to the plugin list" +msgstr "Ne, chci se vrátit na přehled pluginů" + +#: wp-admin/plugins.php:287 +msgid "Click to view entire list of files which will be deleted" +msgstr "Kliknutím zobrazíte seznam všech souborů, které budou smazány" + +#: wp-admin/plugins.php:317 +msgid "Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here." +msgstr "Jednotlivé pluginy rozšiřují stávající možnosti WordPressu a přidávají k němu různé nové funkce. Jakmile je plugin nainstalován, můžete ho na této stránce aktivovat či deaktivovat." + +#: wp-admin/plugins.php:318 +#, php-format +msgid "You can find additional plugins for your site by using the <a href=\"%1$s\">Plugin Browser/Installer</a> functionality or by browsing the <a href=\"%2$s\" target=\"_blank\">WordPress Plugin Directory</a> directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your <code>/wp-content/plugins</code> directory. Once a plugin has been installed, you can activate it here." +msgstr "Mnoho užitečných pluginů pro váš web můžete nalézt v administraci WordPressu na stránce pro <a href=\"%1$s\">vyhledávání a automatickou instalaci pluginů</a> nebo přímo v <a href=\"%2$s\" target=\"_blank\">oficiálním adresáři pluginů pro WordPress</a>, kde si vybraný plugin můžete stáhnout a potom ho ručně nainstalovat. A v čem vlastně spočívá ruční instalace pluginu? Stačí pouze nahrát příslušný soubor pluginu (či celý adresář se všemi soubory) prostřednictvím FTP do adresáře <code>/wp-content/plugins</code>. Jakmile je plugin tímto způsobem nainstalován, můžete ho ihned aktivovat." + +#: wp-admin/plugins.php:319 +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 "Pluginy většinou fungují v rámci WordPressu (a i v kombinaci s dalšími pluginy) bez problémů, ale v některých případech může dojít ke konfliktu s nějakým jiným pluginem, který využívá podobný způsob napojení na WordPress. Pokud se na webu začnou dít podivné věci, může to být způsobeno právě nekvalitním pluginem nebo jejich vzájemnou nekompatibilitou. Zkuste všechny pluginy najednou deaktivovat a postupně je znovu zapínat (třeba i v různých vzájemných kombinacích), dokud neodhalíte skutečného viníka." + +#: wp-admin/plugins.php:320 +#, php-format +msgid "If something goes wrong with a plugin and you can’t use WordPress, delete or rename that file in the <code>%s</code> directory and it will be automatically deactivated." +msgstr "Pokud však plugin nefunguje tak, jak by správně měl a nemůžete kvůli nějaké chybě WordPress vůbec používat, tak smažte nebo přejmenujte příslušný soubor (adresář) s pluginem (naleznete ho v adresáři <code>%s</code>), čímž bude plugin automaticky deaktivován." + +#: wp-admin/plugins.php:322 +msgid "<a href=\"http://codex.wordpress.org/Managing_Plugins#Plugin_Management\" target=\"_blank\">Documentation on Managing Plugins</a>" +msgstr "<a href=\"http://codex.wordpress.org/Managing_Plugins#Plugin_Management\" target=\"_blank\">Manuál pro správu pluginů</a> (anglicky)" + +#: wp-admin/plugins.php:333 +#, php-format +msgid "The plugin <code>%s</code> has been <strong>deactivated</strong> due to an error: %s" +msgstr "Plugin <code>%s</code> byl <strong>deaktivován</strong>, protože se objevila chyba: %s" + +#: wp-admin/plugins.php:339 +#, php-format +msgid "The plugin generated %d characters of <strong>unexpected output</strong> during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin." +msgstr "Plugin vygeneroval během aktivace %d znak(ů) <strong>neočekávaného výstupu</strong>. Pokud se objevila i nějaká chyba obsahující text „Headers already sent“ či jiné problémy (např. se zobrazením RSS zdroje), zkuste tento plugin deaktivovat nebo smazat." + +#: wp-admin/plugins.php:341 +msgid "Plugin could not be activated because it triggered a <strong>fatal error</strong>." +msgstr "Plugin nemůže být aktivován, protože způsobil <strong>závažnou chybu</strong>." + +#: wp-admin/plugins.php:356 +#, php-format +msgid "Plugin could not be deleted due to an error: %s" +msgstr "Plugin nemohl být smazán kvůli následující chybě: %s" + +#: wp-admin/plugins.php:358 +msgid "The selected plugins have been <strong>deleted</strong>." +msgstr "Všechny vybrané pluginy byly úspěšně <strong>smazány</strong>." + +#: wp-admin/plugins.php:361 +msgid "Plugin <strong>activated</strong>." +msgstr "Plugin byl <strong>aktivován</strong>." + +#: wp-admin/plugins.php:363 +msgid "Selected plugins <strong>activated</strong>." +msgstr "Vybrané pluginy byly <strong>aktivovány</strong>." + +#: wp-admin/plugins.php:365 +msgid "Plugin <strong>deactivated</strong>." +msgstr "Plugin byl <strong>deaktivován</strong>." + +#: wp-admin/plugins.php:367 +msgid "Selected plugins <strong>deactivated</strong>." +msgstr "Vybrané pluginy byly <strong>deaktivovány</strong>." + +#: wp-admin/plugins.php:369 +msgid "No out of date plugins were selected." +msgstr "Nebyly vybrány žádné zastaralé pluginy." + +#: wp-admin/plugins.php:512 +#: wp-admin/plugins.php:520 +#: wp-includes/js/tinymce/langs/wp-langs.php:255 +msgid "Plugin" +msgstr "Plugin" + +#: wp-admin/plugins.php:530 +msgid "No plugins to show" +msgstr "Nemáte zde žádné pluginy" + +#: wp-admin/plugins.php:558 +msgid "Inactive:" +msgstr "Neaktivní:" + +#: wp-admin/plugins.php:558 +#, php-format +msgid "Requires <code>%s</code> in <code>wp-config.php</code>." +msgstr "Do souboru <code>wp-config.php</code> je potřeba nejdříve vložit <code>%s</code>." + +#: wp-admin/plugins.php:570 +#: wp-admin/plugins.php:572 +msgid "Deactivate this plugin" +msgstr "Deaktivovat tento plugin" + +#: wp-admin/plugins.php:570 +msgid "Network Deactivate" +msgstr "Deaktivovat v síti webů" + +#: wp-admin/plugins.php:572 +#: wp-admin/plugins.php:661 +#: wp-admin/widgets.php:358 +msgid "Deactivate" +msgstr "Deaktivovat" + +#: wp-admin/plugins.php:576 +msgid "This plugin can only be activated for all sites in a network" +msgstr "Tento plugin může být aktivován pouze pro celou síť webů najednou" + +#: wp-admin/plugins.php:576 +msgid "Network Only" +msgstr "Síťový plugin" + +#: wp-admin/plugins.php:584 +msgid "Delete this plugin" +msgstr "Smazat tento plugin" + +#: wp-admin/plugins.php:588 +msgid "Open this file in the Plugin Editor" +msgstr "Otevřít soubor pluginu v Editoru" + +#: wp-admin/plugins.php:626 +msgid "Visit plugin site" +msgstr "Navštívit web pluginu" + +#: wp-admin/plugins.php:664 +msgid "Upgrade" +msgstr "Aktualizovat" + +#: wp-admin/plugins.php:672 +msgid "Clear List" +msgstr "Odebrat pluginy z tohoto seznamu" + +#: wp-admin/plugins.php:683 +msgid "Search Installed Plugins" +msgstr "Hledat instalované pluginy" + +#: wp-admin/plugins.php:698 +#, php-format +msgctxt "plugins" +msgid "All <span class=\"count\">(%s)</span>" +msgid_plural "All <span class=\"count\">(%s)</span>" +msgstr[0] "Celkem <span class=\"count\">(%s)</span>" +msgstr[1] "Celkem <span class=\"count\">(%s)</span>" +msgstr[2] "Celkem <span class=\"count\">(%s)</span>" + +#: wp-admin/plugins.php:701 +#, php-format +msgid "Active <span class=\"count\">(%s)</span>" +msgid_plural "Active <span class=\"count\">(%s)</span>" +msgstr[0] "Aktivovaný <span class=\"count\">(%s)</span>" +msgstr[1] "Aktivované <span class=\"count\">(%s)</span>" +msgstr[2] "Aktivovaných <span class=\"count\">(%s)</span>" + +#: wp-admin/plugins.php:705 +#, php-format +msgid "Recently Active <span class=\"count\">(%s)</span>" +msgid_plural "Recently Active <span class=\"count\">(%s)</span>" +msgstr[0] "Nedávno aktivovaný <span class=\"count\">(%s)</span>" +msgstr[1] "Nedávno aktivované <span class=\"count\">(%s)</span>" +msgstr[2] "Nedávno aktivovaných <span class=\"count\">(%s)</span>" + +#: wp-admin/plugins.php:709 +#, php-format +msgid "Inactive <span class=\"count\">(%s)</span>" +msgid_plural "Inactive <span class=\"count\">(%s)</span>" +msgstr[0] "Neaktivní <span class=\"count\">(%s)</span>" +msgstr[1] "Neaktivní <span class=\"count\">(%s)</span>" +msgstr[2] "Neaktivních <span class=\"count\">(%s)</span>" + +#: wp-admin/plugins.php:713 +#, php-format +msgid "Network <span class=\"count\">(%s)</span>" +msgid_plural "Network <span class=\"count\">(%s)</span>" +msgstr[0] "Aktivovaný v síti webů <span class=\"count\">(%s)</span>" +msgstr[1] "Aktivované v síti webů <span class=\"count\">(%s)</span>" +msgstr[2] "Aktivovaných v síti webů <span class=\"count\">(%s)</span>" + +#: wp-admin/plugins.php:717 +#, php-format +msgid "Must-Use <span class=\"count\">(%s)</span>" +msgid_plural "Must-Use <span class=\"count\">(%s)</span>" +msgstr[0] "Aktivovaný automaticky <span class=\"count\">(%s)</span>" +msgstr[1] "Aktivované automaticky <span class=\"count\">(%s)</span>" +msgstr[2] "Aktivovaných automaticky <span class=\"count\">(%s)</span>" + +#: wp-admin/plugins.php:721 +#, php-format +msgid "Drop-ins <span class=\"count\">(%s)</span>" +msgid_plural "Drop-ins <span class=\"count\">(%s)</span>" +msgstr[0] "Doplňkový soubor <span class=\"count\">(%s)</span>" +msgstr[1] "Doplňkové soubory <span class=\"count\">(%s)</span>" +msgstr[2] "Doplňkových souborů <span class=\"count\">(%s)</span>" + +#: wp-admin/plugins.php:725 +#, php-format +msgid "Upgrade Available <span class=\"count\">(%s)</span>" +msgid_plural "Upgrade Available <span class=\"count\">(%s)</span>" +msgstr[0] "Dostupná aktualizace <span class=\"count\">(%s)</span>" +msgstr[1] "Dostupné aktualizace <span class=\"count\">(%s)</span>" +msgstr[2] "Dostupných aktualizací <span class=\"count\">(%s)</span>" + +#: wp-admin/plugins.php:730 +#, php-format +msgid "Search Results <span class=\"count\">(%s)</span>" +msgid_plural "Search Results <span class=\"count\">(%s)</span>" +msgstr[0] "Výsledek vyhledávání <span class=\"count\">(%s)</span>" +msgstr[1] "Výsledky vyhledávání <span class=\"count\">(%s)</span>" +msgstr[2] "Výsledků vyhledávání <span class=\"count\">(%s)</span>" + +#: wp-admin/plugins.php:739 +msgid "Files in the <code>/wp-content/mu-plugins</code> directory are executed automatically." +msgstr "Soubory v adresáři <code>/wp-content/mu-plugins</code> jsou spouštěny automaticky bez potřeby aktivace." + +#: wp-admin/plugins.php:741 +msgid "Drop-ins are advanced plugins in the <code>/wp-content</code> directory that replace WordPress functionality when present." +msgstr "Doplňkové soubory jsou speciální pluginy, které jsou umístěné v adresáři <code>/wp-content</code> a automaticky mohou nahrazovat (či přidávat) některé funkce WordPressu." + +#: wp-admin/plugins.php:773 +msgid "No plugins found." +msgstr "Nebyly nalezeny žádné pluginy." + +#: wp-admin/plugins.php:779 +msgid "You do not appear to have any plugins available at this time." +msgstr "Vypadá to, že nemáte v současné době žádný plugin k dispozici." + +#: wp-admin/post-new.php:36 +#, php-format +msgid "" +"Since you’re a newcomer, you’ll have to wait for an admin to add the <code>edit_posts</code> capability to your user, in order to be authorized to post.<br />\n" +"You can also <a href=\"mailto:%s?subject=Promotion?\">e-mail the admin</a> to ask for a promotion.<br />\n" +"When you’re promoted, just reload this page and you’ll be able to blog. :)" +msgstr "" +"Protože jste patrně začátečník, budete muset nějaký čas počkat, než vám administrátor přiřadí rozšířenou pravomoc <code>edit_posts</code>, abyste mohli sami vytvářet a upravovat příspěvky na webu.<br />\n" +"Můžete také zkusit požádat <a href=\"mailto:%s?subject=Žádost\">administrátora emailem</a>.<br />\n" +"Jakmile vám bude tato pravomoc přiřazena, stačí jen aktualizovat tuto stránku a můžete začít tvořit. :)" + +#: wp-admin/post.php:153 +msgid "You attempted to edit an item that doesn’t exist. Perhaps it was deleted?" +msgstr "Pokoušíte se upravovat položku, která neexistuje. Nemohla být smazána?" + +#: wp-admin/post.php:156 +msgid "You are not allowed to edit this item." +msgstr "Nemáte dostatečné oprávnění pro úpravy této položky." + +#: wp-admin/post.php:159 +msgid "You can’t edit this item because it is in the Trash. Please restore it and try again." +msgstr "Nemůžete upravovat tuto položku, protože byla přesunuta do koše. Nejdříve ji prosím obnovte a potom to zkuste znovu." + +#: wp-admin/post.php:162 +msgid "Unknown post type." +msgstr "Neznámý typ obsahu." + +#: wp-admin/post.php:234 +msgid "You are not allowed to move this item out of the Trash." +msgstr "Nemáte dostatečné oprávnění pro obnovení této položky z koše." + +#: wp-admin/post.php:253 +#: wp-admin/post.php:256 +msgid "Error in deleting." +msgstr "Během mazání se objevila chyba." + +#: wp-admin/press-this.php:111 +msgid "Embed Code" +msgstr "Vložit kód" + +#: wp-admin/press-this.php:114 +msgid "Insert Video" +msgstr "Vložit video" + +#: wp-admin/press-this.php:140 +msgid "Click to insert." +msgstr "Vložit kliknutím." + +#: wp-admin/press-this.php:144 +#: wp-admin/press-this.php:172 +#: wp-includes/js/tinymce/wp-mce-help.php:232 +msgid "Insert Image" +msgstr "Vložit obrázek" + +#: wp-admin/press-this.php:242 +msgid "Unable to retrieve images or no images on page." +msgstr "Nepodařilo se získat ze stránky obrázky, nebo tam žádné obrázky nejsou." + +#: wp-admin/press-this.php:294 +msgid "click images to select" +msgstr "obrázky vyberte kliknutím" + +#: wp-admin/press-this.php:294 +msgid "Add from URL" +msgstr "Přidat z URL" + +#: wp-admin/press-this.php:294 +msgid "Refresh" +msgstr "Obnovit" + +#: wp-admin/press-this.php:402 +msgid "Loading..." +msgstr "Načítání..." + +#: wp-admin/press-this.php:508 +msgid "You cannot modify this Taxonomy." +msgstr "Nemůžete bohužel upravovat tuto taxonomii." + +#: wp-admin/press-this.php:538 +#: wp-admin/press-this.php:542 +msgid "Post Tags" +msgstr "Štítky" + +#: wp-admin/press-this.php:551 +msgid "Choose from the most used tags in Post Tags" +msgstr "Vyberte si z nejpoužívanějších štítků" + +#: wp-admin/press-this.php:558 +msgid "Your post has been saved." +msgstr "Příspěvek byl uložen." + +#: wp-admin/press-this.php:558 +msgid "View post" +msgstr "Zobrazit příspěvek" + +#: wp-admin/press-this.php:558 +msgid "Close Window" +msgstr "Zavřít okno" + +#: wp-admin/press-this.php:573 +#: wp-admin/press-this.php:574 +msgid "Insert an Image" +msgstr "Vložit obrázek" + +#: wp-admin/press-this.php:578 +msgid "Embed a Video" +msgstr "Vložit video" + +#: wp-admin/press-this.php:584 +#: wp-includes/general-template.php:1796 +#: wp-includes/general-template.php:1801 +msgid "HTML" +msgstr "HTML" + +#: wp-admin/press-this.php:585 +#: wp-includes/general-template.php:1797 +#: wp-includes/general-template.php:1802 +msgid "Visual" +msgstr "Editor" + +#: wp-admin/press-this.php:598 +msgid "via " +msgstr "Zdroj: " + +#: wp-admin/revision.php:96 +#, php-format +msgid "Compare Revisions of “%1$s”" +msgstr "Porovnání verzí „%1$s“" + +#: wp-admin/revision.php:122 +#, php-format +msgid "Revision for “%1$s” created on %2$s" +msgstr "Starší verze „%1$s“ (vytvořena %2$s)" + +#: wp-admin/revision.php:162 +#, php-format +msgid "Older: %s" +msgstr "Starší verze: %s" + +#: wp-admin/revision.php:163 +#, php-format +msgid "Newer: %s" +msgstr "Novější verze: %s" + +#: wp-admin/revision.php:196 +msgid "These revisions are identical." +msgstr "Tyto verze jsou zcela stejné." + +#: wp-admin/sidebar.php:98 +msgid "Post published." +msgstr "Příspěvek byl publikován." + +#: wp-admin/sidebar.php:103 +#: wp-content/plugins/akismet/akismet.php:1142 +#: wp-includes/default-widgets.php:67 +#: wp-includes/default-widgets.php:197 +#: wp-includes/default-widgets.php:263 +#: wp-includes/default-widgets.php:318 +#: wp-includes/default-widgets.php:358 +#: wp-includes/default-widgets.php:404 +#: wp-includes/default-widgets.php:490 +#: wp-includes/default-widgets.php:588 +#: wp-includes/default-widgets.php:683 +#: wp-includes/default-widgets.php:1029 +#: wp-includes/default-widgets.php:1100 +msgid "Title:" +msgstr "Název:" + +#: wp-admin/sidebar.php:108 +msgid "Post:" +msgstr "Příspěvek:" + +#: wp-admin/sidebar.php:113 +#: wp-admin/themes.php:116 +#: wp-admin/themes.php:219 +msgid "Tags:" +msgstr "Štítky:" + +#: wp-admin/sidebar.php:115 +#: wp-includes/script-loader.php:284 +#: wp-includes/taxonomy.php:366 +msgid "Separate tags with commas" +msgstr "Více štítků oddělte čárkami." + +#: wp-admin/sidebar.php:119 +msgid "Save as Draft" +msgstr "Uložit jako koncept" + +#: wp-admin/theme-editor.php:13 +msgid "You do not have sufficient permissions to edit templates for this site." +msgstr "Nemáte dostatečné oprávnění pro úpravy šablon na tomto webu." + +#: wp-admin/theme-editor.php:15 +msgid "Edit Themes" +msgstr "Editor šablon" + +#: wp-admin/theme-editor.php:18 +msgid "You can use the Theme Editor to edit the individual CSS and PHP files which make up your theme." +msgstr "Pokud chcete trochu pozměnit vzhled webu přímo pomocí kaskádových stylů (CSS) a PHP souborů, můžete použít vestavěný editor WordPressu, kde lze všechny soubory šablon upravovat." + +#: wp-admin/theme-editor.php:19 +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 "Nejdříve si z horního rozevíracího menu vyberte šablonu, kterou budete chtít upravit, a klikněte myší na tlačítko Vybrat (jako výchozí je na stránce vždy nastavena aktuálně používaná šablona). V pravém sloupci se pak zobrazí seznam všech příslušných souborů šablony. Po kliknutí na název konkrétního souboru se jeho obsah zobrazí v editoru pro přímé úpravy." + +#: wp-admin/theme-editor.php:20 +msgid "For PHP files, you can use the Documentation dropdown to select from functions recognized in that file. Lookup takes you to a web page with reference material about that particular function." +msgstr "Pokud upravujete PHP soubory, tak se pod editorem automaticky zobrazí rozevírací menu s aktuálně použitými funkcemi WordPressu, jejichž detailní dokumentaci si můžete nechat zobrazit. Vyberte si libovolnou funkci a kliknutím na tlačítko Hledat budete přesměrováni na stránku s manuálem k této funkci (anglicky)." + +#: wp-admin/theme-editor.php:21 +msgid "After typing in your edits, click Update File." +msgstr "Po provedených úpravách nezapomeňte ještě kliknout na tlačítko Aktualizovat soubor." + +#: wp-admin/theme-editor.php:22 +msgid "<strong>Advice:</strong> think very carefully about your site crashing if you are live-editing the theme currently in use." +msgstr "<strong>Upozornění:</strong> Pokud upravujete aktuálně používanou šablonu, tak buďte velmi opatrní, protože se všechny změny ihned projeví a v případě nějaké chyby může web přestat zcela fungovat." + +#: wp-admin/theme-editor.php:23 +msgid "Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a <a href=\"http://codex.wordpress.org/Child_Themes\" target=\"_blank\">child theme</a> instead." +msgstr "Během automatické aktualizace šablony na novější verzi budou smazány všechny úpravy, které jste v souborech šablony dosud udělali. Do budoucna proto raději zvažte pro vlastní úpravy možnost využití <a href=\"http://codex.wordpress.org/Child_Themes\" target=\"_blank\">odvozených šablon</a>." + +#: wp-admin/theme-editor.php:25 +msgid "<a href=\"http://codex.wordpress.org/Theme_Development\" target=\"_blank\">Documentation on Theme Development</a>" +msgstr "<a href=\"http://codex.wordpress.org/Theme_Development\" target=\"_blank\">Manuál pro vytváření šablon</a> (anglicky)" + +#: wp-admin/theme-editor.php:26 +#: wp-admin/themes.php:42 +msgid "<a href=\"http://codex.wordpress.org/Using_Themes\" target=\"_blank\">Documentation on Using Themes</a>" +msgstr "<a href=\"http://codex.wordpress.org/Using_Themes\" target=\"_blank\">Manuál pro práci se šablonami</a> (anglicky)" + +#: wp-admin/theme-editor.php:27 +msgid "<a href=\"http://codex.wordpress.org/Editing_Files\" target=\"_blank\">Documentation on Editing Files</a>" +msgstr "<a href=\"http://codex.wordpress.org/Editing_Files\" target=\"_blank\">Manuál pro úpravy souborů</a> (anglicky)" + +#: wp-admin/theme-editor.php:28 +msgid "<a href=\"http://codex.wordpress.org/Template_Tags\" target=\"_blank\">Documentation on Template Tags</a>" +msgstr "<a href=\"http://codex.wordpress.org/Template_Tags\" target=\"_blank\">Přehled funkcí WordPressu pro šablony</a> (anglicky)" + +#: wp-admin/theme-editor.php:45 +msgid "The requested theme does not exist." +msgstr "Požadovaná šablona neexistuje." + +#: wp-admin/theme-editor.php:111 +msgid "Function Name..." +msgstr "Název funkce..." + +#: wp-admin/theme-editor.php:139 +msgid "Select theme to edit:" +msgstr "Vyberte šablonu, kterou chcete upravit:" + +#: wp-admin/theme-editor.php:161 +msgid "Templates" +msgstr "Soubory šablony" + +#. translators: Theme stylesheets in theme editor +#: wp-admin/theme-editor.php:188 +msgctxt "Theme stylesheets in theme editor" +msgid "Styles" +msgstr "Styly" + +#: wp-admin/theme-editor.php:239 +msgid "Oops, no such file exists! Double check the name and try again, merci." +msgstr "Žádný takový soubor neexistuje. Zkontrolujte raději ještě jednou jeho název." + +#: wp-admin/theme-install.php:13 +msgid "You do not have sufficient permissions to install themes on this site." +msgstr "Nemáte dostatečné oprávnění pro instalaci šablon na tomto webu." + +#: wp-admin/theme-install.php:34 +msgctxt "Theme Installer" +msgid "Featured" +msgstr "Doporučené" + +#: wp-admin/theme-install.php:36 +msgctxt "Theme Installer" +msgid "Newest" +msgstr "Nejnovější" + +#: wp-admin/theme-install.php:37 +msgctxt "Theme Installer" +msgid "Recently Updated" +msgstr "Naposledy aktualizované" + +#: wp-admin/theme-install.php:56 +#, php-format +msgid "You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the <a href=\"%s\" target=\"_blank\">WordPress.org Theme Directory</a>. These themes are designed and developed by third parties, are available free of charge, and are licensed under the GNU General Public License, version 2, just like WordPress." +msgstr "Nové šablony pro váš web můžete nalézt prostřednictvím této stránky, která je určena pro vyhledávání a prohlížení všech šablon dostupných v <a href=\"%s\" target=\"_blank\">oficiálním adresáři šablon pro WordPress</a> a jejich následné automatické instalaci. Tyto šablony jsou sice navrhovány a vytvářeny nezávislými vývojáři, ale jsou dostupné pro všechny uživatele zdarma, konkrétně pak se všeobecnou veřejnou licencí GNU GPLv2 (General Public License, verze 2), kterou je vybaven i samotný WordPress." + +#: wp-admin/theme-install.php:57 +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 "Šablony můžete vyhledávat podle konkrétního klíčového slova, autora či štítku, nebo je možné využít formulář s možností zaškrtnutí vybraných specifických požadavků na funkčnost šablony. Kromě toho si můžete třeba jen prohlížet Doporučené, Nejnovější či Naposledy aktualizované šablony. Pokud se vám nějaká šablona zalíbí, můžete si zobrazit možnou budoucí podobu vašeho webu pomocí Náhledu, nebo šablonu rovnou nainstalovat." + +#: wp-admin/theme-install.php:58 +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 <code>/wp-content/themes</code> directory." +msgstr "Pokud jste si někde na internetu stáhli instalační balíček se šablonou v podobě .zip souboru na váš počítač, můžete ho na této stránce ručně nahrát do WordPressu a šablonu tímto způsobem nainstalovat (raději si ale ověřte, že šablona pochází z důvěryhodného a původního zdroje). Pokud narazíte na nějaký problém s automatickou instalací nebo se pro vaše účely z nějakého důvodu nehodí, můžete šablonu také nainstalovat „postaru“, a to zkopírováním celého adresáře se soubory šablony z vašeho počítače prostřednictvím FTP do adresáře <code>/wp-content/themes</code>." + +#: wp-admin/theme-install.php:60 +msgid "<a href=\"http://codex.wordpress.org/Using_Themes#Adding_New_Themes\" target=\"_blank\">Documentation on Adding New Themes</a>" +msgstr "<a href=\"http://codex.wordpress.org/Using_Themes#Adding_New_Themes\" target=\"_blank\">Manuál pro instalaci šablon</a> (anglicky)" + +#: wp-admin/theme-install.php:68 +msgctxt "theme" +msgid "Manage Themes" +msgstr "Správa šablon" + +#: wp-admin/themes.php:36 +msgid "Aside from the default theme included with your WordPress installation, themes are designed and developed by third parties." +msgstr "Kromě výchozí šablony TwentyTen (2010), která je již přímo součástí instalačního balíčku WordPressu, jsou ostatní šablony navrhovány a vytvářeny nezávislými vývojáři." + +#: wp-admin/themes.php:37 +msgid "You can see your active theme at the top of the screen. Below are the other themes you have installed that are not currently in use. You can see what your site would look like with one of these themes by clicking the Preview link. To change themes, click the Activate link." +msgstr "Aktuálně používanou šablonu na webu můžete vidět v horní části této stránky. Pod ní jsou pak seřazené další nainstalované šablony, které v současné době nepoužíváte (nejsou aktivované). Kliknutím na odkaz Náhled u konkrétní šablony si můžete prohlédnout, jak by váš web vypadal v případě použití této šablony. Pomocí odkazu Aktivovat je zase možné aktuálně používanou šablonu okamžitě změnit." + +#: wp-admin/themes.php:39 +#, php-format +msgid "If you would like to see more themes to choose from, click on the “Install Themes” tab and you will be able to browse or search for additional themes from the <a href=\"%s\" target=\"_blank\">WordPress.org Theme Directory</a>. Themes in the WordPress.org Theme Directory are designed and developed by third parties, and are licensed under the GNU General Public License, version 2, just like WordPress. Oh, and they’re free!" +msgstr "Pokud si chcete prohlédnout nějaké další šablony, stačí kliknout na záložku „Instalace šablon“ a dostanete se na stránku, kde můžete vyhledávat a prohlížet všechny existující šablony v <a href=\"%s\" target=\"_blank\">oficiálním adresáři šablon pro WordPress</a>. Šablony v tomto adresáři jsou sice navrhovány a vytvářeny nezávislými vývojáři, ale všechny mají všeobecnou veřejnou licenci GNU GPLv2 (General Public License, verze 2), stejně jako samotný WordPress. Stručně řečeno, tyto šablony můžete využívat zcela zdarma." + +#: wp-admin/themes.php:53 +#, php-format +msgid "Administrator: new themes must be activated in the <a href=\"%s\">Network Themes</a> screen before they appear here." +msgstr "Upozornění pro administrátory: Aby zde mohly být všechny nové šablony zobrazeny, musí být nejdříve povoleny na stránce <a href=\"%s\">Správa webů - Šablony</a>." + +#: wp-admin/themes.php:58 +msgid "The active theme is broken. Reverting to the default theme." +msgstr "Aktivní šablona je zřejmě poškozena. Přepínám na výchozí šablonu." + +#: wp-admin/themes.php:61 +#, php-format +msgid "New theme activated. This theme supports widgets, please visit the <a href=\"%s\">widgets settings</a> screen to configure them." +msgstr "Nová šablona byla aktivována. Tato šablona podporuje widgety, které si můžete libovolně vybírat a upravovat na příslušné <a href=\"%s\">stránce s jejich nastavením</a>." + +#: wp-admin/themes.php:63 +#, php-format +msgid "New theme activated. <a href=\"%s\">Visit site</a>" +msgstr "Nová šablona byla aktivována. <a href=\"%s\">Zobrazit web</a>" + +#: wp-admin/themes.php:66 +msgid "Theme deleted." +msgstr "Šablona byla smazána." + +#: wp-admin/themes.php:99 +msgctxt "theme" +msgid "Install Themes" +msgstr "Instalace šablon" + +#: wp-admin/themes.php:101 +msgid "Current Theme" +msgstr "Aktuální šablona" + +#: wp-admin/themes.php:104 +msgid "Current theme preview" +msgstr "Náhled aktuální šablony" + +#. translators: 1: theme title, 2: theme version, 3: theme author +#: wp-admin/themes.php:108 +#: wp-admin/themes.php:209 +#, php-format +msgid "%1$s %2$s by %3$s" +msgstr "%1$s %2$s od %3$s" + +#. translators: 1: theme title, 2: template dir, 3: stylesheet_dir, 4: theme title, 5: parent_theme +#: wp-admin/themes.php:111 +#: wp-admin/themes.php:214 +#, php-format +msgid "The template files are located in <code>%2$s</code>. The stylesheet files are located in <code>%3$s</code>. <strong>%4$s</strong> uses templates from <strong>%5$s</strong>. Changes made to the templates will affect both themes." +msgstr "Soubory šablony jsou uloženy v adresáři <code>%2$s</code>. Soubory s kaskádovými styly (CSS) jsou uloženy v adresáři <code>%3$s</code>. Odvozená šablona <strong>%4$s</strong> využívá soubory původní šablony <strong>%5$s</strong>. Všechny změny provedené v původní šabloně ovlivní i tuto odvozenou šablonu." + +#: wp-admin/themes.php:113 +#: wp-admin/themes.php:216 +#, php-format +msgid "All of this theme’s files are located in <code>%2$s</code>." +msgstr "Všechny soubory této šablony jsou uloženy v <code>%2$s</code>." + +#: wp-admin/themes.php:130 +msgid "Available Themes" +msgstr "Dostupné šablony" + +#: wp-admin/themes.php:188 +#, php-format +msgid "Preview of “%s”" +msgstr "Náhled šablony „%s“" + +#: wp-admin/themes.php:197 +#, php-format +msgid "" +"You are about to delete this theme '%s'\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Chystáte se smazat tuto šablonu '%s'\n" +" Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#: wp-admin/themes.php:231 +#, php-format +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 <em><a href=\"%s\">Install Themes</a></em> tab above." +msgstr "V současné chvíli máte nainstalovanou pouze jednu šablonu. Ani nevíte, o co všechno přicházíte! Můžete si libovolně vybírat z více než 1000 šablon, které jsou kdykoliv zdarma dostupné v oficiálním adresáři šablon pro WordPress, stačí jen kliknout na horní záložku <em><a href=\"%s\">Instalace šablon</a></em>." + +#: wp-admin/themes.php:233 +#, php-format +msgid "Only the current theme is available to you. Contact the %s administrator for information about accessing additional themes." +msgstr "V současné chvíli je pro vás dostupná pouze aktuální šablona. Pokud chcete používat nějaké další šablony, budete muset kontaktovat administrátora webu %s ." + +#: wp-admin/themes.php:253 +msgid "Broken Themes" +msgstr "Poškozené šablony" + +#: wp-admin/themes.php:253 +msgid "(Site admin only)" +msgstr "(pouze pro administrátory)" + +#: wp-admin/themes.php:254 +msgid "The following themes are installed but incomplete. Themes must have a stylesheet and a template." +msgstr "Následující šablony jsou sice nainstalované, ale nejsou kompletní. Šablony musí obsahovat nejen soubor s kaskádovými styly (style.css), ale také nějaké konkrétní PHP soubory pro zobrazení příslušných dat." + +#: wp-admin/tools.php:15 +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." +msgstr "„Kliknout a publikovat“ je akční záložka (bookmarklet), která výrazně usnadňuje práci, když chcete na svém webu upozornit na nějaký zajímavý článek, který jste si právě přečetli na internetu. Jediným kliknutím myši tak získáte vždy automaticky předpřipravený koncept i s příslušným odkazem na článek. Nástroj „Kliknout a publikovat“ také umožňuje vybrat si některý z obrázků zobrazených u odkazovaného článku a ihned ho použít na svém webu. Stačí pouze uchopit odkaz Kliknout a publikovat na této stránce a tažením myši ho přidat k oblíbeným záložkám v prohlížeči, kde ho pak budete mít vždy připravený k okamžitému použití pro snadné vytváření obsahu webu." + +#: wp-admin/tools.php:16 +msgid "Note: Turbo/Gears is no longer promoted on this screen as it was in previous versions due to the fact that Google has discontinued support for it." +msgstr "Poznámka: Nástroj pro zrychlení načítání administrace WordPressu (založený na využití Google Gears) už na této stránce nenaleznete, jako tomu bylo v předchozích verzích WordPressu, protože Google přestal tuto technologii nadále podporovat a rozvíjet." + +#: wp-admin/tools.php:18 +msgid "<a href=\"http://codex.wordpress.org/Tools_Tools_SubPanel\" target=\"_blank\">Tools Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Tools_Tools_SubPanel\" target=\"_blank\">Manuál pro nástroje</a> (anglicky)" + +#: wp-admin/tools.php:47 +#, php-format +msgid "<a href=\"%s\">Use this</a> to convert categories to tags or tags to categories." +msgstr "Pro převedení rubrik na štítky (nebo naopak) můžete použít <a href=\"%s\">příslušný nástroj</a>." + +#: wp-admin/update-core.php:13 +#: wp-admin/update.php:21 +#: wp-admin/update.php:48 +#: wp-admin/update.php:67 +msgid "You do not have sufficient permissions to update plugins for this site." +msgstr "Nemáte dostatečné opravnění pro aktualizaci pluginů na tomto webu." + +#: wp-admin/update-core.php:22 +msgid "Update Automatically" +msgstr "Aktualizovat automaticky" + +#: wp-admin/update-core.php:28 +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 "Používáte vývojářskou verzi WordPressu, která je průběžně aktualizována. Můžete kdykoliv provést automatickou aktualizaci na nejnovější verzi, nebo si stáhnout aktuální instalační balíček (tzv. nightly build) a provést instalaci ručně:" + +#: wp-admin/update-core.php:29 +msgid "Download nightly build" +msgstr "Stáhnout nejnovější verzi ručně" + +#: wp-admin/update-core.php:32 +#, php-format +msgid "You have the latest version of WordPress. You do not need to update. However, if you want to re-install version %s, you can do so automatically or download the package and re-install manually:" +msgstr "Používáte nejnovější verzi WordPressu a není tedy potřeba provádět aktualizaci. Pokud však chcete z nějakého důvodu přeinstalovat stávající verzi WordPressu %s, můžete to provést buď s pomocí automatické aktualizace, nebo si stáhnout instalační balíček a přeinstalovat WordPress ručně:" + +#: wp-admin/update-core.php:33 +msgid "Re-install Automatically" +msgstr "Automatická aktualizace" + +#: wp-admin/update-core.php:39 +#, php-format +msgid "You cannot update because <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> 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 "Automatická aktualizace nemůže být provedena, protože <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> vyžaduje alespoň PHP %2$s a MySQL %3$s. Na vašem serveru jsou však bohužel používány starší verze PHP %4$s a MySQL %5$s." + +#: wp-admin/update-core.php:41 +#, php-format +msgid "You cannot update because <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> requires PHP version %2$s or higher. You are running version %3$s." +msgstr "Automatická aktualizace nemůže být provedena, protože <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> vyžaduje alespoň PHP %2$s a na vašem serveru je bohužel používána starší verze PHP %3$s." + +#: wp-admin/update-core.php:43 +#, php-format +msgid "You cannot update because <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> requires MySQL version %2$s or higher. You are running version %3$s." +msgstr "Automatická aktualizace nemůže být provedena, protože <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> vyžaduje alespoň MySQL %2$s a na vašem serveru je používána bohužel starší verze MySQL %3$s." + +#: wp-admin/update-core.php:45 +#, php-format +msgid "You can update to <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> automatically or download the package and install it manually:" +msgstr "Můžete provést buď automatickou aktualizaci na novou verzi <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPressu %1$s</a>, nebo si stáhnout instalační balíček a aktualizovat WordPress ručně:" + +#: wp-admin/update-core.php:49 +#, php-format +msgid "Download %s" +msgstr "Stáhnout WordPress %s" + +#: wp-admin/update-core.php:66 +msgid "Hide this update" +msgstr "Skrýt tuto aktualizaci" + +#: wp-admin/update-core.php:68 +msgid "Bring back this update" +msgstr "Obnovit tuto aktualizaci" + +#: wp-admin/update-core.php:71 +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 "Nová lokalizovaná verze WordPressu obsahuje nejen samotný aktuální překlad, ale i další opravy drobných lokalizačních problémů a chyb. Pokud si chcete ponechat vaši současnou lokalizovanou verzi, tak můžete její aktualizaci přeskočit." + +#: wp-admin/update-core.php:73 +#, php-format +msgid "You are about to install WordPress %s <strong>in English.</strong> There is a chance this upgrade will break your translation. You may prefer to wait for the localized version to be released." +msgstr "WordPress %s je ihned po vydání dostupný v původní <strong>anglické verzi (en_US)</strong>. Protože však používáte českou verzi WordPressu, nemusí být po této aktualizaci vše správně přeloženo a mohou se objevit i další související problémy. Měli byste tedy raději počkat až se vám v nabídce objeví i příslušná <strong>česká verze (cs_CZ)</strong>. Zkontrolujte si, zda už je <a target=\"_blank\" href=\"http://www.separatista.net\">dostupná</a> nová verze češtiny, případně její autory popožeňte svým komentářem." + +#: wp-admin/update-core.php:83 +#: wp-admin/update-core.php:95 +msgid "Show hidden updates" +msgstr "Zobrazit skryté aktualizace" + +#: wp-admin/update-core.php:84 +msgid "Hide hidden updates" +msgstr "Skrýt skryté aktualiazce" + +#: wp-admin/update-core.php:120 +#: wp-admin/update-core.php:381 +msgid "WordPress Updates" +msgstr "Aktualizace WordPressu" + +#: wp-admin/update-core.php:124 +msgid "Please select one or more plugins to upgrade." +msgstr "Označte prosím jeden nebo více pluginů, které chcete aktualizovat." + +#: wp-admin/update-core.php:130 +msgid "You have the latest version of WordPress." +msgstr "Používáte nejnovější verzi WordPressu." + +#: wp-admin/update-core.php:134 +msgid "<strong>Important:</strong> before updating, please <a href=\"http://codex.wordpress.org/WordPress_Backups\">backup your database and files</a>. For help with updates, visit the <a href=\"http://codex.wordpress.org/Updating_WordPress\">Updating WordPress</a> Codex page." +msgstr "<strong>Upozornění:</strong> Před každou aktualizací WordPressu proveďte raději kompletní <a href=\"http://codex.wordpress.org/WordPress_Backups\">zálohu databáze a všech souborů</a>. Pokud narazíte během aktualizace na nějaký problém, zkuste najít řešení v <a href=\"http://codex.wordpress.org/Updating_WordPress\">manuálu pro aktualizaci WordPressu</a> (anglicky)." + +#: wp-admin/update-core.php:138 +msgid "An updated version of WordPress is available." +msgstr "Nová verze WordPressu je k dispozici." + +#: wp-admin/update-core.php:152 +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 "Zatímco bude probíhat automatická aktualizace, váš web bude přepnut do Režimu údržby. Jakmile bude aktualizace v pořádku dokončena, váš web se bude zobrazovat zase normálně." + +#: wp-admin/update-core.php:170 +msgid "Your plugins are all up to date." +msgstr "U všech pluginů používáte jejich nejnovější verze." + +#: wp-admin/update-core.php:182 +msgid "The following plugins have new versions available. Check the ones you want to update and then click “Update Plugins”." +msgstr "Pro následující pluginy jsou dostupné jejich novější verze. Zaškrtnutím označte všechny pluginy, které chcete aktualizovat a potom klikněte na tlačítko „Aktualizovat pluginy“." + +#: wp-admin/update-core.php:185 +#: wp-admin/update-core.php:237 +#: wp-admin/update-core.php:431 +#: wp-admin/update-core.php:436 +msgid "Update Plugins" +msgstr "Aktualizovat pluginy" + +#: wp-admin/update-core.php:206 +#, php-format +msgid "Compatibility with WordPress %1$s: 100%% (according to its author)" +msgstr "Kompatibilita pluginu s WordPressem %1$s: 100%% (podle autora pluginu)" + +#: wp-admin/update-core.php:209 +#: wp-admin/update-core.php:217 +#, php-format +msgid "Compatibility with WordPress %1$s: %2$d%% (%3$d \"works\" votes out of %4$d total)" +msgstr "Kompatibilita pluginu s WordPressem %1$s: %2$d%% (%3$d uživatelů z celkem %4$d hlasujících označilo plugin jako funkční)" + +#: wp-admin/update-core.php:211 +#: wp-admin/update-core.php:219 +#, php-format +msgid "Compatibility with WordPress %1$s: Unknown" +msgstr "Kompatibilita pluginu s WordPressem %1$s: Neznámá" + +#: wp-admin/update-core.php:231 +#: wp-admin/update-core.php:281 +#, php-format +msgid "You have version %1$s installed. Update to %2$s." +msgstr "Používáte zastaralou verzi %1$s. Můžete aktualizovat na nejnovější verzi %2$s." + +#: wp-admin/update-core.php:246 +msgid "Your themes are all up to date." +msgstr "U všech šablon používáte jejich nejnovější verze." + +#: wp-admin/update-core.php:254 +msgid "The following themes have new versions available. Check the ones you want to update and then click “Update Themes”." +msgstr "Pro následující šablony jsou dostupné jejich novější verze. Zaškrtnutím označte všechny šablony, které chcete aktualizovat a potom klikněte na tlačítko „Aktualizovat šablony“." + +#: wp-admin/update-core.php:255 +#, php-format +msgid "<strong>Please Note:</strong> Any customizations you have made to the Themes files will be lost. Please consider using <a href=\"%s\">child themes</a> for modifications." +msgstr "<strong>Upozornění:</strong> Během automatické aktualizace vybraných šablon budou smazány všechny úpravy, které jste v souborech těchto šablon dosud udělali. Do budoucna proto raději zvažte možnost využití <a href=\"%s\">odvozených šablon</a> pro vlastní úpravy." + +#: wp-admin/update-core.php:255 +msgctxt "Link used in suggestion to use child themes in GUU" +msgid "http://codex.wordpress.org/Child_Themes" +msgstr "http://codex.wordpress.org/Child_Themes" + +#: wp-admin/update-core.php:258 +#: wp-admin/update-core.php:287 +#: wp-admin/update-core.php:454 +#: wp-admin/update-core.php:459 +msgid "Update Themes" +msgstr "Aktualizovat šablony" + +#: wp-admin/update-core.php:324 +msgid "Update WordPress" +msgstr "Aktualizace WordPressu" + +#: wp-admin/update-core.php:341 +msgid "Installation Failed" +msgstr "Instalace se nezdařila" + +#: wp-admin/update-core.php:343 +msgid "WordPress updated successfully" +msgstr "WordPress byl úspěšně aktualizován" + +#: wp-admin/update-core.php:344 +msgid "Go to Dashboard" +msgstr "Zpět na Nástěnku" + +#: wp-admin/update-core.php:385 +msgid "This screen lets you update to the latest version of WordPress as well as update your themes and plugins from the WordPress.org repository. When updates are available, the number of available updates will appear in a bubble on the left hand menu as a notification. It is very important to keep your WordPress installation up to date for security reasons, so when you see a number appear, make sure you take the time to update, which is an easy process." +msgstr "Na této stránce můžete provést automatickou aktualizaci nejen WordPressu, ale i všech pluginů a šablon, které jsou distribuovány prostřednictvím oficiálních adresářů WordPressu. Pokud jsou nějaké nové aktualizace dostupné, objeví se upozornění o jejich počtu v podobě malého čísla v levém menu. Je velmi důležité udržovat váš web ve WordPressu aktuální, a to zejména z bezpečnostních důvodů. Případné aktualizace proto raději neodkládejte a jakmile se vám upozornění s počtem dostupných nových verzích objeví, věnujte mu pozornost a neprodleně vše aktualizujte, je to jednoduché a zabere vám to opravdu jen chvilku." + +#: wp-admin/update-core.php:386 +msgid "Updating your WordPress installation is a simple one-click procedure; just click on the Update button when it says a new version is available." +msgstr "Pokud se objeví nová verze WordPressu, tak samotná aktualizace spočívá pouze v kliknutí myší na tlačítko Automatická aktualizace." + +#: wp-admin/update-core.php:387 +msgid "To upgrade themes or plugins from this screen, use the checkboxes to make your selection and click on the appropriate Update button. Check the box at the top of the Themes or Plugins section to select all and update them all at once." +msgstr "Aktualizace šablon a pluginů je také velmi jednoduchá, stačí jen níže na stránce zaškrtnutím označit váš výběr pluginů a šablon a pak už jen kliknout na příslušné aktualizační tlačítko. Pokud chcete aktualizovat všechny pluginy (či šablony) najednou, stačí zaškrtnout jen horní pole s názvem Vybrat vše." + +#: wp-admin/update-core.php:389 +msgid "<a href=\"http://codex.wordpress.org/Dashboard_Updates_SubPanel\" target=\"_blank\">Documentation on Updating WordPress</a>" +msgstr "<a href=\"http://codex.wordpress.org/Dashboard_Updates_SubPanel\" target=\"_blank\">Manuál pro aktualizaci WordPressu</a> (anglicky)" + +#: wp-admin/update.php:76 +msgid "Plugin Reactivation" +msgstr "Reaktivace pluginu" + +#: wp-admin/update.php:78 +msgid "Plugin reactivated successfully." +msgstr "Plugin byl znovu úspěšně aktivován." + +#: wp-admin/update.php:81 +msgid "Plugin failed to reactivate due to a fatal error." +msgstr "Plugin nemohl být znovu aktivován, protože způsobil závažnou chybu." + +#: wp-admin/update.php:95 +#: wp-admin/update.php:126 +msgid "You do not have sufficient permissions to install plugins for this site." +msgstr "Nemáte dostatečné oprávnění pro instalaci pluginů na tomto webu." + +#: wp-admin/update.php:110 +#, php-format +msgid "Installing Plugin: %s" +msgstr "Instalace pluginu: %s" + +#: wp-admin/update.php:132 +msgid "Upload Plugin" +msgstr "Nahrát plugin" + +#: wp-admin/update.php:137 +#, php-format +msgid "Installing Plugin from uploaded file: %s" +msgstr "Instalace pluginu z nahraného souboru: %s" + +#: wp-admin/update.php:150 +#: wp-admin/update.php:170 +msgid "You do not have sufficient permissions to update themes for this site." +msgstr "Nemáte dostatečné oprávnění pro aktualizaci šablon na tomto webu." + +#: wp-admin/update.php:197 +#: wp-admin/update.php:227 +msgid "You do not have sufficient permissions to install themes for this site." +msgstr "Nemáte dostatečné oprávnění pro instalaci šablon na tomto webu." + +#: wp-admin/update.php:214 +#, php-format +msgid "Installing Theme: %s" +msgstr "Instalace šablony: %s" + +#: wp-admin/update.php:233 +msgid "Upload Theme" +msgstr "Nahrát šablonu" + +#: wp-admin/update.php:240 +#, php-format +msgid "Installing Theme from uploaded file: %s" +msgstr "Instalace šablony z nahraného souboru: %s" + +#: wp-admin/upgrade.php:49 +msgid "WordPress › Upgrade" +msgstr "WordPress › Aktualizace" + +#: wp-admin/upgrade.php:60 +msgid "No Upgrade Required" +msgstr "Není třeba aktualizovat" + +#: wp-admin/upgrade.php:61 +msgid "Your WordPress database is already up-to-date!" +msgstr "Vaše WordPress databáze je aktuální!" + +#: wp-admin/upgrade.php:66 +#, php-format +msgid "You cannot upgrade because <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> 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 "Automatická aktualizace nemůže být provedena, protože <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> vyžaduje alespoň PHP %2$s a MySQL %3$s. Na vašem serveru jsou však bohužel používány starší verze PHP %4$s a MySQL %5$s." + +#: wp-admin/upgrade.php:68 +#, php-format +msgid "You cannot upgrade because <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> requires PHP version %2$s or higher. You are running version %3$s." +msgstr "Automatická aktualizace nemůže být provedena, protože <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> vyžaduje alespoň PHP %2$s a na vašem serveru je bohužel používána starší verze PHP %3$s." + +#: wp-admin/upgrade.php:70 +#, php-format +msgid "You cannot upgrade because <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> requires MySQL version %2$s or higher. You are running version %3$s." +msgstr "Automatická aktualizace nemůže být provedena, protože <a href=\"http://codex.wordpress.org/Version_%1$s\">WordPress %1$s</a> vyžaduje alespoň MySQL %2$s a na vašem serveru je používána bohužel starší verze MySQL %3$s." + +#: wp-admin/upgrade.php:79 +msgid "Database Upgrade Required" +msgstr "Je nutná aktualizace databáze" + +#: wp-admin/upgrade.php:80 +msgid "WordPress has been updated! Before we send you on your way, we have to upgrade your database to the newest version." +msgstr "WordPress byl úspěšně aktualizován! Ale ještě než vás necháme s redakčním systémem pracovat, musíme ještě aktualizovat databázi." + +#: wp-admin/upgrade.php:81 +msgid "The upgrade process may take a little while, so please be patient." +msgstr "Aktualizace může nějakou chvíli trvat, prosíme o trpělivost." + +#: wp-admin/upgrade.php:82 +msgid "Upgrade WordPress Database" +msgstr "Aktualizovat databázi WordPressu" + +#: wp-admin/upgrade.php:92 +msgid "Upgrade Complete" +msgstr "Aktualizace dokončena" + +#: wp-admin/upgrade.php:93 +msgid "Your WordPress database has been successfully upgraded!" +msgstr "WordPress databáze byla úspěšně aktualizována!" + +#: wp-admin/upgrade.php:98 +#, php-format +msgid "%s queries" +msgstr "%s dotazů" + +#: wp-admin/upgrade.php:100 +#, php-format +msgid "%s seconds" +msgstr "%s sekund" + +#: wp-admin/upload.php:21 +msgid "You are not allowed to scan for lost attachments." +msgstr "Nemáte dostatečné oprávnění pro vyhledávání ztracených příloh." + +#: wp-admin/upload.php:88 +msgid "You are not allowed to move this post to the trash." +msgstr "Nemáte dostatečné oprávnění pro přesunutí tohoto příspěvku do koše." + +#: wp-admin/upload.php:91 +msgid "Error in moving to trash..." +msgstr "Během přesunování do koše se objevila chyba..." + +#: wp-admin/upload.php:98 +msgid "You are not allowed to move this post out of the trash." +msgstr "Nemáte dostatečné oprávnění pro obnovení tohoto příspěvku z koše." + +#: wp-admin/upload.php:101 +msgid "Error in restoring from trash..." +msgstr "Během obnovování z koše se objevila chyba..." + +#: wp-admin/upload.php:108 +msgid "You are not allowed to delete this post." +msgstr "Nemáte dostatečné oprávnění pro smazání tohoto příspěvku." + +#: wp-admin/upload.php:167 +msgid "All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first. You can use the <em>Screen Options</em> tab to customize the display of this screen." +msgstr "Všechny mediální soubory, které jste do WordPressu nahráli, jsou ukládány v Knihovně médií, kde je vidíte přehledně seřazené od těch nejnovějších. Pro úpravy výpisu mediálních souborů na této stránce můžete použít záložku <em>Nastavení zobrazených informací</em>." + +#: wp-admin/upload.php:168 +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 "Výchozí přehled mediálních souborů můžete dále třídit s pomocí textových odkazů vlevo nahoře, a to např. podle typu souboru (Obrázky) a stavu jejich přiřazení k příspěvku/stránce (Nepřiřazeno). Dále můžete výběr ještě omezit podle data nahrání výběrem konkrétního měsíce z rozevíracího menu nad výpisem mediálních souborů." + +#: wp-admin/upload.php:169 +msgid "Hovering over a row reveals action links: <em>Edit</em>, <em>Delete Permanently</em>, and <em>View</em>. Clicking <em>Edit</em> or on the media file’s name displays a simple screen to edit that individual file’s metadata. Clicking <em>Delete Permanently</em> will delete the file from the media library (as well as from any posts to which it is currently attached). <em>View</em> will take you to the display page for that file." +msgstr "Když přejedete kurzorem myši přes nějaký řádek ve výpisu mediálních souborů, zobrazí se vám odkazy s různými možnostmi pro správu konkrétního souboru. Okamžité s ním tak můžete provést následující úkony: <em>Upravit</em>, <em>Smazat</em> a <em>Zobrazit</em>. Kliknutím na <em>Upravit</em>, nebo přímo na název souboru, budete přesměrováni na stránku pro detailní úpravy tohoto souboru. Pomocí odkazu <em>Smazat</em> zase můžete soubor rovnou smazat z Knihovny médií (a také ze všech příspěvků, ke kterým je zrovna přiřazen). Poslední možnost <em>Zobrazit</em> vás pak přesměruje na speciální stránku se zobrazením tohoto mediálního souboru na vašem webu." + +#: wp-admin/upload.php:170 +msgid "If a media file has not been attached to any post, you will see that in the <em>Attached To</em> column, and can click on <em>Attach File</em> to launch a small popup that will allow you to search for a post and attach the file." +msgstr "Pokud nebyl mediální soubor zatím přiřazen k žádnému příspěvku/stránce, uvidíte tuto informaci ve sloupečku <em>Přiřazen k</em> a kliknutím na odkaz <em>Přiřadit k příspěvku / stránce</em> se vám pak zobrazí malé okno, kde můžete vyhledat příslušný příspěvek/stránku a mediální soubor k němu přiřadit." + +#: wp-admin/upload.php:172 +msgid "<a href=\"http://codex.wordpress.org/Media_Library_SubPanel\" target=\"_blank\">Media Library Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Media_Library_SubPanel\" target=\"_blank\">Manuál pro práci s Knihovnou médií</a> (anglicky)" + +#: wp-admin/upload.php:195 +#, php-format +msgid "Reattached %d attachment." +msgid_plural "Reattached %d attachments." +msgstr[0] "%d mediální soubor byl přiřazen." +msgstr[1] "%d mediální soubory byly přiřazeny." +msgstr[2] "%d mediálních souborů bylo přiřazeno." + +#: wp-admin/upload.php:200 +#, php-format +msgid "Media attachment permanently deleted." +msgid_plural "%d media attachments permanently deleted." +msgstr[0] "Mediální soubor byl smazán." +msgstr[1] "%d mediální soubory byly smazány." +msgstr[2] "%d mediálních souborů bylo smazáno." + +#: wp-admin/upload.php:205 +#, php-format +msgid "Media attachment moved to the trash." +msgid_plural "%d media attachments moved to the trash." +msgstr[0] "Mediální soubor byl přesunut do koše." +msgstr[1] "%d mediální soubory byl přesunuty do koše." +msgstr[2] "%d mediálních souborů bylo přesunuto do koše." + +#: wp-admin/upload.php:211 +#, php-format +msgid "Media attachment restored from the trash." +msgid_plural "%d media attachments restored from the trash." +msgstr[0] "Mediální soubor byl úspěšně obnoven z koše." +msgstr[1] "%d mediální soubory byly úspěšně obnoveny z koše." +msgstr[2] "%d mediálních souborů bylo úspěšně obnoveno z koše." + +#: wp-admin/upload.php:216 +msgid "Media permanently deleted." +msgstr "Mediální soubory byly smazány." + +#: wp-admin/upload.php:217 +msgid "Error saving media attachment." +msgstr "Nepodařilo se uložit mediální soubor." + +#: wp-admin/upload.php:218 +msgid "Media moved to the trash." +msgstr "Soubor byl přesunut do koše." + +#: wp-admin/upload.php:219 +msgid "Media restored from the trash." +msgstr "Soubory byly obnoveny z koše." + +#: wp-admin/upload.php:243 +#, php-format +msgctxt "uploaded files" +msgid "All <span class=\"count\">(%s)</span>" +msgid_plural "All <span class=\"count\">(%s)</span>" +msgstr[0] "Celkem <span class=\"count\">(%s)</span>" +msgstr[1] "Celkem <span class=\"count\">(%s)</span>" +msgstr[2] "Celkem <span class=\"count\">(%s)</span>" + +#: wp-admin/upload.php:255 +#, php-format +msgctxt "detached files" +msgid "Unattached <span class=\"count\">(%s)</span>" +msgid_plural "Unattached <span class=\"count\">(%s)</span>" +msgstr[0] "Nepřiřazen <span class=\"count\">(%s)</span>" +msgstr[1] "Nepřiřazeny <span class=\"count\">(%s)</span>" +msgstr[2] "Nepřiřazených <span class=\"count\">(%s)</span>" + +#: wp-admin/upload.php:258 +#, php-format +msgctxt "uploaded files" +msgid "Trash <span class=\"count\">(%s)</span>" +msgid_plural "Trash <span class=\"count\">(%s)</span>" +msgstr[0] "Koš <span class=\"count\">(%s)</span>" +msgstr[1] "Koš <span class=\"count\">(%s)</span>" +msgstr[2] "Koš <span class=\"count\">(%s)</span>" + +#: wp-admin/upload.php:310 +#: wp-admin/upload.php:487 +msgid "Attach to a post" +msgstr "Přiřadit k příspěvku" + +#: wp-admin/upload.php:356 +msgid "Scan for lost attachments" +msgstr "Vyhledat ztracené přílohy" + +#. translators: column name in media +#: wp-admin/upload.php:376 +#: wp-admin/upload.php:386 +msgctxt "media column name" +msgid "Media" +msgstr "Média" + +#. translators: column name in media +#: wp-admin/upload.php:377 +#: wp-admin/upload.php:387 +msgctxt "media column name" +msgid "Author" +msgstr "Autor" + +#. translators: column name in media +#: wp-admin/upload.php:378 +#: wp-admin/upload.php:388 +msgctxt "media column name" +msgid "Date Added" +msgstr "Vytvořeno" + +#: wp-admin/user-edit.php:22 +#: wp-admin/user-edit.php:24 +msgid "Invalid user ID." +msgstr "Neplatné ID uživatele." + +#: wp-admin/user-edit.php:29 +msgid "Edit User" +msgstr "Upravit uživatele" + +#: wp-admin/user-edit.php:38 +msgid "Your profile contains information about you (your “account”) as well as some personal options related to using WordPress." +msgstr "Stránka s profilem obsahuje konkrétní informace o vás (respektive vašem „profilu“ na webu) a několik možností vlastních úprav WordPressu." + +#: wp-admin/user-edit.php:39 +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." +msgstr "Kromě jiného si zde můžete změnit heslo, povolit používání klávesových zkratek, změnit barevné schéma administrace a vypnout vizuální editor (WYSIWYG)." + +#: wp-admin/user-edit.php:40 +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 "Uživatelské jméno sice nelze měnit, ale můžete alespoň použít některá další pole pro zadání skutečného jména či přezdívky a nakonec si vybrat, co se bude na webu veřejně zobrazovat." + +#: wp-admin/user-edit.php:41 +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 "Vyplnění některých položek je vyžadováno (je to u nich přímo uvedeno), ostatní jsou pak volitelné. Informace z vašeho profilu budou na webu zobrazovány pouze v případě, že to vaše šablona umožňuje." + +#: wp-admin/user-edit.php:42 +msgid "Remember to click the Update Profile button when you are finished." +msgstr "Nezapomeňte po skončení úprav ještě kliknout na tlačítko Aktualizovat profil." + +#: wp-admin/user-edit.php:44 +msgid "<a href=\"http://codex.wordpress.org/Users_Your_Profile_SubPanel\" target=\"_blank\">Documentation on User Profiles</a>" +msgstr "<a href=\"http://codex.wordpress.org/Users_Your_Profile_SubPanel\" target=\"_blank\">Manuál pro práci s uživatelskými profily</a> (anglicky)" + +#: wp-admin/user-edit.php:66 +msgid "Use https" +msgstr "Použít https" + +#: wp-admin/user-edit.php:67 +msgid "Always use https when visiting the admin" +msgstr "Vždy použít https při návštěvě administrace webu" + +#: wp-admin/user-edit.php:75 +#: wp-admin/user-edit.php:110 +#: wp-admin/user-edit.php:156 +msgid "You do not have permission to edit this user." +msgstr "Nemáte dostatečné oprávnění pro úpravy tohoto uživatele." + +#: wp-admin/user-edit.php:162 +msgid "Important:" +msgstr "Důležité upozornění:" + +#: wp-admin/user-edit.php:162 +msgid "This user has super admin privileges." +msgstr "Tento uživatel má rozšířené pravomoce pro správu sítě webů." + +#: wp-admin/user-edit.php:166 +msgid "User updated." +msgstr "Uživatel byl aktualizován." + +#: wp-admin/user-edit.php:168 +msgid "← Back to Authors and Users" +msgstr "← Zpět na Autory a Uživatele" + +#: wp-admin/user-edit.php:190 +msgid "Personal Options" +msgstr "Osobní nastavení" + +#: wp-admin/user-edit.php:195 +msgid "Visual Editor" +msgstr "Vizuální editor" + +#: wp-admin/user-edit.php:196 +msgid "Disable the visual editor when writing" +msgstr "Zakázat vizuální editor" + +#: wp-admin/user-edit.php:209 +msgid "Enable keyboard shortcuts for comment moderation." +msgstr "Povolit klávesové zkratky pro schvalování komentářů." + +#: wp-admin/user-edit.php:209 +msgid "<a href=\"http://codex.wordpress.org/Keyboard_Shortcuts\">More information</a>" +msgstr "<a href=\"http://codex.wordpress.org/Keyboard_Shortcuts\">Podrobnější informace</a>" + +#: wp-admin/user-edit.php:226 +msgid "Usernames cannot be changed." +msgstr "Uživatelská jména nelze měnit." + +#: wp-admin/user-edit.php:230 +msgid "Role:" +msgstr "Úroveň:" + +#: wp-admin/user-edit.php:243 +#: wp-admin/user-edit.php:245 +msgid "— No role for this site —" +msgstr "— Neregistrovat na tomto webu —" + +#: wp-admin/user-edit.php:249 +msgid "Grant this user super admin privileges for the Network." +msgstr "Přidělit tomuto uživateli rozšířené pravomoce pro správu sítě webů." + +#: wp-admin/user-edit.php:255 +#: wp-admin/user-new.php:222 +msgid "First Name" +msgstr "Jméno" + +#: wp-admin/user-edit.php:260 +#: wp-admin/user-new.php:226 +msgid "Last Name" +msgstr "Příjmení" + +#: wp-admin/user-edit.php:265 +msgid "Nickname" +msgstr "Přezdívka" + +#: wp-admin/user-edit.php:265 +#: wp-admin/user-edit.php:304 +#: wp-admin/user-new.php:212 +#: wp-admin/user-new.php:217 +#: wp-includes/theme-compat/comments.php:78 +#: wp-includes/theme-compat/comments.php:81 +msgid "(required)" +msgstr "(vyžadováno)" + +#: wp-admin/user-edit.php:270 +msgid "Display name publicly as" +msgstr "Veřejně zobrazovat jako" + +#: wp-admin/user-edit.php:300 +msgid "Contact Info" +msgstr "Kontaktní informace" + +#: wp-admin/user-edit.php:310 +#, php-format +msgid "There is a pending change of your e-mail to <code>%1$s</code>. <a href=\"%2$s\">Cancel</a>" +msgstr "Právě probíhá změna emailové adresy na <code>%1$s</code>. <a href=\"%2$s\">Zrušit</a>" + +#: wp-admin/user-edit.php:317 +#: wp-admin/user-new.php:230 +#: wp-includes/comment-template.php:1501 +#: wp-includes/theme-compat/comments.php:84 +msgid "Website" +msgstr "Webová stránka" + +#: wp-admin/user-edit.php:333 +msgid "About Yourself" +msgstr "O vás" + +#: wp-admin/user-edit.php:333 +msgid "About the user" +msgstr "O uživateli" + +#: wp-admin/user-edit.php:337 +msgid "Biographical Info" +msgstr "Osobní informace" + +#: wp-admin/user-edit.php:339 +msgid "Share a little biographical information to fill out your profile. This may be shown publicly." +msgstr "Zde můžete napsat základní informace o sobě (co děláte, co máte rádi atd.), které mohou být zveřejněny." + +#: wp-admin/user-edit.php:347 +msgid "New Password" +msgstr "Nové heslo" + +#: wp-admin/user-edit.php:348 +msgid "If you would like to change the password type a new one. Otherwise leave this blank." +msgstr "Pokud si chcete změnit současné heslo, zadejte nové. Jinak nechte toto pole prázdné." + +#: wp-admin/user-edit.php:349 +msgid "Type your new password again." +msgstr "Zadejte ještě jednou vaše nové heslo." + +#: wp-admin/user-edit.php:368 +msgid "Additional Capabilities" +msgstr "Další možnosti" + +#: wp-admin/user-edit.php:387 +msgid "Update Profile" +msgstr "Aktualizovat profil" + +#: wp-admin/user-edit.php:387 +msgid "Update User" +msgstr "Aktualizovat uživatele" + +#: wp-admin/user-new.php:16 +msgid "Page disabled by the administrator" +msgstr "Stránka byla administrátorem zakázána" + +#: wp-admin/user-new.php:23 +#, php-format +msgid "" +"Hi,\n" +"You've been invited to join '%s' at\n" +"%s as a %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 "" +"Vítejte,\n" +"právě jste byli registrováni na webu '%s'\n" +"(%s) jako %s.\n" +"Pokud nechcete mít registrovaný uživatelský účet na tomto webu, ignorujte prosím\n" +"tento email. Možnost potvrzení registrace automaticky vyprší během několika dní.\n" +"\n" +"Klikněte prosím na následující odkaz pro aktivaci vašeho uživatelského účtu:\n" +"%%s" + +#: wp-admin/user-new.php:75 +#, php-format +msgid "" +"Hi,\n" +"\n" +"You have been invited to join '%s' at\n" +"%s as a %s.\n" +"Please click the following link to confirm the invite:\n" +"%s\n" +msgstr "" +"Vítejte,\n" +"\n" +"právě jste byli registrováni na webu '%s'\n" +"(%s) jako %s.\n" +"Klikněte prosím na následující odkaz pro potvrzení registrace:\n" +"%s\n" + +#: wp-admin/user-new.php:76 +#, php-format +msgid "[%s] Joining confirmation" +msgstr "[%s] Potvrzení registrace" + +#: wp-admin/user-new.php:112 +msgid "To add a new user to your site, fill in the form on this screen. If you’re not sure which role to assign, you can use the link below to review the different roles and their capabilities. Here is a basic overview of roles:" +msgstr "Vyplněním informací na této stránce můžete jednoduše vytvořit nového uživatele. Pokud nevíte jakou úroveň mu přiřadit, použijte raději spodní odkaz vedoucí na stránku, kde si budete moci podrobně prohlédnout přehled uživatelských úrovní a jejich pravomocí. A jaké jsou vlastně základní úrovně ve WordPressu?" + +#: wp-admin/user-new.php:114 +msgid "Administrators have access to all the administration features." +msgstr "Administrátoři mají neomezený přístup ke všem nastavením WordPressu." + +#: wp-admin/user-new.php:115 +msgid "Editors can publish posts, manage posts as well as manage other people’s posts, etc." +msgstr "Šéfredaktoři mohou nejen publikovat a spravovat své vlastní příspěvky, ale i zasahovat do ostatních, atd." + +#: wp-admin/user-new.php:116 +msgid "Authors can publish and manage their own posts." +msgstr "Redaktoři mohou publikovat s spravovat své vlastní příspěvky." + +#: wp-admin/user-new.php:117 +msgid "Contributors can write and manage their posts but not publish posts or upload media files." +msgstr "Spolupracovníci mohou vytvářet a spravovat své příspěvky, ale nemohou je už sami veřejně publikovat, ani např. nahrávat mediální soubory." + +#: wp-admin/user-new.php:118 +msgid "Subscribers can read comments/comment/receive newsletters, etc." +msgstr "Návštěvníci pak jsou vlastně jen zaregistrovaní uživatelé, kteří nemají žádné větší pravomoci, ale spíše drobné výhody (mohou snadněji vkládat komentáře). Pomocí různých pluginů můžete pro návštěvníky zprovoznit nějaké další funkce (např. pravidelné zasílání emailového zpravodaje s novinkami)." + +#: wp-admin/user-new.php:120 +msgid "You must assign a password to the new user, but don’t worry; when they log in for the first time they will be prompted to change it. The username, however, cannot be changed." +msgstr "Každému nově vytvořenému uživateli musíte vybrat nějaké heslo. Není třeba se ale obávat jeho zneužití, protože jakmile se uživatel poprvé přihlásí do administrace WordPressu, objeví se mu výrazné upozornění, aby si heslo změnil. Uživatelské jméno však není možné změnit." + +#: wp-admin/user-new.php:121 +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 do not the password to be included in the welcome email." +msgstr "Všichni noví uživatelé také automaticky obdrží notifikační email s informací, že byli zaregistrováni na vašem webu. V tomto uvítacím emailu je podle výchozího nastavení uvedeno i jejich heslo. Pokud jim však heslo raději nechcete emailem posílat, stačí ve formuláři odškrtnout příslušnou možnost." + +#: wp-admin/user-new.php:122 +msgid "Remember to click the Add User button at the bottom of this screen when you are finished." +msgstr "Nezapomeňte po vyplnění všech potřebných informací ještě kliknout na tlačítko Vytvořit uživatele." + +#: wp-admin/user-new.php:124 +msgid "<a href=\"http://codex.wordpress.org/Users_Add_New_SubPanel\" target=\"_blank\">Documentation on Adding New Users</a>" +msgstr "<a href=\"http://codex.wordpress.org/Users_Add_New_SubPanel\" target=\"_blank\">Manuál pro vytváření uživatelů</a> (anglicky)" + +#: wp-admin/user-new.php:139 +msgid "Invitation email sent to new user. A confirmation link must be clicked before their account is created." +msgstr "Nově vytvořenému uživateli byl odeslán uvítací email s ověřovacím odkazem, na který musí kliknout, aby mohl být jeho uživatelský účet aktivován." + +#: wp-admin/user-new.php:142 +msgid "Invitation email sent to user. A confirmation link must be clicked for them to be added to your site." +msgstr "Uživateli byl odeslán uvítací email s ověřovacím odkazem, na který musí kliknout, aby mohl být registrován na vašem webu." + +#: wp-admin/user-new.php:145 +msgid "User has been added to your site." +msgstr "Uživatel byl registrován na tomto webu." + +#: wp-admin/user-new.php:148 +msgid "That user is already a member of this site." +msgstr "Uživatel je na tomto webu již registrován." + +#: wp-admin/user-new.php:153 +msgid "User added." +msgstr "Uživatel byl vytvořen." + +#: wp-admin/user-new.php:190 +#, php-format +msgid "Users can <a href=\"%1$s\">register themselves</a> or you can manually create users here." +msgstr "Uživatelé se mohou <a href=\"%1$s\">zaregistrovat sami</a> (pokud je to v Nastavení povoleno), nebo je můžete vytvářet ručně." + +#: wp-admin/user-new.php:192 +#, php-format +msgid "Users cannot currently <a href=\"%1$s\">register themselves</a>, but you can manually create users here." +msgstr "Uživatelé se momentálně nemohou <a href=\"%1$s\">zaregistrovat sami</a>, ale můžete je vytvářet ručně." + +#: wp-admin/user-new.php:194 +msgid "You can add new users to your site in two ways:" +msgstr "Nové uživatele můžete na svém webu vytvářet dvěma způsoby:" + +#: wp-admin/user-new.php:194 +msgid "Enter the username and email address of an existing user on this site." +msgstr "Zadejte uživatelské jméno a emailovou adresu uživatele, který již byl na některém webu ve vaší síti registrován." + +#: wp-admin/user-new.php:194 +msgid "Enter the username and the email address of a person who is not already a member of this site. Choose the username carefully, it cannot be changed." +msgstr "Zadejte uživatelské jméno a emailovou adresu osoby, která ještě není registrována na žádném webu ve vaší síti. Uživatelské jméno vybírejte pečlivě, protože ho už nemůžete později změnit." + +#: wp-admin/user-new.php:195 +msgid "That person will be sent an email asking them to click a link confirming the invite. New users will then be sent an email with a randomly generated password and a login link." +msgstr "Již existujícímu uživateli bude odeslán uvítací email s ověřovacím odkazem, na který musí kliknout, aby mohl být registrován i na vašem webu. Novým uživatelům pak bude odeslán uvítací email s náhodně vygenerovaným heslem a odkazem pro přihlášení." + +#. translators: password input field +#: wp-admin/user-new.php:235 +msgid "(twice, required)" +msgstr "(zadejte dvakrát, vyžadováno)" + +#: wp-admin/user-new.php:245 +msgid "Send Password?" +msgstr "Poslat heslo?" + +#: wp-admin/user-new.php:246 +msgid "Send this password to the new user by email." +msgstr "Poslat heslo novému uživateli emailem." + +#: wp-admin/user-new.php:263 +msgid "Skip Confirmation Email" +msgstr "Neodesílat potvrzovací email" + +#: wp-admin/user-new.php:264 +msgid "Site administrators can add a user without sending the confirmation email." +msgstr "Administrátoři s pravomocemi pro správu webů mohou vytvářet uživatele i bez potvrzovacího emailu." + +#: wp-admin/user-new.php:269 +msgid "Add User" +msgstr "Vytvořit uživatele" + +#: wp-admin/users.php:23 +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 when they are logged in, based on their role." +msgstr "Na této stránce si můžete prohlížet všechny existující uživatele na vašem webu. Každý uživatel má jasně definovanou úroveň, kterou mu přiřadil buď Administrátor při jeho ručním vytváření, nebo byla automaticky použita výchozí úroveň (menu Nastavení - Obecné) v případě, kdy se uživatel zaregistroval sám. WordPress rozlišuje 5 základních uživatelských úrovní: Administrátor, Šéfredaktor, Redaktor, Spolupracovník a Návštěvník. Uživatelé s nižší úrovní než Administrátor mají po příhlášení do administrace WordPressu omezené možnosti (podle své konkrétní úrovně) a nevidí tedy všechny položky menu." + +#: wp-admin/users.php:24 +msgid "You can customize the display of information on this screen as you can on other screens, by using the Screen Options tab and the on-screen filters." +msgstr "Vzhled stránky a výpis uživatelů si můžete přizpůsobit stejně tak, jako na dalších podobných stránkách v administraci WordPressu, a to pomocí záložky Nastavení zobrazených informací a horních textových odkazů." + +#: wp-admin/users.php:25 +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 "Pokud chcete vytvořit nového uživatele, stačí kliknout myší na tlačítko Vytvořit uživatele v rozevíracím menu v horní liště, vedle hlavního nadpisu stránky nebo na samostatnou položku hlavního levého menu." + +#: wp-admin/users.php:27 +msgid "<a href=\"http://codex.wordpress.org/Users_Authors_and_Users_SubPanel\" target=\"_blank\">Documentation on Authors and Users</a>" +msgstr "<a href=\"http://codex.wordpress.org/Users_Authors_and_Users_SubPanel\" target=\"_blank\">Manuál pro správu autorů a uživatelů</a> (anglicky)" + +#: wp-admin/users.php:28 +msgid "<a href=\"http://codex.wordpress.org/Roles_and_Capabilities\" target=\"_blank\">Roles and Capabilities Descriptions</a>" +msgstr "<a href=\"http://codex.wordpress.org/Roles_and_Capabilities\" target=\"_blank\">Přehled uživatelských úrovní a pravomocí</a> (anglicky)" + +#: wp-admin/users.php:72 +msgid "You can’t edit that user." +msgstr "Nemůžete upravovat tohoto uživatele." + +#: wp-admin/users.php:94 +#: wp-admin/users.php:141 +msgid "User deletion is not allowed from this screen." +msgstr "Nemůžete mazat uživatele na této stránce." + +#: wp-admin/users.php:104 +#: wp-admin/users.php:151 +msgid "You can’t delete users." +msgstr "Nemůžete mazat uživatele." + +#: wp-admin/users.php:114 +msgid "You can’t delete that user." +msgstr "Nemůžete smazat tohoto uživatele." + +#: wp-admin/users.php:166 +msgid "Delete Users" +msgstr "Smazat uživatele" + +#: wp-admin/users.php:167 +msgid "You have specified these users for deletion:" +msgstr "Chystáte se smazat následující uživatele:" + +#: wp-admin/users.php:175 +#, php-format +msgid "ID #%1s: %2s <strong>The current user will not be deleted.</strong>" +msgstr "ID #%1s: %2s <strong>Aktuálně přihlášený uživatel nebude smazán.</strong>" + +#: wp-admin/users.php:177 +#: wp-admin/users.php:285 +#, php-format +msgid "ID #%1s: %2s" +msgstr "ID #%1s: %2s" + +#: wp-admin/users.php:196 +msgid "What should be done with posts and links owned by this user?" +msgstr "Co udělat s příspěvky a odkazy, které tento uživatel vytvořil?" + +#: wp-admin/users.php:199 +msgid "Delete all posts and links." +msgstr "Smazat všechny příspěvky i odkazy." + +#: wp-admin/users.php:201 +msgid "Attribute all posts and links to:" +msgstr "Převést všechny příspěvky a odkazy na:" + +#: wp-admin/users.php:204 +msgid "Confirm Deletion" +msgstr "Potvrdit smazání" + +#: wp-admin/users.php:206 +msgid "There are no valid users selected for deletion." +msgstr "Není vybrán žádný uživatel ke smazání." + +#: wp-admin/users.php:223 +#: wp-admin/users.php:257 +msgid "You can’t remove users." +msgstr "Nemůžete odstraňovat uživatele." + +#: wp-admin/users.php:272 +msgid "Remove Users from Site" +msgstr "Odstranit uživatele z webu" + +#: wp-admin/users.php:273 +msgid "You have specified these users for removal:" +msgstr "Chystáte se odstranit následující uživatele:" + +#: wp-admin/users.php:281 +#, php-format +msgid "ID #%1s: %2s <strong>The current user will not be removed.</strong>" +msgstr "ID #%1s: %2s <strong>Aktuálně přihlášený uživatel nebude odstraněn.</strong>" + +#: wp-admin/users.php:283 +#, php-format +msgid "ID #%1s: %2s <strong>You don't have permission to remove this user.</strong>" +msgstr "ID #%1s: %2s <strong>Nemáte dostatečné oprávnění pro odstranění tohoto uživatele.</strong>" + +#: wp-admin/users.php:292 +msgid "Confirm Removal" +msgstr "Ano, odstranit uživatele" + +#: wp-admin/users.php:294 +msgid "There are no valid users selected for removal." +msgstr "Není vybrán žádný uživatel, kterého byste mohli odstranit." + +#: wp-admin/users.php:330 +#, php-format +msgid "%s user deleted" +msgid_plural "%s users deleted" +msgstr[0] "%s uživatel byl smazán" +msgstr[1] "%s uživatelé byli smazáni" +msgstr[2] "%s uživatelů bylo smazáno" + +#: wp-admin/users.php:333 +msgid "New user created." +msgstr "Nový uživatel byl vytvořen." + +#: wp-admin/users.php:336 +msgid "Changed roles." +msgstr "Úroveň uživatele byla úspěšně změněna." + +#: wp-admin/users.php:339 +msgid "The current user’s role must have user editing capabilities." +msgstr "Úroveň aktuálního uživatele musí mít povoleny úpravy uživatelů." + +#: wp-admin/users.php:340 +msgid "Other user roles have been changed." +msgstr "Úrovně ostatních uživatelů byly změněny." + +#: wp-admin/users.php:343 +msgid "You can’t delete the current user." +msgstr "Nemůžete smazat aktuálního uživatele." + +#: wp-admin/users.php:344 +msgid "Other users have been deleted." +msgstr "Ostatní uživatelé byli smazáni." + +#: wp-admin/users.php:347 +msgid "User removed from this site." +msgstr "Uživatel byl odstraněn z tohoto webu." + +#: wp-admin/users.php:350 +msgid "You can't remove the current user." +msgstr "Nemůžete odstranit aktuálně přihlášeného uživatele." + +#: wp-admin/users.php:351 +msgid "Other users have been removed." +msgstr "Ostatní uživatelé byli odstraněni." + +#: wp-admin/users.php:391 +#, php-format +msgctxt "users" +msgid "All <span class=\"count\">(%s)</span>" +msgid_plural "All <span class=\"count\">(%s)</span>" +msgstr[0] "Celkem <span class=\"count\">(%s)</span>" +msgstr[1] "Celkem <span class=\"count\">(%s)</span>" +msgstr[2] "Celkem <span class=\"count\">(%s)</span>" + +#. translators: User role name with count +#: wp-admin/users.php:405 +#, php-format +msgid "%1$s <span class=\"count\">(%2$s)</span>" +msgstr "%1$s <span class=\"count\">(%2$s)</span>" + +#: wp-admin/users.php:417 +#: wp-admin/users.php:419 +msgid "Search Users" +msgstr "Hledat uživatele" + +#: wp-admin/users.php:440 +msgid "Change role to…" +msgstr "Změnit úroveň uživatelů na…" + +#: wp-admin/users.php:441 +msgid "Change" +msgstr "Změnit" + +#: wp-admin/users.php:463 +msgid "← Back to All Users" +msgstr "← Zpět na přehled všech uživatelů" + +#: wp-admin/widgets.php:33 +#: wp-includes/functions.php:3057 +msgid "Widgets" +msgstr "Widgety" + +#: wp-admin/widgets.php:37 +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 "Widgety jsou nezávislé prvky s různým obsahem vašeho webu (jejich grafická podoba zcela nahrazuje vlastní zdrojový kód), takže mohou být jednoduše rozmístěny do předem připravených (widgetizovaných) oblastí, které jsou definovány v příslušných souborech šablony (nejčastěji jsou využívány v postranních panelech), a podle toho pak budou bezprostředně zobrazovány i přímo na webu. Widget můžete přesunout do vybrané oblasti uchopením lišty s názvem widgetu kurzorem myši a tažením na zvolené místo. Pouze první oblast je v základním zobrazení na této stránce automaticky rozbalená, zatímco všechny ostatní jsou sbalené. Abyste tedy mohli widget přesunout do nějaké jiné oblasti, musíte ji nejdříve rozbalit, a to kliknutím na lištu s jejím názvem." + +#: wp-admin/widgets.php:38 +msgid "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 "Sekce s názvem Dostupné widgety obsahuje všechny widgety, které můžete na webu používat (další je možné přidat s pomocí různých pluginů). Jakmile konkrétní widget přesunete na příslušné místo ve zvolené oblasti, automaticky se rozbalí související nabídka s jeho možným nastavením, takže widget můžete ještě upravit. Až budete mít vše nastaveno podle svých představ, stačí už jen kliknout na tlačítko Uložit a obsah widgetu se začne automaticky zobrazovat na webu. Kliknutím na tlačítko Smazat pak bude widget z konkrétní oblasti (a tím pádem i z webu) okamžitě odstraněn." + +#: wp-admin/widgets.php:39 +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 "Pokud chcete nějaký widget z aktuálního umístění odstranit, ale možná ho v budoucnu ještě využijete, tak můžete zachovat všechna jeho dosavadní nastavení tak, že ho přesunete do spodní sekce s názvem Neaktivní widgety. Odtud ho pak můžete bez dalších úprav zase kdykoliv vrátit na libovolné místo. Tuto možnost oceníte zejména v případě, kdy chcete použít novou šablonu, která obsahuje méně definovaných oblastí pro widgety, nebo jsou umístěné jinde." + +#: wp-admin/widgets.php:40 +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 "Každý widget můžete použít mnohokrát ve stejné podobě, a to i pro libovolné oblasti. Všechny rozmístěné widgety si můžete pro přehlednost také pojmenovat (není to ale vyžadováno), protože i název widgetu se obvykle na webu zobrazuje." + +#: wp-admin/widgets.php:41 +msgid "Enabling Accessibility Mode, via Screen Options, allows you to use Add and Edit buttons instead of using drag and drop." +msgstr "V záložce Nastavení zobrazených informací je možné zapnout Režim pro správu widgetů se zachováním pravidel přístupnosti webu, takže místo přesunování widgetů pomocí myši můžete widgety spravovat pomocí textových odkazů Vytvořit a Upravit." + +#: wp-admin/widgets.php:42 +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 "Mnoho šablon po prvotní instalaci zobrazuje na webu v některých oblastech různé informace, které však nejsou na této stránce pro správu widgetů v příslušné oblasti automaticky vidět. Jakmile však provedete v konkrétní oblasti první změnu (např. přidání nového widgetu), tak všechny výchozí informace z webu zmizí a pokud tam budete chtít některé zachovat, tak budete muset do oblasti ručně přesunout příslušné widgety ze sekce Dostupné widgety." + +#: wp-admin/widgets.php:45 +msgid "<a href=\"http://codex.wordpress.org/Appearance_Widgets_SubPanel\" target=\"_blank\">Widgets Documentation</a>" +msgstr "<a href=\"http://codex.wordpress.org/Appearance_Widgets_SubPanel\" target=\"_blank\">Manuál pro práci s widgety</a> (anglicky)" + +#: wp-admin/widgets.php:51 +#: wp-admin/widgets.php:372 +msgid "Inactive Widgets" +msgstr "Neaktivní widgety" + +#: wp-admin/widgets.php:143 +msgid "No Sidebars Defined" +msgstr "Žádný postranní panel není definován" + +#: wp-admin/widgets.php:145 +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 <a href=\"http://codex.wordpress.org/Widgetizing_Themes\">follow these instructions</a>." +msgstr "Aktuálně používaná šablona není připravena na použití widgetů. A proto nelze jednoduše upravit postranní panely pomocí webového rozhraní WordPressu. Pokud chcete widgety využívat, musíte nejdříve upravit šablonu podle <a href=\"http://codex.wordpress.org/Widgetizing_Themes\">následujících instrukcí</a>." + +#: wp-admin/widgets.php:265 +#, php-format +msgid "Widget %s" +msgstr "Widget %s" + +#: wp-admin/widgets.php:276 +msgid "Select both the sidebar for this widget and the position of the widget in that sidebar." +msgstr "Vyberte si pro zobrazení tohoto widgetu nejen konkrétní postranní panel, ale i jeho přesné umístění v něm (pořadí)." + +#: wp-admin/widgets.php:314 +msgid "Save Widget" +msgstr "Uložit widget" + +#: wp-admin/widgets.php:330 +msgid "Changes saved." +msgstr "Změny byly uloženy." + +#: wp-admin/widgets.php:334 +msgid "Error while saving." +msgstr "Během ukládání změn se objevila nečekaná chyba." + +#: wp-admin/widgets.php:335 +msgid "Error in displaying the widget settings form." +msgstr "Během zobrazování konkrétního nastavení widgetu se objevila chyba." + +#: wp-admin/widgets.php:358 +msgid "Available Widgets" +msgstr "Dostupné widgety" + +#: wp-admin/widgets.php:360 +msgid "Drag widgets from here to a sidebar on the right to activate them. Drag widgets back here to deactivate them and delete their settings." +msgstr "Přesunutím widgetu vpravo do postranního panelu bude widget automaticky aktivován. Pokud ho sem vrátíte zpět, tak bude deaktivován a všechna jeho nastavení smazána." + +#: wp-admin/widgets.php:375 +msgid "Drag widgets here to remove them from the sidebar but keep their settings." +msgstr "Přesunutím widgetu do tohoto prostoru ho sice odeberete z postranního panelu, ale uchováte si všechna jeho nastavení." + +#: wp-app.php:287 +#, php-format +msgid "AtomPub services are disabled on this site. An admin user can enable them at %s" +msgstr "Služby publikačního protokolu Atom nejsou na tomto webu povoleny. Aktivovat je může administrátor na stránce %s" + +#: wp-app.php:324 +#: wp-app.php:365 +msgid "Sorry, you do not have the right to access this site." +msgstr "Nemáte bohužel dostatečné oprávnění pro přístup na tento web." + +#: wp-app.php:420 +msgid "Sorry, you do not have the right to edit/publish new posts." +msgstr "Nemáte bohužel dostatečné oprávnění pro publikování nebo úpravu příspěvků." + +#: wp-app.php:445 +#: wp-app.php:640 +#: wp-app.php:826 +#: xmlrpc.php:1865 +#: xmlrpc.php:2179 +msgid "Sorry, your entry could not be posted. Something wrong happened." +msgstr "Váš příspěvek bohužel nemohl být uložen. Stalo se něco nečekaného." + +#: wp-app.php:472 +msgid "Sorry, you do not have the right to access this post." +msgstr "Nemáte bohužel dostatečné oprávnění pro přístup k tomuto příspěvku." + +#: wp-app.php:506 +#: wp-app.php:672 +#: wp-app.php:745 +#: wp-app.php:795 +#: xmlrpc.php:1905 +msgid "Sorry, you do not have the right to edit this post." +msgstr "Nemáte bohužel dostatečné oprávnění pro úpravy tohoto příspěvku." + +#: wp-app.php:529 +#: wp-app.php:688 +#: xmlrpc.php:1921 +msgid "For some strange yet very annoying reason, this post could not be edited." +msgstr "Z nějakých neznámých důvodů nelze tento příspěvek upravit." + +#: wp-app.php:551 +#: wp-app.php:709 +#: xmlrpc.php:1955 +msgid "Sorry, you do not have the right to delete this post." +msgstr "Nemáte bohužel dostatečné oprávnění pro smazání tohoto příspěvku." + +#: wp-app.php:559 +#: wp-app.php:724 +#: xmlrpc.php:1960 +msgid "For some strange yet very annoying reason, this post could not be deleted." +msgstr "Z nějakých neznámých důvodů nelze tento příspěvek smazat." + +#: wp-app.php:577 +msgid "Sorry, you do not have permission to upload files." +msgstr "Nemáte bohužel dostatečné opravnění pro nahrávání souborů." + +#: wp-app.php:715 +#: wp-app.php:752 +#: wp-app.php:804 +msgid "Error ocurred while accessing post metadata for file location." +msgstr "Při přístupu k informacím týkajících se umístění souboru se objevila chyba." + +#: wp-comments-post.php:36 +msgid "Sorry, comments are closed for this item." +msgstr "Komentáře k tomuto příspěvku nejsou bohužel povoleny." + +#: wp-comments-post.php:71 +msgid "Sorry, you must be logged in to post a comment." +msgstr "Pro přidání komentáře se musíte nejdříve přihlásit." + +#: wp-comments-post.php:78 +msgid "Error: please fill the required fields (name, email)." +msgstr "Chyba: Zadejte prosím požadované údaje (jméno, email)." + +#: wp-comments-post.php:80 +msgid "Error: please enter a valid email address." +msgstr "Chyba: Zadejte prosím správnou emailovou adresu." + +#: wp-content/plugins/akismet/akismet.php:57 +#: wp-content/plugins/akismet/akismet.php:133 +msgid "Akismet Configuration" +msgstr "Akismet" + +#: wp-content/plugins/akismet/akismet.php:120 +msgid "Your key has been cleared." +msgstr "Váš klíč byl smazán." + +#: wp-content/plugins/akismet/akismet.php:121 +msgid "Your key has been verified. Happy blogging!" +msgstr "Váš klíč byl úspěšně ověřen. Užívejte si WordPress bez spamů!" + +#: wp-content/plugins/akismet/akismet.php:122 +msgid "The key you entered is invalid. Please double-check it." +msgstr "Vložený klíč není patrně správný. Raději ho prosím ještě jednou zkotrolujte." + +#: wp-content/plugins/akismet/akismet.php:123 +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 "Vložený klíč nemohl být ověřen, protože se nám nepodařilo připojit k serveru akismet.com. Zkontrolujte prosím, jestli je všechno správně nastaveno." + +#: wp-content/plugins/akismet/akismet.php:124 +msgid "There was a problem connecting to the Akismet server. Please check your server configuration." +msgstr "Nastal problém s připojením k serveru Akismet. Zkontrolujte prosím nastavení vašeho serveru." + +#: wp-content/plugins/akismet/akismet.php:125 +#, php-format +msgid "Please enter an API key. (<a href=\"%s\" style=\"color:#fff\">Get your key.</a>)" +msgstr "Zadejte API klíč. (<a href=\"%s\" style=\"color:#fff\">Získat vlastní klíč.</a>)" + +#: wp-content/plugins/akismet/akismet.php:126 +msgid "This key is valid." +msgstr "Klíč je správný." + +#: wp-content/plugins/akismet/akismet.php:127 +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 "Uložený klíč byl sice již dříve ověřen, ale v tuto chvíli se bohužel nedaří připojit k serveru akismet.com. Zkontrolujte prosím nastavení vašeho serveru." + +#: wp-content/plugins/akismet/akismet.php:130 +msgid "Options saved." +msgstr "Nastavení bylo uloženo." + +#: wp-content/plugins/akismet/akismet.php:137 +#, php-format +msgid "For many people, <a href=\"%1$s\">Akismet</a> will greatly reduce or even completely eliminate the comment and trackback spam you get on your site. If one does happen to get through, simply mark it as \"spam\" on the moderation screen and Akismet will learn from the mistakes. If you don't have an API key yet, you can get one at <a href=\"%2$s\">Akismet.com</a>." +msgstr "<a href=\"%1$s\">Akismet</a> může výrazně omezit (nebo i zcela eliminovat) komentáře a trackbacky, které jsou na web vkládány v podobě spamu. Pokud se však náhodou stane, že nějaký spam přesto proklouzne a Akismet ho nerozpoznal, stačí ho na stránce pro moderování komentářů jednoduše kliknutím myši označit jako „Spam“. Akismet si to pak automaticky zapamatuje a příště už stejnou chybu neudělá. Pokud ještě nemáte svůj API klíč, získate ho snadno přímo na webu <a href=\"%2$s\">Akismet.com</a> a pak už můžete začít tento užitečný plugin používat." + +#: wp-content/plugins/akismet/akismet.php:139 +msgid "Akismet API Key" +msgstr "API klíč pro Akismet" + +#: wp-content/plugins/akismet/akismet.php:143 +msgid "<a href=\"http://akismet.com/get/\">What is this?</a>" +msgstr "<a href=\"http://akismet.com/get/\">Co to je?</a>" + +#: wp-content/plugins/akismet/akismet.php:145 +msgid "Why might my key be invalid?" +msgstr "Proč je můj klíč nesprávný?" + +#: wp-content/plugins/akismet/akismet.php:146 +msgid "This can mean one of two things, either you copied the key wrong or that the plugin is unable to reach the Akismet servers, which is most often caused by an issue with your web host around firewalls or similar." +msgstr "Tento problém mohou způsobit dvě věci: buď jste špatně zkopírovali (opsali) svůj klíč, nebo se plugin nemůže připojit k serveru Akismet. Tento problém je nejčastěji způsoben chybou poskytovatele hostingu (nastavení firewallu nebo něco podobného)." + +#: wp-content/plugins/akismet/akismet.php:150 +msgid "Automatically discard spam comments on posts older than a month." +msgstr "Automaticky smazat komentářový spam u příspěvků starších než jeden měsíc." + +#: wp-content/plugins/akismet/akismet.php:151 +msgid "Update options »" +msgstr "Aktualizovat nastavení »" + +#: wp-content/plugins/akismet/akismet.php:156 +msgid "Server Connectivity" +msgstr "Dostupnost serverů" + +#: wp-content/plugins/akismet/akismet.php:160 +msgid "Network functions are disabled." +msgstr "Síťové funkce nejsou povoleny." + +#: wp-content/plugins/akismet/akismet.php:161 +#, php-format +msgid "Your web host or server administrator has disabled PHP's <code>fsockopen</code> or <code>gethostbynamel</code> functions. <strong>Akismet cannot work correctly until this is fixed.</strong> Please contact your web host or firewall administrator and give them <a href=\"%s\" target=\"_blank\">this information about Akismet's system requirements</a>." +msgstr "Váš poskytovatel hostingu nebo administrátor serveru zakázal PHP funkce <code>fsockopen</code> nebo <code>gethostbynamel</code>. <strong>Akismet bohužel nemůže správně fungovat, dokud nebude tento problém vyřešen.</strong> Kontaktujte prosím vašeho poskytovatele hostingu nebo správce firewallu a předejte jim následující <a href=\"%s\" target=\"_blank\">informace o systémových požadavcích Akismetu</a>." + +#: wp-content/plugins/akismet/akismet.php:169 +msgid "Unable to reach some Akismet servers." +msgstr "Nepodařilo se připojit k některým serverům Akismetu." + +#: wp-content/plugins/akismet/akismet.php:170 +#, php-format +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 <a href=\"%s\" target=\"_blank\">this information about Akismet and firewalls</a>." +msgstr "Nějaký problém se sítí nebo firewallem blokuje některá připojení vašeho webserveru k serveru Akismet.com. Akismet sice zatím funguje, ale do budoucna to může způsobovat problémy, např. během provozního přetížení sítě. Kontaktujte prosím vašeho poskytovatele hostingu nebo správce firewallu a předejte jim následující <a href=\"%s\" target=\"_blank\">informace o Akismetu a nastavení firewallu</a>." + +#: wp-content/plugins/akismet/akismet.php:174 +msgid "Unable to reach any Akismet servers." +msgstr "Nepodařilo se připojit k žádnému serveru Akismetu." + +#: wp-content/plugins/akismet/akismet.php:175 +#, php-format +msgid "A network problem or firewall is blocking all connections from your web server to Akismet.com. <strong>Akismet cannot work correctly until this is fixed.</strong> Please contact your web host or firewall administrator and give them <a href=\"%s\" target=\"_blank\">this information about Akismet and firewalls</a>." +msgstr "Nějaký problém se sítí nebo firewallem zcela blokuje připojení vašeho webserveru k serveru Akismet.com. <strong>Akismet bohužel nebude fungovat, dokud nebude tento problém vyřešen.</strong> Kontaktujte prosím vašeho poskytovatele hostingu nebo správce firewallu a předejte jim následující <a href=\"%s\" target=\"_blank\">informace o Akismetu a nastavení firewallu</a>." + +#: wp-content/plugins/akismet/akismet.php:179 +msgid "All Akismet servers are available." +msgstr "Všechny servery Akismetu jsou dostupné." + +#: wp-content/plugins/akismet/akismet.php:180 +msgid "Akismet is working correctly. All servers are accessible." +msgstr "Akismet funguje správně. Všechny servery jsou dostupné." + +#: wp-content/plugins/akismet/akismet.php:185 +msgid "Unable to find Akismet servers." +msgstr "Nepodařilo se nalézt servery Akismetu." + +#: wp-content/plugins/akismet/akismet.php:186 +#, php-format +msgid "A DNS problem or firewall is preventing all access from your web server to Akismet.com. <strong>Akismet cannot work correctly until this is fixed.</strong> Please contact your web host or firewall administrator and give them <a href=\"%s\" target=\"_blank\">this information about Akismet and firewalls</a>." +msgstr "Nějaký problém s DNS nebo firewallem znemožňuje jakýkoli přístup vašeho webserveru k serveru Akismet.com. <strong>Akismet bohužel nebude fungovat, dokud nebude tento problém vyřešen.</strong> Kontaktujte prosím vašeho poskytovatele hostingu nebo správce firewallu a předejte jim následující <a href=\"%s\" target=\"_blank\">informace o Akismetu a nastavení firewallu</a>." + +#: wp-content/plugins/akismet/akismet.php:194 +msgid "Akismet server" +msgstr "Servery Akismetu" + +#: wp-content/plugins/akismet/akismet.php:194 +msgid "Network Status" +msgstr "Stav" + +#: wp-content/plugins/akismet/akismet.php:203 +msgid "No problems" +msgstr "Dostupný" + +#: wp-content/plugins/akismet/akismet.php:203 +msgid "Obstructed" +msgstr "Zablokováno" + +#: wp-content/plugins/akismet/akismet.php:211 +#, php-format +msgid "Last checked %s ago." +msgstr "Doba od poslední kontroly: %s." + +#: wp-content/plugins/akismet/akismet.php:212 +msgid "Check network status »" +msgstr "Ověřit aktuální dostupnost serverů »" + +#: wp-content/plugins/akismet/akismet.php:222 +msgid "Akismet Stats" +msgstr "Statistika Akismet" + +#: wp-content/plugins/akismet/akismet.php:333 +msgid "Akismet is almost ready." +msgstr "Akismet je téměř připraven." + +#: wp-content/plugins/akismet/akismet.php:333 +#, php-format +msgid "You must <a href=\"%1$s\">enter your Akismet API key</a> for it to work." +msgstr "Aby vše správně fungovalo, musíte ještě <a href=\"%1$s\">zadat svůj API klíč</a>." + +#: wp-content/plugins/akismet/akismet.php:341 +msgid "Akismet has detected a problem." +msgstr "U Akismetu se objevil nějaký problém." + +#: wp-content/plugins/akismet/akismet.php:341 +#, php-format +msgid "A server or network problem is preventing Akismet from working correctly. <a href=\"%1$s\">Click here for more information</a> about how to fix the problem." +msgstr "Patrně jde o potíže se serverem nebo počítačovou sítí, které znemožnily správné fungování Akismetu. <a href=\"%1$s\">Kliknutím získáte podrobnější informace</a> o tomto problému a možnostech jeho řešení." + +#: wp-content/plugins/akismet/akismet.php:644 +#, php-format +msgid "Akismet Spam (%s)" +msgstr "Akismet Spam (%s)" + +#: wp-content/plugins/akismet/akismet.php:646 +#: wp-content/plugins/akismet/akismet.php:648 +msgid "Akismet Spam" +msgstr "Akismet Spam" + +#: wp-content/plugins/akismet/akismet.php:658 +#: wp-content/plugins/akismet/akismet.php:677 +msgid "You do not have sufficient permission to moderate comments." +msgstr "Nemáte dostatečné oprávnění pro moderování komentářů." + +#: wp-content/plugins/akismet/akismet.php:689 +#, php-format +msgid "%1$s comments recovered." +msgstr "Obnovené komentáře: %1$s." + +#: wp-content/plugins/akismet/akismet.php:693 +msgid "All spam deleted." +msgstr "Všechny spamy byly smazány." + +#: wp-content/plugins/akismet/akismet.php:741 +msgid "Caught Spam" +msgstr "Antispamová kontrola" + +#: wp-content/plugins/akismet/akismet.php:746 +#, php-format +msgid "Akismet has caught <strong>%1$s spam</strong> for you since you first installed it." +msgstr "Od instalace tohoto pluginu zachytil Akismet celkem <strong>%1$s spamů</strong>." + +#: wp-content/plugins/akismet/akismet.php:753 +msgid "You have no spam currently in the queue. Must be your lucky day. :)" +msgstr "Dnes na vás nečeká ve frontě ke schválení žádný spam. Šťastný den. :)" + +#: wp-content/plugins/akismet/akismet.php:756 +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 "Můžete smazat jedním kliknutím všechny spamy, které jsou uloženy ve vaší databázi. Tato operace se však nedá vrátit zpět, takže doporučujeme důkladně tyto mazané komentáře zkontrolovat. Všechny komentáře označené jako spam budou automaticky odstraněny po 15 dnech, takže se jejich mazáním nemusíte vůbec zabývat." + +#: wp-content/plugins/akismet/akismet.php:762 +#: wp-content/plugins/akismet/akismet.php:940 +#, php-format +msgid "There are currently %1$s comments identified as spam." +msgstr "Momentálně máte %1$s komentářů označených jako spam." + +#: wp-content/plugins/akismet/akismet.php:762 +#: wp-content/plugins/akismet/akismet.php:940 +msgid "Delete all" +msgstr "Smazat všechny" + +#: wp-content/plugins/akismet/akismet.php:771 +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 "Zde je přehled posledních komentářů, které Akismet označil jako spam. Pokud jsou některé komentáře označeny chybně jako spam, tak u nich zaškrtněte možnost \"Není spam\" a výběr nakonec potvrďte dole na stránce kliknutím na tlačítko \"Vybrané komentáře označit jako korektní\". Akismet si to zapamatuje a přístě již tuto chybu neudělá. Raději zachycené spamy občas zkontrolujte, protože budou vždy po 15 dnech všechny automaticky smazány." + +#: wp-content/plugins/akismet/akismet.php:802 +msgid "All" +msgstr "Celkem" + +#: wp-content/plugins/akismet/akismet.php:825 +msgid "Search Spam »" +msgstr "Hledat spam »" + +#: wp-content/plugins/akismet/akismet.php:832 +#: wp-content/plugins/akismet/akismet.php:899 +#: wp-includes/link-template.php:1596 +msgid "« Previous Page" +msgstr "« Předchozí stránka" + +#: wp-content/plugins/akismet/akismet.php:853 +#: wp-content/plugins/akismet/akismet.php:920 +#: wp-includes/link-template.php:1597 +msgid "Next Page »" +msgstr "Další stránka »" + +#: wp-content/plugins/akismet/akismet.php:875 +msgid "IP:" +msgstr "IP:" + +#: wp-content/plugins/akismet/akismet.php:881 +msgid "Not Spam" +msgstr "Není spam" + +#: wp-content/plugins/akismet/akismet.php:926 +msgid "De-spam marked comments »" +msgstr "Vybrané komentáře označit jako korektní »" + +#: wp-content/plugins/akismet/akismet.php:928 +msgid "Comments you de-spam will be submitted to Akismet as mistakes so it can learn and get better." +msgstr "Komentáře, které označíte jako korektní, budou automaticky oznámeny autorům Akismetu a pomohou do budoucna zlepšit funkce tohoto antispamu." + +#: wp-content/plugins/akismet/akismet.php:958 +msgid "Spam" +msgstr "Spam" + +#: wp-content/plugins/akismet/akismet.php:964 +#, php-format +msgid "<a href=\"%1$s\">Akismet</a> has protected your site from <a href=\"%2$s\">%3$s spam comments</a>." +msgstr "<a href=\"%1$s\">Akismet</a> ochránil váš web před <a href=\"%2$s\">%3$s útoky komentářového spamu</a>." + +#: wp-content/plugins/akismet/akismet.php:982 +#, php-format +msgid "<a href=\"%1$s\">Akismet</a> has protected your site from %2$s spam comment already," +msgid_plural "<a href=\"%1$s\">Akismet</a> has protected your site from %2$s spam comments already," +msgstr[0] "<a href=\"%1$s\">Akismet</a> už ochránil váš web před %2$s útokem komentářového spamu." +msgstr[1] "<a href=\"%1$s\">Akismet</a> už ochránil váš web před %2$s útoky komentářového spamu." +msgstr[2] "<a href=\"%1$s\">Akismet</a> už ochránil váš web před %2$s útoky komentářového spamu." + +#: wp-content/plugins/akismet/akismet.php:987 +#, php-format +msgid "<a href=\"%1$s\">Akismet</a> blocks spam from getting to your blog," +msgstr "<a href=\"%1$s\">Akismet</a> blokuje komentářový spam, aby se nezobrazoval na vašem webu." + +#: wp-content/plugins/akismet/akismet.php:992 +#, php-format +msgid "and there's <a href=\"%2$s\">%1$s comment</a> in your spam queue right now." +msgid_plural "and there are <a href=\"%2$s\">%1$s comments</a> in your spam queue right now." +msgstr[0] "V tuto chvíli máte ve spamovém koši <a href=\"%2$s\">%1$s komentářový spam</a>." +msgstr[1] "V tuto chvíli máte ve spamovém koši <a href=\"%2$s\">%1$s komentářové spamy</a>." +msgstr[2] "V tuto chvíli máte ve spamovém koši <a href=\"%2$s\">%1$s komentářových spamů</a>." + +#: wp-content/plugins/akismet/akismet.php:997 +#, php-format +msgid "but there's nothing in your <a href='%1$s'>spam queue</a> at the moment." +msgstr "V tuto chvíli není <a href='%1$s'>ve spamovém koši</a> žádný komentářový spam." + +#: wp-content/plugins/akismet/akismet.php:1000 +#, php-format +msgid "%1$s %2$s|akismet_rightnow" +msgstr "%1$s %2$s|akismet_rightnow" + +#: wp-content/plugins/akismet/akismet.php:1017 +msgid "Recheck Queue for Spam" +msgstr "Překontrolovat komentáře, zda neobsahují spam" + +#: wp-content/plugins/akismet/akismet.php:1034 +msgid "Check for Spam" +msgstr "Překontrolovat komentáře, zda neobsahují spam" + +#: wp-content/plugins/akismet/akismet.php:1110 +#, php-format +msgid "%1$s %2$sspam comments%3$s %4$sblocked by%5$s<br />%6$sAkismet%7$s" +msgstr "%1$s %2$sspamů%3$s %4$szachytil%5$s<br />%6$sAkismet%7$s" + +#: wp-content/plugins/akismet/akismet.php:1134 +msgid "Spam Blocked" +msgstr "Boj proti spamu" + +#: wp-content/plugins/akismet/akismet.php:1172 +msgid "spam comments" +msgstr "komentářové spamy" + +#: wp-content/plugins/akismet/akismet.php:1172 +msgid "blocked by" +msgstr "blokováno" + +#: wp-includes/atomlib.php:133 +#, php-format +msgid "XML error: %s at line %d" +msgstr "Chyba v XML: %s na řádku %d" + +#: wp-includes/author-template.php:55 +msgid "Use <code>get_the_author()</code> instead if you do not want the value echoed." +msgstr "Pokud nechcete autora přímo zobrazit, použijte raději funkci <code>get_the_author()</code>." + +#: wp-includes/author-template.php:141 +#, php-format +msgid "Visit %s’s website" +msgstr "Navštívit web %s" + +#: wp-includes/author-template.php:207 +#: wp-includes/author-template.php:327 +#, php-format +msgid "Posts by %s" +msgstr "Příspěvky od %s" + +#: wp-includes/bookmark-template.php:82 +#, php-format +msgid "Last updated: %s" +msgstr "Poslední aktualizace: %s" + +#: wp-includes/bookmark-template.php:206 +msgid "Bookmarks" +msgstr "Záložky" + +#: wp-includes/capabilities.php:722 +msgid "Usage of user levels by plugins and themes is deprecated. Use roles and capabilities instead." +msgstr "Starý systém číslovaných uživatelských úrovní používaný v pluginech a šablonách již není nadále podporován. Použijte místo něj raději současné uživatelské úrovně fungující na základě přidělování jednotlivých pravomocí." + +#: wp-includes/category-template.php:70 +#: wp-includes/category-template.php:195 +#: wp-includes/category-template.php:198 +#: wp-includes/category-template.php:205 +#: wp-includes/category-template.php:218 +#: wp-includes/category-template.php:221 +#: wp-includes/category-template.php:228 +#, php-format +msgid "View all posts in %s" +msgstr "Zobrazit všechny příspěvky z rubriky %s" + +#: wp-includes/category-template.php:454 +msgid "No categories" +msgstr "Žádné rubriky" + +#: wp-includes/category-template.php:602 +#, php-format +msgid "%s topic" +msgid_plural "%s topics" +msgstr[0] "%s příspěvek" +msgstr[1] "%s příspěvky" +msgstr[2] "%s příspěvků" + +#: wp-includes/category-template.php:852 +msgid "Tags: " +msgstr "Štítky:" + +#: wp-includes/class-http.php:244 +msgid "A valid URL was not provided." +msgstr "Nebyla zadána platná URL adresa." + +#: wp-includes/class-http.php:247 +msgid "User has blocked requests through HTTP." +msgstr "Uživatel zablokoval požadavky přes HTTP protokol." + +#: wp-includes/class-http.php:753 +#: wp-includes/class-http.php:1420 +#: wp-includes/class-http.php:1437 +msgid "Too many redirects." +msgstr "Příliš mnoho podmínek pro přesměrování." + +#: wp-includes/class-http.php:833 +#: wp-includes/class-http.php:987 +#, php-format +msgid "Malformed URL: %s" +msgstr "Špatné URL: %s" + +#: wp-includes/class-http.php:863 +#: wp-includes/class-http.php:1048 +#, php-format +msgid "Could not open handle for fopen() to %s" +msgstr "Nepodařilo se otevřít připojení pomocí fopen() k %s" + +#: wp-includes/class-pop3.php:83 +msgid "No server specified" +msgstr "Nebyl specifikován žádný server" + +#: wp-includes/class-pop3.php:91 +#: wp-includes/class-pop3.php:103 +#: wp-includes/class-pop3.php:124 +#: wp-includes/class-pop3.php:247 +#: wp-includes/class-pop3.php:301 +#: wp-includes/class-pop3.php:312 +#: wp-includes/class-pop3.php:360 +#: wp-includes/class-pop3.php:394 +#: wp-includes/class-pop3.php:427 +#: wp-includes/class-pop3.php:526 +#: wp-includes/class-pop3.php:549 +msgid "Error " +msgstr "Chyba" + +#: wp-includes/class-pop3.php:116 +msgid "no login ID submitted" +msgstr "nebylo odesláno přihlašovací ID" + +#: wp-includes/class-pop3.php:119 +#: wp-includes/class-pop3.php:139 +msgid "connection not established" +msgstr "nepodařilo se navázat spojení" + +#: wp-includes/class-pop3.php:136 +#: wp-includes/class-pop3.php:172 +msgid "No password submitted" +msgstr "Nebylo zadáno heslo" + +#: wp-includes/class-pop3.php:144 +msgid "Authentication failed" +msgstr "Přihlášení se nezdařilo" + +#: wp-includes/class-pop3.php:163 +#: wp-includes/class-pop3.php:206 +#: wp-includes/class-pop3.php:231 +#: wp-includes/class-pop3.php:273 +#: wp-includes/class-pop3.php:347 +#: wp-includes/class-pop3.php:387 +#: wp-includes/class-pop3.php:417 +#: wp-includes/class-pop3.php:451 +#: wp-includes/class-pop3.php:514 +#: wp-includes/class-pop3.php:582 +msgid "No connection to server" +msgstr "Není navázáno připojení k serveru" + +#: wp-includes/class-pop3.php:169 +msgid "No login ID submitted" +msgstr "Nebylo odesláno přihlašovací ID" + +#: wp-includes/class-pop3.php:177 +msgid "No server banner" +msgstr "Žádný serverový banner" + +#: wp-includes/class-pop3.php:177 +#: wp-includes/class-pop3.php:187 +msgid "abort" +msgstr "zrušit" + +#: wp-includes/class-pop3.php:187 +msgid "apop authentication failed" +msgstr "přihlášení pomocí apop se nezdařilo" + +#: wp-includes/class-pop3.php:324 +msgid "Premature end of list" +msgstr "Předčasné ukončení přehledu" + +#: wp-includes/class-pop3.php:457 +msgid "Empty command string" +msgstr "Prázdný příkaz" + +#: wp-includes/class-pop3.php:477 +msgid "connection does not exist" +msgstr "připojení neexistuje" + +#: wp-includes/class-pop3.php:587 +msgid "No msg number submitted" +msgstr "Žádné číslo zprávy nebylo odesláno" + +#: wp-includes/class-pop3.php:593 +msgid "Command failed " +msgstr "Realizace příkazu se nezdařila " + +#: wp-includes/classes.php:1347 +#, php-format +msgid "View all posts filed under %s" +msgstr "Zobrazit všechny příspěvky zařazené do rubriky %s" + +#: wp-includes/classes.php:1362 +#, php-format +msgid "Feed for all posts filed under %s" +msgstr "RSS zdroj pro všechny příspěvky zažazené do rubriky %s" + +#: wp-includes/comment-template.php:30 +#: wp-includes/theme.php:236 +msgid "Anonymous" +msgstr "Anonymní" + +#: wp-includes/comment-template.php:584 +#: wp-includes/comment-template.php:951 +msgid "% Comments" +msgstr "Komentáře: %" + +#: wp-includes/comment-template.php:586 +#: wp-includes/comment-template.php:949 +msgid "No Comments" +msgstr "Žádné komentáře" + +#: wp-includes/comment-template.php:588 +#: wp-includes/comment-template.php:950 +msgid "1 Comment" +msgstr "1 komentář" + +#: wp-includes/comment-template.php:731 +msgid "Use <code>get_trackback_url()</code> instead if you do not want the value echoed." +msgstr "Pokud nechcete příslušnou URL adresu pro trackbacky přímo zobrazit, použijte raději funkci <code>get_trackback_url()</code>." + +#: wp-includes/comment-template.php:952 +msgid "Comments Off" +msgstr "Komentáře nejsou povoleny" + +#: wp-includes/comment-template.php:962 +msgid "Enter your password to view comments." +msgstr "Pro zobrazení komentářů zadejte heslo." + +#: wp-includes/comment-template.php:989 +#, php-format +msgid "Comment on %s" +msgstr "Komentáře k příspěvku %s" + +#: wp-includes/comment-template.php:1015 +msgid "Log in to Reply" +msgstr "Pro vložení odpovědi na komentář se musíte přihlásit" + +#: wp-includes/comment-template.php:1075 +msgid "Leave a Comment" +msgstr "Napsat komentář" + +#: wp-includes/comment-template.php:1076 +msgid "Log in to leave a Comment" +msgstr "Pro vložení komentáře se musíte přihlásit" + +#: wp-includes/comment-template.php:1115 +msgid "Click here to cancel reply." +msgstr "Odpověď na komentář zrušíte zde." + +#: wp-includes/comment-template.php:1171 +#: wp-includes/comment-template.php:1515 +#: wp-includes/theme-compat/comments.php:59 +msgid "Leave a Reply" +msgstr "Napsat komentář" + +#: wp-includes/comment-template.php:1172 +#: wp-includes/comment-template.php:1516 +#: wp-includes/theme-compat/comments.php:59 +#, php-format +msgid "Leave a Reply to %s" +msgstr "Napsat komentář k %s" + +#: wp-includes/comment-template.php:1329 +#, php-format +msgid "<cite class=\"fn\">%s</cite> <span class=\"says\">says:</span>" +msgstr "<cite class=\"fn\">%s</cite> <span class=\"says\">napsal:</span>" + +#: wp-includes/comment-template.php:1332 +msgid "Your comment is awaiting moderation." +msgstr "Komentář čeká na schválení." + +#. translators: 1: date, 2: time +#: wp-includes/comment-template.php:1339 +#, php-format +msgid "%1$s at %2$s" +msgstr "%1$s v %2$s" + +#: wp-includes/comment-template.php:1339 +msgid "(Edit)" +msgstr "(Upravit)" + +#: wp-includes/comment-template.php:1499 +msgid "Email" +msgstr "Emailová adresa" + +#: wp-includes/comment-template.php:1505 +#, php-format +msgid "Required fields are marked %s" +msgstr "Vyžadované informace jsou označeny %s" + +#: wp-includes/comment-template.php:1509 +#: wp-includes/theme-compat/comments.php:66 +#, php-format +msgid "You must be <a href=\"%s\">logged in</a> to post a comment." +msgstr "Pro přidání komentáře musíte <a href=\"%s\">být přihlášeni</a>." + +#: wp-includes/comment-template.php:1510 +#, php-format +msgid "Logged in as <a href=\"%1$s\">%2$s</a>. <a href=\"%3$s\" title=\"Log out of this account\">Log out?</a>" +msgstr "Jste přihlášeni jako <a href=\"%1$s\">%2$s</a>. Chcete se <a href=\"%3$s\" title=\"Odhlásit se z tohoto účtu\">odhlásit</a>?" + +#: wp-includes/comment-template.php:1511 +msgid "Your email address will not be published." +msgstr "Vaše emailová adresa nebude zveřejněna." + +#: wp-includes/comment-template.php:1512 +#, php-format +msgid "You may use these <abbr title=\"HyperText Markup Language\">HTML</abbr> tags and attributes: %s" +msgstr "Můžete používat následující <abbr title=\"HyperText Markup Language\">HTML</abbr> značky a atributy: %s" + +#: wp-includes/comment-template.php:1517 +msgid "Cancel reply" +msgstr "Zrušit odpověď na komentář" + +#: wp-includes/comment-template.php:1518 +msgid "Post Comment" +msgstr "Odeslat komentář" + +#: wp-includes/comment.php:317 +msgid "Unapproved" +msgstr "Odmítnuté" + +#: wp-includes/comment.php:558 +#: wp-includes/comment.php:560 +msgid "Duplicate comment detected; it looks as though you’ve already said that!" +msgstr "Tento komentář je patrně duplicitní; možná jste ho již jednou odeslali?" + +#: wp-includes/comment.php:618 +#: wp-includes/comment.php:620 +msgid "You are posting comments too quickly. Slow down." +msgstr "Odesíláte komentáře moc rychle po sobě. Zpomalte trochu." + +#: wp-includes/comment.php:1339 +msgid "Could not update comment status" +msgstr "Nepodařilo se aktualizovat stav komentáře" + +#: wp-includes/cron.php:139 +msgid "This argument has changed to an array to match the behavior of the other cron functions." +msgstr "Parametr funkce byl změněn na pole, aby se přizpůsobil fungování dalších funkcí zajišťujících automatické spouštění různých skriptů (cron)." + +#: wp-includes/cron.php:302 +msgid "Once Hourly" +msgstr "Jednou za hodinu" + +#: wp-includes/cron.php:303 +msgid "Twice Daily" +msgstr "Dvakrát denně" + +#: wp-includes/cron.php:304 +msgid "Once Daily" +msgstr "Jednou denně" + +#: wp-includes/default-widgets.php:18 +msgid "Your site’s WordPress Pages" +msgstr "Seznam všech stránek vytvořených ve WordPressu" + +#: wp-includes/default-widgets.php:69 +msgid "Sort by:" +msgstr "Řadit podle:" + +#: wp-includes/default-widgets.php:71 +msgid "Page title" +msgstr "Název stránky" + +#: wp-includes/default-widgets.php:72 +msgid "Page order" +msgstr "Pořadí stránky" + +#: wp-includes/default-widgets.php:73 +msgid "Page ID" +msgstr "ID stránky" + +#: wp-includes/default-widgets.php:77 +msgid "Exclude:" +msgstr "Vynechat:" + +#: wp-includes/default-widgets.php:79 +msgid "Page IDs, separated by commas." +msgstr "ID stránek, oddělené čárkami." + +#: wp-includes/default-widgets.php:94 +msgid "Your blogroll" +msgstr "Vaše odkazy" + +#: wp-includes/default-widgets.php:109 +#: wp-includes/default-widgets.php:144 +msgid "All Links" +msgstr "Všechny odkazy" + +#: wp-includes/default-widgets.php:142 +msgid "Select Link Category" +msgstr "Vyberte rubriku odkazů" + +#: wp-includes/default-widgets.php:155 +msgid "Show Link Image" +msgstr "Zobrazit obrázek u odkazu" + +#: wp-includes/default-widgets.php:157 +msgid "Show Link Name" +msgstr "Zobrazit název odkazu" + +#: wp-includes/default-widgets.php:159 +msgid "Show Link Description" +msgstr "Zobrazit popis odkazu" + +#: wp-includes/default-widgets.php:161 +msgid "Show Link Rating" +msgstr "Zobrazit hodnocení odkazu" + +#: wp-includes/default-widgets.php:175 +msgid "A search form for your site" +msgstr "Jednoduchý vyhledávací formulář" + +#: wp-includes/default-widgets.php:218 +msgid "A monthly archive of your site’s posts" +msgstr "Archiv příspěvků přehledně roztříděných podle jednotlivých měsíců" + +#: wp-includes/default-widgets.php:234 +msgid "Select Month" +msgstr "Vybrat měsíc" + +#: wp-includes/default-widgets.php:265 +#: wp-includes/default-widgets.php:497 +msgid "Show post counts" +msgstr "Zobrazit počet příspěvků" + +#: wp-includes/default-widgets.php:267 +msgid "Display as a drop down" +msgstr "Zobrazit jako rozbalovací menu" + +#: wp-includes/default-widgets.php:283 +msgid "Log in/out, admin, feed and WordPress links" +msgstr "Přihlášení/odhlášení, administrace, RSS zdroj a oficiální odkazy WordPressu" + +#: wp-includes/default-widgets.php:284 +#: wp-includes/default-widgets.php:289 +#: wp-includes/theme-compat/sidebar.php:69 +msgid "Meta" +msgstr "Další informace" + +#: wp-includes/default-widgets.php:298 +msgid "Syndicate this site using RSS 2.0" +msgstr "Sledovat aktuální obsah tohoto webu pomocí RSS 2.0" + +#: wp-includes/default-widgets.php:298 +msgid "Entries <abbr title=\"Really Simple Syndication\">RSS</abbr>" +msgstr "<abbr title=\"Really Simple Syndication\">RSS</abbr>" + +#: wp-includes/default-widgets.php:299 +msgid "The latest comments to all posts in RSS" +msgstr "Nejnovější komentáře k příspěvkům v RSS" + +#: wp-includes/default-widgets.php:299 +msgid "Comments <abbr title=\"Really Simple Syndication\">RSS</abbr>" +msgstr "<abbr title=\"Really Simple Syndication\">RSS</abbr> komentářů" + +#: wp-includes/default-widgets.php:300 +#: wp-includes/theme-compat/sidebar.php:75 +msgid "Powered by WordPress, state-of-the-art semantic personal publishing platform." +msgstr "Používáme WordPress, nejmodernější sémantický osobní redakční systém." + +#: wp-includes/default-widgets.php:331 +msgid "A calendar of your site’s posts" +msgstr "Kalendář publikovaných příspěvků" + +#: wp-includes/default-widgets.php:332 +#: wp-includes/general-template.php:1135 +msgid "Calendar" +msgstr "Kalendář" + +#: wp-includes/default-widgets.php:372 +msgid "Arbitrary text or HTML" +msgstr "Běžný text nebo HTML (nikoliv PHP kód)" + +#: wp-includes/default-widgets.php:374 +msgid "Text" +msgstr "Text" + +#: wp-includes/default-widgets.php:409 +msgid "Automatically add paragraphs" +msgstr "Automaticky vytvářet odstavce" + +#: wp-includes/default-widgets.php:422 +msgid "A list or dropdown of categories" +msgstr "Seznam nebo rozbalovací menu s rubrikami" + +#: wp-includes/default-widgets.php:441 +msgid "Select Category" +msgstr "Vybrat rubriku" + +#: wp-includes/default-widgets.php:494 +msgid "Show as dropdown" +msgstr "Zobrazit jako rozbalovací menu" + +#: wp-includes/default-widgets.php:500 +msgid "Show hierarchy" +msgstr "Zobrazit strukturu" + +#: wp-includes/default-widgets.php:514 +msgid "The most recent posts on your site" +msgstr "Přehled nejnovějších příspěvků" + +#: wp-includes/default-widgets.php:515 +#: wp-includes/default-widgets.php:537 +msgid "Recent Posts" +msgstr "Nejnovější příspěvky" + +#: wp-includes/default-widgets.php:591 +msgid "Number of posts to show:" +msgstr "Počet zobrazených příspěvků:" + +#: wp-includes/default-widgets.php:605 +msgid "The most recent comments" +msgstr "Přehled nejnovějších komentářů" + +#. translators: comments widget: 1: comment author, 2: post link +#: wp-includes/default-widgets.php:655 +#, php-format +msgctxt "widgets" +msgid "%1$s on %2$s" +msgstr "%1$s u %2$s" + +#: wp-includes/default-widgets.php:700 +msgid "Entries from any RSS or Atom feed" +msgstr "Příspěvky z libovolného RSS/Atom zdroje" + +#: wp-includes/default-widgets.php:740 +msgid "Syndicate this content" +msgstr "Sledovat aktuální obsah tohoto webu pomocí RSS" + +#: wp-includes/default-widgets.php:804 +msgid "An error has occurred; the feed is probably down. Try again later." +msgstr "Objevila se chyba, RSS zdroj je pravděpodobně mimo provoz. Zkuste to později." + +#: wp-includes/default-widgets.php:818 +msgid "Untitled" +msgstr "Bez názvu" + +#: wp-includes/default-widgets.php:901 +#, php-format +msgid "RSS Error: %s" +msgstr "Chyba RSS zdroje: %s" + +#: wp-includes/default-widgets.php:905 +msgid "Enter the RSS feed URL here:" +msgstr "Zadejte URL adresu RSS zdroje:" + +#: wp-includes/default-widgets.php:908 +msgid "Give the feed a title (optional):" +msgstr "Název RSS zdroje (volitelné):" + +#: wp-includes/default-widgets.php:911 +msgid "How many items would you like to display?" +msgstr "Kolik položek chcete zobrazit?" + +#: wp-includes/default-widgets.php:920 +msgid "Display item content?" +msgstr "Zobrazit obsah?" + +#: wp-includes/default-widgets.php:923 +msgid "Display item author if available?" +msgstr "Zobrazit autora (je-li k dispozici)?" + +#: wp-includes/default-widgets.php:926 +msgid "Display item date?" +msgstr "Zobrazit datum?" + +#: wp-includes/default-widgets.php:992 +msgid "Your most used tags in cloud format" +msgstr "Nejpoužívanější štítky zobrazené ve formě shluku" + +#: wp-includes/default-widgets.php:993 +msgid "Tag Cloud" +msgstr "Shluk štítků" + +#: wp-includes/default-widgets.php:1031 +msgid "Taxonomy:" +msgstr "Taxonomie:" + +#: wp-includes/default-widgets.php:1059 +msgid "Use this widget to add one of your custom menus as a widget." +msgstr "Použitím tohoto widgetu můžete zobrazit vytvořené menu na příslušném místě vašeho webu." + +#: wp-includes/default-widgets.php:1060 +msgid "Custom Menu" +msgstr "Menu" + +#: wp-includes/default-widgets.php:1095 +#, php-format +msgid "No menus have been created yet. <a href=\"%s\">Create some</a>." +msgstr "Zatím nebylo vytvořeno žádné menu. <a href=\"%s\">Vytvořit menu</a>." + +#: wp-includes/deprecated.php:62 +msgid "new WordPress Loop" +msgstr "nový WordPress Loop" + +#: wp-includes/deprecated.php:987 +msgid "Last updated" +msgstr "Poslední aktualizace" + +#: wp-includes/deprecated.php:1898 +#: wp-includes/post-template.php:952 +msgid "Missing Attachment" +msgstr "Chybějící příloha" + +#: wp-includes/feed-atom-comments.php:19 +#, php-format +msgid "Comments on %s" +msgstr "Komentáře k příspěvku %s" + +#: wp-includes/feed-atom-comments.php:21 +#, php-format +msgid "Comments for %1$s searching on %2$s" +msgstr "Komentáře k %1$s, vyhledané na %2$s" + +#: wp-includes/feed-atom-comments.php:23 +#: wp-includes/feed-rss2-comments.php:26 +#, php-format +msgid "Comments for %s" +msgstr "Komentáře k %s" + +#: wp-includes/feed-atom-comments.php:53 +#: wp-includes/feed-rss2-comments.php:45 +#, php-format +msgid "Comment on %1$s by %2$s" +msgstr "Komentář k příspěvku %1$s od %2$s" + +#: wp-includes/feed-atom-comments.php:55 +#: wp-includes/feed-rss2-comments.php:47 +#, php-format +msgid "By: %s" +msgstr "Od: %s" + +#: wp-includes/feed-rss2-comments.php:22 +#, php-format +msgid "Comments on: %s" +msgstr "Komentáře k příspěvku: %s" + +#: wp-includes/feed-rss2-comments.php:24 +#, php-format +msgid "Comments for %s searching on %s" +msgstr "Komentáře k %s, vyhledané na %s" + +#: wp-includes/feed-rss2-comments.php:55 +msgid "Protected Comments: Please enter your password to view comments." +msgstr "Chráněné komentáře: Pokud je chcete zobrazit, zadejte svoje heslo." + +#. translators: opening curly quote +#: wp-includes/formatting.php:40 +msgctxt "opening curly quote" +msgid "“" +msgstr "„" + +#. translators: closing curly quote +#: wp-includes/formatting.php:42 +msgctxt "closing curly quote" +msgid "”" +msgstr "“" + +#. translators: min=minute +#: wp-includes/formatting.php:1791 +#, php-format +msgid "%s min" +msgid_plural "%s mins" +msgstr[0] "%s minuta" +msgstr[1] "%s minuty" +msgstr[2] "%s minut" + +#: wp-includes/formatting.php:1797 +#, php-format +msgid "%s hour" +msgid_plural "%s hours" +msgstr[0] "%s hodina" +msgstr[1] "%s hodiny" +msgstr[2] "%s hodin" + +#: wp-includes/formatting.php:1803 +#, php-format +msgid "%s day" +msgid_plural "%s days" +msgstr[0] "%s den" +msgstr[1] "%s dny" +msgstr[2] "%s dní" + +#: wp-includes/formatting.php:2390 +msgid "The email address entered did not appear to be a valid email address. Please enter a valid email address." +msgstr "Zadaná emailová adresa patrně není platná. Zadejte prosím správnou emailovou adresu." + +#: wp-includes/formatting.php:2474 +msgid "The WordPress address you entered did not appear to be a valid URL. Please enter a valid URL." +msgstr "Zadaná URL adresa instalace WordPressu patrně není platná. Zadejte prosím správnou URL adresu." + +#: wp-includes/formatting.php:2484 +msgid "The Site address you entered did not appear to be a valid URL. Please enter a valid URL." +msgstr "Zadaná URL adresa webu patrně není platná. Zadejte prosím správnou URL adresu." + +#. translators: used between list items, there is a space after the coma +#: wp-includes/formatting.php:2632 +msgid ", " +msgstr ", " + +#. translators: used between list items, there is a space after the and +#: wp-includes/formatting.php:2634 +msgid ", and " +msgstr ", a " + +#. translators: used between only two list items, there is a space after the and +#: wp-includes/formatting.php:2636 +msgid " and " +msgstr " a " + +#: wp-includes/functions.php:375 +#, php-format +msgid "%s is a protected WP option and may not be modified" +msgstr "%s je chráněn nastavením WordPressu a nemůže být upravován" + +#: wp-includes/functions.php:1717 +#, php-format +msgid "ERROR: %s is not a valid feed template." +msgstr "CHYBA: %s není platná šablona RSS zdroje." + +#: wp-includes/functions.php:2179 +#: wp-includes/functions.php:2297 +#, php-format +msgid "Unable to create directory %s. Is its parent directory writable by the server?" +msgstr "Nepovedlo se vytvořit adresář %s. Zkontrolujte, jestli má nadřazený adresář práva zápisu?" + +#: wp-includes/functions.php:2276 +msgid "Empty filename" +msgstr "Prázdný název souboru" + +#: wp-includes/functions.php:2280 +msgid "Invalid file type" +msgstr "Nesprávný typ souboru" + +#: wp-includes/functions.php:2303 +#, php-format +msgid "Could not write file %s" +msgstr "Soubor %s nelze uložit." + +#: wp-includes/functions.php:2551 +#, php-format +msgid "Your attempt to edit this attachment: “%s” has failed." +msgstr "Pokus o úpravu této přílohy: „%s“ selhal." + +#: wp-includes/functions.php:2553 +msgid "Your attempt to add this category has failed." +msgstr "Pokus o vytvoření této rubriky selhal." + +#: wp-includes/functions.php:2554 +#, php-format +msgid "Your attempt to delete this category: “%s” has failed." +msgstr "Pokus o smazání této rubriky: „%s“ selhal." + +#: wp-includes/functions.php:2555 +#, php-format +msgid "Your attempt to edit this category: “%s” has failed." +msgstr "Pokus o úpravu této rubriky: „%s“ selhal." + +#: wp-includes/functions.php:2557 +#, php-format +msgid "Your attempt to delete this comment: “%s” has failed." +msgstr "Pokus o smazání tohoto komentáře: „%s“ selhal." + +#: wp-includes/functions.php:2558 +#, php-format +msgid "Your attempt to unapprove this comment: “%s” has failed." +msgstr "Pokus o nechválení tohoto komentáře: „%s“ selhal." + +#: wp-includes/functions.php:2559 +#, php-format +msgid "Your attempt to approve this comment: “%s” has failed." +msgstr "Pokus o schválení tohoto komentáře: „%s“ selhal." + +#: wp-includes/functions.php:2560 +#, php-format +msgid "Your attempt to edit this comment: “%s” has failed." +msgstr "Pokus o úpravu tohoto komentáře: „%s“ selhal." + +#: wp-includes/functions.php:2561 +msgid "Your attempt to bulk modify comments has failed." +msgstr "Pokus o hromadnou úpravu komentářů selhal." + +#: wp-includes/functions.php:2562 +msgid "Your attempt to moderate comments has failed." +msgstr "Pokus o moderování komentářů selhal." + +#: wp-includes/functions.php:2564 +msgid "Your attempt to add this link has failed." +msgstr "Pokus o vytvoření tohoto odkazu selhal." + +#: wp-includes/functions.php:2565 +#, php-format +msgid "Your attempt to delete this link: “%s” has failed." +msgstr "Pokus o smazání tohoto odkazu: „%s“ selhal." + +#: wp-includes/functions.php:2566 +#, php-format +msgid "Your attempt to edit this link: “%s” has failed." +msgstr "Pokus o úpravu tohoto odkazu: „%s“ selhal." + +#: wp-includes/functions.php:2567 +msgid "Your attempt to bulk modify links has failed." +msgstr "Pokus o hromadnou úpravu odkazů selhal." + +#: wp-includes/functions.php:2569 +msgid "Your attempt to add this page has failed." +msgstr "Pokus o vytvoření této stránky selhal." + +#: wp-includes/functions.php:2570 +#, php-format +msgid "Your attempt to delete this page: “%s” has failed." +msgstr "Pokus o smazání této stránky: „%s“ selhal." + +#: wp-includes/functions.php:2571 +#, php-format +msgid "Your attempt to edit this page: “%s” has failed." +msgstr "Pokus o úpravu této stránky: „%s“ selhal." + +#: wp-includes/functions.php:2573 +#, php-format +msgid "Your attempt to edit this plugin file: “%s” has failed." +msgstr "Pokus o úpravu tohoto souboru pluginu: „%s“ selhal." + +#: wp-includes/functions.php:2574 +#, php-format +msgid "Your attempt to activate this plugin: “%s” has failed." +msgstr "Pokus o aktivaci tohoto pluginu: „%s“ selhal." + +#: wp-includes/functions.php:2575 +#, php-format +msgid "Your attempt to deactivate this plugin: “%s” has failed." +msgstr "Pokus o deaktivaci tohoto pluginu: „%s“ selhal." + +#: wp-includes/functions.php:2576 +#, php-format +msgid "Your attempt to upgrade this plugin: “%s” has failed." +msgstr "Pokus o aktualizaci tohoto pluginu: „%s“ selhal." + +#: wp-includes/functions.php:2578 +msgid "Your attempt to add this post has failed." +msgstr "Pokus o vytvoření tohoto příspěvku selhal." + +#: wp-includes/functions.php:2579 +#, php-format +msgid "Your attempt to delete this post: “%s” has failed." +msgstr "Pokus o smazání tohoto příspěvku: „%s“ selhal." + +#: wp-includes/functions.php:2580 +#, php-format +msgid "Your attempt to edit this post: “%s” has failed." +msgstr "Pokus o úpravu tohoto příspěvku: „%s“ selhal." + +#: wp-includes/functions.php:2582 +msgid "Your attempt to add this user has failed." +msgstr "Pokus o vytvoření tohoto uživatele selhal." + +#: wp-includes/functions.php:2583 +msgid "Your attempt to delete users has failed." +msgstr "Pokus o smazání uživatelů selhal." + +#: wp-includes/functions.php:2584 +msgid "Your attempt to bulk modify users has failed." +msgstr "Pokus o hromadnou úpravu uživatelů selhal." + +#: wp-includes/functions.php:2585 +#, php-format +msgid "Your attempt to edit this user: “%s” has failed." +msgstr "Pokus o úpravu tohoto uživatele „%s“ selhal." + +#: wp-includes/functions.php:2586 +#, php-format +msgid "Your attempt to modify the profile for: “%s” has failed." +msgstr "Pokus o úpravu profilu tohoto uživatele: „%s“ selhal." + +#: wp-includes/functions.php:2588 +msgid "Your attempt to edit your settings has failed." +msgstr "Pokus o úpravu vašeho nastavení selhal." + +#: wp-includes/functions.php:2589 +#, php-format +msgid "Your attempt to change your permalink structure to: %s has failed." +msgstr "Pokus o úpravu struktury trvalých odkazů na \"%s\" selhal." + +#: wp-includes/functions.php:2590 +#, php-format +msgid "Your attempt to edit this file: “%s” has failed." +msgstr "Pokus o úpravu tohoto souboru: „%s“ selhal." + +#: wp-includes/functions.php:2591 +#, php-format +msgid "Your attempt to edit this theme file: “%s” has failed." +msgstr "Pokus o úpravu tohoto souboru šablony: „%s“ selhal." + +#: wp-includes/functions.php:2592 +#, php-format +msgid "Your attempt to switch to this theme: “%s” has failed." +msgstr "Pokus o aktivaci této šablony: „%s“ selhal." + +#: wp-includes/functions.php:2594 +#, php-format +msgid "You are attempting to log out of %s" +msgstr "Pokoušíte se odhlásit z %s" + +#: wp-includes/functions.php:2633 +msgid "WordPress Failure Notice" +msgstr "Upozornění WordPressu na selhání" + +#: wp-includes/functions.php:2636 +#, php-format +msgid "Do you really want to <a href='%s'>log out</a>?" +msgstr "Opravdu se chcete <a href='%s'>odhlásit</a>?" + +#: wp-includes/functions.php:2638 +msgid "Please try again." +msgstr "Zkuste to prosím znovu." + +#: wp-includes/functions.php:2711 +msgid "« Back" +msgstr "« Zpět" + +#: wp-includes/functions.php:2732 +msgid "WordPress › Error" +msgstr "WordPress › Chyba" + +#: wp-includes/functions.php:3237 +#: wp-includes/functions.php:3277 +#, php-format +msgid "%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead." +msgstr "%1$s <strong>není podporováno</strong> už od verze %2$s! Použijte místo toho raději %3$s." + +#: wp-includes/functions.php:3239 +#: wp-includes/functions.php:3279 +#, php-format +msgid "%1$s is <strong>deprecated</strong> since version %2$s with no alternative available." +msgstr "%1$s <strong>není podporováno</strong> už od verze %2$s a v aktuální verzi nemá žádnou náhradu." + +#: wp-includes/functions.php:3321 +#, php-format +msgid "%1$s was called with an argument that is <strong>deprecated</strong> since version %2$s! %3$s" +msgstr "Funkce %1$s byla použita s parametrem, který již od verze %2$s <strong>není podporován</strong>! %3$s" + +#: wp-includes/functions.php:3323 +#, php-format +msgid "%1$s was called with an argument that is <strong>deprecated</strong> since version %2$s with no alternative available." +msgstr "Funkce %1$s byla použita s parametrem, který již od verze %2$s <strong>není podporován</strong> a není dostupná ani žádná jeho náhrada." + +#: wp-includes/functions.php:4003 +msgid "Select a city" +msgstr "Vyberte město" + +#: wp-includes/functions.php:4048 +#: wp-includes/functions.php:4052 +msgid "UTC" +msgstr "UTC" + +#: wp-includes/functions.php:4056 +msgid "Manual Offsets" +msgstr "Ruční nastavení časového posunu" + +#: wp-includes/general-template.php:161 +msgid "Search for:" +msgstr "Hledat:" + +#: wp-includes/general-template.php:187 +#: wp-login.php:402 +#: wp-login.php:405 +#: wp-login.php:484 +msgid "Log in" +msgstr "Přihlásit se" + +#: wp-includes/general-template.php:189 +msgid "Log out" +msgstr "Odhlásit se" + +#: wp-includes/general-template.php:260 +#: wp-login.php:599 +msgid "Remember Me" +msgstr "Pamatovat si mě" + +#: wp-includes/general-template.php:336 +#: wp-login.php:403 +#: wp-login.php:480 +#: wp-login.php:615 +msgid "Register" +msgstr "Registrace" + +#: wp-includes/general-template.php:340 +msgid "Site Admin" +msgstr "Administrace" + +#: wp-includes/general-template.php:405 +#, php-format +msgid "The <code>%s</code> option is deprecated for the family of <code>bloginfo()</code> functions." +msgstr "Parametr <code>%s</code> pro funkci <code>bloginfo()</code> už není nadále podporován." + +#: wp-includes/general-template.php:405 +#, php-format +msgid "Use the <code>%s</code> option instead." +msgstr "Použijte místo něj raději parametr <code>%s</code>." + +#. translators: 1: separator, 2: search phrase +#: wp-includes/general-template.php:603 +#, php-format +msgid "Search Results %1$s %2$s" +msgstr "Výsledky vyhledávání %1$s %2$s" + +#: wp-includes/general-template.php:607 +msgid "Page not found" +msgstr "Stránka nebyla nalezena." + +#. translators: 1: month name, 2: 4-digit year +#: wp-includes/general-template.php:925 +#, php-format +msgid "%1$s %2$d" +msgstr "%1$s %2$d" + +#. translators: Calendar caption: 1: month name, 2: 4-digit year +#: wp-includes/general-template.php:1134 +#, php-format +msgctxt "calendar caption" +msgid "%1$s %2$s" +msgstr "%1$s %2$s" + +#: wp-includes/general-template.php:1160 +#: wp-includes/general-template.php:1168 +#, php-format +msgid "View posts for %1$s %2$s" +msgstr "Zobrazit příspěvky z %1$s %2$s" + +#. translators: Separator between blog name and feed type in feed links +#: wp-includes/general-template.php:1592 +#: wp-includes/general-template.php:1615 +msgctxt "feed link" +msgid "»" +msgstr "»" + +#. translators: 1: blog title, 2: separator (raquo) +#: wp-includes/general-template.php:1594 +#, php-format +msgid "%1$s %2$s Feed" +msgstr "%1$s %2$s RSS zdroj" + +#. translators: %s: blog title, 2: separator (raquo) +#: wp-includes/general-template.php:1596 +#, php-format +msgid "%1$s %2$s Comments Feed" +msgstr "%1$s %2$s RSS komentářů" + +#. translators: 1: blog name, 2: separator(raquo), 3: post title +#: wp-includes/general-template.php:1617 +#, php-format +msgid "%1$s %2$s %3$s Comments Feed" +msgstr "%1$s %2$s %3$s RSS komentářů" + +#. translators: 1: blog name, 2: separator(raquo), 3: category name +#: wp-includes/general-template.php:1619 +#, php-format +msgid "%1$s %2$s %3$s Category Feed" +msgstr "%1$s %2$s %3$s RSS rubriky" + +#. translators: 1: blog name, 2: separator(raquo), 3: tag name +#: wp-includes/general-template.php:1621 +#, php-format +msgid "%1$s %2$s %3$s Tag Feed" +msgstr "%1$s %2$s %3$s RSS štítku" + +#. translators: 1: blog name, 2: separator(raquo), 3: author name +#: wp-includes/general-template.php:1623 +#, php-format +msgid "%1$s %2$s Posts by %3$s Feed" +msgstr "%1$s %2$s RSS příspěvků autora %3$s" + +#. translators: 1: blog name, 2: separator(raquo), 3: search phrase +#: wp-includes/general-template.php:1625 +#, php-format +msgid "%1$s %2$s Search Results for “%3$s” Feed" +msgstr "%1$s %2$s RSS výsledků vyhledávání výrazu „%3$s“" + +#: wp-includes/general-template.php:1950 +msgid "« Previous" +msgstr "« Předchozí" + +#: wp-includes/general-template.php:1951 +msgid "Next »" +msgstr "Další »" + +#: wp-includes/general-template.php:2059 +msgid "Gray" +msgstr "Šedivé" + +#: wp-includes/js/tinymce/langs/wp-langs.php:26 +msgid "Do you want to use the WYSIWYG mode for this textarea?" +msgstr "Chcete použít vizuální editor pro toto textové pole?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:28 +msgid "Insert" +msgstr "Vložit" + +#: wp-includes/js/tinymce/langs/wp-langs.php:32 +msgid "Browse" +msgstr "Procházet" + +#: wp-includes/js/tinymce/langs/wp-langs.php:33 +#: wp-includes/js/tinymce/langs/wp-langs.php:313 +msgid "Class" +msgstr "Třída" + +#: wp-includes/js/tinymce/langs/wp-langs.php:34 +msgid "-- Not set --" +msgstr "-- Nenastaveno --" + +#: wp-includes/js/tinymce/langs/wp-langs.php:35 +#: wp-includes/js/tinymce/langs/wp-langs.php:240 +msgid "Copy/Cut/Paste is not available in Mozilla and Firefox." +msgstr "Funkce Kopírovat/Vyjmout/Vložit nejsou v prohlížeči Mozilla Firefox podporovány." + +#: wp-includes/js/tinymce/langs/wp-langs.php:36 +msgid "Currently not supported by your browser, use keyboard shortcuts instead." +msgstr "Tato funkce není vaším prohlížečem zatím podporována, použijte místo ní klávesové zkratky." + +#: wp-includes/js/tinymce/langs/wp-langs.php:37 +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 "Používáte patrně nějaký způsob blokování vyskakovacích (popup) oken ve vašem prohlížeči, který však bohužel omezuje funkčnost WordPressu. Pro využití všech dostupných funkcí budete muset vyskakovací okna pravděpodobně povolit." + +#: wp-includes/js/tinymce/langs/wp-langs.php:38 +msgid "Error: Invalid values entered, these are marked in red." +msgstr "Chyba: Červeně zvýrazněné hodnoty nebyly správně zadány." + +#: wp-includes/js/tinymce/langs/wp-langs.php:39 +#: wp-includes/js/tinymce/langs/wp-langs.php:244 +msgid "More colors" +msgstr "Další barvy" + +#. translators: alignment +#: wp-includes/js/tinymce/langs/wp-langs.php:46 +msgid "Full" +msgstr "Do bloku" + +#. translators: year, month, date +#: wp-includes/js/tinymce/langs/wp-langs.php:49 +msgid "%Y-%m-%d" +msgstr "%j.%n.%Y" + +#. translators: hours, minutes, seconds +#: wp-includes/js/tinymce/langs/wp-langs.php:50 +msgid "%H:%M:%S" +msgstr "%G:%i" + +#: wp-includes/js/tinymce/langs/wp-langs.php:51 +msgid "Insert date" +msgstr "Vložit datum" + +#: wp-includes/js/tinymce/langs/wp-langs.php:52 +msgid "Insert time" +msgstr "Vložit čas" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:140 +#: wp-includes/locale.php:155 +msgid "January" +msgstr "Leden" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:141 +#: wp-includes/locale.php:156 +msgid "February" +msgstr "Únor" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:142 +#: wp-includes/locale.php:157 +msgid "March" +msgstr "Březen" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:143 +#: wp-includes/locale.php:158 +msgid "April" +msgstr "Duben" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:144 +#: wp-includes/locale.php:159 +msgid "May" +msgstr "Květen" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:145 +#: wp-includes/locale.php:160 +msgid "June" +msgstr "Červen" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:146 +#: wp-includes/locale.php:161 +msgid "July" +msgstr "Červenec" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:147 +#: wp-includes/locale.php:162 +msgid "August" +msgstr "Srpen" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:148 +#: wp-includes/locale.php:163 +msgid "September" +msgstr "Září" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:149 +#: wp-includes/locale.php:164 +msgid "October" +msgstr "Říjen" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:150 +#: wp-includes/locale.php:165 +msgid "November" +msgstr "Listopad" + +#. translators: month name +#: wp-includes/js/tinymce/langs/wp-langs.php:53 +#: wp-includes/locale.php:151 +#: wp-includes/locale.php:166 +msgid "December" +msgstr "Prosinec" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:155 +msgid "Jan_January_abbreviation" +msgstr "Led_Leden_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:156 +msgid "Feb_February_abbreviation" +msgstr "Úno_Únor_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:157 +msgid "Mar_March_abbreviation" +msgstr "Bře_Březen_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:158 +msgid "Apr_April_abbreviation" +msgstr "Dub_Duben_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:159 +msgid "May_May_abbreviation" +msgstr "Kvě_Květen_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:160 +msgid "Jun_June_abbreviation" +msgstr "Čer_Červen_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:161 +msgid "Jul_July_abbreviation" +msgstr "Čvc_Červenec_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:162 +msgid "Aug_August_abbreviation" +msgstr "Srp_Srpen_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:163 +msgid "Sep_September_abbreviation" +msgstr "Zář_Září_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:164 +msgid "Oct_October_abbreviation" +msgstr "Říj_Říjen_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:165 +msgid "Nov_November_abbreviation" +msgstr "Lis_Listopad_abbreviation" + +#. translators: three-letter abbreviation of the month +#: wp-includes/js/tinymce/langs/wp-langs.php:54 +#: wp-includes/locale.php:166 +msgid "Dec_December_abbreviation" +msgstr "Pro_Prosinec_abbreviation" + +#. translators: weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:55 +#: wp-includes/locale.php:108 +#: wp-includes/locale.php:118 +#: wp-includes/locale.php:131 +msgid "Sunday" +msgstr "Neděle" + +#. translators: weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:55 +#: wp-includes/locale.php:109 +#: wp-includes/locale.php:119 +#: wp-includes/locale.php:132 +msgid "Monday" +msgstr "Pondělí" + +#. translators: weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:55 +#: wp-includes/locale.php:110 +#: wp-includes/locale.php:120 +#: wp-includes/locale.php:133 +msgid "Tuesday" +msgstr "Úterý" + +#. translators: weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:55 +#: wp-includes/locale.php:111 +#: wp-includes/locale.php:121 +#: wp-includes/locale.php:134 +msgid "Wednesday" +msgstr "Středa" + +#. translators: weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:55 +#: wp-includes/locale.php:112 +#: wp-includes/locale.php:122 +#: wp-includes/locale.php:135 +msgid "Thursday" +msgstr "Čtvrtek" + +#. translators: weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:55 +#: wp-includes/locale.php:113 +#: wp-includes/locale.php:123 +#: wp-includes/locale.php:136 +msgid "Friday" +msgstr "Pátek" + +#. translators: weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:55 +#: wp-includes/locale.php:114 +#: wp-includes/locale.php:124 +#: wp-includes/locale.php:137 +msgid "Saturday" +msgstr "Sobota" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:56 +#: wp-includes/locale.php:131 +msgid "Sun" +msgstr "Ne" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:56 +#: wp-includes/locale.php:132 +msgid "Mon" +msgstr "Po" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:56 +#: wp-includes/locale.php:133 +msgid "Tue" +msgstr "Út" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:56 +#: wp-includes/locale.php:134 +msgid "Wed" +msgstr "St" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:56 +#: wp-includes/locale.php:135 +msgid "Thu" +msgstr "Čt" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:56 +#: wp-includes/locale.php:136 +msgid "Fri" +msgstr "Pá" + +#. translators: three-letter abbreviation of the weekday +#: wp-includes/js/tinymce/langs/wp-langs.php:56 +#: wp-includes/locale.php:137 +msgid "Sat" +msgstr "So" + +#: wp-includes/js/tinymce/langs/wp-langs.php:59 +msgid "Print" +msgstr "Tisk" + +#: wp-includes/js/tinymce/langs/wp-langs.php:65 +msgid "Direction left to right" +msgstr "Směr zleva doprava" + +#: wp-includes/js/tinymce/langs/wp-langs.php:66 +msgid "Direction right to left" +msgstr "Směr zprava doleva" + +#: wp-includes/js/tinymce/langs/wp-langs.php:69 +msgid "Insert new layer" +msgstr "Vložit novou vrstvu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:70 +msgid "Move forward" +msgstr "Přesunout do popředí" + +#: wp-includes/js/tinymce/langs/wp-langs.php:71 +msgid "Move backward" +msgstr "Přesunout do pozadí" + +#: wp-includes/js/tinymce/langs/wp-langs.php:72 +msgid "Toggle absolute positioning" +msgstr "Přepnout absolutní pozicování" + +#: wp-includes/js/tinymce/langs/wp-langs.php:73 +msgid "New layer..." +msgstr "Nová vrstva..." + +#: wp-includes/js/tinymce/langs/wp-langs.php:77 +msgid "Cancel all changes" +msgstr "Zrušit všechny změny" + +#: wp-includes/js/tinymce/langs/wp-langs.php:80 +msgid "Insert non-breaking space character" +msgstr "Vložit pevnou mezeru (neumožňuje zalomení)" + +#: wp-includes/js/tinymce/langs/wp-langs.php:83 +msgid "Run spell checking" +msgstr "Spustit kontrolu pravopisu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:84 +msgid "ieSpell not detected. Do you want to install it now?" +msgstr "Nepodařilo se najít ieSpell. Chcete ho nyní nainstalovat?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:87 +msgid "Horizontale rule" +msgstr "Vodorovná čára" + +#: wp-includes/js/tinymce/langs/wp-langs.php:90 +msgid "Emotions" +msgstr "Smajlíci" + +#: wp-includes/js/tinymce/langs/wp-langs.php:93 +msgid "Find" +msgstr "Najít" + +#: wp-includes/js/tinymce/langs/wp-langs.php:94 +msgid "Find/Replace" +msgstr "Najít/Nahradit" + +#: wp-includes/js/tinymce/langs/wp-langs.php:97 +#: wp-includes/js/tinymce/langs/wp-langs.php:219 +#: wp-includes/js/tinymce/langs/wp-langs.php:273 +msgid "Insert/edit image" +msgstr "Vložit/upravit obrázek" + +#: wp-includes/js/tinymce/langs/wp-langs.php:100 +#: wp-includes/js/tinymce/langs/wp-langs.php:215 +#: wp-includes/js/tinymce/langs/wp-langs.php:290 +msgid "Insert/edit link" +msgstr "Vložit/upravit odkaz" + +#: wp-includes/js/tinymce/langs/wp-langs.php:103 +msgid "Citation" +msgstr "Citace" + +#: wp-includes/js/tinymce/langs/wp-langs.php:104 +msgid "Abbreviation" +msgstr "Zkratka" + +#: wp-includes/js/tinymce/langs/wp-langs.php:105 +msgid "Acronym" +msgstr "Akronym" + +#: wp-includes/js/tinymce/langs/wp-langs.php:106 +msgid "Deletion" +msgstr "Smazání" + +#: wp-includes/js/tinymce/langs/wp-langs.php:107 +msgid "Insertion" +msgstr "Vložení" + +#: wp-includes/js/tinymce/langs/wp-langs.php:108 +msgid "Insert/Edit Attributes" +msgstr "Vložit/Upravit atributy" + +#: wp-includes/js/tinymce/langs/wp-langs.php:111 +msgid "Edit CSS Style" +msgstr "Upravit CSS styl" + +#: wp-includes/js/tinymce/langs/wp-langs.php:114 +msgid "Paste as Plain Text" +msgstr "Vložit jako neformátovaný text" + +#: wp-includes/js/tinymce/langs/wp-langs.php:115 +msgid "Paste from Word" +msgstr "Vložit text z Wordu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:119 +#: wp-includes/js/tinymce/langs/wp-langs.php:121 +msgid "Use CTRL+V on your keyboard to paste the text into the window." +msgstr "Pro vložení textu do okna použijte klávesovou zkratku CTRL+V." + +#: wp-includes/js/tinymce/langs/wp-langs.php:120 +msgid "Keep linebreaks" +msgstr "Ponechat zalomení řádků" + +#: wp-includes/js/tinymce/langs/wp-langs.php:124 +msgid "Inserts a new table" +msgstr "Vložit novou tabulku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:125 +msgid "Insert row before" +msgstr "Vložit řádek před" + +#: wp-includes/js/tinymce/langs/wp-langs.php:126 +msgid "Insert row after" +msgstr "Vložit řádek za" + +#: wp-includes/js/tinymce/langs/wp-langs.php:127 +msgid "Delete row" +msgstr "Smazat řádek" + +#: wp-includes/js/tinymce/langs/wp-langs.php:128 +msgid "Insert column before" +msgstr "Vložit sloupec před" + +#: wp-includes/js/tinymce/langs/wp-langs.php:129 +msgid "Insert column after" +msgstr "Vložit sloupec za" + +#: wp-includes/js/tinymce/langs/wp-langs.php:130 +msgid "Remove column" +msgstr "Odstranit sloupec" + +#: wp-includes/js/tinymce/langs/wp-langs.php:131 +msgid "Split merged table cells" +msgstr "Rozdělit sloučené buňky tabulky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:132 +msgid "Merge table cells" +msgstr "Sloučit buňky tabulky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:133 +msgid "Table row properties" +msgstr "Vlastnosti řádku tabulky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:134 +msgid "Table cell properties" +msgstr "Vlastnosti buňky tabulky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:135 +msgid "Table properties" +msgstr "Vlastnosti tabulky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:136 +msgid "Paste table row before" +msgstr "Vložit řádek tabulky před" + +#: wp-includes/js/tinymce/langs/wp-langs.php:137 +msgid "Paste table row after" +msgstr "Vložit řádek tabulky za" + +#: wp-includes/js/tinymce/langs/wp-langs.php:138 +msgid "Cut table row" +msgstr "Vyjmout řádek tabulky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:139 +msgid "Copy table row" +msgstr "Kopírovat řádek tabulky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:140 +msgid "Delete table" +msgstr "Smazat tabulku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:141 +msgid "Row" +msgstr "Řádek" + +#: wp-includes/js/tinymce/langs/wp-langs.php:142 +msgid "Column" +msgstr "Sloupec" + +#: wp-includes/js/tinymce/langs/wp-langs.php:143 +msgid "Cell" +msgstr "Buňka" + +#: wp-includes/js/tinymce/langs/wp-langs.php:146 +#: wp-includes/script-loader.php:392 +#: wp-includes/script-loader.php:512 +msgid "The changes you made will be lost if you navigate away from this page." +msgstr "Provedené změny budou ztraceny, pokud opustíte tuto stránku." + +#: wp-includes/js/tinymce/langs/wp-langs.php:149 +msgid "Toggle fullscreen mode" +msgstr "Přepnout na celou obrazovku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:152 +#: wp-includes/js/tinymce/langs/wp-langs.php:302 +msgid "Insert / edit embedded media" +msgstr "Vložit / upravit mediální soubor" + +#. translators: Extra width for the media popup in pixels +#: wp-includes/js/tinymce/langs/wp-langs.php:153 +msgctxt "media popup width" +msgid "0" +msgstr "0" + +#. translators: Extra height for the media popup in pixels +#: wp-includes/js/tinymce/langs/wp-langs.php:154 +msgctxt "media popup height" +msgid "0" +msgstr "0" + +#: wp-includes/js/tinymce/langs/wp-langs.php:155 +msgid "Edit embedded media" +msgstr "Upravit mediální soubor" + +#: wp-includes/js/tinymce/langs/wp-langs.php:158 +msgid "Document properties" +msgstr "Vlastnosti dokumentu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:161 +msgid "Insert predefined template content" +msgstr "Vložit přednastavenou šablonu pro obsah" + +#: wp-includes/js/tinymce/langs/wp-langs.php:164 +msgid "Visual control characters on/off." +msgstr "Zapnout/vypnout zobrazení řídících znaků." + +#: wp-includes/js/tinymce/langs/wp-langs.php:167 +msgid "Toggle spellchecker" +msgstr "Zapnout kontrolu pravopisu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:168 +msgid "Spellchecker settings" +msgstr "Nastavení kontroly pravopisu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:169 +msgid "Ignore word" +msgstr "Přeskočit slovo" + +#: wp-includes/js/tinymce/langs/wp-langs.php:170 +msgid "Ignore all" +msgstr "Přeskočit vše" + +#: wp-includes/js/tinymce/langs/wp-langs.php:171 +msgid "Languages" +msgstr "Jazyky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:172 +msgid "Please wait..." +msgstr "Prosím čekejte..." + +#: wp-includes/js/tinymce/langs/wp-langs.php:173 +msgid "Suggestions" +msgstr "Návrhy" + +#: wp-includes/js/tinymce/langs/wp-langs.php:174 +msgid "No suggestions" +msgstr "Žádné návrhy" + +#: wp-includes/js/tinymce/langs/wp-langs.php:175 +msgid "No misspellings found." +msgstr "Nebyly nalezeny žádné chyby." + +#: wp-includes/js/tinymce/langs/wp-langs.php:178 +msgid "Insert Page Break" +msgstr "Vložit značku pro rozdělení stránky" + +#. translators: TinyMCE font styles +#: wp-includes/js/tinymce/langs/wp-langs.php:182 +msgctxt "TinyMCE font styles" +msgid "Styles" +msgstr "Styly" + +#: wp-includes/js/tinymce/langs/wp-langs.php:183 +msgid "Font size" +msgstr "Velikost písma" + +#: wp-includes/js/tinymce/langs/wp-langs.php:184 +msgid "Font family" +msgstr "Druh písma" + +#: wp-includes/js/tinymce/langs/wp-langs.php:185 +msgid "Format" +msgstr "Formát" + +#: wp-includes/js/tinymce/langs/wp-langs.php:186 +msgid "Paragraph" +msgstr "Odstavec" + +#: wp-includes/js/tinymce/langs/wp-langs.php:187 +msgid "Div" +msgstr "Div" + +#: wp-includes/js/tinymce/langs/wp-langs.php:188 +#: wp-includes/js/tinymce/wp-mce-help.php:216 +msgid "Address" +msgstr "Adresa" + +#: wp-includes/js/tinymce/langs/wp-langs.php:189 +msgid "Preformatted" +msgstr "Přednastavené formátování" + +#: wp-includes/js/tinymce/langs/wp-langs.php:190 +#: wp-includes/js/tinymce/wp-mce-help.php:213 +msgid "Heading 1" +msgstr "Nadpis 1" + +#: wp-includes/js/tinymce/langs/wp-langs.php:191 +#: wp-includes/js/tinymce/wp-mce-help.php:214 +msgid "Heading 2" +msgstr "Nadpis 2" + +#: wp-includes/js/tinymce/langs/wp-langs.php:192 +#: wp-includes/js/tinymce/wp-mce-help.php:214 +msgid "Heading 3" +msgstr "Nadpis 3" + +#: wp-includes/js/tinymce/langs/wp-langs.php:193 +#: wp-includes/js/tinymce/wp-mce-help.php:215 +msgid "Heading 4" +msgstr "Nadpis 4" + +#: wp-includes/js/tinymce/langs/wp-langs.php:194 +#: wp-includes/js/tinymce/wp-mce-help.php:215 +msgid "Heading 5" +msgstr "Nadpis 5" + +#: wp-includes/js/tinymce/langs/wp-langs.php:195 +#: wp-includes/js/tinymce/wp-mce-help.php:216 +msgid "Heading 6" +msgstr "Nadpis 6" + +#: wp-includes/js/tinymce/langs/wp-langs.php:196 +#: wp-includes/js/tinymce/langs/wp-langs.php:239 +msgid "Blockquote" +msgstr "Bloková citace" + +#: wp-includes/js/tinymce/langs/wp-langs.php:197 +msgid "Code" +msgstr "Kód" + +#: wp-includes/js/tinymce/langs/wp-langs.php:198 +msgid "Code sample" +msgstr "Ukázka kódu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:199 +msgid "Definition term " +msgstr "Definovaný termín" + +#: wp-includes/js/tinymce/langs/wp-langs.php:200 +msgid "Definition description" +msgstr "Popis definice" + +#: wp-includes/js/tinymce/langs/wp-langs.php:201 +#: wp-includes/js/tinymce/wp-mce-help.php:212 +#: wp-includes/js/tinymce/wp-mce-help.php:225 +msgid "Bold" +msgstr "Tučně" + +#: wp-includes/js/tinymce/langs/wp-langs.php:202 +#: wp-includes/js/tinymce/wp-mce-help.php:212 +#: wp-includes/js/tinymce/wp-mce-help.php:225 +msgid "Italic" +msgstr "Kurzíva" + +#: wp-includes/js/tinymce/langs/wp-langs.php:203 +#: wp-includes/js/tinymce/wp-mce-help.php:213 +msgid "Underline" +msgstr "Podtržení" + +#: wp-includes/js/tinymce/langs/wp-langs.php:204 +#: wp-includes/js/tinymce/wp-mce-help.php:229 +msgid "Strikethrough" +msgstr "Přeškrtnutí" + +#: wp-includes/js/tinymce/langs/wp-langs.php:205 +#: wp-includes/js/tinymce/wp-mce-help.php:227 +msgid "Align Left" +msgstr "Zarovnat doleva" + +#: wp-includes/js/tinymce/langs/wp-langs.php:206 +#: wp-includes/js/tinymce/wp-mce-help.php:228 +msgid "Align Center" +msgstr "Zarovnat na střed" + +#: wp-includes/js/tinymce/langs/wp-langs.php:207 +#: wp-includes/js/tinymce/wp-mce-help.php:229 +msgid "Align Right" +msgstr "Zarovnat doprava" + +#: wp-includes/js/tinymce/langs/wp-langs.php:208 +msgid "Align Full" +msgstr "Zarovnat do bloku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:209 +msgid "Unordered list" +msgstr "Seznam" + +#: wp-includes/js/tinymce/langs/wp-langs.php:210 +msgid "Ordered list" +msgstr "Číslovaný seznam" + +#: wp-includes/js/tinymce/langs/wp-langs.php:211 +msgid "Outdent" +msgstr "Zmenšit odsazení" + +#: wp-includes/js/tinymce/langs/wp-langs.php:212 +msgid "Indent" +msgstr "Zvětšit odsazení" + +#. translators: Extra width for the link popup in pixels +#: wp-includes/js/tinymce/langs/wp-langs.php:216 +msgctxt "link popup width" +msgid "0" +msgstr "0" + +#. translators: Extra height for the link popup in pixels +#: wp-includes/js/tinymce/langs/wp-langs.php:217 +msgctxt "link popup height" +msgid "0" +msgstr "0" + +#: wp-includes/js/tinymce/langs/wp-langs.php:218 +msgid "Unlink" +msgstr "Odstranit odkaz" + +#. translators: Extra width for the image popup in pixels +#: wp-includes/js/tinymce/langs/wp-langs.php:220 +msgctxt "image popup width" +msgid "0" +msgstr "0" + +#. translators: Extra height for the image popup in pixels +#: wp-includes/js/tinymce/langs/wp-langs.php:221 +msgctxt "image popup height" +msgid "0" +msgstr "0" + +#: wp-includes/js/tinymce/langs/wp-langs.php:222 +msgid "Cleanup messy code" +msgstr "Vyčistit nekvalitní kód" + +#: wp-includes/js/tinymce/langs/wp-langs.php:223 +msgid "Edit HTML Source" +msgstr "Upravit zdrojový HTML kód" + +#: wp-includes/js/tinymce/langs/wp-langs.php:224 +msgid "Subscript" +msgstr "Dolní index" + +#: wp-includes/js/tinymce/langs/wp-langs.php:225 +msgid "Superscript" +msgstr "Horní index" + +#: wp-includes/js/tinymce/langs/wp-langs.php:226 +msgid "Insert horizontal ruler" +msgstr "Vložit vodorovnou čáru" + +#: wp-includes/js/tinymce/langs/wp-langs.php:227 +msgid "Remove formatting" +msgstr "Odstranit formátování" + +#: wp-includes/js/tinymce/langs/wp-langs.php:228 +msgid "Select text color" +msgstr "Zvolit barvu textu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:229 +msgid "Select background color" +msgstr "Zvolit barvu pozadí" + +#: wp-includes/js/tinymce/langs/wp-langs.php:230 +msgid "Insert custom character" +msgstr "Vložit speciální znak" + +#: wp-includes/js/tinymce/langs/wp-langs.php:231 +msgid "Toggle guidelines/invisible elements" +msgstr "Zapnout/vypnout neviditelné prvky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:232 +#: wp-includes/js/tinymce/langs/wp-langs.php:259 +msgid "Insert/edit anchor" +msgstr "Vložit/upravit kotvu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:233 +#: wp-includes/js/tinymce/wp-mce-help.php:208 +msgid "Cut" +msgstr "Vyjmout" + +#: wp-includes/js/tinymce/langs/wp-langs.php:234 +#: wp-includes/js/tinymce/wp-mce-help.php:207 +msgid "Copy" +msgstr "Kopírovat" + +#: wp-includes/js/tinymce/langs/wp-langs.php:235 +#: wp-includes/js/tinymce/wp-mce-help.php:207 +msgid "Paste" +msgstr "Vložit" + +#: wp-includes/js/tinymce/langs/wp-langs.php:236 +msgid "Image properties" +msgstr "Vlastnosti obrázku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:237 +msgid "New document" +msgstr "Nový dokument" + +#: wp-includes/js/tinymce/langs/wp-langs.php:241 +msgid "Path" +msgstr "Cesta" + +#: wp-includes/js/tinymce/langs/wp-langs.php:242 +msgid "Are you sure you want to clear all contents?" +msgstr "Opravdu chcete smazat celý obsah?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:243 +msgid "Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X" +msgstr "Přeskočit na panel nástrojů - Alt+Q, přeskočit do editoru - Alt-Z, přeskočit na cestu k prvkům - Alt-X" + +#. translators: Extra width for the colorpicker popup in pixels +#: wp-includes/js/tinymce/langs/wp-langs.php:245 +msgctxt "colorpicker popup width" +msgid "0" +msgstr "0" + +#. translators: Extra height for the colorpicker popup in pixels +#: wp-includes/js/tinymce/langs/wp-langs.php:246 +msgctxt "colorpicker popup height" +msgid "0" +msgstr "0" + +#: wp-includes/js/tinymce/langs/wp-langs.php:250 +#: wp-includes/js/tinymce/wp-mce-help.php:240 +msgid "About TinyMCE" +msgstr "O editoru TinyMCE" + +#: wp-includes/js/tinymce/langs/wp-langs.php:253 +msgid "License" +msgstr "Licence" + +#: wp-includes/js/tinymce/langs/wp-langs.php:258 +msgid "Loaded plugins" +msgstr "Načtené pluginy" + +#: wp-includes/js/tinymce/langs/wp-langs.php:260 +msgid "Anchor name" +msgstr "Název kotvy" + +#: wp-includes/js/tinymce/langs/wp-langs.php:261 +msgid "HTML Source Editor" +msgstr "HTML Editor" + +#: wp-includes/js/tinymce/langs/wp-langs.php:262 +msgid "Word wrap" +msgstr "Zalomení řádků" + +#: wp-includes/js/tinymce/langs/wp-langs.php:263 +msgid "Select a color" +msgstr "Zvolit barvu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:264 +msgid "Picker" +msgstr "Kapátko" + +#: wp-includes/js/tinymce/langs/wp-langs.php:265 +msgid "Color picker" +msgstr "Výběr barev" + +#: wp-includes/js/tinymce/langs/wp-langs.php:266 +msgid "Palette" +msgstr "Paleta" + +#: wp-includes/js/tinymce/langs/wp-langs.php:267 +msgid "Palette colors" +msgstr "Paleta barev" + +#: wp-includes/js/tinymce/langs/wp-langs.php:268 +msgid "Named" +msgstr "S názvy" + +#: wp-includes/js/tinymce/langs/wp-langs.php:269 +msgid "Named colors" +msgstr "Pojmenované barvy" + +#: wp-includes/js/tinymce/langs/wp-langs.php:270 +msgid "Color:" +msgstr "Barva:" + +#: wp-includes/js/tinymce/langs/wp-langs.php:272 +msgid "Select custom character" +msgstr "Vyberte speciální symbol" + +#: wp-includes/js/tinymce/langs/wp-langs.php:275 +msgid "Image description" +msgstr "Popis obrázku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:276 +msgid "Image list" +msgstr "Seznam obrázků" + +#: wp-includes/js/tinymce/langs/wp-langs.php:277 +msgid "Border" +msgstr "Orámování" + +#: wp-includes/js/tinymce/langs/wp-langs.php:278 +#: wp-includes/js/tinymce/langs/wp-langs.php:307 +msgid "Dimensions" +msgstr "Rozměry" + +#: wp-includes/js/tinymce/langs/wp-langs.php:279 +msgid "Vertical space" +msgstr "Vertikální mezera" + +#: wp-includes/js/tinymce/langs/wp-langs.php:280 +msgid "Horizontal space" +msgstr "Horizontální mezera" + +#: wp-includes/js/tinymce/langs/wp-langs.php:282 +msgid "Baseline" +msgstr "Na účaří řádku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:283 +#: wp-includes/js/tinymce/langs/wp-langs.php:382 +msgid "Top" +msgstr "Nahoru" + +#: wp-includes/js/tinymce/langs/wp-langs.php:284 +msgid "Middle" +msgstr "Na střed řádku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:285 +#: wp-includes/js/tinymce/langs/wp-langs.php:384 +msgid "Bottom" +msgstr "Dolů" + +#: wp-includes/js/tinymce/langs/wp-langs.php:286 +msgid "Text top" +msgstr "Na vrch textu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:287 +msgid "Text bottom" +msgstr "Na spodek textu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:293 +msgid "Open link in the same window" +msgstr "Otevřít odkaz ve stejném okně" + +#: wp-includes/js/tinymce/langs/wp-langs.php:294 +msgid "Open link in a new window" +msgstr "Otevřít odkaz v novém okně" + +#: wp-includes/js/tinymce/langs/wp-langs.php:296 +msgid "The URL you entered seems to be an email address, do you want to add the required mailto: prefix?" +msgstr "Vložené URL vypadá jako emailová adresa. Chcete k ní přidat požadovaný chybějící parametr (mailto:)?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:297 +msgid "The URL you entered seems to external link, do you want to add the required http:// prefix?" +msgstr "Vložené URL vypadá jako externí odkaz. Chcete k němu přidat požadovaný chybějící parametr (http://)?" + +#: wp-includes/js/tinymce/langs/wp-langs.php:298 +msgid "Link list" +msgstr "Seznam odkazů" + +#: wp-includes/js/tinymce/langs/wp-langs.php:303 +msgid "General" +msgstr "Obecné" + +#: wp-includes/js/tinymce/langs/wp-langs.php:305 +msgid "File/URL" +msgstr "Soubor/URL" + +#: wp-includes/js/tinymce/langs/wp-langs.php:306 +#: wp-includes/js/tinymce/wp-mce-help.php:230 +#: wp-includes/js/tinymce/wp-mce-help.php:231 +msgid "List" +msgstr "Seznam" + +#: wp-includes/js/tinymce/langs/wp-langs.php:309 +msgid "Constrain proportions" +msgstr "Zachovat proporce" + +#: wp-includes/js/tinymce/langs/wp-langs.php:310 +msgid "Type" +msgstr "Typ" + +#: wp-includes/js/tinymce/langs/wp-langs.php:311 +msgid "Id" +msgstr "Id" + +#: wp-includes/js/tinymce/langs/wp-langs.php:314 +msgid "V-Space" +msgstr "Vertikální mezera" + +#: wp-includes/js/tinymce/langs/wp-langs.php:315 +msgid "H-Space" +msgstr "Horizontální mezera" + +#: wp-includes/js/tinymce/langs/wp-langs.php:316 +msgid "Auto play" +msgstr "Automaticky přehrát" + +#: wp-includes/js/tinymce/langs/wp-langs.php:317 +#: wp-includes/js/tinymce/langs/wp-langs.php:399 +msgid "Loop" +msgstr "Opakovaný cyklus" + +#: wp-includes/js/tinymce/langs/wp-langs.php:318 +msgid "Show menu" +msgstr "Zobrazit menu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:319 +msgid "Quality" +msgstr "Kvalita" + +#: wp-includes/js/tinymce/langs/wp-langs.php:321 +msgid "Align" +msgstr "Zarovnat" + +#: wp-includes/js/tinymce/langs/wp-langs.php:322 +msgid "SAlign" +msgstr "SAlign" + +#: wp-includes/js/tinymce/langs/wp-langs.php:323 +msgid "WMode" +msgstr "WMode" + +#: wp-includes/js/tinymce/langs/wp-langs.php:325 +msgid "Base" +msgstr "Základna" + +#: wp-includes/js/tinymce/langs/wp-langs.php:326 +msgid "Flashvars" +msgstr "Flashvars" + +#: wp-includes/js/tinymce/langs/wp-langs.php:327 +msgid "SWLiveConnect" +msgstr "SWLiveConnect" + +#: wp-includes/js/tinymce/langs/wp-langs.php:328 +msgid "AutoHREF" +msgstr "AutoHREF" + +#: wp-includes/js/tinymce/langs/wp-langs.php:329 +msgid "Cache" +msgstr "Cache" + +#: wp-includes/js/tinymce/langs/wp-langs.php:330 +msgid "Hidden" +msgstr "Skrytý" + +#: wp-includes/js/tinymce/langs/wp-langs.php:331 +msgid "Controller" +msgstr "Ovladač" + +#: wp-includes/js/tinymce/langs/wp-langs.php:332 +msgid "Kiosk mode" +msgstr "Celoobrazovkový režim" + +#: wp-includes/js/tinymce/langs/wp-langs.php:333 +msgid "Play every frame" +msgstr "Přehrát každý snímek" + +#: wp-includes/js/tinymce/langs/wp-langs.php:334 +msgid "Target cache" +msgstr "Cílová cache" + +#: wp-includes/js/tinymce/langs/wp-langs.php:335 +msgid "No correction" +msgstr "Bez korekcí" + +#: wp-includes/js/tinymce/langs/wp-langs.php:336 +msgid "Enable JavaScript" +msgstr "Povolit JavaScript" + +#: wp-includes/js/tinymce/langs/wp-langs.php:337 +#: wp-includes/js/tinymce/langs/wp-langs.php:395 +msgid "Start time" +msgstr "Počáteční čas" + +#: wp-includes/js/tinymce/langs/wp-langs.php:338 +msgid "End time" +msgstr "Čas ukončení" + +#: wp-includes/js/tinymce/langs/wp-langs.php:339 +msgid "href" +msgstr "href" + +#: wp-includes/js/tinymce/langs/wp-langs.php:340 +msgid "Choke speed" +msgstr "Zpomalit" + +#: wp-includes/js/tinymce/langs/wp-langs.php:342 +msgid "Volume" +msgstr "Hlasitost" + +#: wp-includes/js/tinymce/langs/wp-langs.php:343 +#: wp-includes/js/tinymce/langs/wp-langs.php:398 +msgid "Auto start" +msgstr "Automatické spuštění" + +#: wp-includes/js/tinymce/langs/wp-langs.php:344 +msgid "Enabled" +msgstr "Povoleno" + +#: wp-includes/js/tinymce/langs/wp-langs.php:345 +msgid "Fullscreen" +msgstr "Celá obrazovka" + +#: wp-includes/js/tinymce/langs/wp-langs.php:346 +msgid "Invoke URLs" +msgstr "Vyvolat URL" + +#: wp-includes/js/tinymce/langs/wp-langs.php:347 +msgid "Mute" +msgstr "Ztlumit" + +#: wp-includes/js/tinymce/langs/wp-langs.php:348 +msgid "Stretch to fit" +msgstr "Roztáhnout do velikosti okna" + +#: wp-includes/js/tinymce/langs/wp-langs.php:349 +msgid "Windowless video" +msgstr "Video bez vlastního okna" + +#: wp-includes/js/tinymce/langs/wp-langs.php:350 +msgid "Balance" +msgstr "Vyvážení" + +#: wp-includes/js/tinymce/langs/wp-langs.php:351 +msgid "Base URL" +msgstr "Základní URL" + +#: wp-includes/js/tinymce/langs/wp-langs.php:352 +msgid "Captioning id" +msgstr "Popisovací ID" + +#: wp-includes/js/tinymce/langs/wp-langs.php:353 +msgid "Current marker" +msgstr "Aktuální ukazatel" + +#: wp-includes/js/tinymce/langs/wp-langs.php:354 +msgid "Current position" +msgstr "Aktuální pozice" + +#: wp-includes/js/tinymce/langs/wp-langs.php:355 +msgid "Default frame" +msgstr "Původní rámec" + +#: wp-includes/js/tinymce/langs/wp-langs.php:356 +msgid "Play count" +msgstr "Doba hraní" + +#: wp-includes/js/tinymce/langs/wp-langs.php:357 +msgid "Rate" +msgstr "Hodnocení" + +#: wp-includes/js/tinymce/langs/wp-langs.php:358 +msgid "UI Mode" +msgstr "UI Mode" + +#: wp-includes/js/tinymce/langs/wp-langs.php:359 +msgid "Flash options" +msgstr "Nastavení Flashe" + +#: wp-includes/js/tinymce/langs/wp-langs.php:360 +msgid "Quicktime options" +msgstr "Nastavení QuickTime" + +#: wp-includes/js/tinymce/langs/wp-langs.php:361 +msgid "Windows media player options" +msgstr "Nastavení Windows Media Player" + +#: wp-includes/js/tinymce/langs/wp-langs.php:362 +msgid "Real media player options" +msgstr "Nastavení Real Media Player" + +#: wp-includes/js/tinymce/langs/wp-langs.php:363 +msgid "Shockwave options" +msgstr "Nastavení Shockwave" + +#: wp-includes/js/tinymce/langs/wp-langs.php:364 +msgid "Auto goto URL" +msgstr "Automaticky přejít na URL" + +#: wp-includes/js/tinymce/langs/wp-langs.php:366 +msgid "Image status" +msgstr "Stav obrázku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:367 +msgid "Maintain aspect" +msgstr "Zachovat poměr stran" + +#: wp-includes/js/tinymce/langs/wp-langs.php:368 +msgid "No java" +msgstr "Vypnout Javu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:369 +msgid "Prefetch" +msgstr "Prefetch" + +#: wp-includes/js/tinymce/langs/wp-langs.php:370 +msgid "Shuffle" +msgstr "Shuffle" + +#: wp-includes/js/tinymce/langs/wp-langs.php:371 +msgid "Console" +msgstr "Konzola" + +#: wp-includes/js/tinymce/langs/wp-langs.php:372 +msgid "Num loops" +msgstr "Počet opakování" + +#: wp-includes/js/tinymce/langs/wp-langs.php:373 +msgid "Controls" +msgstr "Ovládání" + +#: wp-includes/js/tinymce/langs/wp-langs.php:374 +msgid "Script callbacks" +msgstr "Zpětné volání skriptů" + +#: wp-includes/js/tinymce/langs/wp-langs.php:375 +msgid "Stretch style" +msgstr "Načíst styl" + +#: wp-includes/js/tinymce/langs/wp-langs.php:376 +msgid "Stretch H-Align" +msgstr "Roztáhnout vodorovné zarovnání" + +#: wp-includes/js/tinymce/langs/wp-langs.php:377 +msgid "Stretch V-Align" +msgstr "Roztáhnout svislé zarovnání" + +#: wp-includes/js/tinymce/langs/wp-langs.php:378 +msgid "Sound" +msgstr "Zvuk" + +#: wp-includes/js/tinymce/langs/wp-langs.php:379 +msgid "Progress" +msgstr "Průběh" + +#: wp-includes/js/tinymce/langs/wp-langs.php:380 +msgid "QT Src" +msgstr "QT Zdroj" + +#: wp-includes/js/tinymce/langs/wp-langs.php:381 +msgid "Streamed rtsp resources should be added to the QT Src field under the advanced tab." +msgstr "Streamované rtsp zdroje mohou být přidány do pole QT Zdroj v pokročilém nastavení." + +#: wp-includes/js/tinymce/langs/wp-langs.php:387 +msgid "Top left" +msgstr "Vlevo nahoře" + +#: wp-includes/js/tinymce/langs/wp-langs.php:388 +msgid "Top right" +msgstr "Vpravo nahoře" + +#: wp-includes/js/tinymce/langs/wp-langs.php:389 +msgid "Bottom left" +msgstr "Vlevo dole" + +#: wp-includes/js/tinymce/langs/wp-langs.php:390 +msgid "Bottom right" +msgstr "Vpravo dole" + +#: wp-includes/js/tinymce/langs/wp-langs.php:391 +msgid "Flash video options" +msgstr "Nastavení pro Flash video" + +#: wp-includes/js/tinymce/langs/wp-langs.php:392 +msgid "Scale mode" +msgstr "Mód velikosti" + +#: wp-includes/js/tinymce/langs/wp-langs.php:393 +msgid "Buffer" +msgstr "Buffer" + +#: wp-includes/js/tinymce/langs/wp-langs.php:394 +msgid "Start image" +msgstr "Počáteční obrázek" + +#: wp-includes/js/tinymce/langs/wp-langs.php:396 +msgid "Default volume" +msgstr "Původní hlasitost" + +#: wp-includes/js/tinymce/langs/wp-langs.php:397 +msgid "Hidden GUI" +msgstr "Skryté GUI" + +#: wp-includes/js/tinymce/langs/wp-langs.php:400 +msgid "Show scale modes" +msgstr "Zobrazit módy velikosti" + +#: wp-includes/js/tinymce/langs/wp-langs.php:401 +msgid "Smooth video" +msgstr "Vyhlazené video" + +#: wp-includes/js/tinymce/langs/wp-langs.php:402 +msgid "JS Callback" +msgstr "Zpětné volání JS" + +#: wp-includes/js/tinymce/langs/wp-langs.php:406 +msgid "Show/Hide Kitchen Sink" +msgstr "Zobrazit/skrýt rozšířené možnosti" + +#: wp-includes/js/tinymce/langs/wp-langs.php:407 +#: wp-includes/js/tinymce/wp-mce-help.php:233 +msgid "Insert More Tag" +msgstr "Vložit značku pro pokračování textu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:408 +msgid "Insert Page break" +msgstr "Vložit značku pro rozdělení stránky" + +#: wp-includes/js/tinymce/langs/wp-langs.php:410 +msgid "More..." +msgstr "Celý příspěvek..." + +#: wp-includes/js/tinymce/langs/wp-langs.php:411 +msgid "Next page..." +msgstr "Další stránka..." + +#: wp-includes/js/tinymce/langs/wp-langs.php:416 +msgid "Edit Gallery" +msgstr "Upravit galerii" + +#: wp-includes/js/tinymce/langs/wp-langs.php:417 +msgid "Delete Gallery" +msgstr "Smazat galerii" + +#: wp-includes/js/tinymce/langs/wp-langs.php:422 +msgid "Delete Image" +msgstr "Smazat obrázek" + +#: wp-includes/js/tinymce/langs/wp-langs.php:423 +msgid "Advanced Settings" +msgstr "Rozšířená nastavení" + +#: wp-includes/js/tinymce/langs/wp-langs.php:429 +msgid "Current Link" +msgstr "Aktuální odkaz" + +#: wp-includes/js/tinymce/langs/wp-langs.php:430 +msgid "Link to Image" +msgstr "Odkaz na obrázek" + +#: wp-includes/js/tinymce/langs/wp-langs.php:432 +msgid "Advanced Image Settings" +msgstr "Rozšířená nastavení obrázku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:433 +msgid "Source" +msgstr "Zdroj" + +#: wp-includes/js/tinymce/langs/wp-langs.php:436 +#: wp-includes/js/tinymce/langs/wp-langs.php:441 +msgid "Original Size" +msgstr "Původní velikost" + +#: wp-includes/js/tinymce/langs/wp-langs.php:437 +#: wp-includes/js/tinymce/langs/wp-langs.php:442 +msgid "CSS Class" +msgstr "CSS třída" + +#: wp-includes/js/tinymce/langs/wp-langs.php:438 +msgid "Advanced Link Settings" +msgstr "Rozšířená nastavení odkazů" + +#: wp-includes/js/tinymce/langs/wp-langs.php:439 +msgid "Link Rel" +msgstr "Rel odkazu" + +#: wp-includes/js/tinymce/langs/wp-langs.php:443 +msgid "60%" +msgstr "60 %" + +#: wp-includes/js/tinymce/langs/wp-langs.php:444 +msgid "70%" +msgstr "70 %" + +#: wp-includes/js/tinymce/langs/wp-langs.php:445 +msgid "80%" +msgstr "80 %" + +#: wp-includes/js/tinymce/langs/wp-langs.php:446 +msgid "90%" +msgstr "90 %" + +#: wp-includes/js/tinymce/langs/wp-langs.php:447 +msgid "100%" +msgstr "100 %" + +#: wp-includes/js/tinymce/langs/wp-langs.php:448 +msgid "110%" +msgstr "110 %" + +#: wp-includes/js/tinymce/langs/wp-langs.php:449 +msgid "120%" +msgstr "120 %" + +#: wp-includes/js/tinymce/langs/wp-langs.php:450 +msgid "130%" +msgstr "130 %" + +#: wp-includes/js/tinymce/langs/wp-langs.php:451 +msgid "Edit Image Title" +msgstr "Upravit název obrázku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:452 +msgid "Edit Image Caption" +msgstr "Upravit titulek obrázku" + +#: wp-includes/js/tinymce/langs/wp-langs.php:453 +msgid "Edit Alternate Text" +msgstr "Upravit alternativní text" + +#: wp-includes/js/tinymce/wp-mce-help.php:16 +msgid "Rich Editor Help" +msgstr "Nápověda k editoru" + +#: wp-includes/js/tinymce/wp-mce-help.php:174 +msgid "Basics of Rich Editing" +msgstr "Základy práce s editorem" + +#: wp-includes/js/tinymce/wp-mce-help.php:174 +msgid "Basics" +msgstr "Úvod" + +#: wp-includes/js/tinymce/wp-mce-help.php:175 +msgid "Advanced use of the Rich Editor" +msgstr "Pokročilé úpravy ve vizuálním editoru" + +#: wp-includes/js/tinymce/wp-mce-help.php:176 +msgid "Hotkeys" +msgstr "Klávesové zkratky" + +#: wp-includes/js/tinymce/wp-mce-help.php:177 +msgid "About the software" +msgstr "O programu" + +#: wp-includes/js/tinymce/wp-mce-help.php:183 +msgid "Rich Editing Basics" +msgstr "Základy práce s editorem" + +#: wp-includes/js/tinymce/wp-mce-help.php:184 +msgid "<em>Rich editing</em>, 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 "<em>Vizuální editor</em> (označovaný také zkratkou WYSIWYG) je online nástroj, s jehož pomocí můžete snadno vytvářet, upravovat a formátovat text, a to uživatelsky velmi příjemnou formou prostřednictvím příslušných grafických ikon. Pracovní verze textu z tohoto editoru je pak vzhledově skoro stejná jako zobrazená verze na webu. Zatímco se tedy můžete soustředit hlavně na samotný obsah, vizuální editor automaticky vytvoří příslušný HTML kód, který je uložen do databáze a následně zobrazován. Na webu se tedy objeví např. stejný styl písma, odkazy či obrázky tak, jak jste si to nastavili ve vizuálním editoru." + +#: wp-includes/js/tinymce/wp-mce-help.php:185 +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 "Součástí WordPressu je kvalitní vizuální editor TinyMCE, který bez problémů funguje ve všech nejpoužívanějších internetových prohlížečích. Další úpravy automaticky vytvořeného HTML kódu už jsou pak složitější než jednoduché psaní textu v editoru. Každá internetová stránka se skládá ze dvou hlavních složek: struktury a vzhledu. Struktura je definována pomocí aktuálního HTML kódu, který vzniká automaticky při použití vizuálního editoru (nebo ho můžete zadávat přímo). Konkrétní vzhled webu je pak určován aktuálně zvolenou šablonou, respektive definovanými kaskádovými styly (CSS) v souboru style.css. WordPress automaticky generuje validní kód podle specifikace XHTML 1.0, což znamená, že např. vložení několika nových řádků (zalomení) hned po sobě (značka BR) za nějakým odstavcem nevytvoří očekávanou větší mezeru, ale naopak budou tyto značky automaticky odstraněny, protože nejsou v tomto případě považovány za validní." + +#: wp-includes/js/tinymce/wp-mce-help.php:186 +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 "Pokud používáte vizuální editor, funguje v něm většina běžných klávesových zkratek stejně jako v jiných textových editorech (Word, Poznámkový blok). Například: Shift+Enter = zalomit řádek, Ctrl+C = kopírovat, Ctrl+X = vyjmout, Ctrl+Z = vrátit provedenou akci zpět, Ctrl+Y = opakovat předchozí akci, Ctrl+A = vybrat vše. Pokud používáte operační systém Mac OS X, použijte pro tyto zkratky klávesu Command místo Ctrl. Pro bližší informace o dostupných klávesových zkratkách se podívejte na jejich přehled." + +#: wp-includes/js/tinymce/wp-mce-help.php:187 +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 "Nechcete-li vizuální editor používat, můžete si ho vypnout v administraci - menu Uživatelé, položka Profil." + +#: wp-includes/js/tinymce/wp-mce-help.php:191 +msgid "Advanced Rich Editing" +msgstr "Pokročilá práce s TinyMCE" + +#: wp-includes/js/tinymce/wp-mce-help.php:192 +msgid "Images and Attachments" +msgstr "Obrázky a přílohy" + +#: wp-includes/js/tinymce/wp-mce-help.php:193 +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 "Panel nástrojů vizuálního editoru nabízí i tlačítko pro vkládání obrázků, které jsou uloženy někde na internetu. Pokud tedy znáte URL adresu obrázku, stačí kliknout na toto tlačítko a vložit URL adresu do příslušného pole." + +#: wp-includes/js/tinymce/wp-mce-help.php:194 +msgid "If you need to upload an image or another media file from your computer, you can use the Media Library buttons 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 \"Send to Editor\" and your image or file will appear in the post you are editing. If you are inserting a movie, there are additional options in the \"Media\" dialog that can be opened from the second toolbar row." +msgstr "Pokud chcete nahrát na web obrázek nebo nějaký jiný soubor ze svého počítače, tak stačí kliknout na některou z příslušných ikon (umístěny nad vizuálním editorem), a to podle typu nahrávaného mediálního souboru. Okamžitě se otevře nové okno s funkcemi Knihovny médií, kde můžete vybraný obrázek jednoduše nahrát a WordPress se přitom ještě pokusí vytvořit automaticky náhled. Abyste mohli nahraný obrázek vložit do příspěvku, klikněte nejdříve na vytvořený náhled, čímž zobrazíte další možnosti jeho nastavení. Až budete mít všechno potřebné připraveno, stačí už jen kliknout na tlačítko \"Vložit do příspěvku\" a nahraný obrázek se objeví přímo v upravovaném příspěvku. Pokud chcete nahrát na web třeba video, tak můžete použít ikonu \"Vložit / upravit mediální soubor\" (umístěna v druhé řádě ikon vizuálního editoru) a bude potřeba vyplnit ještě další informace." + +#: wp-includes/js/tinymce/wp-mce-help.php:195 +msgid "HTML in the Rich Editor" +msgstr "HTML v editoru" + +#: wp-includes/js/tinymce/wp-mce-help.php:196 +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 HTML editor. Examples are tables and <code>. To do this, click the HTML 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 "Jakýkoli HTML kód, který přímo vložíte do vizuálního editoru, bude zobrazen stejně jako když zobrazíte příspěvek. Co vidíte, to dostanete. Když potřebujete vložit nějaký HTML prvek, který nelze vytvořit běžnou cestou (tlačítky panelu nástrojů vizuálního editoru), musíte ho vložit ručně pomocí HTML editoru. Příkladem jsou např. tabulky, nebo označení zdrojového kódu. Pokud tedy potřebujete něco podobného udělat, přepněte z vizuálního editoru na záložku HTML, vložte/upravte HTML kód a poté přepněte zpátky do vizuálního editoru. Pokud je HTML kód správný a pro editor srozumitelný, zobrazí se zde jeho vizuální podoba." + +#: wp-includes/js/tinymce/wp-mce-help.php:197 +msgid "Pasting in the Rich Editor" +msgstr "Vkládání textu ve vizuálním editoru" + +#: wp-includes/js/tinymce/wp-mce-help.php:198 +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 HTML 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 "Jestliže třeba vkládáte text zkopírovaný z jiné internetové stránky, výsledek nemusí být takový, jaký byste očekávali, protože vše závisí i na používaném internetovém prohlížeči a zdrojové stránce. Vizuální editor se pokouší automaticky opravovat jakýkoli neplatný HTML kód, který je vkládán. Pokud tedy chcete získat při vkládání kopírovaného obsahu co nejlepší výsledky, použijte záložku pro vkládání HTML kódu, nebo jedno z tlačítek pro různé způsoby vkládání kopírovaného textu, které se nachází ve druhém řádku panelu nástrojů. Můžete také vyzkoušet ruční vkládání jednotlivých odstavců ze zvoleného textu. Ve většině internetových prohlížečů můžete vybraný odstavec označit tak, že na něj třikrát za sebou rychle kliknete (trojklik)." + +#: wp-includes/js/tinymce/wp-mce-help.php:199 +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 HTML mode." +msgstr "Vkládání kopírovaného obsahu z jiných aplikací (např. Word, Excel) je nejlepší provést pomocí tlačítka \"Vložit z Wordu\", které naleznete v druhé řadě panelu nástrojů vizuálního editoru." + +#: wp-includes/js/tinymce/wp-mce-help.php:203 +msgid "Writing at Full Speed" +msgstr "Psaní maximální rychlostí" + +#: wp-includes/js/tinymce/wp-mce-help.php:204 +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 "Pokud neradi zbytečně pohybujete myší, můžete používat při práci s vizuálním editorem klávesové zkratky. Uživatelé operačních systémů Windows a Linux mohou používat zkratky ve tvaru Ctrl + písmeno a uživatelé systému Macintosh zase Command + písmeno." + +#: wp-includes/js/tinymce/wp-mce-help.php:206 +#: wp-includes/js/tinymce/wp-mce-help.php:222 +msgid "Letter" +msgstr "Klávesa" + +#: wp-includes/js/tinymce/wp-mce-help.php:206 +#: wp-includes/js/tinymce/wp-mce-help.php:222 +msgid "Action" +msgstr "Akce" + +#: wp-includes/js/tinymce/wp-mce-help.php:208 +msgid "Select all" +msgstr "Vybrat vše" + +#: wp-includes/js/tinymce/wp-mce-help.php:220 +msgid "The following shortcuts use different access keys: Alt + Shift + letter." +msgstr "Následující klávesové zkratky využívají odlišné klávesy: Alt + Shift + písmeno." + +#: wp-includes/js/tinymce/wp-mce-help.php:227 +msgid "Check Spelling" +msgstr "Kontrola pravopisu" + +#: wp-includes/js/tinymce/wp-mce-help.php:228 +msgid "Justify Text" +msgstr "Zarovnat do bloku" + +#: wp-includes/js/tinymce/wp-mce-help.php:230 +msgid "Insert link" +msgstr "Vložit odkaz" + +#: wp-includes/js/tinymce/wp-mce-help.php:231 +msgid "Remove link" +msgstr "Odstranit odkaz" + +#: wp-includes/js/tinymce/wp-mce-help.php:232 +msgid "Quote" +msgstr "Citace" + +#: wp-includes/js/tinymce/wp-mce-help.php:233 +msgid "Full Screen" +msgstr "Celá obrazovka" + +#: wp-includes/js/tinymce/wp-mce-help.php:234 +msgid "Insert Page Break tag" +msgstr "Vložit značku pro rozdělení stránky" + +#: wp-includes/js/tinymce/wp-mce-help.php:235 +msgid "Switch to HTML mode" +msgstr "Přepnout do režimu HTML " + +#: wp-includes/js/tinymce/wp-mce-help.php:243 +#, php-format +msgid "TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under %sLGPL</a>\tby Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances." +msgstr "TinyMCE je HTML WYSIWYG editor, který je založený na Javascriptu a nezávislý na platformě, na které je provozován. Tento editor je šířen jako OpenSource software (pod licencí %sLGPL</a>) a je neustále vylepšován společností Moxiecode Systems AB. Je schopen převádět obsah textových polí nebo jiných HTML prvků do vizuální podoby a tu zase naopak převádět na čistý HTML kód." + +#: wp-includes/js/tinymce/wp-mce-help.php:243 +msgid "GNU Library General Public Licence" +msgstr "GNU Library General Public Licence" + +#: wp-includes/js/tinymce/wp-mce-help.php:244 +msgid "Copyright © 2003-2007, <a href=\"http://www.moxiecode.com\" target=\"_blank\">Moxiecode Systems AB</a>, All rights reserved." +msgstr "Copyright © 2003-2007, <a href=\"http://www.moxiecode.com\" target=\"_blank\">Moxiecode Systems AB</a>, všechna práva vyhrazena." + +#: wp-includes/js/tinymce/wp-mce-help.php:245 +msgid "For more information about this software visit the <a href=\"http://tinymce.moxiecode.com\" target=\"_blank\">TinyMCE website</a>." +msgstr "Další informace o tomto programu naleznete na internetových stránkách <a href=\"http://tinymce.moxiecode.com\" target=\"_blank\">TinyMCE</a>." + +#: wp-includes/js/tinymce/wp-mce-help.php:248 +msgid "Got Moxie?" +msgstr "Znáte Moxie?" + +#: wp-includes/js/tinymce/wp-mce-help.php:249 +msgid "Hosted By Sourceforge" +msgstr "Hostováno u Sourceforge" + +#: wp-includes/js/tinymce/wp-mce-help.php:250 +msgid "Also on freshmeat" +msgstr "Dostupný také na freshmeat.net" + +#: wp-includes/link-template.php:513 +msgid "Comments Feed" +msgstr "RSS komentářů" + +#: wp-includes/link-template.php:685 +#: wp-includes/link-template.php:828 +#: wp-includes/link-template.php:914 +#: wp-includes/link-template.php:955 +msgid "Edit This" +msgstr "Upravit" + +#: wp-includes/link-template.php:687 +#: wp-includes/taxonomy.php:362 +msgid "Edit Tag" +msgstr "Upravit štítek" + +#: wp-includes/link-template.php:1078 +#: wp-includes/link-template.php:1356 +msgid "Previous Post" +msgstr "Předchozí příspěvek" + +#: wp-includes/link-template.php:1078 +#: wp-includes/link-template.php:1356 +msgid "Next Post" +msgstr "Další příspěvek" + +#: wp-includes/link-template.php:1216 +msgid "First Post" +msgstr "První příspěvek" + +#: wp-includes/link-template.php:1216 +msgid "Last Post" +msgstr "Poslední příspěvek" + +#: wp-includes/link-template.php:1698 +msgid "Newer Comments »" +msgstr "Novější komentáře »" + +#: wp-includes/link-template.php:1735 +msgid "« Older Comments" +msgstr "« Starší komentáře" + +#: wp-includes/link-template.php:2260 +msgid "This is the short link." +msgstr "Zkrácený odkaz." + +#: wp-includes/load.php:397 +msgid "The site you have requested is not installed properly. Please contact the system administrator." +msgstr "Požadovaný web není správně nainstalován. Kontaktujte prosím systémového administrátora vašeho serveru." + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/locale.php:118 +msgid "S_Sunday_initial" +msgstr "N_Neděle_initial" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/locale.php:119 +msgid "M_Monday_initial" +msgstr "P_Pondělí_initial" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/locale.php:120 +msgid "T_Tuesday_initial" +msgstr "Ú_Úterý_initial" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/locale.php:121 +msgid "W_Wednesday_initial" +msgstr "S_Středa_initial" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/locale.php:122 +msgid "T_Thursday_initial" +msgstr "Č_Čtvrtek_initial" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/locale.php:123 +msgid "F_Friday_initial" +msgstr "P_Pátek_initial" + +#. translators: one-letter abbreviation of the weekday +#: wp-includes/locale.php:124 +msgid "S_Saturday_initial" +msgstr "S_Sobota_initial" + +#: wp-includes/locale.php:173 +msgid "am" +msgstr "am" + +#: wp-includes/locale.php:174 +msgid "pm" +msgstr "pm" + +#: wp-includes/locale.php:175 +msgid "AM" +msgstr "AM" + +#: wp-includes/locale.php:176 +msgid "PM" +msgstr "PM" + +#. translators: $thousands_sep argument for http://php.net/number_format, default is , +#: wp-includes/locale.php:182 +msgid "number_format_thousands_sep" +msgstr " " + +#. translators: $dec_point argument for http://php.net/number_format, default is . +#: wp-includes/locale.php:186 +msgid "number_format_decimal_point" +msgstr "," + +#: wp-includes/media.php:246 +#, php-format +msgid "File “%s” doesn’t exist?" +msgstr "Soubor „%s“ neexistuje?" + +#: wp-includes/media.php:249 +msgid "The GD image library is not installed." +msgstr "Knihovna GD není nainstalována." + +#: wp-includes/media.php:256 +#, php-format +msgid "File “%s” is not an image." +msgstr "File „%s“ není obrázek." + +#: wp-includes/media.php:413 +msgid "Could not read image size" +msgstr "Nepodařilo se načíst velikost obrázku" + +#: wp-includes/media.php:418 +msgid "Could not calculate resized image dimensions" +msgstr "Nepodařilo se bohužel vypočítat nové rozměry upravovaného obrázku" + +#: wp-includes/media.php:446 +#: wp-includes/media.php:449 +#: wp-includes/media.php:454 +msgid "Resize path invalid" +msgstr "Cesta pro uložení změn velikosti není správná" + +#: wp-includes/nav-menu.php:209 +#: wp-includes/nav-menu.php:216 +#, php-format +msgid "The menu name <strong>%s</strong> conflicts with another menu name. Please try another." +msgstr "Zadaný název <strong>%s</strong> již existuje. Zkuste prosím pro nové menu zvolit jiný název." + +#: wp-includes/nav-menu.php:258 +msgid "The given object ID is not that of a menu item." +msgstr "Toto ID objektu není položkou menu." + +#: wp-includes/nav-menu.php:563 +msgid "Custom" +msgstr "Uživatelský odkaz" + +#: wp-includes/pluggable.php:490 +msgid "<strong>ERROR</strong>: Invalid username or incorrect password." +msgstr "<strong>CHYBA</strong>: Neplatné uživatelské jméno nebo nesprávné heslo." + +#: wp-includes/pluggable.php:1021 +#, php-format +msgid "New comment on your post \"%s\"" +msgstr "Nový komentář u příspěvku \"%s\"" + +#. translators: 1: comment author, 2: author IP, 3: author domain +#: wp-includes/pluggable.php:1023 +#: wp-includes/pluggable.php:1130 +#, php-format +msgid "Author : %1$s (IP: %2$s , %3$s)" +msgstr "Autor : %1$s (IP: %2$s , %3$s)" + +#: wp-includes/pluggable.php:1024 +#: wp-includes/pluggable.php:1131 +#, php-format +msgid "E-mail : %s" +msgstr "Email: %s" + +#: wp-includes/pluggable.php:1025 +#: wp-includes/pluggable.php:1035 +#: wp-includes/pluggable.php:1044 +#: wp-includes/pluggable.php:1117 +#: wp-includes/pluggable.php:1124 +#: wp-includes/pluggable.php:1132 +#, php-format +msgid "URL : %s" +msgstr "URL : %s" + +#: wp-includes/pluggable.php:1026 +#: wp-includes/pluggable.php:1133 +#, php-format +msgid "Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput=%s" +msgstr "Whois : http://ws.arin.net/cgi-bin/whois.pl?queryinput=%s" + +#: wp-includes/pluggable.php:1027 +#: wp-includes/pluggable.php:1134 +msgid "Comment: " +msgstr "Komentář:" + +#: wp-includes/pluggable.php:1028 +msgid "You can see all comments on this post here: " +msgstr "Všechny komentáře k tomuto příspěvku můžete vidět zde: " + +#. translators: 1: blog name, 2: post title +#: wp-includes/pluggable.php:1030 +#, php-format +msgid "[%1$s] Comment: \"%2$s\"" +msgstr "[%1$s] Komentář: \"%2$s\"" + +#: wp-includes/pluggable.php:1032 +#, php-format +msgid "New trackback on your post \"%s\"" +msgstr "Nový trackback u příspěvku \"%s\"" + +#. translators: 1: website name, 2: author IP, 3: author domain +#. translators: 1: comment author, 2: author IP, 3: author domain +#: wp-includes/pluggable.php:1034 +#: wp-includes/pluggable.php:1043 +#, php-format +msgid "Website: %1$s (IP: %2$s , %3$s)" +msgstr "Web: %1$s (IP: %2$s , %3$s)" + +#: wp-includes/pluggable.php:1036 +#: wp-includes/pluggable.php:1045 +msgid "Excerpt: " +msgstr "Stručný výpis příspěvku:" + +#: wp-includes/pluggable.php:1037 +msgid "You can see all trackbacks on this post here: " +msgstr "Všechny trackbacky k tomuto příspěvku můžete vidět zde:" + +#. translators: 1: blog name, 2: post title +#: wp-includes/pluggable.php:1039 +#, php-format +msgid "[%1$s] Trackback: \"%2$s\"" +msgstr "[%1$s] Trackback: \"%2$s\"" + +#: wp-includes/pluggable.php:1041 +#, php-format +msgid "New pingback on your post \"%s\"" +msgstr "Nový pingback u příspěvku \"%s\"" + +#: wp-includes/pluggable.php:1046 +msgid "You can see all pingbacks on this post here: " +msgstr "Všechny pingbacky k tomuto příspěvku můžete vidět zde:" + +#. translators: 1: blog name, 2: post title +#: wp-includes/pluggable.php:1048 +#, php-format +msgid "[%1$s] Pingback: \"%2$s\"" +msgstr "[%1$s] Pingback: \"%2$s\"" + +#: wp-includes/pluggable.php:1052 +#: wp-includes/pluggable.php:1140 +#, php-format +msgid "Trash it: %s" +msgstr "Odstranit: %s" + +#: wp-includes/pluggable.php:1054 +#: wp-includes/pluggable.php:1142 +#, php-format +msgid "Delete it: %s" +msgstr "Smazat: %s" + +#: wp-includes/pluggable.php:1055 +#: wp-includes/pluggable.php:1143 +#, php-format +msgid "Spam it: %s" +msgstr "Označit jako spam: %s" + +#: wp-includes/pluggable.php:1114 +#, php-format +msgid "A new trackback on the post \"%s\" is waiting for your approval" +msgstr "Nový trackback u příspěvku \"%s\" čeká na schválení" + +#: wp-includes/pluggable.php:1116 +#: wp-includes/pluggable.php:1123 +#, php-format +msgid "Website : %1$s (IP: %2$s , %3$s)" +msgstr "Web: %1$s (IP: %2$s , %3$s)" + +#: wp-includes/pluggable.php:1118 +msgid "Trackback excerpt: " +msgstr "Stručný výpis trackbacku:" + +#: wp-includes/pluggable.php:1121 +#, php-format +msgid "A new pingback on the post \"%s\" is waiting for your approval" +msgstr "Nový pingback u příspěvku \"%s\" čeká na schválení" + +#: wp-includes/pluggable.php:1125 +msgid "Pingback excerpt: " +msgstr "Stručný výpis pingbacku:" + +#: wp-includes/pluggable.php:1128 +#, php-format +msgid "A new comment on the post \"%s\" is waiting for your approval" +msgstr "Nový komentář u příspěvku \"%s\" čeká na schválení" + +#: wp-includes/pluggable.php:1138 +#, php-format +msgid "Approve it: %s" +msgstr "Schválit: %s" + +#: wp-includes/pluggable.php:1145 +#, php-format +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] "Nyní čeká na schválení %s komentář. Měli byste ho schválit, nebo odmítnout v menu Komentáře:" +msgstr[1] "Nyní čekají na schválení %s komentáře. Měli byste je schválit, nebo odmítnout v menu Komentáře:" +msgstr[2] "Nyní čeká na schválení %s komentářů. Měli byste je schválit, nebo odmítnout v menu Komentáře:" + +#: wp-includes/pluggable.php:1149 +#, php-format +msgid "[%1$s] Please moderate: \"%2$s\"" +msgstr "[%1$s] Prosím moderujte: \"%2$s\"" + +#: wp-includes/pluggable.php:1175 +#, php-format +msgid "Password Lost and Changed for user: %s" +msgstr "Zapomenuté heslo bylo změněno pro uživatele: %s" + +#: wp-includes/pluggable.php:1179 +#, php-format +msgid "[%s] Password Lost/Changed" +msgstr "[%s] Heslo zapomenuto/změněno" + +#: wp-includes/pluggable.php:1203 +#, php-format +msgid "New user registration on your site %s:" +msgstr "Registrace nového uživatele na webu %s:" + +#: wp-includes/pluggable.php:1204 +#: wp-includes/pluggable.php:1212 +#: wp-login.php:191 +#: wp-login.php:243 +#, php-format +msgid "Username: %s" +msgstr "Uživatelské jméno: %s" + +#: wp-includes/pluggable.php:1207 +#, php-format +msgid "[%s] New User Registration" +msgstr "[%s] Registrace nového uživatele" + +#: wp-includes/pluggable.php:1213 +#: wp-login.php:244 +#, php-format +msgid "Password: %s" +msgstr "Heslo: %s" + +#: wp-includes/pluggable.php:1216 +#, php-format +msgid "[%s] Your username and password" +msgstr "[%s] Vaše uživatelské jméno a heslo" + +#: wp-includes/post-template.php:114 +#, php-format +msgid "Protected: %s" +msgstr "Chráněno: %s" + +#: wp-includes/post-template.php:117 +#, php-format +msgid "Private: %s" +msgstr "Soukromý: %s" + +#: wp-includes/post-template.php:187 +msgid "(more...)" +msgstr "(Celý příspěvek...)" + +#: wp-includes/post-template.php:258 +msgid "There is no excerpt because this is a protected post." +msgstr "Stručný obsah příspěvku zde není uveden, protože je tento příspěvek chráněn heslem." + +#: wp-includes/post-template.php:569 +msgid "Pages:" +msgstr "Stránky:" + +#: wp-includes/post-template.php:571 +msgid "Next page" +msgstr "Následující stránka" + +#: wp-includes/post-template.php:572 +msgid "Previous page" +msgstr "Předchozí stránka" + +#: wp-includes/post-template.php:839 +msgid "Home" +msgstr "Hlavní stránka" + +#: wp-includes/post-template.php:1013 +msgid "This post is password protected. To view it please enter your password below:" +msgstr "Tento příspěvek je chráněn heslem. Pokud ho chcete zobrazit, zadejte prosím heslo:" + +#. translators: revision date format, see http://php.net/date +#: wp-includes/post-template.php:1077 +msgctxt "revision date format" +msgid "j F, Y @ G:i" +msgstr "j.n.Y, G:i" + +#. translators: 1: date +#: wp-includes/post-template.php:1079 +#, php-format +msgid "%1$s [Autosave]" +msgstr "%1$s [Automaticky uloženo]" + +#. translators: 1: date +#: wp-includes/post-template.php:1081 +#, php-format +msgid "%1$s [Current Revision]" +msgstr "%1$s [Aktuální verze]" + +#. translators: post revision: 1: when, 2: author name +#: wp-includes/post-template.php:1147 +#, php-format +msgctxt "post revision" +msgid "%1$s by %2$s" +msgstr "%1$s (úpravy provedl %2$s)" + +#: wp-includes/post-template.php:1197 +msgid "Compare Revisions" +msgstr "Porovnejte vybrané verze" + +#. translators: column name in revisons +#: wp-includes/post-template.php:1213 +msgctxt "revisions column name" +msgid "Old" +msgstr "Starší" + +#. translators: column name in revisons +#: wp-includes/post-template.php:1214 +msgctxt "revisions column name" +msgid "New" +msgstr "Novější" + +#. translators: column name in revisons +#: wp-includes/post-template.php:1215 +msgctxt "revisions column name" +msgid "Date Created" +msgstr "Vytvořeno" + +#: wp-includes/post.php:59 +msgid "Revision" +msgstr "Starší verze" + +#: wp-includes/post.php:72 +msgid "Navigation Menu Items" +msgstr "Položky navigačního menu" + +#: wp-includes/post.php:73 +msgid "Navigation Menu Item" +msgstr "Položka navigačního menu" + +#: wp-includes/post.php:84 +msgctxt "post" +msgid "Published" +msgstr "Publikováno" + +#: wp-includes/post.php:87 +#, php-format +msgid "Published <span class=\"count\">(%s)</span>" +msgid_plural "Published <span class=\"count\">(%s)</span>" +msgstr[0] "Publikovaný <span class=\"count\">(%s)</span>" +msgstr[1] "Publikované <span class=\"count\">(%s)</span>" +msgstr[2] "Publikovaných <span class=\"count\">(%s)</span>" + +#: wp-includes/post.php:91 +msgctxt "post" +msgid "Scheduled" +msgstr "Plánováno" + +#: wp-includes/post.php:94 +#, php-format +msgid "Scheduled <span class=\"count\">(%s)</span>" +msgid_plural "Scheduled <span class=\"count\">(%s)</span>" +msgstr[0] "Plánovaný <span class=\"count\">(%s)</span>" +msgstr[1] "Plánované <span class=\"count\">(%s)</span>" +msgstr[2] "Plánovaných <span class=\"count\">(%s)</span>" + +#: wp-includes/post.php:98 +msgctxt "post" +msgid "Draft" +msgstr "Koncept" + +#: wp-includes/post.php:101 +#, php-format +msgid "Draft <span class=\"count\">(%s)</span>" +msgid_plural "Drafts <span class=\"count\">(%s)</span>" +msgstr[0] "Koncept <span class=\"count\">(%s)</span>" +msgstr[1] "Koncepty <span class=\"count\">(%s)</span>" +msgstr[2] "Konceptů <span class=\"count\">(%s)</span>" + +#: wp-includes/post.php:105 +msgctxt "post" +msgid "Pending" +msgstr "Čekající na schválení" + +#: wp-includes/post.php:108 +#, php-format +msgid "Pending <span class=\"count\">(%s)</span>" +msgid_plural "Pending <span class=\"count\">(%s)</span>" +msgstr[0] "Čekající na schválení <span class=\"count\">(%s)</span>" +msgstr[1] "Čekající na schválení <span class=\"count\">(%s)</span>" +msgstr[2] "Čekajících na schválení <span class=\"count\">(%s)</span>" + +#: wp-includes/post.php:112 +msgctxt "post" +msgid "Private" +msgstr "Soukromý" + +#: wp-includes/post.php:115 +#, php-format +msgid "Private <span class=\"count\">(%s)</span>" +msgid_plural "Private <span class=\"count\">(%s)</span>" +msgstr[0] "Soukromý <span class=\"count\">(%s)</span>" +msgstr[1] "Soukromé <span class=\"count\">(%s)</span>" +msgstr[2] "Soukromých <span class=\"count\">(%s)</span>" + +#: wp-includes/post.php:119 +msgctxt "post" +msgid "Trash" +msgstr "Koš" + +#: wp-includes/post.php:122 +#, php-format +msgid "Trash <span class=\"count\">(%s)</span>" +msgid_plural "Trash <span class=\"count\">(%s)</span>" +msgstr[0] "Koš <span class=\"count\">(%s)</span>" +msgstr[1] "Koš <span class=\"count\">(%s)</span>" +msgstr[2] "Koš <span class=\"count\">(%s)</span>" + +#: wp-includes/post.php:947 +msgctxt "post type general name" +msgid "Posts" +msgstr "Příspěvky" + +#: wp-includes/post.php:947 +msgctxt "post type general name" +msgid "Pages" +msgstr "Stránky" + +#: wp-includes/post.php:948 +msgctxt "post type singular name" +msgid "Post" +msgstr "Příspěvek" + +#: wp-includes/post.php:948 +msgctxt "post type singular name" +msgid "Page" +msgstr "Stránka" + +#: wp-includes/post.php:950 +msgid "Add New Post" +msgstr "Vytvořit nový příspěvek" + +#: wp-includes/post.php:950 +msgid "Add New Page" +msgstr "Vytvořit novou stránku" + +#: wp-includes/post.php:951 +msgid "Edit Page" +msgstr "Upravit stránku" + +#: wp-includes/post.php:953 +msgid "View Page" +msgstr "Zobrazit stránku" + +#: wp-includes/post.php:954 +msgid "Search Posts" +msgstr "Hledat příspěvky" + +#: wp-includes/post.php:954 +msgid "Search Pages" +msgstr "Hledat stránky" + +#: wp-includes/post.php:955 +msgid "No posts found" +msgstr "Nebyly nalezeny žádné příspěvky" + +#: wp-includes/post.php:955 +msgid "No pages found" +msgstr "Nebyly nalezeny žádné stránky" + +#: wp-includes/post.php:956 +msgid "No posts found in Trash" +msgstr "V koši nebyly nalezeny žádné příspěvky" + +#: wp-includes/post.php:956 +msgid "No pages found in Trash" +msgstr "V koši nebyly nalezeny žádné stránky" + +#: wp-includes/post.php:957 +msgid "Parent Page:" +msgstr "Nadřazená stránka:" + +#: wp-includes/post.php:2169 +msgid "Content, title, and excerpt are empty." +msgstr "Obsah, název a stručný výpis nejsou vyplněny." + +#: wp-includes/post.php:2302 +msgid "Could not update post in the database" +msgstr "Nepodařilo se aktualizovat příspěvek v databázi" + +#: wp-includes/post.php:2318 +msgid "Could not insert post into the database" +msgstr "Nepodařilo se uložit příspěvek do databáze" + +#: wp-includes/post.php:2368 +msgid "The page template is invalid." +msgstr "Šablona stránky je neplatná." + +#: wp-includes/post.php:4540 +msgid "Cannot create a revision of a revision" +msgstr "Nemůžete vytvořit starší verzi starší verze příspěvku" + +#: wp-includes/post.php:4716 +msgid "You do not have permission to preview drafts." +msgstr "Nemáte dostatečné oprávnění pro zobrazování náhledů konceptů." + +#: wp-includes/registration.php:126 +msgid "Cannot create a user with an empty login name." +msgstr "Nemůžete vytvořit nového uživatele, pokud nezadáte jeho uživatelské jméno." + +#: wp-includes/registration.php:129 +msgid "This username is already registered." +msgstr "Toto uživatelské jméno už bylo registrováno." + +#: wp-includes/registration.php:144 +msgid "This email address is already registered." +msgstr "Tato emailová adresa už byla registrována." + +#: wp-includes/registration.php:326 +msgid "AIM" +msgstr "AIM (AOL Instant Messenger)" + +#: wp-includes/registration.php:327 +msgid "Yahoo IM" +msgstr "Yahoo IM" + +#: wp-includes/registration.php:328 +msgid "Jabber / Google Talk" +msgstr "Jabber / Google Talk" + +#: wp-includes/rss.php:900 +msgid "An error has occurred, which probably means the feed is down. Try again later." +msgstr "Objevila se nečekaná chyba, RSS zdroj je pravděpodobně mimo provoz. Zkuste to prosím později." + +#: wp-includes/script-loader.php:66 +msgid "" +"You are about to permanently delete the selected items.\n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Chystáte se nenávratně smazat vybrané položky.\n" +" Akci můžete zastavit kliknutím na 'Storno' nebo potvrdit pomocí 'OK'." + +#: wp-includes/script-loader.php:75 +msgid "(Quick Links)" +msgstr "(Rychlé odkazy)" + +#: wp-includes/script-loader.php:76 +msgid "Enter a word to look up:" +msgstr "Vložte slovo pro kontrolu:" + +#: wp-includes/script-loader.php:77 +msgid "Dictionary lookup" +msgstr "Zkontrolovat slovo ve slovníku" + +#: wp-includes/script-loader.php:78 +msgid "lookup" +msgstr "kontrola" + +#: wp-includes/script-loader.php:79 +msgid "Close all open tags" +msgstr "Uzavřít všechny otevřené značky" + +#: wp-includes/script-loader.php:80 +msgid "close tags" +msgstr "uzavřít značky" + +#: wp-includes/script-loader.php:81 +msgid "Enter the URL" +msgstr "Vložit URL" + +#: wp-includes/script-loader.php:82 +msgid "Enter the URL of the image" +msgstr "Vložit URL obrázku" + +#: wp-includes/script-loader.php:83 +msgid "Enter a description of the image" +msgstr "Vložit popis obrázku" + +#: wp-includes/script-loader.php:96 +#: wp-includes/script-loader.php:241 +msgid "You do not have permission to do that." +msgstr "Nemáte dostatečné oprávnění pro tuto činnost." + +#: wp-includes/script-loader.php:97 +#: wp-includes/script-loader.php:242 +msgid "An unidentified error has occurred." +msgstr "Došlo k nějaké blíže neidentifikované chybě." + +#: wp-includes/script-loader.php:167 +msgid "Next >" +msgstr "Následující >" + +#: wp-includes/script-loader.php:168 +msgid "< Prev" +msgstr "< Předchozí" + +#: wp-includes/script-loader.php:169 +msgid "Image" +msgstr "Obrázek" + +#: wp-includes/script-loader.php:170 +msgid "of" +msgstr "z celkem" + +#: wp-includes/script-loader.php:172 +msgid "This feature requires inline frames. You have iframes disabled or your browser does not support them." +msgstr "Tato funkce WordPressu vyžaduje použití vnitřních rámů (iframe), které však patrně nemáte povoleny nebo je váš prohlížeč vůbec nepodporuje." + +#: wp-includes/script-loader.php:196 +msgid "not configured" +msgstr "nenastaveno" + +#: wp-includes/script-loader.php:199 +msgid "You have attempted to queue too many files." +msgstr "Pokusili jste se zařadit do fronty příliš mnoho souborů." + +#: wp-includes/script-loader.php:200 +msgid "This file exceeds the maximum upload size for this site." +msgstr "Soubor překročil maximální povolenou velikost nahrávaného souboru na tomto webu." + +#: wp-includes/script-loader.php:201 +msgid "This file is empty. Please try another." +msgstr "Soubor je prázdný. Zkuste prosím nějaký jiný." + +#: wp-includes/script-loader.php:202 +msgid "This file type is not allowed. Please try another." +msgstr "Tento typ souboru není povolen. Zkuste prosím jiný." + +#: wp-includes/script-loader.php:203 +msgid "An error occurred in the upload. Please try again later." +msgstr "Při nahrávání došlo k chybě. Zkuste to prosím později." + +#: wp-includes/script-loader.php:204 +msgid "There was a configuration error. Please contact the server administrator." +msgstr "Došlo k chybě v nastavení serveru! Kontaktujte prosím administrátora vašeho serveru." + +#: wp-includes/script-loader.php:205 +msgid "You may only upload 1 file." +msgstr "Můžete nahrávat pouze jeden soubor." + +#: wp-includes/script-loader.php:206 +msgid "HTTP error." +msgstr "HTTP chyba." + +#: wp-includes/script-loader.php:207 +msgid "Upload failed." +msgstr "Nahrávání selhalo." + +#: wp-includes/script-loader.php:208 +msgid "IO error." +msgstr "IO chyba." + +#: wp-includes/script-loader.php:209 +msgid "Security error." +msgstr "Bezpečnostní chyba." + +#: wp-includes/script-loader.php:210 +msgid "File canceled." +msgstr "Soubor byl zrušen." + +#: wp-includes/script-loader.php:211 +msgid "Upload stopped." +msgstr "Nahrávání bylo zastaveno." + +#: wp-includes/script-loader.php:213 +msgid "Crunching…" +msgstr "Zpracovávám…" + +#: wp-includes/script-loader.php:214 +msgid "moved to the trash." +msgstr "byl přesunut do koše." + +#: wp-includes/script-loader.php:231 +msgid "Separate multiple categories with commas." +msgstr "Více rubrik oddělte čárkami." + +#. translators: password strength +#: wp-includes/script-loader.php:256 +msgctxt "password strength" +msgid "Medium" +msgstr "Střední" + +#: wp-includes/script-loader.php:281 +msgid "Tags used on this post:" +msgstr "Štítky použité u tohoto příspěvku:" + +#: wp-includes/script-loader.php:283 +msgid "Add new tag" +msgstr "Vytvořit nový štítek" + +#: wp-includes/script-loader.php:288 +msgid "Publish on:" +msgstr "Publikovat:" + +#: wp-includes/script-loader.php:289 +msgid "Schedule for:" +msgstr "Naplánováno na:" + +#: wp-includes/script-loader.php:290 +msgid "Published on:" +msgstr "Publikováno:" + +#: wp-includes/script-loader.php:291 +msgid "Show more comments" +msgstr "Zobrazit další komentáře" + +#: wp-includes/script-loader.php:292 +msgid "No more comments found." +msgstr "Nebyly nalezeny žádné další komentáře." + +#: wp-includes/script-loader.php:295 +msgid "Update Post" +msgstr "Aktualizovat příspěvek" + +#: wp-includes/script-loader.php:296 +msgid "Update Page" +msgstr "Aktualizovat stránku" + +#: wp-includes/script-loader.php:302 +msgid "Password Protected" +msgstr "Chráněno heslem" + +#: wp-includes/script-loader.php:316 +msgid "Submitted on:" +msgstr "Uloženo:" + +#: wp-includes/script-loader.php:331 +#, php-format +msgid "Word count: %d" +msgstr "Počet slov: %d" + +#: wp-includes/script-loader.php:341 +#: wp-includes/script-loader.php:350 +msgid "Error while saving the changes." +msgstr "Během ukládání změn se objevila nečekaná chyba." + +#: wp-includes/script-loader.php:342 +msgid "Remove From Bulk Edit" +msgstr "Odebrat z hromadných úprav" + +#: wp-includes/script-loader.php:357 +msgid "Plugin Information:" +msgstr "Informace o pluginu:" + +#: wp-includes/script-loader.php:358 +msgid "Are you sure you want to install this plugin?" +msgstr "Opravdu chcete nainstalovat tento plugin?" + +#: wp-includes/script-loader.php:382 +msgid "Saving..." +msgstr "Ukládám..." + +#: wp-includes/script-loader.php:383 +msgid "Could not set that as the thumbnail image. Try a different attachment." +msgstr "Nepodařilo se nastavit tento soubor jako náhledový obrázek. Zkuste to prosím s jiným souborem." + +#: wp-includes/script-loader.php:384 +msgid "Done" +msgstr "Hotovo" + +#: wp-includes/script-loader.php:390 +msgctxt "search results" +msgid "No results found." +msgstr "Nebylo nic nalezeno." + +#: wp-includes/script-loader.php:391 +msgid "" +"You are about to permanently delete this menu. \n" +" 'Cancel' to stop, 'OK' to delete." +msgstr "" +"Chystáte se nenávratně smazat vybrané menu.\n" +" Akci můžete zastavit kliknutím na 'Storno' nebo potvrdit pomocí 'OK'." + +#: wp-includes/script-loader.php:508 +msgid "Preview this Page" +msgstr "Prohlédnout stránku" + +#: wp-includes/script-loader.php:509 +msgid "Preview this Post" +msgstr "Prohlédnout příspěvek" + +#: wp-includes/script-loader.php:511 +msgid "Saving Draft…" +msgstr "Ukládání konceptu…" + +#: wp-includes/taxonomy.php:41 +msgid "Navigation Menus" +msgstr "Navigační menu" + +#: wp-includes/taxonomy.php:42 +msgid "Navigation Menu" +msgstr "Navigační menu" + +#: wp-includes/taxonomy.php:355 +msgctxt "taxonomy general name" +msgid "Post Tags" +msgstr "Štítky" + +#: wp-includes/taxonomy.php:355 +msgctxt "taxonomy general name" +msgid "Categories" +msgstr "Rubriky" + +#: wp-includes/taxonomy.php:356 +msgctxt "taxonomy singular name" +msgid "Post Tag" +msgstr "Štítek" + +#: wp-includes/taxonomy.php:356 +msgctxt "taxonomy singular name" +msgid "Category" +msgstr "Rubrika" + +#: wp-includes/taxonomy.php:357 +msgid "Search Tags" +msgstr "Hledat štítky" + +#: wp-includes/taxonomy.php:358 +msgid "Popular Tags" +msgstr "Oblíbené štítky" + +#: wp-includes/taxonomy.php:359 +msgid "All Tags" +msgstr "Všechny štítky" + +#: wp-includes/taxonomy.php:360 +msgid "Parent Category" +msgstr "Nadřazená rubrika" + +#: wp-includes/taxonomy.php:361 +msgid "Parent Category:" +msgstr "Nadřazená rubrika:" + +#: wp-includes/taxonomy.php:363 +msgid "Update Tag" +msgstr "Aktualizovat štítek" + +#: wp-includes/taxonomy.php:364 +msgid "Add New Tag" +msgstr "Vytvořit nový štítek" + +#: wp-includes/taxonomy.php:364 +msgid "Add New Category" +msgstr "Vytvořit novou rubriku" + +#: wp-includes/taxonomy.php:365 +msgid "New Tag Name" +msgstr "Název nového štítku" + +#: wp-includes/taxonomy.php:365 +msgid "New Category Name" +msgstr "Název nové rubriky" + +#: wp-includes/taxonomy.php:367 +msgid "Add or remove tags" +msgstr "Přidat nebo odebrat štítky" + +#: wp-includes/taxonomy.php:368 +msgid "Choose from the most used tags" +msgstr "Vyberte si z nejpoužívanějších štítků" + +#: wp-includes/taxonomy.php:443 +#: wp-includes/taxonomy.php:515 +#: wp-includes/taxonomy.php:640 +#: wp-includes/taxonomy.php:825 +#: wp-includes/taxonomy.php:1451 +#: wp-includes/taxonomy.php:1720 +msgid "Invalid Taxonomy" +msgstr "Špatná taxonomie" + +#: wp-includes/taxonomy.php:510 +#: wp-includes/taxonomy.php:2490 +msgid "Empty Term" +msgstr "Prázdný název" + +#: wp-includes/taxonomy.php:1596 +msgid "Invalid term ID" +msgstr "Špatné ID" + +#: wp-includes/taxonomy.php:1599 +#: wp-includes/taxonomy.php:1917 +msgid "A name is required for this term" +msgstr "Název je vyžadován" + +#: wp-includes/taxonomy.php:1637 +msgid "A term with the name provided already exists with this parent." +msgstr "Zadaný název již na této hierarchické úrovni existuje." + +#: wp-includes/taxonomy.php:1641 +#: wp-includes/taxonomy.php:1648 +#: wp-includes/taxonomy.php:1658 +msgid "Could not insert term into the database" +msgstr "Uložení do databáze se nezdařilo." + +#: wp-includes/taxonomy.php:1652 +msgid "A term with the name provided already exists." +msgstr "Zadaný název již existuje." + +#: wp-includes/taxonomy.php:1947 +#, php-format +msgid "The slug “%s” is already in use by another term" +msgstr "Tento název v URL „%s“ je již používán pro jiný výraz." + +#: wp-includes/taxonomy.php:2632 +msgid "Invalid object ID" +msgstr "Neplatné ID objektu" + +#: 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 +#, php-format +msgid "Theme without %1$s" +msgstr "Šablona bez souboru %1$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 +#, php-format +msgid "Please include a %1$s template in your theme." +msgstr "Používejte prosím soubor %1$s ve vaší šabloně." + +#: wp-includes/theme-compat/comments-popup.php:14 +#, php-format +msgid "%1$s - Comments on %2$s" +msgstr "%1$s - Komentáře k %2$s" + +#: wp-includes/theme-compat/comments-popup.php:35 +msgid "<abbr title=\"Really Simple Syndication\">RSS</abbr> feed for comments on this post." +msgstr "<abbr title=\"Really Simple Syndication\">RSS</abbr> komentářů k tomuto příspěvku." + +#: wp-includes/theme-compat/comments-popup.php:38 +#, php-format +msgid "The <abbr title=\"Universal Resource Locator\">URL</abbr> to TrackBack this entry is: <em>%s</em>" +msgstr "<abbr title=\"Universal Resource Locator\">URL</abbr> adresa pro trackbacky odkazující přímo na tento text: <em>%s</em>" + +#: wp-includes/theme-compat/comments-popup.php:56 +#, php-format +msgid "by %1$s — %2$s @ <a href=\"#comment-%3$s\">%4$s</a>" +msgstr "vložil %1$s — %2$s @ <a href=\"#comment-%3$s\">%4$s</a>" + +#: wp-includes/theme-compat/comments-popup.php:66 +msgid "Leave a comment" +msgstr "Napsat komentář" + +#: wp-includes/theme-compat/comments-popup.php:67 +#, php-format +msgid "Line and paragraph breaks automatic, e-mail address never displayed, <acronym title=\"Hypertext Markup Language\">HTML</acronym> allowed: <code>%s</code>" +msgstr "Nové řádky a odstavce jsou zalamovány automaticky, emailová adresa nebude v žádném případě zveřejněna. Povoleny jsou ještě tyto <acronym title=\"HyperText Markup Language\">HTML</acronym> značky: <code>%s</code>" + +#: wp-includes/theme-compat/comments-popup.php:71 +#, php-format +msgid "Logged in as <a href=\"%1$s\">%2$s</a>. <a href=\"%3$s\" title=\"Log out of this account\">Log out »</a>" +msgstr "Jste přihlášeni jako <a href=\"%1$s\">%2$s</a>. <a href=\"%3$s\" title=\"Odhlásit se z tohoto účtu\">Odhlásit se »</a>" + +#: wp-includes/theme-compat/comments-popup.php:85 +msgid "<abbr title=\"Universal Resource Locator\">URL</abbr>" +msgstr "<abbr title=\"Uniform Resource Locator\">URL</abbr>" + +#: wp-includes/theme-compat/comments-popup.php:90 +msgid "Your Comment" +msgstr "Komentář" + +#: wp-includes/theme-compat/comments-popup.php:98 +msgid "Say It!" +msgstr "Odeslat!" + +#: wp-includes/theme-compat/comments-popup.php:103 +msgid "Sorry, the comment form is closed at this time." +msgstr "Komentáře bohužel nejsou v současné době povoleny." + +#: wp-includes/theme-compat/comments-popup.php:108 +msgid "Close this window." +msgstr "Zavřít okno." + +#: wp-includes/theme-compat/comments-popup.php:114 +msgid "Sorry, no posts matched your criteria." +msgstr "Nebyl nalezen žádný příspěvek, který by odpovídal vašemu požadavku." + +#: wp-includes/theme-compat/comments-popup.php:118 +#, php-format +msgid "Powered by <a href=\"%s\" title=\"Powered by WordPress, state-of-the-art semantic personal publishing platform\"><strong>WordPress</strong></a>" +msgstr "Vytvořeno pomocí <a href=\"%s\" title=\"Používáme WordPress, nejmodernější sémantický osobní redakční systém\"><strong>WordPressu</strong></a>" + +#: wp-includes/theme-compat/comments.php:17 +msgid "This post is password protected. Enter the password to view comments." +msgstr "Tento příspěvek je chráněn heslem. Abyste si mohli prohlížet příslušné komentáře, musíte nejdříve zadat heslo." + +#: wp-includes/theme-compat/comments.php:26 +#, php-format +msgid "One Response to %2$s" +msgid_plural "%1$s Responses to %2$s" +msgstr[0] "Jedna reakce na %2$s" +msgstr[1] "%1$s reakce na %2$s" +msgstr[2] "%1$s reakcí na %2$s" + +#: wp-includes/theme-compat/comments.php:49 +msgid "Comments are closed." +msgstr "Komentáře nejsou povoleny." + +#: wp-includes/theme-compat/comments.php:73 +#, php-format +msgid "Logged in as <a href=\"%1$s\">%2$s</a>." +msgstr "Jste přihlášeni jako <a href=\"%1$s\">%2$s</a>." + +#: wp-includes/theme-compat/comments.php:73 +msgid "Log out of this account" +msgstr "Odhlásit se z tohoto účtu" + +#: wp-includes/theme-compat/comments.php:73 +msgid "Log out »" +msgstr "Odhlásit se »" + +#: wp-includes/theme-compat/comments.php:81 +msgid "Mail (will not be published)" +msgstr "Email (nebude zveřejněn)" + +#: wp-includes/theme-compat/comments.php:88 +#, php-format +msgid "<strong>XHTML:</strong> You can use these tags: <code>%s</code>" +msgstr "<strong>XHTML:</strong> Můžete použít následující značky: <code>%s</code>" + +#: wp-includes/theme-compat/comments.php:92 +msgid "Submit Comment" +msgstr "Odeslat komentář" + +#: wp-includes/theme-compat/footer.php:17 +#, php-format +msgid "%1$s is proudly powered by %2$s" +msgstr "Na webu %1$s používáme redakční systém %2$s" + +#: wp-includes/theme-compat/footer.php:19 +#, php-format +msgid "%1$s and %2$s." +msgstr "%1$s and %2$s." + +#: wp-includes/theme-compat/footer.php:19 +msgid "Entries (RSS)" +msgstr "RSS" + +#: wp-includes/theme-compat/footer.php:19 +msgid "Comments (RSS)" +msgstr "RSS komentářů" + +#: wp-includes/theme-compat/footer.php:20 +#, php-format +msgid "%d queries. %s seconds." +msgstr "%d dotazů. %s sekund." + +#: wp-includes/theme-compat/sidebar.php:32 +#, php-format +msgid "You are currently browsing the archives for the %s category." +msgstr "Právě prohlížíte výpis archivu rubriky %s." + +#: wp-includes/theme-compat/sidebar.php:35 +#, php-format +msgid "You are currently browsing the <a href=\"%1$s/\">%2$s</a> blog archives for the day %3$s." +msgstr "Právě prohlížíte výpis archivu webu <a href=\"%1$s/\">%2$s</a> pro den %3$s." + +#: wp-includes/theme-compat/sidebar.php:35 +msgid "l, F jS, Y" +msgstr "j. F Y (l)" + +#: wp-includes/theme-compat/sidebar.php:38 +#, php-format +msgid "You are currently browsing the <a href=\"%1$s/\">%2$s</a> blog archives for %3$s." +msgstr "Právě prohlížíte výpis archivu webu <a href=\"%1$s/\">%2$s</a> pro měsíc %3$s." + +#: wp-includes/theme-compat/sidebar.php:38 +msgid "F, Y" +msgstr "F, Y" + +#: wp-includes/theme-compat/sidebar.php:41 +#, php-format +msgid "You are currently browsing the <a href=\"%1$s/\">%2$s</a> blog archives for the year %3$s." +msgstr "Právě prohlížíte výpis archivu webu <a href=\"%1$s/\">%2$s</a> pro rok %3$s." + +#: wp-includes/theme-compat/sidebar.php:44 +#, php-format +msgid "You have searched the <a href=\"%1$s/\">%2$s</a> blog archives for <strong>‘%3$s’</strong>. If you are unable to find anything in these search results, you can try one of these links." +msgstr "Prohledávali jste archiv webu <a href=\"%1$s/\">%2$s</a> s dotazem na klíčové slovo <strong>„%3$s“</strong>. Pokud jste však ve výsledcích vyhledávání na této stránce neobjevili potřebné informace, můžete ještě vyzkoušet některý z těchto odkazů." + +#: wp-includes/theme-compat/sidebar.php:47 +#, php-format +msgid "You are currently browsing the <a href=\"%1$s/\">%2$s</a> blog archives." +msgstr "Právě prohlížíte výpis archivu webu <a href=\"%1$s/\">%2$s</a>." + +#: wp-includes/theme-compat/sidebar.php:73 +msgid "This page validates as XHTML 1.0 Transitional" +msgstr "Tato stránka je validní podle specifikace XHTML 1.0 Transitional" + +#: wp-includes/theme-compat/sidebar.php:73 +msgid "Valid <abbr title=\"eXtensible HyperText Markup Language\">XHTML</abbr>" +msgstr "Validní <abbr title=\"eXtensible HyperText Markup Language\">XHTML</abbr>" + +#: wp-includes/theme-compat/sidebar.php:74 +msgid "XHTML Friends Network" +msgstr "XHTML Friends Network je síť přátel tvořená prostřednictvím XHTML (konkrétně atributů odkazů)" + +#: wp-includes/theme-compat/sidebar.php:74 +msgid "XFN" +msgstr "XFN" + +#: wp-includes/theme.php:285 +msgid "File not readable." +msgstr "Soubor nelze přečíst." + +#: wp-includes/theme.php:337 +msgid "Template is missing." +msgstr "Chybí šablona." + +#: wp-includes/theme.php:339 +#, php-format +msgid "The parent theme is missing. Please install the \"%s\" parent theme." +msgstr "Nadřazená šablona nebyla nalezena. Zkuste prosím nainstalovat nadřazenou šablonu \"%s\"." + +#: wp-includes/theme.php:633 +msgid "Stylesheet is missing." +msgstr "Chybí soubor se styly." + +#: wp-includes/user.php:78 +msgid "<strong>ERROR</strong>: The username field is empty." +msgstr "<strong>Chyba</strong>: Nebylo zadáno uživatelské jméno." + +#: wp-includes/user.php:81 +msgid "<strong>ERROR</strong>: The password field is empty." +msgstr "<strong>Chyba</strong>: Nebylo zadáno heslo." + +#: wp-includes/user.php:89 +#, php-format +msgid "<strong>ERROR</strong>: Invalid username. <a href=\"%s\" title=\"Password Lost and Found\">Lost your password</a>?" +msgstr "<strong>CHYBA</strong>: Nesprávné heslo. <a href=\"%s\" title=\"Zapomenuté a obnovené heslo\">Zapomněli jste své heslo</a>?" + +#: wp-includes/user.php:94 +msgid "<strong>ERROR</strong>: Your account has been marked as a spammer." +msgstr "<strong>CHYBA</strong>: Váš účet byl pozastaven, protože jste označen jako spammer." + +#: wp-includes/user.php:100 +msgid "Site Suspended." +msgstr "Web byl pozastaven." + +#: wp-includes/user.php:109 +#, php-format +msgid "<strong>ERROR</strong>: Incorrect password. <a href=\"%s\" title=\"Password Lost and Found\">Lost your password</a>?" +msgstr "<strong>CHYBA</strong>: Incorrect password. <a href=\"%s\" title=\"Password Lost and Found\">Lost your password</a>?" + +#: wp-includes/user.php:134 +msgid "Please log in again." +msgstr "Přihlaste se prosím znovu." + +#: wp-includes/widgets.php:488 +#: wp-includes/widgets.php:547 +#, php-format +msgid "Sidebar %d" +msgstr "Postranní panel %d" + +#: wp-includes/wp-db.php:1515 +#, php-format +msgid "<strong>ERROR</strong>: WordPress %1$s requires MySQL %2$s or higher" +msgstr "<strong>CHYBA</strong>: WordPress %1$s vyžaduje MySQL verze %2$s a vyšší" + +#: wp-links-opml.php:32 +#, php-format +msgid "Links for %s" +msgstr "Odkazy z webu %s" + +#: wp-login.php:86 +msgid "Powered by WordPress" +msgstr "Vytvořeno pomocí WordPressu" + +#: wp-login.php:146 +msgid "<strong>ERROR</strong>: Enter a username or e-mail address." +msgstr "<strong>CHYBA</strong>: Zadejte své uživatelské jméno nebo emailovou adresu." + +#: wp-login.php:151 +msgid "<strong>ERROR</strong>: There is no user registered with that email address." +msgstr "<strong>CHYBA</strong>: Uživatel s tímto emailem tu není zaregistrován." + +#: wp-login.php:163 +msgid "<strong>ERROR</strong>: Invalid username or e-mail." +msgstr "<strong>CHYBA</strong>: Špatné uživatelské jméno nebo email." + +#: wp-login.php:177 +msgid "Password reset is not allowed for this user" +msgstr "Nemáte dostatečné oprávnění pro vytvoření nového hesla" + +#: wp-login.php:189 +msgid "Someone has asked to reset the password for the following site and username." +msgstr "Někdo požádal o vytvoření nového hesla pro následující uživatelské jméno na tomto webu." + +#: wp-login.php:192 +msgid "To reset your password visit the following address, otherwise just ignore this email and nothing will happen." +msgstr "Pro automatické vytvoření nového hesla použijte následující adresu, jinak tento email pouze ignorujte a nic se nestane." + +#: wp-login.php:202 +#, php-format +msgid "[%s] Password Reset" +msgstr "[%s] Vytvoření nového hesla" + +#: wp-login.php:208 +#: wp-login.php:260 +msgid "The e-mail could not be sent." +msgstr "Email nemohl být odeslán." + +#: wp-login.php:208 +#: wp-login.php:260 +msgid "Possible reason: your host may have disabled the mail() function..." +msgstr "Možná příčina: Váš poskytovatel hostingu nemá povolenou funkci mail()..." + +#: wp-login.php:227 +#: wp-login.php:230 +#: wp-login.php:234 +msgid "Invalid key" +msgstr "Špatný klíč" + +#: wp-login.php:254 +#, php-format +msgid "[%s] Your new password" +msgstr "[%s] Vaše nové heslo" + +#: wp-login.php:287 +msgid "<strong>ERROR</strong>: This username is already registered, please choose another one." +msgstr "<strong>CHYBA</strong>: Toto uživatelské jméno je již registrováno, zvolte si prosím nějaké jiné." + +#: wp-login.php:292 +msgid "<strong>ERROR</strong>: Please type your e-mail address." +msgstr "<strong>CHYBA</strong>: Zadejte prosím svoji emailovou adresu." + +#: wp-login.php:294 +msgid "<strong>ERROR</strong>: The email address isn’t correct." +msgstr "<strong>CHYBA</strong>: Zadaná emailová adresa není správná." + +#: wp-login.php:310 +#, php-format +msgid "<strong>ERROR</strong>: Couldn’t register you... please contact the <a href=\"mailto:%s\">webmaster</a> !" +msgstr "<strong>CHYBA</strong>: Registrace se nezdařila... Kontaktujte prosím <a href=\"mailto:%s\">administrátora webu</a> !" + +#: wp-login.php:380 +msgid "Sorry, that key does not appear to be valid." +msgstr "Omlouváme se, ale tento klíč zřejmě není platný." + +#: wp-login.php:384 +msgid "Lost Password" +msgstr "Zapomenuté heslo" + +#: wp-login.php:384 +msgid "Please enter your username or e-mail address. You will receive a new password via e-mail." +msgstr "Zadejte prosím své uživatelské jméno nebo emailovou adresu. Nové heslo vám bude automaticky zasláno emailem." + +#: wp-login.php:392 +msgid "Username or E-mail:" +msgstr "Uživatelské jméno nebo email:" + +#: wp-login.php:397 +msgid "Get New Password" +msgstr "Získat nové heslo" + +#: wp-login.php:411 +#: wp-login.php:490 +#: wp-login.php:622 +msgid "Are you lost?" +msgstr "Nevíte co dělat dál?" + +#: wp-login.php:411 +#: wp-login.php:490 +#: wp-login.php:622 +#, php-format +msgid "← Back to %s" +msgstr "← Zpět na %s" + +#: wp-login.php:464 +msgid "Registration Form" +msgstr "Registrační formulář" + +#: wp-login.php:464 +msgid "Register For This Site" +msgstr "Registrace na tomto webu" + +#: wp-login.php:477 +msgid "A password will be e-mailed to you." +msgstr "Heslo vám bude automaticky zasláno emailem." + +#: wp-login.php:485 +#: wp-login.php:616 +#: wp-login.php:618 +msgid "Password Lost and Found" +msgstr "Potřebujete nové heslo?" + +#: wp-login.php:485 +#: wp-login.php:616 +#: wp-login.php:618 +msgid "Lost your password?" +msgstr "Zapomněli jste heslo?" + +#: wp-login.php:540 +msgid "You have logged in successfully." +msgstr "Byli jste úspěšně přihlášeni." + +#: wp-login.php:562 +msgid "<strong>ERROR</strong>: Cookies are blocked or not supported by your browser. You must <a href='http://www.google.com/cookies.html'>enable cookies</a> to use WordPress." +msgstr "<strong>CHYBA</strong>: Váš internetový prohlížeč buď nepodporuje cookies, nebo jsou přímo zakázány. Pro bezproblémové používání WordPressu musíte mít <a href='http://www.google.com/cookies.html'>cookies povoleny</a>." + +#: wp-login.php:566 +msgid "You are now logged out." +msgstr "Odhlášení proběhlo úspěšně." + +#: wp-login.php:568 +msgid "User registration is currently not allowed." +msgstr "Registrace uživatelů není v tuto chvíli povolena." + +#: wp-login.php:570 +msgid "Check your e-mail for the confirmation link." +msgstr "Zkontrolujte svojí emailovou schránku, zda už nedorazil ověřovací email." + +#: wp-login.php:572 +msgid "Check your e-mail for your new password." +msgstr "Zkontrolujte svojí emailovou schránku, zda už nedorazilo nové heslo." + +#: wp-login.php:574 +msgid "Registration complete. Please check your e-mail." +msgstr "Registrace úspěšně dokončena. Zkontrolujte prosím svojí emailovou schránku." + +#: wp-login.php:576 +msgid "Your session has expired. Please log-in again." +msgstr "Vaše relace přihlášení vypršela. Přihlaste se prosím znovu." + +#: wp-mail.php:14 +msgid "This action has been disabled by the administrator." +msgstr "Tato možnost byla administrátorem zakázána." + +#: wp-mail.php:29 +msgid "Slow down cowboy, no need to check for new mails so often!" +msgstr "Uklidněte se, není potřeba kontrolovat příchozí emaily každou chvíli!" + +#: wp-mail.php:49 +msgid "There doesn’t seem to be any new mail." +msgstr "Nevypadá to, že by byl zadán nějaký nový email." + +#: wp-mail.php:115 +#, php-format +msgid "Author is %s" +msgstr "Autor: %s" + +#: wp-mail.php:221 +#, php-format +msgid "<strong>Author:</strong> %s" +msgstr "<strong>Autor:</strong> %s" + +#: wp-mail.php:222 +#, php-format +msgid "<strong>Posted title:</strong> %s" +msgstr "<strong>Publikovaný název:</strong> %s" + +#: wp-mail.php:225 +#, php-format +msgid "Oops: %s" +msgstr "Jojda: %s" + +#: wp-mail.php:229 +#, php-format +msgid "Mission complete. Message <strong>%s</strong> deleted." +msgstr "Hotovo. Zpráva <strong>%s</strong> byla smazána." + +#: xmlrpc.php:249 +#: xmlrpc.php:271 +#, php-format +msgid "XML-RPC services are disabled on this site. An admin user can enable them at %s" +msgstr "Služby publikačního protokolu XML-RPC nejsou na tomto webu povoleny. Aktivovat je může administrátor na stránce %s" + +#: xmlrpc.php:254 +#: xmlrpc.php:278 +msgid "Bad login/pass combination." +msgstr "Špatná kombinace jména a hesla." + +#: xmlrpc.php:384 +msgid "Software Name" +msgstr "Název programu" + +#: xmlrpc.php:389 +msgid "Software Version" +msgstr "Verze programu" + +#: xmlrpc.php:394 +msgid "Site URL" +msgstr "URL adresa webu" + +#: xmlrpc.php:401 +msgid "Time Zone" +msgstr "Časové pásmo" + +#: xmlrpc.php:411 +msgid "Site Tagline" +msgstr "Popis webu" + +#: xmlrpc.php:426 +msgid "Allow new users to sign up" +msgstr "Povolit registraci pro nové uživatele" + +#: xmlrpc.php:509 +msgid "Sorry, you cannot edit this page." +msgstr "Nemůžete bohužel upravovat tuto stránku." + +#: xmlrpc.php:585 +#: xmlrpc.php:691 +#: xmlrpc.php:730 +msgid "Sorry, no such page." +msgstr "Žádná taková stránka tu bohužel není." + +#: xmlrpc.php:609 +#: xmlrpc.php:773 +msgid "Sorry, you cannot edit pages." +msgstr "Nemůžete bohužel upravovat stránky." + +#: xmlrpc.php:657 +msgid "Sorry, you cannot add new pages." +msgstr "Nemůžete bohužel vytvářet nové stránky." + +#: xmlrpc.php:695 +msgid "Sorry, you do not have the right to delete this page." +msgstr "Nemáte bohužel dostatečné oprávnění pro smazání této stránky." + +#: xmlrpc.php:700 +msgid "Failed to delete the page." +msgstr "Nepodařilo se smazat tuto stránku." + +#: xmlrpc.php:734 +msgid "Sorry, you do not have the right to edit this page." +msgstr "Nemáte bohužel dostatečné oprávnění pro úpravy této stránky." + +#: xmlrpc.php:833 +msgid "Sorry, you cannot edit posts on this site." +msgstr "Nemůžete bohužel upravovat příspěvky na tomto webu." + +#: xmlrpc.php:868 +msgid "Sorry, you must be able to edit posts on this site in order to view tags." +msgstr "Omlouváme se, ale musíte mít právo upravovat příspěvky, abyste si mohli prohlížet štítky na tomto webu." + +#: xmlrpc.php:913 +msgid "Sorry, you do not have the right to add a category." +msgstr "Nemáte bohužel dostatečné oprávnění pro vytvoření nové rubriky." + +#: xmlrpc.php:938 +msgid "Sorry, the new category failed." +msgstr "Nepodařilo se vytvořit novou rubriku." + +#: xmlrpc.php:965 +msgid "Sorry, you do not have the right to delete a category." +msgstr "Nemáte bohužel dostatečné oprávnění pro mazání rubrik." + +#: xmlrpc.php:991 +msgid "Sorry, you must be able to edit posts to this site in order to view categories." +msgstr "Omlouváme se, ale musíte mít právo upravovat příspěvky, abyste si mohli prohlížet rubriky na tomto webu." + +#: xmlrpc.php:1027 +#: xmlrpc.php:1149 +#: xmlrpc.php:1180 +msgid "You are not allowed to moderate comments on this site." +msgstr "Nemáte dostatečné oprávnění pro moderování komentářů na tomto webu." + +#: xmlrpc.php:1032 +#: xmlrpc.php:1154 +#: xmlrpc.php:1185 +msgid "Invalid comment ID." +msgstr "Neplatné ID komentáře." + +#: xmlrpc.php:1090 +msgid "Sorry, you cannot edit comments." +msgstr "Nemůžete bohužel upravovat komentáře." + +#: xmlrpc.php:1192 +msgid "Invalid comment status." +msgstr "Neplatný stav komentáře." + +#: xmlrpc.php:1223 +msgid "Sorry, the comment could not be edited. Something wrong happened." +msgstr "Omlouváme se, ale komentář se bohužel nepodařilo upravit. Stalo se něco nečekaného." + +#: xmlrpc.php:1254 +msgid "You must be registered to comment" +msgstr "Musíte se zaregistrovat, abyste mohli přidávat komentáře." + +#: xmlrpc.php:1267 +#: xmlrpc.php:1270 +#: xmlrpc.php:2294 +msgid "Invalid post ID." +msgstr "Neplatné ID příspěvku." + +#: xmlrpc.php:1296 +msgid "Comment author name and email are required" +msgstr "Pro přidání komentáře musíte vyplnit své jméno a email" + +#: xmlrpc.php:1298 +msgid "A valid email address is required" +msgstr "Platná emailová adresa je vyžadována" + +#: xmlrpc.php:1330 +#: xmlrpc.php:1389 +#: xmlrpc.php:1415 +#: xmlrpc.php:1441 +msgid "You are not allowed access to details about this site." +msgstr "Nemáte dostatečné oprávnění pro zobrazení detailních informací o tomto webu." + +#: xmlrpc.php:1357 +msgid "You are not allowed access to details about comments." +msgstr "Nemáte dostatečné oprávnění pro zobrazení detailů o komentářích." + +#: xmlrpc.php:1519 +msgid "You are not allowed to update options." +msgstr "Nemáte dostatečné oprávnění pro aktualizaci nastavení webu." + +#: xmlrpc.php:1627 +msgid "Sorry, you do not have access to user data on this site." +msgstr "Nemáte bohužel dostatečné oprávnění pro přístup k informacím o registrovaných uživatelích na tomto webu." + +#: xmlrpc.php:1662 +#: xmlrpc.php:2508 +#: xmlrpc.php:2992 +#: xmlrpc.php:3099 +msgid "Sorry, you cannot edit this post." +msgstr "Nemůžete bohužel upravovat tento příspěvek." + +#: xmlrpc.php:1709 +#: xmlrpc.php:2858 +msgid "Either there are no posts, or something went wrong." +msgstr "Nejsou tu patrně žádné příspěvky, nebo se stala nějaká chyba." + +#: xmlrpc.php:1764 +msgid "Sorry, this user can not edit the template." +msgstr "Tento uživatel nemůže bohužel upravovat šablonu." + +#: xmlrpc.php:1804 +msgid "Sorry, this user cannot edit the template." +msgstr "Tento uživatel nemůže bohužel upravovat šablonu." + +#: xmlrpc.php:1814 +msgid "Either the file is not writable, or something wrong happened. The file has not been updated." +msgstr "Nelze zapisovat do souboru, nebo se stala nějaká chyba. Soubor nebyl aktualizován." + +#: xmlrpc.php:1845 +msgid "Sorry, you are not allowed to post on this site." +msgstr "Nemáte bohužel dostatečné oprávnění pro vytváření nových příspěvků na tomto webu." + +#: xmlrpc.php:1900 +#: xmlrpc.php:1952 +#: xmlrpc.php:2597 +#: xmlrpc.php:3054 +msgid "Sorry, no such post." +msgstr "Žádný takový příspěvek tu bohužel není." + +#: xmlrpc.php:1910 +#: xmlrpc.php:2433 +msgid "Sorry, you do not have the right to publish this post." +msgstr "Nemáte bohužel dostatečné oprávnění pro publikování tohoto příspěvku." + +#: xmlrpc.php:1992 +#: xmlrpc.php:2267 +msgid "Sorry, you are not allowed to publish posts on this site." +msgstr "Nemáte bohužel dostatečné oprávnění pro publikování příspěvků na tomto webu." + +#: xmlrpc.php:1998 +#: xmlrpc.php:2273 +msgid "Sorry, you are not allowed to publish pages on this site." +msgstr "Nemáte bohužel dostatečné oprávnění pro publikování stránek na tomto webu." + +#: xmlrpc.php:2006 +#: xmlrpc.php:2045 +#: xmlrpc.php:2281 +#: xmlrpc.php:2330 +msgid "Invalid post type." +msgstr "Nesprávný typ obsahu." + +#: xmlrpc.php:2038 +msgid "You are not allowed to post as this user" +msgstr "Nemáte dostatečné oprávnění pro vytváření nových příspěvků se jménem tohoto uživatele." + +#: xmlrpc.php:2042 +msgid "You are not allowed to create pages as this user" +msgstr "Nemáte dostatečné oprávnění pro vytváření nových stránek se jménem tohoto uživatele." + +#: xmlrpc.php:2323 +msgid "You are not allowed to change the post author as this user." +msgstr "Nemáte dostatečné oprávnění pro změnu autora tohoto příspěvku na tohoto uživatele." + +#: xmlrpc.php:2327 +msgid "You are not allowed to change the page author as this user." +msgstr "Nemáte dostatečné oprávnění pro změnu autora této stránky na tohoto uživatele." + +#: xmlrpc.php:2431 +msgid "Sorry, you do not have the right to publish this page." +msgstr "Nemáte bohužel dostatečné oprávnění pro publikování této stránky." + +#: xmlrpc.php:2465 +msgid "Sorry, your entry could not be edited. Something wrong happened." +msgstr "Váš příspěvek se bohužel nepodařilo upravit. Stalo se něco nečekaného." + +#: xmlrpc.php:2723 +#: xmlrpc.php:2911 +msgid "Sorry, you must be able to edit posts on this site in order to view categories." +msgstr "Omlouváme se, ale musíte mít právo upravovat příspěvky, abyste si mohli prohlížet rubriky na tomto webu." + +#: xmlrpc.php:2779 +msgid "You are not allowed to upload files to this site." +msgstr "Nemáte dostatečné oprávnění pro nahrávání souborů na tomto webu." + +#: xmlrpc.php:2806 +#, php-format +msgid "Could not write file %1$s (%2$s)" +msgstr "Nepodařilo se zapisovat do souboru %1$s (%2$s)" + +#: xmlrpc.php:2949 +msgid "Sorry, you can not edit this post." +msgstr "Nemůžete bohužel upravovat tento příspěvek." + +#: xmlrpc.php:3146 +msgid "Is there no link to us?" +msgstr "Jsou tu nějaké odkazy na nás?" + +#: xmlrpc.php:3186 +#: xmlrpc.php:3196 +#: xmlrpc.php:3203 +#: xmlrpc.php:3309 +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 "Zadaná URL adresa nemůže být použita jako cíl. Buď tato adresa vůbec neexistuje, nebo nemá povolené pingbacky." + +#: xmlrpc.php:3199 +msgid "The source URL and the target URL cannot both point to the same resource." +msgstr "Zdrojová a cílová URL adresa nemohou odkazovat na stejný zdroj." + +#: xmlrpc.php:3207 +msgid "The pingback has already been registered." +msgstr "Pingback už byl zaznamenán." + +#: xmlrpc.php:3215 +msgid "The source URL does not exist." +msgstr "Zdrojová URL adresa neexistuje." + +#: xmlrpc.php:3227 +msgid "We cannot find a title on that page." +msgstr "Nepodařilo se najít název této stránky." + +#: xmlrpc.php:3263 +msgid "The source URL does not contain a link to the target URL, and so cannot be used as a source." +msgstr "Zdrojová URL adresa neobsahuje odkaz na cílovou URL adresu, takže nemůže být použita jako zdroj." + +#: xmlrpc.php:3283 +#, php-format +msgid "Pingback from %1$s to %2$s registered. Keep the web talking! :-)" +msgstr "Pingback od %1$s pro %2$s byl zaznamenán. Pomáháme udržovat internetovou komunikaci a spolupráci :-)" + +#: xmlrpc.php:3316 +msgid "The specified target URL does not exist." +msgstr "Zadaná cílová URL adresa neexistuje." + +#. Not gettexted string WP_I18N_NO_TABLES +#: wp-includes/functions.php:1856 +msgid "One or more database tables are unavailable. The database may need to be <a href=\"%s\">repaired</a>." +msgstr "Minimálně jedna databázová tabulka není dostupná. Pravděpodobně bude potřeba databázi <a href=\"%s\">opravit</a>." + +#. Not gettexted string WP_I18N_DB_CONN_ERROR +#: wp-includes/wp-db.php:531 +msgid "" +"\n" +"<h1>Error establishing a database connection</h1>\n" +"<p>This either means that the username and password information in your <code>wp-config.php</code> file is incorrect or we can't contact the database server at <code>%s</code>. This could mean your host's database server is down.</p>\n" +"<ul>\n" +"\t<li>Are you sure you have the correct username and password?</li>\n" +"\t<li>Are you sure that you have typed the correct hostname?</li>\n" +"\t<li>Are you sure that the database server is running?</li>\n" +"</ul>\n" +"<p>If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.</p>\n" +msgstr "" +"\n" +"<h1>Nepodařilo se navázat spojení s databází</h1>\n" +"<p>To může znamenat, že uživatelské jméno nebo heslo ve vašem souboru <code>wp-config.php</code> je nesprávné, nebo není možné navázat spojení s databázovým serverem <code>%s</code>, což by mohlo být způsobeno také tím, že váš databázový server u poskytovatele hostingu je mimo provoz.</p>\n" +"<ul>\n" +"\t<li>Jste si opravdu jisti, že používáte správné uživatelské jméno a heslo?</li>\n" +"\t<li>Jste si opravdu jisti, že jste zadali správnou adresu databázového serveru?</li>\n" +"\t<li>Jste si opravdu jisti, že tento databázový server v pořádku funguje?</li>\n" +"</ul>\n" +"<p>Pokud si nejste jisti, co tyto otázky přesně znamenají, nebo jak vyplnit patřičné údaje, měli byste kontaktovat svého poskytovatele hostingových služeb. Pokud potřebujete další pomoc, můžete vždy navštívit <a href='http://wordpress.org/support/'>Fórum podpory WordPressu</a>.</p>\n" + +#. Not gettexted string WP_I18N_DB_BAD_PREFIX +#: wp-includes/wp-db.php:574 +msgid "Invalid database prefix" +msgstr "Špatný prefix (předpona) pro názvy tabulek v databázi" + +#. Not gettexted string WP_I18N_DB_SELECT_DB +#: wp-includes/wp-db.php:753 +msgid "" +"\n" +"<h1>Can’t select database</h1>\n" +"<p>We were able to connect to the database server (which means your username and password is okay) but not able to select the <code>%1$s</code> database.</p>\n" +"<ul>\n" +"<li>Are you sure it exists?</li>\n" +"<li>Does the user <code>%2$s</code> have permission to use the <code>%1$s</code> database?</li>\n" +"<li>On some systems the name of your database is prefixed with your username, so it would be like <code>username_%1$s</code>. Could that be the problem?</li>\n" +"</ul>\n" +"<p>If you don't know how to set up a database you should <strong>contact your host</strong>. If all else fails you may find help at the <a href=\"http://wordpress.org/support/\">WordPress Support Forums</a>.</p>" +msgstr "" +"\n" +"<h1>Není možné vybrat databázi</h1>\n" +"<p>Podařilo se sice připojit k databázovému serveru (což znamená, že jste zadali správné uživatelské jméno a heslo), ale není možné vybrat databázi <code>%1$s</code>.</p>\n" +"<ul>\n" +"<li>Jste si opravdu jisti, že databáze s tímto názvem existuje?</li>\n" +"<li>Má uživatel <code>%2$s</code> oprávnění používat databázi <code>%1$s</code>?</li>\n" +"<li>V některých případech může mít název databáze předponu (prefix) ve tvaru vašeho uživatelského jména, tedy např. <code>uživatelskéjméno_%1$s</code>. Nejedná se o tento problém?</li>\n" +"</ul>\n" +"<p>Pokud nevíte jak databázi zprovoznit, měli byste <strong>kontaktovat svého poskytovatele hostingových služeb</strong>. V případě dalších problémů zkuste nalézt řešení na oficiálním <a href=\"http://wordpress.org/support/\">fóru podpory WordPressu</a>.</p>" + +#. Not gettexted string WP_I18N_DB_QUERY_ERROR_FULL +#: wp-includes/wp-db.php:924 +msgid "WordPress database error %1$s for query %2$s made by %3$s" +msgstr "Chyba databáze WordPressu %1$s u dotazu %2$s, který vytvořil %3$s" + +#. Not gettexted string WP_I18N_DB_QUERY_ERROR +#: wp-includes/wp-db.php:926 +msgid "WordPress database error %1$s for query %2$s" +msgstr "Chyba databáze ve WordPressu %1$s u dotazu %2$s" + +#. Not gettexted string WP_I18N_DB_GETROW_ERROR +#: wp-includes/wp-db.php:1347 +msgid " $db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N" +msgstr " $db->get_row(string query, output type, int offset) -- Výstupem musí být jeden z následujících typů: OBJECT, ARRAY_A, ARRAY_N" + +#. Not gettexted string WP_I18N_GLOBALS_OVERWRITE +#: wp-includes/load.php:20 +msgid "GLOBALS overwrite attempt detected" +msgstr "Objevil se pokus o přepsání GLOBALS" + +#. Not gettexted string WP_I18N_OLD_PHP +#: wp-includes/load.php:107 +msgid "Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s." +msgstr "Váš server sice používá PHP verze %1$s, ale WordPress %2$s vyžaduje alespoň %3$s." + +#. Not gettexted string WP_I18N_OLD_MYSQL +#: wp-includes/load.php:110 +msgid "Your PHP installation appears to be missing the MySQL extension which is required by WordPress." +msgstr "Vypadá to, že ve vaší instalaci PHP chybí rozšíření MySQL, které je však pro fungování WordPressu vyžadováno." + +#. Not gettexted string WP_I18N_MAINTENANCE +#: wp-includes/load.php:168 +msgid "Maintenance" +msgstr "Režim údržby webu" + +#. Not gettexted string WP_I18N_MAINT_MSG +#: wp-includes/load.php:172 +msgid "Briefly unavailable for scheduled maintenance. Check back in a minute." +msgstr "Web je dočasně nedostupný kvůli plánované údržbě. Zkuste to prosím za chvíli znovu." + +#. Not gettexted string WP_I18N_BAD_PREFIX +#: wp-includes/load.php:340 +msgid "<strong>ERROR</strong>: <code>$table_prefix</code> in <code>wp-config.php</code> can only contain numbers, letters, and underscores." +msgstr "<strong>CHYBA</strong>: <code>$table_prefix</code> v souboru <code>wp-config.php</code> může obsahovat pouze písmena, čísla a podtržítka." + +#. Not gettexted string WP_I18N_OLD_PHP +#: wp-admin/setup-config.php:62 +msgid "Your server is running PHP version %1$s but WordPress requires at least %2$s." +msgstr "Váš server sice používá PHP verze %1$s, ale WordPress vyžaduje alespoň %2$s." + +#. Not gettexted string WP_I18N_BAD_PREFIX +#: wp-admin/setup-config.php:165 +msgid "<strong>ERROR</strong>: \"Table Prefix\" can only contain numbers, letters, and underscores." +msgstr "<strong>CHYBA</strong>: \"Předpona databázových tabulek\" (prefix) může obsahovat pouze písmena, číslice a podtržítka." + +#. Not gettexted string WP_I18N_TEXT_DIRECTION +#: wp-load.php:49 +msgid "ltr" +msgstr "ltr" + +#. Not gettexted string WP_I18N_NO_CONFIG +#: wp-load.php:50 +msgid "There doesn't seem to be a <code>wp-config.php</code> file. I need this before we can get started. Need more help? <a href='http://codex.wordpress.org/Editing_wp-config.php'>We got it</a>. You can create a <code>wp-config.php</code> file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file.</p><p><a href='%ssetup-config.php' class='button'>Create a Configuration File</a>" +msgstr "Pravděpodobně nemáte vytvořen soubor <code>wp-config.php</code>. Než začnete s instalací WordPressu, tak musíte tento soubor vytvořit. Nevíte jak? <a href='http://codex.wordpress.org/Editing_wp-config.php'>Pomoc najdete v manuálu</a>. Můžete také zkusit vytvořit soubor <code>wp-config.php</code> prostřednictvím webového rozhraní, ale tato možnost nefunguje na všech hostingových serverech. Nejbezpečnějším způsobem je vytvoření tohoto souboru manuálně.</p><p><a href='%ssetup-config.php' class='button'>Vytvořit konfigurační soubor</a>" + +#, fuzzy +#~ msgid "%1$s (%2$s)" +#~ msgstr "%1$s %2$s" + +#, fuzzy +#~ msgid "%s (Unsaved)" +#~ msgstr "Odmítnuté" + +#, fuzzy +#~ msgid "Original: %1$s (%2$s)" +#~ msgstr "Původní velikost" + +#, fuzzy +#~ msgid "Not enough space to upload. %1$s KB needed." +#~ msgstr "Nemáte dostatečná práva pro nahrávání souborů." + +#, fuzzy +#~ msgid "Back" +#~ msgstr "Předchozí" + +#, fuzzy +#~ msgid "Transfer or delete posts and links before deleting users." +#~ msgstr "" +#~ "Importovat rubriky, uživatele, příspěvky, komentáře a odkazy ze systému " +#~ "DotClear." + +#, fuzzy +#~ msgid "" +#~ "Warning! User cannot be deleted. The user %s is a network admnistrator." +#~ msgstr "ID #%1s: %2s <strong>Tento uživatel nebude smazán.</strong>" + +#, fuzzy +#~ msgid "What should be done with posts and links owned by <em>%s</em>?" +#~ msgstr "Co udělat s příspěvky a odkazy, které tento uživatel vytvořil?" + +#, fuzzy +#~ msgid "Site: %s" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "[%s] New Admin Email Address" +#~ msgstr "Platná emailová adresa je vyžadována" + +#~ msgid "<strong>ERROR</strong>: The e-mail address isn't correct." +#~ msgstr "<strong>CHYBA</strong>: Tato emailová adresa není správně zadaná." + +#, fuzzy +#~ msgid "<strong>ERROR</strong>: The e-mail address is already used." +#~ msgstr "" +#~ "<strong>CHYBA</strong>: Tato emailová adresa je již registrována, zvolte " +#~ "si prosím nějakou jinou." + +#, fuzzy +#~ msgid "[%s] New Email Address" +#~ msgstr "Vaše emailová adresa." + +#, fuzzy +#~ msgid "MB" +#~ msgstr ".zip — %s MB" + +#, fuzzy +#~ msgid "Used: %1s%% of %2s" +#~ msgstr "ID #%1s: %2s" + +#, fuzzy +#~ msgid "Storage Space" +#~ msgstr "Horizontální mezera" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"%1$s\" title=\"Manage Uploads\" class=\"musublink\">%2$sMB</a>" +#~ msgstr "" +#~ "Nová verze %1$s je k dispozici. <a href=\"%2$s\" class=\"thickbox\" title=" +#~ "\"%1$s\">Prohlédněte si informace o nové verzi %3$s</a>." + +#, fuzzy +#~ msgid "" +#~ "<a href=\"%1$s\" title=\"Manage Uploads\" class=\"musublink\">%2$sMB (%3$s" +#~ "%%)</a>" +#~ msgstr "" +#~ "Nová verze %1$s je k dispozici. <a href=\"%2$s\" class=\"thickbox\" title=" +#~ "\"%1$s\">Prohlédněte si informace o nové verzi %3$s</a>." + +#, fuzzy +#~ msgid "Space Used" +#~ msgstr "Nejpoužívanější" + +#, fuzzy +#~ msgid "Site Upload Space Quota " +#~ msgstr "Nemáte dostatečné oprávnění pro nahrávání souborů na tomto web." + +#, fuzzy +#~ msgid "MB (Leave blank for network default)" +#~ msgstr "" +#~ "Příspěvek bude publikován: <b>%1$s</b>. <a target=\"_blank\" href=\"%2$s" +#~ "\">Zobrazit náhled příspěvku</a>" + +#, fuzzy +#~ msgid "American English" +#~ msgstr "Číselné" + +#, fuzzy +#~ msgid "English" +#~ msgstr "angličtina" + +#, fuzzy +#~ msgid "Read More" +#~ msgstr "Další barvy" + +#, fuzzy +#~ msgid "Your feed at %s is empty." +#~ msgstr "- Vaše jméno není vyplněno, nebo je v něm chyba" + +#, fuzzy +#~ msgid "Primary Site" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Create a New Site" +#~ msgstr "Nepodařilo se vytvořit nový obrázek." + +#, fuzzy +#~ msgid "%s (Draft)" +#~ msgstr "Koncept" + +#~ msgid "WordPress.com API Key" +#~ msgstr "API klíč WordPress.com" + +#~ msgid "Separate tags with commas." +#~ msgstr "Více štítků oddělte čárkami." + +#, fuzzy +#~ msgctxt "menu nav item type" + +#~ msgid "Custom" +#~ msgstr "Vlastní zobrazení" + +#, fuzzy +#~ msgctxt "Thickbox Title" + +#~ msgid "Edit Menu Item" +#~ msgstr "Zobrazit obsah?" + +#, fuzzy +#~ msgctxt "menu item edit text" + +#~ msgid "Edit" +#~ msgstr "Upravit" + +#~ msgid "Crop Header" +#~ msgstr "Oříznout záhlaví" + +#~ msgid "Popular Categories" +#~ msgstr "Oblíbené rubriky" + +#~ msgid "<a href=\"http://wordpress.org/support/\">Support Forums</a>" +#~ msgstr "" +#~ "<a href=\"http://wordpress.org/support/\">Oficiální fórum podpory " +#~ "(anglicky)</a>" + +#, fuzzy +#~ msgid "" +#~ "<a target=\"_blank\" href=\"http://wordpress.org/support/\">Support " +#~ "Forums</a>" +#~ msgstr "" +#~ "<a href=\"http://wordpress.org/support/\">Fórum podpory (anglicky)</a>" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Writing_Posts\">Writing Posts " +#~ "Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Writing_Posts\" target=\"_blank" +#~ "\">Jak správně vytvářet příspěvky?</a>" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Links_Add_New_SubPanel\">Creating " +#~ "Links Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=" +#~ "\"_blank\">Základní nastavení WordPressu</a>" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Media_Add_New_SubPanel\">Add New " +#~ "Media in Codex</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=" +#~ "\"_blank\">Základní nastavení WordPressu</a>" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Settings_Media_SubPanel\">Media " +#~ "Settings Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=" +#~ "\"_blank\">Základní nastavení WordPressu</a>" + +#, fuzzy +#~ msgid "Activation Key Required" +#~ msgstr "Je nutná aktualizace databáze" + +#, fuzzy +#~ msgid "Activation Key:" +#~ msgstr "Špatný klíč" + +#, fuzzy +#~ msgid "Your account is now active!" +#~ msgstr "Váš komentář čeká na schválení." + +#, fuzzy +#~ msgid "An error occurred during the activation" +#~ msgstr "Došlo k nějaké blíže neidentifikované chybě." + +#~ msgid "Username:" +#~ msgstr "Uživatelské jméno:" + +#, fuzzy +#~ msgid "" +#~ "Your account is now activated. <a href=\"%1$s\">View your site</a> or <a " +#~ "href=\"%2$s\">Login</a>" +#~ msgstr "" +#~ "Příspěvek byl publikován. <a href=\"%s\">Zobrazit příspěvek</a> | <a href=" +#~ "\"%s\">Upravit příspěvek</a>" + +#, fuzzy +#~ msgid "<strong>For more information:</strong>" +#~ msgstr "" +#~ "Podrobnější informace si můžete přečíst v oficiálním <a href=\"%s" +#~ "\">oznámení o vydání nové verze</a>." + +#, fuzzy +#~ msgid "Sorry, you must delete files before you can upload any more." +#~ msgstr "" +#~ "Omlouváme se, ale pro vložení odpovědi na komentář se musíte nejdříve " +#~ "přihlásit." + +#, fuzzy +#~ msgid "Multisite support is not enabled." +#~ msgstr "CHYBA: %s není platná šablona RSS/Atom zdroje" + +#, fuzzy +#~ msgid "You do not have permission to access this page." +#~ msgstr "Nemáte dostatečné oprávnění pro přístup na tuto stránku." + +#, fuzzy +#~ msgid "Network Admin" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Blogs are now called Sites; Site is now called Network" +#~ msgstr "" +#~ "Protože máte WordPress nainstalovaný v adresáři, tak budou muset " +#~ "jednotlivé weby z vytvořené sítě webů využívat podadresáře." + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Super_Admin_Super_Admin_Menu" +#~ "\">Network Admin Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=" +#~ "\"_blank\">Základní nastavení WordPressu</a>" + +#, fuzzy +#~ msgid "%s user" + +#~ msgid_plural "%s users" +#~ msgstr[0] "uživatel %s" +#~ msgstr[1] "%s hodiny" +#~ msgstr[2] "%s hodin" + +#, fuzzy +#~ msgid "%s site" + +#~ msgid_plural "%s sites" +#~ msgstr[0] "Administrace" +#~ msgstr[1] "%s-krát" +#~ msgstr[2] "%s-krát" + +#, fuzzy +#~ msgid "You have %1$s and %2$s." +#~ msgstr "Datum a název" + +#, fuzzy +#~ msgid "Create a New User" +#~ msgstr "Vytvořit nového uživatele" + +#, fuzzy +#~ msgid "Search Sites" +#~ msgstr "Hledat rubriky" + +#, fuzzy +#~ msgid "You do not have sufficient permissions to delete this site." +#~ msgstr "Nemáte dostatečné opravnění pro mazání pluginů na tomto webu." + +#, fuzzy +#~ msgid "Delete My Site" +#~ msgstr "Navštívit web pluginu" + +#, fuzzy +#~ msgid "Delete My Site Permanently" +#~ msgstr "Smazat tento příspěvek" + +#, fuzzy +#~ msgid "My Dashboard" +#~ msgstr "Můj web" + +#, fuzzy +#~ msgid "Problem creating dashboard site: " +#~ msgstr "Registrace na tomto webu" + +#, fuzzy +#~ msgid "Can’t create an empty site." +#~ msgstr "Nemůžete vytvářet uživatele." + +#, fuzzy +#~ msgid "Missing or invalid site address." +#~ msgstr "<strong>CHYBA</strong>: Špatné uživatelské jméno nebo email." + +#, fuzzy +#~ msgid "Missing email address." +#~ msgstr "Vaše emailová adresa." + +#, fuzzy +#~ msgid "Invalid email address." +#~ msgstr "Vaše emailová adresa." + +#, fuzzy +#~ msgid "There was an error creating the user." +#~ msgstr "" +#~ "Došlo k chybě v nastavení serveru! Kontaktujte prosím administrátora " +#~ "vašeho serveru." + +#, fuzzy +#~ msgid "[%s] New Site Created" +#~ msgstr "Nový uživatel byl vytvořen." + +#, fuzzy +#~ msgid "You probably need to go back to the <a href=\"%s\">sites page</a>" +#~ msgstr "" +#~ "Musíte doplnit URL adresu svého OPML souboru. Stiskněte tlačítko zpět ve " +#~ "svém internetovém prohlížeči a zkuste to znovu" + +#, fuzzy +#~ msgid "You are not allowed to change the current site." +#~ msgstr "Nemáte dostatečné oprávnění pro nahrávání souborů na tomto web." + +#, fuzzy +#~ msgid "WordPress › Confirm your action" +#~ msgstr "Seznam stránek vytvořených pomocí WordPressu" + +#, fuzzy +#~ msgid "Confirm" +#~ msgstr "Potvrdit smazání" + +#, fuzzy +#~ msgid "" +#~ "Warning! User cannot be modified. The user %s is a network admnistrator." +#~ msgstr "%s je chráněn nastavením WordPressu a nemůže být upravován" + +#, fuzzy +#~ msgid "Cannot create an empty user." +#~ msgstr "Vytvořit uživatele %1$s, nebo přiřadit již existujícího" + +#, fuzzy +#~ msgid "Missing username and email." +#~ msgstr "[%s] Vaše uživatelské jméno a heslo" + +#, fuzzy +#~ msgid "Missing username." +#~ msgstr "Uživatelské jméno na Bloggeru" + +#, fuzzy +#~ msgid "Missing email." +#~ msgstr "Emaily" + +#, fuzzy +#~ msgid "Duplicated username or email address." +#~ msgstr "" +#~ "<strong>CHYBA</strong>: Zadejte své uživatelské jméno nebo emailovou " +#~ "adresu." + +#, fuzzy +#~ msgid "Network Options" +#~ msgstr "Nastavení Flashe" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Super_Admin_Options_SubPanel" +#~ "\">Network Options Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/ceska-podpora-wordpressu-zdarma\" " +#~ "target=\"_blank\">Česká podpora WordPressu (zdarma)</a><br><a href=" +#~ "\"http://codex.wordpress.org/\" target=\"_blank\">Manuál (anglicky)</a>" + +#, fuzzy +#~ msgid "Operational Settings" +#~ msgstr "Rozšířená nastavení" + +#, fuzzy +#~ msgid "Network Name" +#~ msgstr "Název kotvy" + +#, fuzzy +#~ msgid "What you would like to call this website." +#~ msgstr "Jak budete chtít vytvářenou síť webů nazývat?" + +#, fuzzy +#~ msgid "Network Admin Email" +#~ msgstr "Zobrazí email odesílatele" + +#, fuzzy +#~ msgid "Dashboard Settings" +#~ msgstr "Rozšířená nastavení" + +#, fuzzy +#~ msgid "Dashboard Site" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Dashboard User Default Role" +#~ msgstr "Výchozí úroveň nového uživatele" + +#, fuzzy +#~ msgid "Admin Notice Feed" +#~ msgstr "" +#~ "Přihlášení/odhlášení, administrace, RSS zdroj a oficiální odkazy " +#~ "WordPressu" + +#, fuzzy +#~ msgid "Registration Settings" +#~ msgstr "Rozšířená nastavení" + +#, fuzzy +#~ msgid "Allow new registrations" +#~ msgstr "Povolit registraci pro nové uživatele" + +#, fuzzy +#~ msgid "Registration is disabled." +#~ msgstr "Registrace uživatelů není v tuto chvíli povolena." + +#, fuzzy +#~ msgid "User accounts may be registered." +#~ msgstr "schváleno smazání uživatele %s s úrovní 0" + +#, fuzzy +#~ msgid "Logged in users may register new sites." +#~ msgstr "Přidávat komentáře mohou pouze registrovaní a přihlášení uživatelé" + +#, fuzzy +#~ msgid "Both sites and user accounts can be registered." +#~ msgstr "Přidávat komentáře mohou pouze registrovaní a přihlášení uživatelé" + +#, fuzzy +#~ msgid "Registration notification" +#~ msgstr "Registrační formulář" + +#, fuzzy +#~ msgid "Add New Users" +#~ msgstr "+ vytvořit novou rubriku" + +#, fuzzy +#~ msgid "" +#~ "Users are not allowed to register these sites. Separate names by spaces." +#~ msgstr "Nemáte dostatečné oprávnění pro obnovení této stránky z koše." + +#, fuzzy +#~ msgid "Limited Email Registrations" +#~ msgstr "Zobrazí email odesílatele" + +#, fuzzy +#~ msgid "Banned Email Domains" +#~ msgstr "Zobrazí email odesílatele" + +#, fuzzy +#~ msgid "New Site Settings" +#~ msgstr "Nová šablona byla aktivována. <a href=\"%s\">Zobrazit web</a>" + +#, fuzzy +#~ msgid "Welcome Email" +#~ msgstr "Emaily" + +#, fuzzy +#~ msgid "The welcome email sent to new site owners." +#~ msgstr "Poslat toto heslo novému uživateli emailem." + +#, fuzzy +#~ msgid "Welcome User Email" +#~ msgstr "Poslat toto heslo novému uživateli emailem." + +#, fuzzy +#~ msgid "The welcome email sent to new users." +#~ msgstr "Povolit registraci pro nové uživatele" + +#, fuzzy +#~ msgid "The first post on a new site." +#~ msgstr "Nový komentář k příspěvku #%1$s \"%2$s\"" + +#, fuzzy +#~ msgid "First Page" +#~ msgstr "Přejít na první stránku" + +#, fuzzy +#~ msgid "The first page on a new site." +#~ msgstr "Nový komentář k příspěvku #%1$s \"%2$s\"" + +#, fuzzy +#~ msgid "First Comment" +#~ msgstr "%s komentář schválen" + +#, fuzzy +#~ msgid "The first comment on a new site." +#~ msgstr "Nový komentář k příspěvku #%1$s \"%2$s\"" + +#, fuzzy +#~ msgid "First Comment Author" +#~ msgstr "Autor komentáře musí mít alespoň jeden již dříve schválený komentář" + +#, fuzzy +#~ msgid "The author of the first comment on a new site." +#~ msgstr "Nový komentář k příspěvku #%1$s \"%2$s\" čeká na schválení" + +#, fuzzy +#~ msgid "First Comment URL" +#~ msgstr "Přidat z URL" + +#, fuzzy +#~ msgid "The URL for the first comment on a new site." +#~ msgstr "Nový komentář k příspěvku #%1$s \"%2$s\" čeká na schválení" + +#, fuzzy +#~ msgid "Upload Settings" +#~ msgstr "Rozšířená nastavení" + +#, fuzzy +#~ msgid "Media upload buttons" +#~ msgstr "Nahrát nový mediální soubor" + +#, fuzzy +#~ msgid "Videos" +#~ msgstr "Vytisknout videa?" + +#, fuzzy +#~ msgid "Music" +#~ msgstr "Ztlumit" + +#, fuzzy +#~ msgid "Site upload space" +#~ msgstr "Nahrát nový mediální soubor" + +#, fuzzy +#~ msgid "Limit total size of files uploaded to %s MB" +#~ msgstr "Nahraný soubor nemohl být přesunut do %s." + +#, fuzzy +#~ msgid "Upload file types" +#~ msgstr "Nahrát soubor a importovat" + +#, fuzzy +#~ msgid "Max upload file size" +#~ msgstr "Nahrát soubor a importovat" + +#, fuzzy +#~ msgid "Network Wide Settings" +#~ msgstr "Rozšířená nastavení obrázku" + +#, fuzzy +#~ msgid "These settings may be overridden by site owners." +#~ msgstr "" +#~ "Toto nastavení se dá ještě změnit u konkrétního příspěvku nebo stránky." + +#, fuzzy +#~ msgid "Default Language" +#~ msgstr "Jazykové nastavení" + +#, fuzzy +#~ msgid "Menu Settings" +#~ msgstr "Rozšířená nastavení" + +#, fuzzy +#~ msgid "Enable administration menus" +#~ msgstr "Zapnout Režim pro snadnější úpravu widgetů" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Super_Admin_Sites_Edit_Site\">Site " +#~ "Editing Documentation</a>" +#~ msgstr "<a href=\"http://www.separatista.net\">Česká lokalizace</a>" + +#, fuzzy +#~ msgid "an Edit link to a separate Edit Site screen" +#~ msgstr "Pokus o úpravu tohoto odkazu: „%s“ selhal." + +#, fuzzy +#~ msgid "Backend means the Dashboard for that site" +#~ msgstr "Možností 'Pouze data' smažete všechna výsledná data hodnocení." + +#, fuzzy +#~ msgid "Visit to go the the frontend site live." +#~ msgstr "Zkuste použít pole pro vyhledávání na tomto webu:" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Super_Admin_Sites_SubPanel\">Sites " +#~ "Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=" +#~ "\"_blank\">Základní nastavení WordPressu</a>" + +#, fuzzy +#~ msgid "Sites removed from spam." +#~ msgstr "%s komentář byl označen, že není spam" + +#, fuzzy +#~ msgid "Sites marked as spam." +#~ msgstr "%s komentář označen jako spam" + +#, fuzzy +#~ msgid "Sites deleted." +#~ msgstr "%s komentář smazán" + +#, fuzzy +#~ msgid "Site deleted." +#~ msgstr "%s komentář smazán" + +#, fuzzy +#~ msgid "Site added." +#~ msgstr "Rubrika byla vytvořena." + +#, fuzzy +#~ msgid "Site archived." +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Site unarchived." +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Site activated." +#~ msgstr "Nová šablona byla aktivována. <a href=\"%s\">Zobrazit web</a>" + +#, fuzzy +#~ msgid "Site deactivated." +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Site removed from spam." +#~ msgstr "" +#~ "<a href=\"%1$s\">Akismet</a> ochránil váš web před <a href=\"%2$s\">%3$s " +#~ "útoky komentářového spamu</a>." + +#, fuzzy +#~ msgid "Site marked as spam." +#~ msgstr "%s komentář označen jako spam" + +#, fuzzy +#~ msgid "Edit Site" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Site info (wp_blogs)" +#~ msgstr "ruština (<a href=\"http://wp-skins.info/\">Truper</a>)" + +#, fuzzy +#~ msgid "Domain" +#~ msgstr "romatický" + +#, fuzzy +#~ msgid "Update <code>siteurl</code> and <code>home</code> as well." +#~ msgstr "" +#~ "Převést smajlíky jako např. <code>:-)</code> a <code>:-P</code> do " +#~ "grafické podoby" + +#, fuzzy +#~ msgctxt "site" + +#~ msgid "Registered" +#~ msgstr "Registrovaný uživatel:" + +#, fuzzy +#~ msgid "Last Updated" +#~ msgstr "Poslední aktualizace:" + +#, fuzzy +#~ msgid "Archived" +#~ msgstr "Archiv" + +#, fuzzy +#~ msgctxt "site" + +#~ msgid "Spam" +#~ msgstr "spam" + +#~ msgid "Deleted" +#~ msgstr "Smazáno" + +#, fuzzy +#~ msgid "Mature" +#~ msgstr "X — Vhodný pouze pro dospělé" + +#, fuzzy +#~ msgid "Update Options" +#~ msgstr "Aktualizovat nastavení »" + +#, fuzzy +#~ msgid "Site options (%soptions)" +#~ msgstr "Nastavení pro Flash video" + +#, fuzzy +#~ msgid "Active" +#~ msgstr "Prohlížíte <strong>%s</strong> (aktivní plugin)" + +#, fuzzy +#~ msgid "Site Themes" +#~ msgstr "Dostupné šablony" + +#, fuzzy +#~ msgid "Site Users" +#~ msgstr "Smazat uživatele" + +#, fuzzy +#~ msgid "User" +#~ msgstr "uživatel %s" + +#, fuzzy +#~ msgid "Click to remove user" +#~ msgstr "obrázky vyberte kliknutím" + +#, fuzzy +#~ msgid "N/A" +#~ msgstr "Není dostupné" + +#, fuzzy +#~ msgid "Add a new user" +#~ msgstr "Vytvořit nového uživatele" + +#, fuzzy +#~ msgid "User Login:" +#~ msgstr "Rychlé úpravy" + +#, fuzzy +#~ msgid "Misc Site Actions" +#~ msgstr "Navštívit web pluginu" + +#, fuzzy +#~ msgctxt "sites" + +#~ msgid "Add New" +#~ msgstr "Vytvořit uživatele" + +#, fuzzy +#~ msgid "Search Site by" +#~ msgstr "Zkuste použít pole pro vyhledávání na tomto webu:" + +#, fuzzy +#~ msgid "ID" +#~ msgstr "ID" + +#, fuzzy +#~ msgid "IP address" +#~ msgstr "Email" + +#, fuzzy +#~ msgctxt "site" + +#~ msgid "Mark as Spam" +#~ msgstr "Označit jako spam" + +#, fuzzy +#~ msgctxt "site" + +#~ msgid "Not Spam" +#~ msgstr "Není spam" + +#, fuzzy +#~ msgctxt "%1$s: site name. %2$s: site tagline." + +#~ msgid "%1$s – <em>%2$s</em>" +#~ msgstr "Zobrazuji %s–%s z %s" + +#, fuzzy +#~ msgid "Backend" +#~ msgstr "Nastavení práce s tabulkami pro uživatele" + +#, fuzzy +#~ msgid "You are about to activate the site %s" +#~ msgstr "Chystáte se smazat <strong>%s</strong>." + +#, fuzzy +#~ msgid "You are about to deactivate the site %s" +#~ msgstr "Chystáte se smazat <strong>%s</strong>." + +#, fuzzy +#~ msgid "You are about to unarchive the site %s." +#~ msgstr "Chystáte se smazat <strong>%s</strong>." + +#, fuzzy +#~ msgid "Unarchive" +#~ msgstr "Archiv" + +#, fuzzy +#~ msgid "You are about to archive the site %s." +#~ msgstr "Chystáte se smazat <strong>%s</strong>." + +#, fuzzy +#~ msgctxt "verb; site" + +#~ msgid "Archive" +#~ msgstr "Prázdný archiv" + +#, fuzzy +#~ msgid "You are about to unspam the site %s." +#~ msgstr "Chystáte se smazat <strong>%s</strong>." + +#, fuzzy +#~ msgid "You are about to mark the site %s as spam." +#~ msgstr "Označili jste tento komentář jako spam:" + +#, fuzzy +#~ msgid "You are about to delete the site %s." +#~ msgstr "Chystáte se smazat <strong>%s</strong>." + +#, fuzzy +#~ msgid "Visit" +#~ msgstr "Navštívit %s" + +#, fuzzy +#~ msgid "Never" +#~ msgstr "Obnovit nastavení" + +#, fuzzy +#~ msgid "Only showing first 5 users." +#~ msgstr "Hotovo! Importovaní uživatelé: <strong>%1$s</strong>." + +#, fuzzy +#~ msgid "More" +#~ msgstr "(Celý příspěvek...)" + +#, fuzzy +#~ msgid "No sites found." +#~ msgstr "Nebyly nalezeny žádné štítky!" + +#, fuzzy +#~ msgid "Add Site" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Site Address" +#~ msgstr "Email" + +#, fuzzy +#~ msgid "Only the characters a-z and 0-9 recommended." +#~ msgstr "Doporučujeme několik zajímavých přátel..." + +#, fuzzy +#~ msgid "Admin Email" +#~ msgstr "Emaily" + +#, fuzzy +#~ msgid "The username and password will be mailed to this email address." +#~ msgstr "" +#~ "Tuto volbu můžete použít když chcete změnit vzhled tabulky a její " +#~ "zobrazení." + +#, fuzzy +#~ msgid "Network Themes" +#~ msgstr "Dostupné šablony" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Super_Admin_Themes_SubPanel" +#~ "\">Network Themes Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/wordpress-problemy-a-jejich-reseni\" " +#~ "target=\"_blank\">WordPress - problémy a jejich řešení</a><br><a href=" +#~ "\"http://codex.wordpress.org/\" target=\"_blank\">Manuál (anglicky)</a>" + +#, fuzzy +#~ msgid "Site themes saved." +#~ msgstr "Koncept byl uložen v %s." + +#, fuzzy +#~ msgid "Apply Changes" +#~ msgstr "Použít provedené změny původního obrázku na:" + +#, fuzzy +#~ msgid "Enable" +#~ msgstr "Povolit Gears" + +#, fuzzy +#~ msgid "Theme" +#~ msgstr "Změnit šablonu" + +#, fuzzy +#~ msgid "Total" +#~ msgstr "Celkem emailů:" + +#, fuzzy +#~ msgid "Themes Installed: %d" +#~ msgstr "WordPress byl již nainstalován" + +#, fuzzy +#~ msgid "Themes Enabled: %d" +#~ msgstr "Dostupné šablony" + +#, fuzzy +#~ msgid "Update Network" +#~ msgstr "Stav" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Super_Admin_Update_SubPanel\">Update " +#~ "Network Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/wordpress-problemy-a-jejich-reseni\" " +#~ "target=\"_blank\">WordPress - problémy a jejich řešení</a><br><a href=" +#~ "\"http://codex.wordpress.org/\" target=\"_blank\">Manuál (anglicky)</a>" + +#, fuzzy +#~ msgid "All done!" +#~ msgstr "Všechno je hotovo." + +#, fuzzy +#~ msgid "Next Sites" +#~ msgstr "Další »" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Super_Admin_Users_SubPanel\">Network " +#~ "Users Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/wordpress-problemy-a-jejich-reseni\" " +#~ "target=\"_blank\">WordPress - problémy a jejich řešení</a><br><a href=" +#~ "\"http://codex.wordpress.org/\" target=\"_blank\">Manuál (anglicky)</a>" + +#, fuzzy +#~ msgid "User deleted." +#~ msgstr "%s uživatel byl smazán" + +#, fuzzy +#~ msgid "Users marked as spam." +#~ msgstr "%s komentář označen jako spam" + +#, fuzzy +#~ msgid "Users removed from spam." +#~ msgstr "%s komentář byl označen, že není spam" + +#, fuzzy +#~ msgid "Users deleted." +#~ msgstr "Ostatní uživatelé byli smazáni." + +#, fuzzy +#~ msgctxt "users" + +#~ msgid "Add New" +#~ msgstr "Vytvořit uživatele" + +#, fuzzy +#~ msgctxt "user" + +#~ msgid "Mark as Spam" +#~ msgstr "Označit jako spam" + +#, fuzzy +#~ msgctxt "user" + +#~ msgid "Not Spam" +#~ msgstr "Není spam" + +#, fuzzy +#~ msgctxt "user" + +#~ msgid "Registered" +#~ msgstr "Registrovaný uživatel:" + +#, fuzzy +#~ msgid "Super admin" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "No users found." +#~ msgstr "Nebyl nalezen žádný odpovídající uživatel!" + +#, fuzzy +#~ msgid "Username and password will be mailed to the above email address." +#~ msgstr "" +#~ "Vložené URL vypadá jako emailová adresa. Chcete k ní přidat požadovaný " +#~ "chybějící parametr (mailto:)?" + +#, fuzzy +#~ msgid "Add user" +#~ msgstr "Vytvořit uživatele" + +#, fuzzy +#~ msgid "You do not have sufficient permissions to view this page." +#~ msgstr "Nemáte dostatečné oprávnění pro přístup na tuto stránku." + +#, fuzzy +#~ msgid "The primary site you chose does not exist." +#~ msgstr "Soubor <code>mt-export.txt</code> neexistuje" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Dashboard_My_Sites_SubPanel\">My " +#~ "Sites Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=" +#~ "\"_blank\">Základní nastavení WordPressu</a>" + +#, fuzzy +#~ msgid "Global Settings" +#~ msgstr "Rozšířená nastavení" + +#, fuzzy +#~ msgid "The Network creation panel is not for WordPress MU networks." +#~ msgstr "" +#~ "Google Gears jsou sice nainstalovány na tomto počítači, ale zatím ještě " +#~ "nejsou zapnuty pro vaše internetové stránky s WordPressem." + +#~ msgid "Create a Network of WordPress Sites" +#~ msgstr "Vytvořit síť webů ve WordPressu" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Create_A_Network\">General Network " +#~ "Creation Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=" +#~ "\"_blank\">Základní nastavení WordPressu</a>" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/Tools_Network_SubPanel\">Tools > " +#~ "Network Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Settings_General_SubPanel\" target=" +#~ "\"_blank\">Základní nastavení WordPressu</a>" + +#~ msgid "Error:" +#~ msgstr "Chyba:" + +#~ msgid "Warning:" +#~ msgstr "Upozornění:" + +#, fuzzy +#~ msgid "You cannot install a network of sites with your server address." +#~ msgstr "" +#~ "Protože máte WordPress nainstalovaný v adresáři, tak budou muset " +#~ "jednotlivé weby z vytvořené sítě webů využívat podadresáře." + +#, fuzzy +#~ msgid "You cannot use port numbers such as <code>%s</code>." +#~ msgstr "Místní čas je <code>%1$s</code>" + +#~ msgid "Return to Dashboard" +#~ msgstr "Zpět na Nástěnku" + +#, fuzzy +#~ msgid "ERROR: The network could not be created." +#~ msgstr "Plugin nemohl být smazán kvůli následující chybě: %s" + +#, fuzzy +#~ msgid "Warning!" +#~ msgstr "Upozornění:" + +#, fuzzy +#~ msgctxt "Default network name" + +#~ msgid "%s Sites" +#~ msgstr "Vytvořit síť webů ve WordPressu" + +#~ msgid "Welcome to the Network installation process!" +#~ msgstr "Vítejte u instalace sítě webů ve WordPressu!" + +#~ 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 "" +#~ "Správným vyplněním následujících informací zahájíte proces vytvoření sítě " +#~ "webů ve WordPressu. V dalším kroku pak budou vytvořeny konfigurační " +#~ "soubory." + +#, fuzzy +#~ msgid "Note:" +#~ msgstr "Poznámka:" + +#, fuzzy +#~ msgid "Addresses of Sites in your Network" +#~ msgstr "Internetová adresa vaší sítě webů bude <code>%s</code>." + +#, fuzzy +#~ msgid "Sub-domains" +#~ msgstr "Instalace do podadresářů" + +#, fuzzy +#~ msgctxt "subdomain examples" + +#~ msgid "like <code>site1.%1$s</code> and <code>site2.%1$s</code>" +#~ msgstr "" +#~ "Převést smajlíky jako např. <code>:-)</code> a <code>:-P</code> do " +#~ "grafické podoby" + +#, fuzzy +#~ msgid "Sub-directories" +#~ msgstr "Instalace do podadresářů" + +#, fuzzy +#~ msgctxt "subdirectory examples" + +#~ msgid "like <code>%1$s/site1</code> and <code>%1$s/site2</code>" +#~ msgstr "" +#~ "Převést smajlíky jako např. <code>:-)</code> a <code>:-P</code> do " +#~ "grafické podoby" + +#~ msgid "Server Address" +#~ msgstr "Adresa serveru" + +#~ msgid "The internet address of your network will be <code>%s</code>." +#~ msgstr "Internetová adresa vaší sítě webů bude <code>%s</code>." + +#~ msgid "Network Details" +#~ msgstr "Nastavení sítě webů" + +#~ msgid "Sub-directory Install" +#~ msgstr "Instalace do podadresářů" + +#~ msgid "" +#~ "Because you are using <code>localhost</code>, the sites in your WordPress " +#~ "network must use sub-directories. Consider using <code>localhost." +#~ "localdomain</code> if you wish to use sub-domains." +#~ msgstr "" +#~ "Protože provozujete WordPress lokálně na adrese <code>localhost</code>, " +#~ "tak budou muset jednotlivé weby z vytvořené sítě webů využívat " +#~ "podadresáře. Pokud chcete používat subdomény, zvažte prosím změnu na " +#~ "<code>localhost.localdomain</code>." + +#~ msgid "" +#~ "Because your install is in a directory, the sites in your WordPress " +#~ "network must use sub-directories." +#~ msgstr "" +#~ "Protože máte WordPress nainstalovaný v adresáři, tak budou muset " +#~ "jednotlivé weby z vytvořené sítě webů využívat podadresáře." + +#, fuzzy +#~ msgid "Sub-domain Install" +#~ msgstr "Instalace do podadresářů" + +#, fuzzy +#~ msgid "" +#~ "Because your install is not new, the sites in your WordPress network must " +#~ "use sub-domains." +#~ msgstr "" +#~ "Protože máte WordPress nainstalovaný v adresáři, tak budou muset " +#~ "jednotlivé weby z vytvořené sítě webů využívat podadresáře." + +#~ msgid "Network Title" +#~ msgstr "Název sítě webů" + +#~ msgid "What would you like to call your network?" +#~ msgstr "Jak budete chtít svoji síť webů nazývat?" + +#~ msgid "Admin E-mail Address" +#~ msgstr "Emailová adresa administrátora" + +#~ msgid "Your email address." +#~ msgstr "Vaše emailová adresa." + +#, fuzzy +#~ msgid "Notice: The Network feature is already enabled." +#~ msgstr "" +#~ "Až budete mít vše hotovo, vaše síť webů bude správně nastavena a funkční." + +#, fuzzy +#~ msgid "The original configuration steps are shown here for reference." +#~ msgstr "Bohužel tu není nic z toho, co právě hledáte." + +#~ msgid "An existing WordPress network was detected." +#~ msgstr "Byla nalezena existující síť webů ve WordPressu." + +#~ msgid "" +#~ "Please complete the configuration steps. To create a new network, you " +#~ "will need to empty or remove the network database tables." +#~ msgstr "" +#~ "Dokončete prosím zbývající kroky pro konfiguraci této sítě. Abyste mohli " +#~ "vytvořit novou síť webů, tak budete muset nejdříve vyprázdnit (nebo zcela " +#~ "smazat) příslušné databázové tabulky již existující sítě." + +#~ msgid "Enabling the Network" +#~ msgstr "Zprovoznění sítě webů" + +#~ msgid "" +#~ "Complete the following steps to enable the features for creating a " +#~ "network of sites." +#~ msgstr "" +#~ "Provedením následujících kroků umožníte spuštění již vytvořené sítě webů." + +#, fuzzy +#~ msgid "" +#~ "<strong>Caution:</strong> We recommend you back up your existing <code>wp-" +#~ "config.php</code> file." +#~ msgstr "" +#~ "<strong>Varování:</strong> Doporučujeme před úpravami zálohovat vaše " +#~ "existující soubory <code>wp-config.php</code> a <code>.htaccess</code>." + +#, fuzzy +#~ msgid "" +#~ "<strong>Caution:</strong> We recommend you back up your existing <code>wp-" +#~ "config.php</code> and <code>.htaccess</code> files." +#~ msgstr "" +#~ "<strong>Varování:</strong> Ještě před úpravami doporučujeme raději " +#~ "zálohovat vaše existující soubory <code>wp-config.php</code> a <code>." +#~ "htaccess</code>." + +#~ msgid "" +#~ "Create a <code>blogs.dir</code> directory in <code>%s</code>. This " +#~ "directory is used to stored uploaded media for your additional sites and " +#~ "must be writeable by the web server." +#~ msgstr "" +#~ "Vytvořte v adresáři <code>%s</code> podadresář <code>blogs.dir</code>, " +#~ "který bude používán jako úložiště nahraných mediálních souborů pro další " +#~ "weby z vámi vytvořené sítě, a proto do něj musí mít webový server právo " +#~ "zápisu." + +#~ msgid "" +#~ "Add the following to your <code>wp-config.php</code> file in <code>%s</" +#~ "code> <strong>above</strong> the line reading <code>/* That’s all, " +#~ "stop editing! Happy blogging. */</code>:" +#~ msgstr "" +#~ "Vložte níže uvedené řádky do vašeho souboru <code>wp-config.php</code> " +#~ "(naleznete ho v <code>%s</code>), konkrétně pak přímo <strong>nad</" +#~ "strong> řádek s textem <code>/* That’s all, stop editing! Happy " +#~ "blogging. */</code>:" + +#~ msgid "" +#~ "This unique authentication key is also missing from your <code>wp-config." +#~ "php</code> file." + +#~ msgid_plural "" +#~ "These unique authentication keys are also missing from your <code>wp-" +#~ "config.php</code> file." +#~ msgstr[0] "" +#~ "V souboru <code>wp-config.php</code> rovněž chybí následující ověřovací " +#~ "klíč." +#~ msgstr[1] "" +#~ "V souboru <code>wp-config.php</code> rovněž chybí následující ověřovací " +#~ "klíče." +#~ msgstr[2] "" +#~ "V souboru <code>wp-config.php</code> rovněž chybí následující ověřovací " +#~ "klíče." + +#~ msgid "To make your installation more secure, you should also add:" +#~ msgstr "" +#~ "Pro lepší zabezpečení celé vaší instalace WordPressu byste měli do tohoto " +#~ "souboru ještě přidat:" + +#, fuzzy +#~ msgid "" +#~ "Add the following to your <code>web.config</code> file in <code>%s</" +#~ "code>, replacing other WordPress rules:" +#~ msgstr "" +#~ "Vložte následující kód do souboru <code>.htaccess</code> (naleznete ho v " +#~ "<code>%s</code>), čímž nahradíte stávající jednoduchá pravidla WordPressu " +#~ "pro přesměrování:" + +#~ msgid "" +#~ "Add the following to your <code>.htaccess</code> file in <code>%s</code>, " +#~ "replacing other WordPress rules:" +#~ msgstr "" +#~ "Vložte následující kód do souboru <code>.htaccess</code> (naleznete ho v " +#~ "<code>%s</code>), čímž nahradíte stávající jednoduchá pravidla WordPressu " +#~ "pro přesměrování:" + +#, fuzzy +#~ msgid "" +#~ "Once you complete these steps, your network is enabled and configured. " +#~ "You will have to log in again." +#~ msgstr "" +#~ "Až postupně dokončíte všechny výše uvedené kroky, tak bude vámi vytvořená " +#~ "síť webů správně nastavena a funkční." + +#, fuzzy +#~ msgid "That user does not exist." +#~ msgstr "Plugin neexistuje." + +#, fuzzy +#~ msgid "Error: Site URL already taken." +#~ msgstr "" +#~ "<a href=\"%1$s\">Akismet</a> už ochránil váš web před %2$s útokem " +#~ "komentářového spamu," + +#, fuzzy +#~ msgid "Error: problem creating site entry." +#~ msgstr "Sledovat aktuální obsah tohoto webu pomocí RSS" + +#, fuzzy +#~ msgid "Only the lowercase letters a-z and numbers allowed" +#~ msgstr "" +#~ "Stačí si pouze zvolit tabulku, kterou chcete exportovat a upřesnit " +#~ "příslušný exportní formát a oddělovač dat (potřebné pouze pro formát CSV)." + +#, fuzzy +#~ msgid "Please enter a username" +#~ msgstr "<strong>CHYBA</strong>: Zadejte své uživatelské jméno." + +#, fuzzy +#~ msgid "That username is not allowed" +#~ msgstr "Registrace uživatelů není v tuto chvíli povolena." + +#, fuzzy +#~ msgid "Username must be at least 4 characters" +#~ msgstr "Musíte se zaregistrovat, abyste mohli přidávat komentáře." + +#, fuzzy +#~ msgid "Sorry, usernames must have letters too!" +#~ msgstr "Pro přidání komentáře se musíte nejdříve přihlásit." + +#, fuzzy +#~ msgid "Please enter a correct email address" +#~ msgstr "Chyba: Zadejte prosím správnou emailovou adresu." + +#, fuzzy +#~ msgid "Sorry, that email address is not allowed!" +#~ msgstr "" +#~ "<strong>CHYBA</strong>: Uživatel s tímto emailem tu není zaregistrován." + +#, fuzzy +#~ msgid "Sorry, that username already exists!" +#~ msgstr "Uživatel již existuje. Heslo nebylo změněno." + +#, fuzzy +#~ msgid "Sorry, that email address is already used!" +#~ msgstr "" +#~ "<strong>CHYBA</strong>: Uživatel s tímto emailem tu není zaregistrován." + +#, fuzzy +#~ msgid "username and email used" +#~ msgstr "[%s] Vaše uživatelské jméno a heslo" + +#, fuzzy +#~ msgid "Please enter a site name" +#~ msgstr "<strong>CHYBA</strong>: Zadejte své uživatelské jméno." + +#, fuzzy +#~ msgid "Only lowercase letters and numbers allowed" +#~ msgstr "" +#~ "Stačí si pouze zvolit tabulku, kterou chcete exportovat a upřesnit " +#~ "příslušný exportní formát a oddělovač dat (potřebné pouze pro formát CSV)." + +#, fuzzy +#~ msgid "That name is not allowed" +#~ msgstr "Registrace uživatelů není v tuto chvíli povolena." + +#, fuzzy +#~ msgid "Site name must be at least 4 characters" +#~ msgstr "Autor komentáře musí vyplnit své jméno a email" + +#, fuzzy +#~ msgid "Sorry, you may not use that site name." +#~ msgstr "" +#~ "Pokud nebudete používat k odesílání emailů SMTP server, ponechte všechna " +#~ "výše uvedená pole prázdná." + +#, fuzzy +#~ msgid "Sorry, site names must have letters too!" +#~ msgstr "Pro přidání komentáře se musíte nejdříve přihlásit." + +#, fuzzy +#~ msgid "Please enter a site title" +#~ msgstr "<strong>CHYBA</strong>: Zadejte své uživatelské jméno." + +#, fuzzy +#~ msgid "Sorry, that site already exists!" +#~ msgstr "Uživatel již existuje. Heslo nebylo změněno." + +#, fuzzy +#~ msgid "Sorry, that site is reserved!" +#~ msgstr "Tento soubor nelze bohužel upravovat." + +#, fuzzy +#~ msgid "[%1s] Activate %2s" +#~ msgstr "ID #%1s: %2s" + +#, fuzzy +#~ msgid "Invalid activation key." +#~ msgstr "Proč je můj klíč nesprávný?" + +#, fuzzy +#~ msgid "The site is already active." +#~ msgstr "Tato verze již byla nainstalována." + +#, fuzzy +#~ msgid "Could not create user" +#~ msgstr "Nepodařilo se vytvořit adresář" + +#, fuzzy +#~ msgid "That username is already activated." +#~ msgstr "Tato verze již byla nainstalována." + +#, fuzzy +#~ msgid "Site already exists." +#~ msgstr "Cílový adresář již existuje." + +#, fuzzy +#~ msgid "Could not create site." +#~ msgstr "Nepodařilo se vytvořit adresář" + +#, fuzzy +#~ msgid "New Site Registration: %s" +#~ msgstr "[%s] Registrace nového uživatele" + +#, fuzzy +#~ msgid "New User Registration: %s" +#~ msgstr "[%s] Registrace nového uživatele" + +#, fuzzy +#~ msgid "" +#~ "<h1>Already Installed</h1><p>You appear to have already installed " +#~ "WordPress. To reinstall please clear your old database tables first.</p>" +#~ msgstr "" +#~ "WordPress byl již pravděpodobně nainstalován. Pokud jej chcete " +#~ "přeinstalovat, vymažte nejprve stávající tabulky v databázi." + +#, fuzzy +#~ msgid "New %1$s Site: %2$s" +#~ msgstr "Nová šablona byla aktivována. <a href=\"%s\">Zobrazit web</a>" + +#, fuzzy +#~ msgid "New %1$s User: %2$s" +#~ msgstr "Vytvořit nového uživatele" + +#, fuzzy +#~ msgid "Please try again!" +#~ msgstr "Zkuste to prosím znovu." + +#, fuzzy +#~ msgid "Success" +#~ msgstr "Úspěšné" + +#, fuzzy +#~ msgid "Site Name:" +#~ msgstr "Název kotvy" + +#, fuzzy +#~ msgid "Site Domain:" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Your address will be " +#~ msgstr "Internetová adresa vaší sítě webů bude <code>%s</code>." + +#, fuzzy +#~ msgid "sitename" +#~ msgstr "Server" + +#, fuzzy +#~ msgid "Site Title:" +#~ msgstr "(bez názvu)" + +#, fuzzy +#~ msgid "Privacy:" +#~ msgstr "Viditelnost" + +#, fuzzy +#~ msgid "" +#~ "Allow my site to appear in search engines like Google, Technorati, and in " +#~ "public listings around this network." +#~ msgstr "" +#~ "Chci aby si můj web mohl prohlížet kdokoli, a to včetně vyhledávačů " +#~ "(např. Google, Seznam, Bing, Technorati) a archivovacích služeb" + +#, fuzzy +#~ msgid "(Must be at least 4 characters, letters and numbers only.)" +#~ msgstr "" +#~ "Pro přidání nového uživatelského pole k tabulce zadejte jeho název " +#~ "(používejte pouze malá písmena anglické abecedy, čísla, _ a -)." + +#, fuzzy +#~ msgid "Email Address:" +#~ msgstr "Vaše emailová adresa." + +#, fuzzy +#~ msgid "" +#~ "We send your registration email to this address. (Double-check your email " +#~ "address before continuing.)" +#~ msgstr "" +#~ "Než budete pokračovat, raději si <strong>dvakrát</strong> překontrolujte " +#~ "zadanou emailovou adresu, protože na ni bude zasláno administrátorské " +#~ "heslo." + +#, fuzzy +#~ msgid "Get <em>another</em> %s site in seconds" +#~ msgstr "Vložit obrázek z jiného webu" + +#, fuzzy +#~ msgid "There was a problem, please correct the form below and try again." +#~ msgstr "" +#~ "Objevila se neznámá chyba. Obnovte prosím stránku a zkuste to znovu." + +#, fuzzy +#~ msgid "Sites you are already a member of:" +#~ msgstr "Rubrika, kterou se snažíte vytvořit, již existuje." + +#, fuzzy +#~ msgid "Create Site" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "The site %s is yours." +#~ msgstr "" +#~ "Byl vydán nový WordPress %1$s! Kontaktujte, prosím, administrátora webu." + +#, fuzzy +#~ msgid "Get your own %s account in seconds" +#~ msgstr "Nejpoužívanější štítky zobrazené ve formě shluku" + +#, fuzzy +#~ msgid "Gimme a site!" +#~ msgstr "Administrace" + +#, fuzzy +#~ msgid "Just a username, please." +#~ msgstr "<strong>CHYBA</strong>: Zadejte své uživatelské jméno." + +#~ msgid "Next" +#~ msgstr "Další" + +#, fuzzy +#~ msgid "%s is your new username" +#~ msgstr "Nový komentář k příspěvku #%1$s \"%2$s\" čeká na schválení" + +#, fuzzy +#~ msgid "Signup" +#~ msgstr "SAlign" + +#, fuzzy +#~ msgid "Congratulations! Your new site, %s, is almost ready." +#~ msgstr "Název štítku se bude v této podobě zobrazovat na webu." + +#, fuzzy +#~ msgid "Check your inbox at <strong>%s</strong> and click the link given." +#~ msgstr "" +#~ "Hotovo! Byl importován <strong>%1$s</strong> odkaz nebo rubrika odkazů." + +#, fuzzy +#~ msgid "Still waiting for your email?" +#~ msgstr "Nový komentář k příspěvku #%1$s \"%2$s\" čeká na schválení" + +#, fuzzy +#~ msgctxt "Multisite active signup type" + +#~ msgid "all" +#~ msgstr "Všechny" + +#, fuzzy +#~ msgctxt "Multisite active signup type" + +#~ msgid "none" +#~ msgstr "žádný" + +#, fuzzy +#~ msgctxt "Multisite active signup type" + +#~ msgid "blog" +#~ msgstr "Novinky" + +#, fuzzy +#~ msgctxt "Multisite active signup type" + +#~ msgid "user" +#~ msgstr "uživatel %s" + +#, fuzzy +#~ msgid "Registration has been disabled." +#~ msgstr "Tabulka '%s' byla smazána." + +#, fuzzy +#~ msgid "" +#~ "You must first <a href=\"%s\">log in</a>, and then you can create a new " +#~ "site." +#~ msgstr "Pro přidání komentáře musíte <a href=\"%s\">být přihlášeni</a>." + +#, fuzzy +#~ msgid "User registration has been disabled." +#~ msgstr "Objevila se nějaká nečekaná chyba" + +#, fuzzy +#~ msgid "Site registration has been disabled." +#~ msgstr "Objevila se nějaká nečekaná chyba" + +#, fuzzy +#~ msgid "Sorry, new registrations are not allowed at this time." +#~ msgstr "" +#~ "Nemáte bohužel dostatečné oprávnění pro vytváření nových příspěvků na " +#~ "tomto webu." + +#, fuzzy +#~ msgid "Database tables are missing." +#~ msgstr "Síťové funkce nejsou povoleny." + +#, fuzzy +#~ msgid "This site has been archived or suspended." +#~ msgstr "" +#~ "Nelze zapisovat do souboru, nebo se stala nějaká chyba. Soubor nebyl " +#~ "aktualizován." + +#, fuzzy +#~ msgid "That site does not exist. Please try <a href=\"%s\">%s</a>." +#~ msgstr "" +#~ "Data obrázku bohužel neexistují. Zkuste prosím nahrát obrázek znovu." + +#, fuzzy +#~ msgid "Error establishing database connection" +#~ msgstr "Chyba databáze ve WordPressu %1$s u dotazu %2$s" + +#, fuzzy +#~ msgid "<a href=\"%s\">Writing Posts Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org/Writing_Posts\" target=\"_blank" +#~ "\">Jak správně vytvářet příspěvky?</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Support Forums</a>" +#~ msgstr "" +#~ "<a href=\"http://wordpress.org/support/\">Fórum technické podpory</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Page Creation Documentation</a>" +#~ msgstr "Stránka byla publikována. <a href=\"%s\">Zobrazit stránku</a>" + +#, fuzzy +#~ msgid "<a href=\"%1$s\">Link Categories Documentation</a>" +#~ msgstr "<a href=\"%s\">Odkazy</a> / Upravit odkaz" + +#, fuzzy +#~ msgid "<a href=\"%1$s\">Support Forums</a>" +#~ msgstr "" +#~ "<a href=\"http://wordpress.org/support/\">Fórum technické podpory</a>" + +#, fuzzy +#~ msgid "<a href=\"%1$s\">Creating Links Documentation</a>" +#~ msgstr "<a href=\"%s\">Odkazy</a> / Upravit odkaz" + +#, fuzzy +#~ msgid "<a href=\"%s\">Categories Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Tags Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Edit Posts Documentation</a>" +#~ msgstr "<a href=\"%s\">Odkazy</a> / Upravit odkaz" + +#, fuzzy +#~ msgid "<a href=\"%s\">Page Management Documentation</a>" +#~ msgstr "Stránka byla publikována. <a href=\"%s\">Zobrazit stránku</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Export Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Import Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%1$s\">Link Management Documentation</a>" +#~ msgstr "<a href=\"%s\">Odkazy</a> / Upravit odkaz" + +#, fuzzy +#~ msgid "<a href=\"%s\">Menus Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgctxt "Custom Menus codex page" + +#~ msgid "http://codex.wordpress.org/Custom_Menus" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Documentation on Editing Plugins</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Documentation on Installing Plugins</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Documentation on Managing Plugins</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "" +#~ "Plugin could not be activated because it generated %d characters of " +#~ "<strong>unexpected output</strong>." +#~ msgstr "" +#~ "Plugin nemůže být aktivován, protože způsobil <strong>závažnou chybu</" +#~ "strong>." + +#, fuzzy +#~ msgid "<a href=\"%s\">Theme Development Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Documentation on Using Themes</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/wordpress-problemy-a-jejich-reseni\" " +#~ "target=\"_blank\">WordPress - problémy a jejich řešení</a><br><a href=" +#~ "\"http://codex.wordpress.org/\" target=\"_blank\">Manuál (anglicky)</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Documentation on Editing Files</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/wordpress-problemy-a-jejich-reseni\" " +#~ "target=\"_blank\">WordPress - problémy a jejich řešení</a><br><a href=" +#~ "\"http://codex.wordpress.org/\" target=\"_blank\">Manuál (anglicky)</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Template Tags Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Tools Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "<a href=\"%s\">Widgets Documentation</a>" +#~ msgstr "" +#~ "<a href=\"http://www.separatista.net/sekce/wordpress/cestina\">Česká " +#~ "lokalizace</a>" + +#, fuzzy +#~ msgid "No Responses" +#~ msgstr "(bez názvu)" + +#, fuzzy +#~ msgid "% Responses" +#~ msgstr "Reakce na příspěvek" + +#, fuzzy +#~ msgid "to “%s”" +#~ msgstr "Aktivovat „%s“" + +#~ msgid "Invalid importer." +#~ msgstr "Nesprávný nástroj pro import." + +#~ msgid "Cannot load importer." +#~ msgstr "Nepodařilo se načíst importovací nástroj." + +#, fuzzy +#~ msgid "Add Home Link" +#~ msgstr "Vytvořit novou rubriku odkazů" + +#~ msgid "" +#~ "Themes give your WordPress style. Once a theme is installed, you may " +#~ "preview it, activate it or deactivate it here." +#~ msgstr "" +#~ "Šablony přesně určují zobrazování informací z WordPressu pro návštěvníky " +#~ "webu. Jakmile je šablona nainstalována, můžete ji zde rovnou aktivovat, " +#~ "zobrazit si její náhled, nebo ji deaktivovat." + +#~ msgid "" +#~ "You can find additional themes for your site by using the new <a href=\"%1" +#~ "$s\">Theme Browser/Installer</a> functionality or by browsing the <a href=" +#~ "\"http://wordpress.org/extend/themes/\">WordPress Theme Directory</a> " +#~ "directly and installing manually. To install a theme <em>manually</em>, " +#~ "<a href=\"%2$s\">upload its ZIP archive with the new uploader</a> or copy " +#~ "its folder via FTP into your <code>wp-content/themes</code> directory." +#~ msgstr "" +#~ "Další šablony pro váš web můžete najít pomocí našich nových funkcí pro <a " +#~ "href=\"%1$s\">vyhledávání a automatickou instalaci šablon</a> nebo přímo " +#~ "v <a href=\"http://wordpress.org/extend/themes/\">oficiálním adresáři " +#~ "šablon pro WordPress</a>, kde si šablonu můžete přímo stáhnout a potom ji " +#~ "ručně nainstalovat. Abyste mohli šablonu <em>ručně</em> nainstalovat, <a " +#~ "href=\"%2$s\">nahrajte šablonu prostřednictvím administračního rozhraní " +#~ "ve formátu .zip souboru</a> nebo zkopírujte pomocí FTP celou složku se " +#~ "všemi jejími soubory do vašeho adresáře <code>wp-content/themes</code>." + +#, fuzzy +#~ msgid "Once a theme is uploaded, you should see it on this screen." +#~ msgstr "Jakmile je šablona nahrána, uvidíte ji na této stránce" + +#~ msgid "" +#~ "Widgets are added and arranged by simple drag ’n’ drop. If " +#~ "you hover your mouse over the titlebar of a widget, you’ll see a 4-" +#~ "arrow cursor which indicates that the widget is movable. Click on the " +#~ "titlebar, hold down the mouse button and drag the widget to a sidebar. As " +#~ "you drag, you’ll see a dotted box that also moves. This box shows " +#~ "where the widget will go once you drop it." +#~ msgstr "" +#~ "S widgety na této stránce lze jednoduše pohybovat pomocí myši. Pokud " +#~ "přejedete myší přes název widgetu, změní se kurzor na směrovou růžici, " +#~ "což znamená, že je možné s tímto widgetem pohybovat. Klikněte na vybraný " +#~ "widget, držte stisknuté tlačítko myši a přesuňte ho do postranního panelu " +#~ "tam, kde ho chcete přesně mít. Během samotného přesunování widgetu " +#~ "uvidíte v postranním panelu tečkované ohraničení, které ukazuje možné " +#~ "budoucí umístění widgetu. Až budete s umístěním spokojeni, stačí uvolnit " +#~ "tlačítko myši." + +#~ msgid "" +#~ "To remove a widget from a sidebar, drag it back to Available Widgets or " +#~ "click on the arrow on its titlebar to reveal its settings, and then click " +#~ "Remove." +#~ msgstr "" +#~ "Widget můžete také z postranního panelu odebrat, a to buď přesunutím zpět " +#~ "mezi Dostupné widgety, nebo klikněte v pravé části názvu widgetu na malou " +#~ "skrytou šipku, která zobrazí nastavení konkrétního widgetu a zde můžete " +#~ "pak kliknout na tlačítko Odstranit." + +#~ msgid "" +#~ "To remove a widget from a sidebar <em>and keep its configuration</em>, " +#~ "drag it to Inactive Widgets." +#~ msgstr "" +#~ "Abyste si mohli <em>uchovat nastavení widgetu</em>, který chcete právě " +#~ "odebrat z postranního panelu, přesuňte ho mezi Neaktivní widgety." + +#~ msgid "" +#~ "The Inactive Widgets area stores widgets that are configured but not " +#~ "curently used. If you change themes and the new theme has fewer sidebars " +#~ "than the old, all extra widgets will be stored to Inactive Widgets " +#~ "automatically." +#~ msgstr "" +#~ "Neaktivní widgety jsou widgety, které už byly někdy dříve nastaveny, ale " +#~ "v současné době nejsou v šabloně používány. Pokud změníte šablonu a nová " +#~ "šablona bude mít méně postranních panelů než ta minulá, všechny nepoužité " +#~ "widgety z přebytečného postranního panelu budou automaticky přesunuty " +#~ "právě mezi Neaktivní widgety." + +#~ msgid "Show Text" +#~ msgstr "Zobrazit text" + +#~ msgid "" +#~ "This is your header image. You can change the text color or upload and " +#~ "crop a new image." +#~ msgstr "" +#~ "Následující obrázek se zobrazí v záhlaví webu. Můžete změnit barvu textu " +#~ "nebo nahrát a upravit vlastní obrázek." + +#~ msgid "Use Original Color" +#~ msgstr "Použít původní barvu" + +#~ msgid "Upload New Header Image" +#~ msgstr "Nahrát vlastní obrázek pro záhlaví webu" + +#~ msgid "Reset Header Image and Color" +#~ msgstr "Obnovit původní nastavení" + +#, fuzzy +#~ msgid "Use one of these cool headers." +#~ msgstr "Můžete použít následující XHTML tagy: %s" + +#~ msgid "" +#~ "This will restore the original header image and color. You will not be " +#~ "able to retrieve any customizations." +#~ msgstr "" +#~ "Tato možnost vám umožní obnovit původní nastavení záhlaví. Nebude již " +#~ "možné vrátit se k dříve provedeným úpravám." + +#~ msgid "Page Parent" +#~ msgstr "Nadřazená stránka" + +#~ msgid "Page Order" +#~ msgstr "Pořadí stránky" + +#~ msgid "Get help with “%s”" +#~ msgstr "Nápověda pro menu „%s“" + +#~ msgid "Get help with this page" +#~ msgstr "Nápověda pro tuto stránku" + +#~ msgid "Other Help" +#~ msgstr "Další nápověda" + +#, fuzzy +#~ msgctxt "Mulitisite active signup type" + +#~ msgid "none" +#~ msgstr "žádný" + +#~ msgid "No posts found." +#~ msgstr "Nebyly nalezeny žádné příspěvky." + +#, fuzzy +#~ msgid "Save Menu Item" +#~ msgstr "Zobrazit obsah?" + +#, fuzzy +#~ msgid "Authors & Users" +#~ msgstr "Autoři & uživatelé" + +#, fuzzy +#~ msgid "Global Terms" +#~ msgstr "Zde můžete měnit globální nastavení pluginu." + +#, fuzzy +#~ msgid "Disabled" +#~ msgstr "Funkce je vypnuta." + +#, fuzzy +#~ msgid "The current theme does not support menus." +#~ msgstr "Zadaná cílová URL adresa neexistuje." + +#, fuzzy +#~ msgctxt "post" + +#~ msgid "Edit" +#~ msgstr "Upravit" + +#, fuzzy +#~ msgctxt "page" + +#~ msgid "Edit" +#~ msgstr "Upravit" + +#~ msgid "" +#~ "The modules on this screen can be arranged in several columns. You can " +#~ "select the number of columns from the Screen Options tab." +#~ msgstr "" +#~ "Objekty na této stránce mohou být zobrazovány v několika sloupcích. Počet " +#~ "sloupců si můžete zvolit pomocí nabídky Nastavení zobrazených informací." + +#, fuzzy +#~ msgid "A term with the slug provided already exists." +#~ msgstr "Tento název v URL „%s“ je již používán pro jiný výraz." + +#, fuzzy +#~ msgid "Restrict Date" +#~ msgstr "Datum vytvoření" + +#, fuzzy +#~ msgid "Start:" +#~ msgstr "Automatické spuštění" + +#, fuzzy +#~ msgid "End:" +#~ msgstr "Čas ukončení" + +#~ msgid "Restrict Author" +#~ msgstr "Omezení exportu pouze na vybraného autora" + +#, fuzzy +#~ msgid "Restrict Taxonomies" +#~ msgstr "Omezení exportu pouze na vybraného autora" + +#, fuzzy +#~ msgid "Restrict Content" +#~ msgstr "Omezení exportu pouze na vybraného autora" + +#, fuzzy +#~ msgid "Restrict Status" +#~ msgstr "Stav Google Gears" + +#~ msgid "Import Blogger" +#~ msgstr "Importovat z Bloggeru" + +#, fuzzy +#~ msgid "" +#~ "Howdy! This importer allows you to import posts and comments from your " +#~ "Blogger account into your WordPress site." +#~ msgstr "" +#~ "Tento importovací nástroj vám umožní importovat příspěvky a komentáře z " +#~ "vašeho účtu u služby Blogger do této instalace WordPressu." + +#~ msgid "" +#~ "To use this importer, you must have a Google account and an upgraded " +#~ "(New, was Beta) blog hosted on blogspot.com or a custom domain (not FTP)." +#~ msgstr "" +#~ "Pro použití tohoto importovacího nástroje musíte vlastnit účet u Google a " +#~ "příslušný blog. Blog může být hostován na adrese blogspot.com nebo na " +#~ "vlastní doméně (ne FTP)." + +#~ msgid "" +#~ "The first thing you need to do is tell Blogger to let WordPress access " +#~ "your account. You will be sent back here after providing authorization." +#~ msgstr "" +#~ "První věcí, kterou musíte udělat, je povolení přístupu WordPressu k " +#~ "vašemu účtu. Jakmile bude provedena autorizace, vrátíte se automaticky " +#~ "zpět na tento web." + +#~ msgid "Authorize" +#~ msgstr "Autorizovat" + +#~ msgid "Authorization failed" +#~ msgstr "Autorizace se nezdařila" + +#~ msgid "" +#~ "Something went wrong. If the problem persists, send this info to support:" +#~ msgstr "" +#~ "Něco se nezdařilo. Pokud problémy stále přetrvávají, zašlete informace " +#~ "technické podpoře:" + +#~ msgid "Trouble signing in" +#~ msgstr "Problém při přihlašování" + +#~ msgid "We were not able to gain access to your account. Try starting over." +#~ msgstr "WordPressu nebyl povolen přístup k vašemu účtu. Zkuste to znovu." + +#~ msgid "No blogs found" +#~ msgstr "Nenalezen žádný blog." + +#~ msgid "" +#~ "We were able to log in but there were no blogs. Try a different account " +#~ "next time." +#~ msgstr "" +#~ "WordPressu se sice podařilo přihlásit k vašemu účtu, ale nenašel tam " +#~ "žádný blog. Příště zkuste jiný účet." + +#~ msgid "Importing..." +#~ msgstr "Importuji..." + +#~ msgid "Set Authors" +#~ msgstr "Nastavit autory" + +#~ msgid "Preparing author mapping form..." +#~ msgstr "Příprava formuláře pro nastavení autorů..." + +#~ msgid "Final Step: Author Mapping" +#~ msgstr "Poslední krok: nastavení autorů" + +#~ msgid "Nothing was imported. Had you already imported this blog?" +#~ msgstr "Nebylo nic importováno. Nebyl tento blog již někdy importován?" + +#~ msgid "Blogger Blogs" +#~ msgstr "Blogy na Bloggeru" + +#~ msgid "Blog Name" +#~ msgstr "Název webu" + +#~ msgid "Blog URL" +#~ msgstr "Adresa webu" + +#~ msgid "The Magic Button" +#~ msgstr "Kouzelné tlačítko" + +#~ msgid "" +#~ "This feature requires Javascript but it seems to be disabled. Please " +#~ "enable Javascript and then reload this page. Don’t worry, you can " +#~ "turn it back off when you’re done." +#~ msgstr "" +#~ "Tato funkce vyžaduje použití Javascriptu, který máte ale patrně zakázán. " +#~ "Povolte jej prosím ve vašem prohlížeči a potom obnovte tuto stránku. " +#~ "Nedělejte si žádné starosti, jakmile tato akce v pořádku proběhne, tak " +#~ "můžete Javascriptu opět zakázat." + +#, fuzzy +#~ msgid "" +#~ "All posts were imported with the current user as author. Use this form to " +#~ "move each Blogger user’s posts to a different WordPress user. You " +#~ "may <a href=\"%s\">add users</a> and then return to this page and " +#~ "complete the user mapping. This form may be used as many times as you " +#~ "like until you activate the “Restart” function below." +#~ msgstr "" +#~ "Všem naimportovaným příspěvkům byl jako autor přiřazen aktuálně " +#~ "přihlášený uživatel. Pokud chcete každého autora z Bloggeru přiřadit k " +#~ "jinému autorovi ve WordPressu, použijte následující formulář. Můžete také " +#~ "nejdříve <a href=\"users.php\">vytvořit uživatele</a> a potom se vrátit " +#~ "na tuto stránku a dokončit přiřazení autorů k importovaným příspěvkům. " +#~ "Tento formulář můžete používat neomezeně, dokud neaktivujetete dolním " +#~ "tlačítkem funkci „Vyčištění“." + +#~ msgid "Author mapping" +#~ msgstr "Nastavení autorů" + +#~ msgid "Blogger username" +#~ msgstr "Uživatelské jméno na Bloggeru" + +#~ msgid "WordPress login" +#~ msgstr "Přihlašovací údaje WordPressu" + +#~ msgid "Could not connect to https://www.google.com" +#~ msgstr "Nepodařilo se připojit k https://www.google.com" + +#~ msgid "" +#~ "There was a problem opening a secure connection to Google. This is what " +#~ "went wrong:" +#~ msgstr "" +#~ "Nastal problém při navazování zabezpečeného připojení ke Googlu. Tady " +#~ "jsou podrobnější informace, co se vlastně stalo:" + +#~ msgid "Could not connect to %s" +#~ msgstr "Nepodařilo se připojit k %s" + +#~ msgid "" +#~ "There was a problem opening a connection to Blogger. This is what went " +#~ "wrong:" +#~ msgstr "" +#~ "Nastal problém při navazování připojení k Bloggeru. Tady jsou podrobnější " +#~ "informace, co se vlastně stalo:" + +#~ msgid "Congratulations!" +#~ msgstr "Gratulujeme!" + +#~ msgid "" +#~ "Now that you have imported your Blogger blog into WordPress, what are you " +#~ "going to do? Here are some suggestions:" +#~ msgstr "" +#~ "Nyní máte naimportována vaše data z Bloggeru ve WordPressu, co chcete " +#~ "dělat dál? Tady je pár tipů:" + +#~ msgid "That was hard work! Take a break." +#~ msgstr "To byla těžká práce! Nezapomeňte na uvolňující přestávku." + +#~ msgid "" +#~ "In case you haven’t done it already, you can import the posts from " +#~ "your other blogs:" +#~ msgstr "" +#~ "Jestli to ještě není všechno, tak můžete importovat data i z dalších " +#~ "blogů:" + +#~ msgid "" +#~ "Go to <a href=\"%s\" target=\"%s\">Authors & Users</a>, where you can " +#~ "modify the new user(s) or delete them. If you want to make all of the " +#~ "imported posts yours, you will be given that option when you delete the " +#~ "new authors." +#~ msgstr "" +#~ "Přesuňte se do nabídky <a href=\"%s\" target=\"%s\">Autoři & " +#~ "uživatelé</a>, kde můžete upravovat nově vytvořené uživatele (nebo smazat " +#~ "stávající). Pokud si chcete všechny importované příspěvky přivlastnit, " +#~ "smažte vytvořené uživatele, čímž změníte vlastníka jejich příspěvků na " +#~ "sebe." + +#~ msgid "For security, click the link below to reset this importer." +#~ msgstr "" +#~ "Z bezpečnostních důvodů klikněte na následující odkaz, čímž resetujete " +#~ "importovací nástroj. Smažete tak důvěrná data a nastavení z databáze." + +#~ msgid "Restart" +#~ msgstr "Vyčištění" + +#~ msgid "" +#~ "We have saved some information about your Blogger account in your " +#~ "WordPress database. Clearing this information will allow you to start " +#~ "over. Restarting will not affect any posts you have already imported. If " +#~ "you attempt to re-import a blog, duplicate posts and comments will be " +#~ "skipped." +#~ msgstr "" +#~ "V databázi WordPressu jsou v tuto chvíli uloženy nějaké informace o vašem " +#~ "účtu na Bloggeru. Po smazání těchto informací můžete začít znovu " +#~ "importovat. Tento krok nemá žádný vliv na záznamy, které jste již " +#~ "naimportovali. Pokud budete chtít znovu importovat váš blog, duplicitní " +#~ "příspěvky a komentáře budou přeskočeny." + +#~ msgid "Clear account information" +#~ msgstr "Smazat informace o účtu" + +#~ msgid "Import Blogware" +#~ msgstr "Importovat z Blogware" + +#, fuzzy +#~ msgid "" +#~ "Howdy! This importer allows you to extract posts from Blogware XML export " +#~ "file into your site. Pick a Blogware file to upload and click Import." +#~ msgstr "" +#~ "Tento importovací nástroj vám umožní přidat příspěvky z XML výstupu " +#~ "systému Blogware. Vyberte XML soubor z Blogware a klikněte na \"Nahrát a " +#~ "importovat\"." + +#~ msgid "Post <em>%s</em> already exists." +#~ msgstr "Příspěvek <em>%s</em> již existuje." + +#~ msgid "Importing post <em>%s</em>..." +#~ msgstr "Importuji příspěvek <em>%s</em>..." + +#~ msgid "Couldn’t get post ID" +#~ msgstr "Nepodařilo se získat ID příspěvku" + +#~ msgid "%s comment" + +#~ msgid_plural "%s comments" +#~ msgstr[0] "%s komentář" +#~ msgstr[1] "%s komentáře" +#~ msgstr[2] "%s komentářů" + +#~ msgid "All done. <a href=\"%s\">Have fun!</a>" +#~ msgstr "Všechno je hotovo. <a href=\"%s\">Hodně štěstí!</a>" + +#~ msgid "Blogware" +#~ msgstr "Blogware" + +#~ msgid "Import posts from Blogware." +#~ msgstr "Importovat příspěvky z Blogware." + +#~ msgid "Import DotClear" +#~ msgstr "Importovat z Dotclear" + +#~ msgid "" +#~ "Steps may take a few minutes depending on the size of your database. " +#~ "Please be patient." +#~ msgstr "" +#~ "V závislosti na velikosti databáze mohou následující kroky trvat i " +#~ "několik minut. Chce to trochu trpělivosti." + +#, fuzzy +#~ msgid "" +#~ "Howdy! This importer allows you to extract posts from a DotClear database " +#~ "into your WordPress site. Mileage may vary." +#~ msgstr "" +#~ "Tento importovací nástroj vám umožní importovat příspěvky z publikačního " +#~ "systému Dotclear." + +#~ msgid "Your DotClear Configuration settings are as follows:" +#~ msgstr "Vaše nastavení pro Dotclear je následující:" + +#~ msgid "Import Categories" +#~ msgstr "Importovat rubriky" + +#~ msgid "Importing Categories..." +#~ msgstr "Importuji rubriky..." + +#~ msgid "Done! <strong>%1$s</strong> category imported." + +#~ msgid_plural "Done! <strong>%1$s</strong> categories imported." +#~ msgstr[0] "Hotovo! Byla importována <strong>%1$s</strong> rubrika." +#~ msgstr[1] "Hotovo! Byly importovány <strong>%1$s</strong> rubriky." +#~ msgstr[2] "Hotovo! Bylo importováno <strong>%1$s</strong> rubrik." + +#~ msgid "No Categories to Import!" +#~ msgstr "Neexistuje žádná rubrika k importu!" + +#~ msgid "Importing Users..." +#~ msgstr "Importuji uživatele..." + +#~ msgid "Done! <strong>%1$s</strong> users imported." +#~ msgstr "Hotovo! Importovaní uživatelé: <strong>%1$s</strong>." + +#~ msgid "No Users to Import!" +#~ msgstr "Neexistuje žádný uživatel k importu!" + +#~ msgid "Importing Posts..." +#~ msgstr "Importuji příspěvky..." + +#~ msgid "Done! <strong>%1$s</strong> posts imported." +#~ msgstr "Hotovo! Importované příspěvky: <strong>%1$s</strong>." + +#~ msgid "Importing Comments..." +#~ msgstr "Importuji komentáře..." + +#~ msgid "Done! <strong>%1$s</strong> comments imported." +#~ msgstr "Hotovo! Importované komentáře: <strong>%1$s</strong>." + +#~ msgid "No Comments to Import!" +#~ msgstr "Neexistuje žádný komentář k importu!" + +#~ msgid "Importing Links..." +#~ msgstr "Importuji odkazy..." + +#~ msgid "Done! <strong>%s</strong> link or link category imported." + +#~ msgid_plural "Done! <strong>%s</strong> links or link categories imported." +#~ msgstr[0] "" +#~ "Hotovo! Byl importován <strong>%1$s</strong> odkaz nebo rubrika odkazů." +#~ msgstr[1] "" +#~ "Hotovo! Byly importovány <strong>%1$s</strong> odkazy nebo rubriky odkazů." +#~ msgstr[2] "" +#~ "Hotovo! Bylo importováno <strong>%1$s</strong> odkazů nebo rubrik odkazů." + +#~ msgid "No Links to Import!" +#~ msgstr "Neexistují žádné odkazy k importu!" + +#~ msgid "Import Users" +#~ msgstr "Importovat uživatele" + +#~ msgid "Import Posts" +#~ msgstr "Importovat příspěvky" + +#~ msgid "Import Comments" +#~ msgstr "Importovat komentáře" + +#~ msgid "Import Links" +#~ msgstr "Import odkazů" + +#~ msgid "Finish" +#~ msgstr "Dokončit" + +#~ msgid "" +#~ "Welcome to WordPress. We hope (and expect!) that you will find this " +#~ "platform incredibly rewarding! As a new WordPress user coming from " +#~ "DotClear, there are some things that we would like to point out. " +#~ "Hopefully, they will help your transition go as smoothly as possible." +#~ msgstr "" +#~ "Vítejte ve WordPressu. Doufáme, že budete se svojí volbou nového " +#~ "publikačního systému spokojeni. Protože jste nový uživatel WordPressu " +#~ "přecházející ze systému Dotclear, chtěli bychom vás upozornit na několik " +#~ "důležitých věcí, které by vám měly pomoci při přechodu na nový publikační " +#~ "systém." + +#~ msgid "" +#~ "You have already setup WordPress and have been assigned an administrative " +#~ "login and password. Forget it. You didn’t have that login in " +#~ "DotClear, why should you have it here? Instead we have taken care to " +#~ "import all of your users into our system. Unfortunately there is one " +#~ "downside. Because both WordPress and DotClear uses a strong encryption " +#~ "hash with passwords, it is impossible to decrypt it and we are forced to " +#~ "assign temporary passwords to all your users. <strong>Every user has the " +#~ "same username, but their passwords are reset to password123.</strong> So " +#~ "<a href=\"%1$s\">Log in</a> and change it." +#~ msgstr "" +#~ "Právě jste úspěšně nastavili WordPress a máte přiřazeno své " +#~ "administrátorské uživatelské jméno a heslo. Ale zapomeňte na ně. " +#~ "Nepoužívali jste tyto přihlašovací údaje v systému Dotclear, tak proč " +#~ "byste je měli používat tady? Místo nich automaticky naimportujeme všechny " +#~ "uživatele z Dotclearu do WordPressu. Je tu ale bohužel jeden problém. " +#~ "WordPress i Dotclear totiž používají opravdu bezpečně zašifrovaná hesla, " +#~ "která nelze získat v jejich původní podobě, takže nemohou být ani během " +#~ "importu přenesena a všem uživatelům tak bude přiřazeno dočasné heslo. " +#~ "<strong>Všechna uživatelská jména tedy zůstanou stejná, ale jejich hesla " +#~ "budou automaticky nastavena na password123.</strong> Takže se <a href=\"%" +#~ "1$s\">přihlaste</a> a změňte si heslo." + +#~ msgid "Preserving Authors" +#~ msgstr "Ponechání autorů" + +#~ msgid "" +#~ "Secondly, we have attempted to preserve post authors. If you are the " +#~ "only author or contributor to your blog, then you are safe. In most " +#~ "cases, we are successful in this preservation endeavor. However, if we " +#~ "cannot ascertain the name of the writer due to discrepancies between " +#~ "database tables, we assign it to you, the administrative user." +#~ msgstr "" +#~ "Po úspěšné změně nastaveného hesla (viz výše) se pokusíme automaticky " +#~ "přiřadit autory k importovaným příspěvkům. Pokud jste jediným autorem " +#~ "příspěvků na webu, tak je vše v pořádku. Nestává se to často, ale pokud " +#~ "nelze z technických důvodů (např. rozdíly mezi databázovými tabulkami) " +#~ "obnovit jména ostatních autorů, budou jejich příspěvky přiřazeny vám jako " +#~ "administrátorovi systému." + +#~ msgid "Textile" +#~ msgstr "Textile" + +#~ msgid "" +#~ "Also, since you’re coming from DotClear, you probably have been " +#~ "using Textile to format your comments and posts. If this is the case, we " +#~ "recommend downloading and installing <a href=\"http://www.huddledmasses." +#~ "org/category/development/wordpress/textile/\">Textile for WordPress</a>. " +#~ "Trust me… You’ll want it." +#~ msgstr "" +#~ "Pokud přecházíte ze systému Dotclear, pravděpodobně jste používali pro " +#~ "formátování příspěvků a komentářů Textile. Pokud chcete dále využívat " +#~ "tento formátovací nástroj, doporučujeme stáhnout a nainstalovat <a href=" +#~ "\"http://www.huddledmasses.org/category/development/wordpress/textile/" +#~ "\">Textile for WordPress</a>. Věřte, že se bude hodit. Můžete také " +#~ "vyzkoušet třeba <a href=\"http://www.texy.info/\" title=\"Texy! - HTML " +#~ "formátovač\">české Texy!</a>." + +#~ msgid "WordPress Resources" +#~ msgstr "Zdroje informací o WordPressu" + +#~ msgid "" +#~ "Finally, there are numerous WordPress resources around the internet. " +#~ "Some of them are:" +#~ msgstr "" +#~ "Existuje několik nejznámějších zdrojů, které poskytují informace o " +#~ "WordPressu, například:" + +#, fuzzy +#~ msgid "<a href=\"http://wordpress.org/\">The official WordPress site</a>" +#~ msgstr "" +#~ "<a href=\"http://www.wordpress.org\">Oficiální stránky WordPressu</a>" + +#~ msgid "" +#~ "<a href=\"http://wordpress.org/support/\">The WordPress support forums</a>" +#~ msgstr "" +#~ "<a href=\"http://wordpress.org/support/\">Fórum technické podpory</a>" + +#, fuzzy +#~ msgid "" +#~ "<a href=\"http://codex.wordpress.org/\">The Codex (In other words, the " +#~ "WordPress Bible)</a>" +#~ msgstr "" +#~ "<a href=\"http://codex.wordpress.org\">Dokumentace (aneb Bible WordPressu)" +#~ "</a>" + +#~ msgid "" +#~ "That’s it! What are you waiting for? Go <a href=\"%1$s\">log in</a>!" +#~ msgstr "" +#~ "A to je všechno! Na co ještě čekáte? Můžete se jít rovnou <a href=\"%1$s" +#~ "\">přihlásit</a>!" + +#~ msgid "DotClear Database User:" +#~ msgstr "Uživatel Dotclear (DCR) databáze:" + +#~ msgid "DotClear Database Password:" +#~ msgstr "Heslo do DCR databáze:" + +#~ msgid "DotClear Database Name:" +#~ msgstr "Název DCR databáze:" + +#~ msgid "DotClear Database Host:" +#~ msgstr "Host DCR databáze:" + +#~ msgid "DotClear Table prefix:" +#~ msgstr "Prefix tabulek DCR:" + +#~ msgid "Originating character set:" +#~ msgstr "Původní znaková sada:" + +#~ msgid "DotClear" +#~ msgstr "Dotclear" + +#~ msgid "" +#~ "Import categories, users, posts, comments, and links from a DotClear blog." +#~ msgstr "" +#~ "Importovat rubriky, uživatele, příspěvky, komentáře a odkazy ze systému " +#~ "Dotclear." + +#~ msgid "Import GreyMatter" +#~ msgstr "Import z GreyMatteru" + +#~ msgid "This is a basic GreyMatter to WordPress import script." +#~ msgstr "" +#~ "Toto je základní script pro import dat ze systému GreyMatter (GM) do " +#~ "WordPressu." + +#~ msgid "What it does:" +#~ msgstr "Co tento skript vlastně provede?" + +#~ msgid "" +#~ "Parses gm-authors.cgi to import (new) authors. Everyone is imported at " +#~ "level 1." +#~ msgstr "" +#~ "Připraví soubor gm-authors.cgi pro import (nových) autorů. Všichni takto " +#~ "vytvoření autoři budou mít ve WordPressu uživatelskou úroveň 1." + +#~ msgid "" +#~ "Parses the entries cgi files to import posts, comments, and karma on " +#~ "posts (although karma is not used on WordPress yet).<br />If authors are " +#~ "found not to be in gm-authors.cgi, imports them at level 0." +#~ msgstr "" +#~ "Připraví záznamy v cgi souborech pro import příspěvků, komentářů a " +#~ "hodnocení příspěvků (i když hodnocení příspěvků zatím není ve WodrPressu " +#~ "přímo podporováno).<br />Pokud jsou během této operace nalezeni autoři, " +#~ "kteří se nenacházejí v souboru gm-authors.cgi, bude jim nastavena " +#~ "uživatelská úroveň 0." + +#~ msgid "" +#~ "Detects duplicate entries or comments. If you don't import everything the " +#~ "first time, or this import should fail in the middle, duplicate entries " +#~ "will not be made when you try again." +#~ msgstr "" +#~ "Vyhledá duplicitní příspěvky a komentáře. Pokud neprovádíte import dat " +#~ "poprvé, nebo pokud předchozí import selhal, nebudou duplicitní záznamy " +#~ "znovu importovány." + +#~ msgid "What it does not:" +#~ msgstr "Tento skript však neumí následující:" + +#~ msgid "" +#~ "Parse gm-counter.cgi, gm-banlist.cgi, gm-cplog.cgi (you can make a CP log " +#~ "hack if you really feel like it, but I question the need of a CP log)." +#~ msgstr "" +#~ "Zpracovat soubory gm-counter.cgi, gm-banlist.cgi a gm-cplog.cgi (můžete " +#~ "použít \"CP log hack\", pokud to opravdu potřebujete)." + +#~ msgid "Import gm-templates." +#~ msgstr "Importovat soubory gm-templates." + +#, fuzzy +#~ msgid "Doesn’t keep entries on top." +#~ msgstr "Soubor „%s“ neexistuje?" + +#~ msgid "Second step: GreyMatter details:" +#~ msgstr "Druhým krokem je zadání detailů o vašem účtu u GreyMatter:" + +#~ msgid "Path to GM files:" +#~ msgstr "Cesta k souborům GM:" + +#~ msgid "Path to GM entries:" +#~ msgstr "Cesta k záznamům GM:" + +#~ msgid "Last entry’s number:" +#~ msgstr "Číslo posledního příspěvku:" + +#~ msgid "" +#~ "This importer will search for files 00000001.cgi to 000-whatever.cgi,<br /" +#~ ">so you need to enter the number of the last GM post here.<br />(if you " +#~ "don’t know that number, just log in to your FTP and look it out<br /" +#~ ">in the entries’ folder)" +#~ msgstr "" +#~ "Tento importovací nástroj bude vyhledávat soubory 00000001.cgi až 000-" +#~ "číslo.cgi,<br />takže musíte do tohoto pole vložit číslo posledního " +#~ "příspěvku v systému GreyMatter.<br/>(Pokud toto číslo posledního " +#~ "příspěvku neznáte, přihlaste se prosím na FTP u GM a najděte ho<br />v " +#~ "adresáři s příspěvky.)" + +#~ msgid "Start Importing" +#~ msgstr "Spustit import" + +#~ msgid "Wrong path, the path to the GM entries does not exist on the server" +#~ msgstr "Špatně zadaná cesta! Cesta k záznamům GM na serveru neexistuje." + +#~ msgid "Wrong path, the path to the GM files does not exist on the server" +#~ msgstr "Špatně zadaná cesta! Cesta k souborům GM na serveru neexistuje." + +#~ msgid "The importer is running..." +#~ msgstr "Importovací nástroj právě pracuje..." + +#~ msgid "importing users..." +#~ msgstr "Importuji uživatele..." + +#~ msgid "user %s" +#~ msgstr "uživatel %s" + +#~ msgid "Already exists" +#~ msgstr "Již existuje" + +#~ msgid "user %s..." +#~ msgstr "uživatel %s..." + +#~ msgid "importing posts, comments, and karma..." +#~ msgstr "Importuji příspěvky, komentáře a hodnocení..." + +#~ msgid "entry # %s : %s : by %s" +#~ msgstr "záznam číslo # %s : %s : od uživatele %s" + +#~ msgid "(already exists)" +#~ msgstr "(již existuje)" + +#~ msgid "registered deleted user %s at level 0 " +#~ msgstr "schváleno smazání uživatele %s s úrovní 0" + +#~ msgid "imported %s comment" + +#~ msgid_plural "imported %s comments" +#~ msgstr[0] "%s komentář importován" +#~ msgstr[1] "%s komentáře importovány" +#~ msgstr[2] "%s komentářů importováno" + +#~ msgid "ignored %s pre-existing comment" + +#~ msgid_plural "ignored %s pre-existing comments" +#~ msgstr[0] "%s předcházející komentář ignorován" +#~ msgstr[1] "%s předcházející komentáře ignorovány" +#~ msgstr[2] "%s předcházejících komentářů ignorováno" + +#~ msgid "Completed GreyMatter import!" +#~ msgstr "Import z GreyMatteru proběhl úspěšně!" + +#~ msgid "GreyMatter" +#~ msgstr "GreyMatter" + +#~ msgid "Import users, posts, and comments from a Greymatter blog." +#~ msgstr "Importovat uživatele, příspěvky a komentáře z Greymatteru." + +#~ msgid "Import LiveJournal" +#~ msgstr "Import z LiveJournalu" + +#~ msgid "" +#~ "It looks like you attempted to import your LiveJournal posts previously " +#~ "and got interrupted." +#~ msgstr "" +#~ "Vypadá to, že jste se už dříve pokoušeli naimportovat příspěvky z " +#~ "LiveJournalu, ale import byl přerušen." + +#~ msgid "Continue previous import" +#~ msgstr "Pokračovat v předchozím importu" + +#~ msgid "Cancel & start a new import" +#~ msgstr "Zrušit akci & a zkusit import znovu" + +#~ msgid "" +#~ "Howdy! This importer allows you to connect directly to LiveJournal and " +#~ "download all your entries and comments" +#~ msgstr "" +#~ "Tento importovací nástroj vám umožní připojit se přímo k vašemu účtu u " +#~ "LiveJournalu a stáhnout všechny příspěvky a komentáře." + +#~ msgid "" +#~ "Enter your LiveJournal username and password below so we can connect to " +#~ "your account:" +#~ msgstr "" +#~ "Zadejte prosím své přihlašovací jméno a heslo k LiveJournalu, abychom se " +#~ "mohli automaticky připojit k vašemu účtu:" + +#~ msgid "LiveJournal Username" +#~ msgstr "Uživatelské jméno" + +#~ msgid "LiveJournal Password" +#~ msgstr "Heslo" + +#~ msgid "" +#~ "If you have any entries on LiveJournal which are marked as private, they " +#~ "will be password-protected when they are imported so that only people who " +#~ "know the password can see them." +#~ msgstr "" +#~ "Pokud máte některé příspěvky u LiveJournalu označeny jako soukromé, budou " +#~ "automaticky během importu zaheslovány, takže i ve WordPressu k nim budou " +#~ "mít přístup jenom lidé, kteří znají heslo." + +#~ msgid "" +#~ "If you don’t enter a password, ALL ENTRIES from your LiveJournal " +#~ "will be imported as public posts in WordPress." +#~ msgstr "" +#~ "Pokud však heslo nezadáte, budou všechny příspěvky z LiveJournalu do " +#~ "WordPressu naimportovány jako veřejné." + +#~ msgid "" +#~ "Enter the password you would like to use for all protected entries here:" +#~ msgstr "" +#~ "Zadejte heslo, které chcete použít pro ochranu všech importovaných " +#~ "soukromých příspěvků:" + +#~ msgid "Protected Post Password" +#~ msgstr "Heslo pro ochranu importovaných soukromých příspěvků" + +#~ msgid "" +#~ "<strong>WARNING:</strong> This can take a really long time if you have a " +#~ "lot of entries in your LiveJournal, or a lot of comments. Ideally, you " +#~ "should only start this process if you can leave your computer alone while " +#~ "it finishes the import." +#~ msgstr "" +#~ "<strong>Upozornění:</strong> Pokud máte u LiveJournalu mnoho příspěvků " +#~ "nebo komentářů, může jejich import do WordPressu trvat opravdu dlouhou " +#~ "dobu. Takže doporučujeme zahájit import až ve chvíli, kdy na počítači " +#~ "nechcete zrovna nic dělat a můžete nechat WordPress v klidu dokončit svou " +#~ "práci." + +#~ msgid "Connect to LiveJournal and Import" +#~ msgstr "Připojit se k LiveJournalu a zahájit import" + +#~ msgid "" +#~ "<strong>NOTE:</strong> If the import process is interrupted for <em>any</" +#~ "em> reason, come back to this page and it will continue from where it " +#~ "stopped automatically." +#~ msgstr "" +#~ "<strong>Poznámka:</strong> Pokud bude import z <em>jakéhokoliv</em> " +#~ "důvodu přerušen, vraťte se poté zpět na tuto stránku a import bude " +#~ "automaticky pokračovat tam, kde předtím skončil." + +#~ msgid "" +#~ "<strong>NOTE:</strong> You appear to have JavaScript disabled, so you " +#~ "will need to manually click through each step of this importer. If you " +#~ "enable JavaScript, it will step through automatically." +#~ msgstr "" +#~ "<strong>Poznámka:</strong> Vypadá to, že máte zakázané použití " +#~ "Javascriptu, takže budete muset ručně potvrzovat každý konkrétní krok " +#~ "tohoto importovacího nástroje. Pokud si v prohlížeči Javascript povolíte, " +#~ "potom bude celý import probíhat zcela automaticky." + +#~ msgid "Post metadata has been downloaded, proceeding with posts..." +#~ msgstr "" +#~ "Doplňující informace k příspěvkům byly úspěšně staženy, nyní stahuji " +#~ "samotné příspěvky..." + +#~ msgid "Post <strong>%s</strong> already exists." +#~ msgstr "Příspěvek <strong>%s</strong> již existuje." + +#~ msgid "Imported post <strong>%s</strong>..." +#~ msgstr "Importuji příspěvek <strong>%s</strong>..." + +#~ msgid "Couldn’t get post ID (creating post failed!)" +#~ msgstr "Nemohu získat ID příspěvku (vytváření příspěvku selhalo!)" + +#~ msgid "Failed to create post." +#~ msgstr "Nepodařilo se vytvořit příspěvek." + +#~ msgid "Could not get a cookie from LiveJournal. Please try again soon." +#~ msgstr "" +#~ "Není možné získat cookies z LiveJournalu. Zkuste to prosím za chvíli " +#~ "znovu." + +#~ msgid "" +#~ "Failed to retrieve comment meta information from LiveJournal. Please try " +#~ "again soon." +#~ msgstr "" +#~ "Nepodařilo se získat informace o komentářích z LiveJournalu. Zkuste to " +#~ "prosím za chvíli znovu." + +#~ msgid "You have no comments to import!" +#~ msgstr "Nemáte žádné komentáře k importu!" + +#, fuzzy +#~ msgid "" +#~ "Comment metadata downloaded successfully, proceeding with comment " +#~ "bodies..." +#~ msgstr "" +#~ " Doplňující informace ke komentářům byly úspěšně staženy, nyní stahuji " +#~ "samotné komentáře..." + +#~ msgid "" +#~ "Failed to retrieve comment bodies from LiveJournal. Please try again soon." +#~ msgstr "" +#~ "Nepodařilo se získat komentáře z LiveJournalu. Zkuste to prosím za chvíli " +#~ "znovu." + +#~ msgid "" +#~ "LiveJournal is not responding to authentication requests. Please wait a " +#~ "while and then try again." +#~ msgstr "" +#~ "LiveJournal neodpovídá na odeslané přístupové údaje. Zkuste to prosím za " +#~ "chvíli znovu." + +#~ msgid "XML-RPC Request Failed -- " +#~ msgstr "Požadavek XML-RPC selhal --" + +#~ msgid "" +#~ "Please enter your LiveJournal username <em>and</em> password so we can " +#~ "download your posts and comments." +#~ msgstr "" +#~ "Zadejte prosím vaše uživatelské jméno <em>a</em> heslo k LiveJournalu, " +#~ "abychom mohli automaticky stáhnout vaše příspěvky a komentáře." + +#~ msgid "Start again" +#~ msgstr "Začít znovu" + +#~ msgid "" +#~ "Logging in to LiveJournal failed. Check your username and password and " +#~ "try again." +#~ msgstr "" +#~ "Přihlášení k LiveJournalu se nezdařilo. Zkontrolujte své uživatelské " +#~ "jméno a heslo a zkuste to prosím znovu." + +#~ msgid "Importing Posts" +#~ msgstr "Importuji příspěvky" + +#~ msgid "We’re downloading and importing your LiveJournal posts..." +#~ msgstr "Stahuji a importuji vaše příspěvky z LiveJournalu..." + +#~ msgid "Imported post batch %d of <strong>approximately</strong> %d" +#~ msgstr "Zatím bylo importováno %d z <strong>přibližně</strong> %d příspěvků" + +#~ msgid "" +#~ "Uh oh – LiveJournal has disconnected us because we made too many " +#~ "requests to their servers too quickly." +#~ msgstr "" +#~ "Oh – LiveJournal nás bohužel odpojil, protože jsme během velmi " +#~ "krátké doby provedli příliš mnoho dotazů na jejich servery." + +#~ msgid "" +#~ "We’ve saved where you were up to though, so if you come back to " +#~ "this importer in about 30 minutes, you should be able to continue from " +#~ "where you were." +#~ msgstr "" +#~ "Všechny dosud naimportované příspěvky a komentáře už ale byly uloženy, " +#~ "takže pokud to za 30 minut zkusíte znovu, import bude pokračovat tam, kde " +#~ "jsme naposledy skončili." + +#~ msgid "Try Again" +#~ msgstr "Zkuste to prosím znovu" + +#~ msgid "Import the next batch" +#~ msgstr "Importovat další data" + +#~ msgid "" +#~ "Your posts have all been imported, but wait – there’s more! " +#~ "Now we need to download & import your comments." +#~ msgstr "" +#~ "Všechny vaše příspěvky už byly importovány, ale počkejte – ještě " +#~ "jsme neskončili! Teď je třeba ještě stáhnout & importovat všechny " +#~ "vaše komentáře." + +#~ msgid "Download my comments »" +#~ msgstr "Stáhnout všechny komentáře »" + +#, fuzzy +#~ msgid "Downloading Comments…" +#~ msgstr "Ukládání konceptu…" + +#~ msgid "" +#~ "Now we will download your comments so we can import them (this could take " +#~ "a <strong>long</strong> time if you have lots of comments)..." +#~ msgstr "" +#~ "Nyní bude zahájeno stahování vašich komentářů, abychom je mohli " +#~ "importovat (pokud máte komentářů opravdu hodně, tak to může trvat velmi " +#~ "<strong>dlouhou</strong> dobu)..." + +#~ msgid "Imported comment batch %d of <strong>approximately</strong> %d" +#~ msgstr "Zatím bylo importováno %d z <strong>přibližně</strong> %d komentářů" + +#~ msgid "" +#~ "Your comments have all been imported now, but we still need to rebuild " +#~ "your conversation threads." +#~ msgstr "" +#~ "Všechny vaše komentáře už byly importovány, ale teď je třeba ještě " +#~ "znovuvytvořit komentářová vlákna." + +#~ msgid "Rebuild my comment threads »" +#~ msgstr "Vytvořit u komentářů vlákna »" + +#, fuzzy +#~ msgid "Threading Comments…" +#~ msgstr "Ukládání konceptu…" + +#~ msgid "" +#~ "We are now re-building the threading of your comments (this can also take " +#~ "a while if you have lots of comments)..." +#~ msgstr "" +#~ "Nyní jsou znovuvytvářena komentářová vlákna (pokud máte hodně komentářů, " +#~ "tak to může také nějakou chvíli trvat)..." + +#~ msgid "Successfully re-threaded %s comments." +#~ msgstr "%s komentářům bylo úspěšně přiřazeno vlákno." + +#, fuzzy +#~ msgid "Continuing in %d…" +#~ msgstr "Ukládání konceptu…" + +#, fuzzy +#~ msgid "Continuing…" +#~ msgstr "Načítání…" + +#~ msgid "Processing next batch." +#~ msgstr "Zpracovávám další data." + +#~ msgid "Import Movable Type or TypePad" +#~ msgstr "Import ze systémů Movable Type nebo TypePad" + +#, fuzzy +#~ msgid "" +#~ "Howdy! We are about to begin importing all of your Movable Type or " +#~ "TypePad entries into WordPress. To begin, either choose a file to upload " +#~ "and click “Upload file and import”, or use FTP to upload your " +#~ "MT export file as <code>mt-export.txt</code> in your <code>/wp-content/</" +#~ "code> directory and then click “Import mt-export.txt”." +#~ msgstr "" +#~ "Tento importovací nástroj vám umožní jednoduše přesunout všechna data z " +#~ "publikačních systémů Movable Type nebo Typepad do WordPressu. Nejprve si " +#~ "vyberte v počítači soubor s exportem vašich MT dat (<code>mt-export.txt</" +#~ "code>) a nahrajte ho kliknutím na tlačítko „Nahrát soubor a " +#~ "importovat“, nebo nahrajte tento soubor pomocí FTP do adresáře " +#~ "<code>/wp-content/</code> a potom klikněte na \"Importovat mt-export.txt" +#~ "\"." + +#~ msgid "" +#~ "Or use <code>mt-export.txt</code> in your <code>/wp-content/</code> " +#~ "directory" +#~ msgstr "" +#~ "Nebo použijte soubor <code>mt-export.txt</code> umístěný v adresáři " +#~ "<code>/wp-content/</code>" + +#~ msgid "Import mt-export.txt" +#~ msgstr "Importovat mt-export.txt" + +#~ msgid "" +#~ "The importer is smart enough not to import duplicates, so you can run " +#~ "this multiple times without worry if—for whatever reason—it " +#~ "doesn’t finish. If you get an <strong>out of memory</strong> error " +#~ "try splitting up the import file into pieces." +#~ msgstr "" +#~ "Tento importovací nástroj nevytváří žádné duplicity, takže ho můžete bez " +#~ "obav spustit klidně i několikrát po sobě, když se třeba celý import—" +#~ "z jakéhokoliv důvodu— nepovede hned napoprvé. Pokud uvidíte chybové " +#~ "hlášení <strong>out of memory</strong>, zkuste rozdělit importovaný " +#~ "soubor na několik menších částí." + +#~ msgid "Assign Authors" +#~ msgstr "Přiřazení autorů" + +#~ msgid "" +#~ "To make it easier for you to edit and save the imported posts and drafts, " +#~ "you may want to change the name of the author of the posts. For example, " +#~ "you may want to import all the entries as admin’s entries." +#~ msgstr "" +#~ "Pro snadnější upravování a ukládání importovaných příspěvků či konceptů " +#~ "můžete hromadně změnit jména jejich autorů. Například, chcete-li všem " +#~ "importovaným příspěvkům přiřadit stejného autora (např. administrátora)." + +#~ msgid "" +#~ "Below, you can see the names of the authors of the MovableType posts in " +#~ "<em>italics</em>. For each of these names, you can either pick an author " +#~ "in your WordPress installation from the menu, or enter a name for the " +#~ "author in the textbox." +#~ msgstr "" +#~ "Dole můžete vidět <em>kurzívou</em> vypsaná jména autorů příspěvků v " +#~ "systému MovableType. Každé z těchto jmen můžete pomocí menu přetáhnout do " +#~ "vaší instalace WordPressu, nebo vložit jeho (nové) jméno do textového " +#~ "pole." + +#~ msgid "" +#~ "If a new user is created by WordPress, a password will be randomly " +#~ "generated. Manually change the user’s details if necessary." +#~ msgstr "" +#~ "Pokud byl WordPressem automaticky vytvořen nový uživatel, jeho heslo bylo " +#~ "náhodně vygenerováno. Pokud chcete, můžete ho ručně změnit a doplnit i " +#~ "další informace o uživateli." + +#~ msgid "Current author:" +#~ msgstr "Současný autor:" + +#~ msgid "Create user %1$s or map to existing" +#~ msgstr "Vytvořit uživatele %1$s, nebo přiřadit již existujícího" + +#~ msgid "<code>mt-export.txt</code> does not exist" +#~ msgstr "Soubor <code>mt-export.txt</code> neexistuje" + +#~ msgid "Sorry, there has been an error" +#~ msgstr "Objevila se nějaká nečekaná chyba" + +#, fuzzy +#~ msgid "Adding tags <em>%s</em>..." +#~ msgstr "<br />Vytvářejí se štítky <i>%s</i>..." + +#~ msgid "(%s comment)" + +#~ msgid_plural "(%s comments)" +#~ msgstr[0] "(%s komentář)" +#~ msgstr[1] "(%s komentáře)" +#~ msgstr[2] "(%s komentářů)" + +#~ msgid "(%s ping)" + +#~ msgid_plural "(%s pings)" +#~ msgstr[0] "(%s ping)" +#~ msgstr[1] "(%s pingy)" +#~ msgstr[2] "(%s pingů)" + +#~ msgid "Import Blogroll" +#~ msgstr "Importovat odkazy" + +#~ msgid "Import your blogroll from another system" +#~ msgstr "Importovat vaše oblíbené odkazy z jiného systému" + +#~ msgid "" +#~ "If a program or website you use allows you to export your links or " +#~ "subscriptions as OPML you may import them here." +#~ msgstr "" +#~ "Pokud váš program nebo webová aplikace umožňují exportovat odkazy do OPML " +#~ "souboru, můžete je nyní prostřednictvím tohoto souboru importovat do " +#~ "WordPressu." + +#~ msgid "Specify an OPML URL:" +#~ msgstr "Zadejte URL adresu vašeho OPML souboru:" + +#~ msgid "Or choose from your local disk:" +#~ msgstr "nebo nahrajte OPML soubor ze svého lokálního disku:" + +#~ msgid "Now select a category you want to put these links in." +#~ msgstr "Vyberte rubriku kam chcete odkazy importovat." + +#~ msgid "Category:" +#~ msgstr "Rubrika:" + +#~ msgid "Import OPML File" +#~ msgstr "Importovat OPML soubor" + +#~ msgid "Inserted <strong>%s</strong>" +#~ msgstr "Vloženo <strong>%s</strong>" + +#~ msgid "" +#~ "Inserted %1$d links into category %2$s. All done! Go <a href=\"%3$s" +#~ "\">manage those links</a>." +#~ msgstr "" +#~ "Úspěšně bylo vloženo %1$d odkazů do rubriky %2$s. Tyto odkazy můžete " +#~ "libovolně <a href=\"%3$s\">upravovat</a>." + +#~ msgid "" +#~ "You need to supply your OPML url. Press back on your browser and try again" +#~ msgstr "" +#~ "Musíte doplnit URL adresu svého OPML souboru. Stiskněte tlačítko zpět ve " +#~ "svém internetovém prohlížeči a zkuste to znovu" + +#~ msgid "Import RSS" +#~ msgstr "Import z RSS" + +#, fuzzy +#~ msgid "" +#~ "Howdy! This importer allows you to extract posts from an RSS 2.0 file " +#~ "into your WordPress site. This is useful if you want to import your posts " +#~ "from a system that is not handled by a custom import tool. Pick an RSS " +#~ "file to upload and click Import." +#~ msgstr "" +#~ "Tento importovací nástroj vám umožní získat příspěvky z jakéhokoli " +#~ "souboru RSS 2.0. To je velmi užitečné pokud potřebujete importovat do " +#~ "WordPressu data z jiného systému, než který je podporován našimi " +#~ "nástroji. Do následujícího pole vložte adresu RSS souboru a klikněte na " +#~ "\"Nahrát a importovat\"." + +#~ msgid "Importing post..." +#~ msgstr "Importuji příspěvek..." + +#~ msgid "Post already imported" +#~ msgstr "Tento příspěvek již v databázi existuje" + +#, fuzzy +#~ msgid "Done!" +#~ msgstr "Hotovo" + +#~ msgid "Import Simple Tagging" +#~ msgstr "Importovat Simple Tagging" + +#~ msgid "" +#~ "Howdy! This imports tags from Simple Tagging 1.6.2 into WordPress tags." +#~ msgstr "" +#~ "Tento importovací nástroj vám umožní převést štítky vytvořené pomocí " +#~ "pluginu Simple Tagging 1.6.2 do stávající verze WordPressu." + +#~ msgid "" +#~ "This has not been tested on any other versions of Simple Tagging. Mileage " +#~ "may vary." +#~ msgstr "" +#~ "Tento nástroj nebyl testován na jiných verzích pluginu, než je výše " +#~ "uvedená. Pokud používáte jinou verzi, nelze bohužel zaručit správnou " +#~ "funkčnost." + +#~ msgid "" +#~ "To accommodate larger databases for those tag-crazy authors out there, we " +#~ "have made this into an easy 4-step program to help you kick that nasty " +#~ "Simple Tagging habit. Just keep clicking along and we will let you know " +#~ "when you are in the clear!" +#~ msgstr "" +#~ "Aby nástroj bezchybně fungoval a přizpůsobil se i ne zcela šťastnému a " +#~ "databázově velmi náročnému řešení, které zvolili autoři pluginu Simple " +#~ "Tagging, proběhne převod postupně ve 4 krocích. Postupně si je společně " +#~ "projdeme a nakonec budou štítky určitě správně převedeny." + +#~ msgid "Don’t be stupid - backup your database before proceeding!" +#~ msgstr "" +#~ "Neriskujte a před tím než spustíte import, proveďte raději zálohu " +#~ "databáze!" + +#~ msgid "Step 1" +#~ msgstr "Krok č. 1" + +#~ msgid "Reading STP Post Tags…" +#~ msgstr "Probíhá načítání STP Post Tags…" + +#~ msgid "No posts were found to have tags!" +#~ msgstr "Neexistují žádné příspěvky, které by měly přiřazeny štítky!" + +#~ msgid "Done! <strong>%s</strong> tag to post relationships were read." + +#~ msgid_plural "" +#~ "Done! <strong>%s</strong> tags to post relationships were read." +#~ msgstr[0] "" +#~ "Hotovo! Byla načtena <strong>%s</strong> vazba mezi příspěvky a štítky." +#~ msgstr[1] "" +#~ "Hotovo! Byly načteny <strong>%s</strong> vazby mezi příspěvky a štítky." +#~ msgstr[2] "" +#~ "Hotovo! Bylo načteno <strong>%s</strong> vazeb mezi příspěvky a štítky." + +#~ msgid "Step 2" +#~ msgstr "Krok č. 2" + +#~ msgid "Adding Tags to Posts…" +#~ msgstr "Probíhá přidávání štítků k příspěvkům… ve WordPressu" + +#~ msgid "Done! <strong>%s</strong> tag was added!" + +#~ msgid_plural "Done! <strong>%s</strong> tags were added!" +#~ msgstr[0] "Hotovo! Byl přidán <strong>%s</strong> štítek." +#~ msgstr[1] "Hotovo! Byly přidány <strong>%s</strong> štítky." +#~ msgstr[2] "Hotovo! Bylo přidáno <strong>%s</strong> štítků." + +#~ msgid "Step 3" +#~ msgstr "Krok č. 3" + +#~ msgid "Import Complete!" +#~ msgstr "Import byl dokončen!" + +#~ msgid "OK, so we lied about this being a 4-step program! You’re done!" +#~ msgstr "" +#~ "Všechno je úspěšně dokončeno, nakonec k tomu stačily pouze 2 kroky (ty " +#~ "další 2 navíc jsme si vlastně vymysleli)." + +#~ msgid "Now wasn’t that easy?" +#~ msgstr "Nebylo to snadné?" + +#~ msgid "Import Simple Tagging tags into WordPress tags." +#~ msgstr "Importuje štítky z pluginu Simple Tagging přímo do WordPressu." + +#~ msgid "Import Textpattern" +#~ msgstr "Import z Textpatternu" + +#, fuzzy +#~ msgid "" +#~ "Howdy! This imports categories, users, posts, comments, and links from " +#~ "any Textpattern 4.0.2+ into this site." +#~ msgstr "" +#~ "Tento importovací nástroj vám umožní importovat rubriky, uživatele, " +#~ "příspěvky, komentáře a odkazy ze systému Textpattern (verze 4.0.2 a " +#~ "vyšší) do databáze tohoto webu." + +#~ msgid "" +#~ "This has not been tested on previous versions of Textpattern. Mileage " +#~ "may vary." +#~ msgstr "Tento nástroj nebyl testován na starších verzích Textpatternu!" + +#~ msgid "Your Textpattern Configuration settings are as follows:" +#~ msgstr "Vaše nastavení Textpatternu je následující:" + +#~ msgid "Done! <strong>%s</strong> link imported" + +#~ msgid_plural "Done! <strong>%s</strong> links imported" +#~ msgstr[0] "Hotovo! Byl importován <strong>%1$s</strong> odkaz." +#~ msgstr[1] "Hotovo! Byly importovány <strong>%1$s</strong> odkazy." +#~ msgstr[2] "Hotovo! Bylo importováno <strong>%1$s</strong> odkazů." + +#~ msgid "" +#~ "Welcome to WordPress. We hope (and expect!) that you will find this " +#~ "platform incredibly rewarding! As a new WordPress user coming from " +#~ "Textpattern, there are some things that we would like to point out. " +#~ "Hopefully, they will help your transition go as smoothly as possible." +#~ msgstr "" +#~ "Vítejte ve WordPressu. Doufáme, že budete se svojí volbou nového " +#~ "publikačního systému spokojeni. Protože jste nový uživatel WordPressu " +#~ "přecházející ze systému Textpattern, chtěli bychom vás upozornit na " +#~ "několik důležitých věcí, které by vám měly pomoci při přechodu na nový " +#~ "publikační systém." + +#~ msgid "" +#~ "You have already setup WordPress and have been assigned an administrative " +#~ "login and password. Forget it. You didn’t have that login in " +#~ "Textpattern, why should you have it here? Instead we have taken care to " +#~ "import all of your users into our system. Unfortunately there is one " +#~ "downside. Because both WordPress and Textpattern uses a strong " +#~ "encryption hash with passwords, it is impossible to decrypt it and we are " +#~ "forced to assign temporary passwords to all your users. <strong>Every " +#~ "user has the same username, but their passwords are reset to password123." +#~ "</strong> So <a href=\"%1$s\">log in</a> and change it." +#~ msgstr "" +#~ "Právě jste úspěšně nastavili WordPress a máte přiřazeno své " +#~ "administrátorské uživatelské jméno a heslo. Ale zapomeňte na ně. " +#~ "Nepoužívali jste tyto přihlašovací údaje v systému Textpattern, tak proč " +#~ "byste je měli používat tady? Místo nich automaticky naimportujeme všechny " +#~ "uživatele z Textpatternu do WordPressu. Je tu ale bohužel jeden problém. " +#~ "WordPress i Textpattern totiž používají opravdu bezpečně zašifrovaná " +#~ "hesla, která nelze získat v jejich původní podobě, takže nemohou být ani " +#~ "během importu přenesena a všem uživatelům tak bude přiřazeno dočasné " +#~ "heslo. <strong>Všechna uživatelská jména tedy zůstanou stejná, ale jejich " +#~ "hesla budou automaticky nastavena na password123.</strong> Takže se <a " +#~ "href=\"%1$s\">přihlaste</a> a změňte si heslo." + +#~ msgid "" +#~ "Also, since you’re coming from Textpattern, you probably have been " +#~ "using Textile to format your comments and posts. If this is the case, we " +#~ "recommend downloading and installing <a href=\"http://www.huddledmasses." +#~ "org/category/development/wordpress/textile/\">Textile for WordPress</a>. " +#~ "Trust me... You’ll want it." +#~ msgstr "" +#~ "Pokud přecházíte ze systému Textpattern, pravděpodobně pro formátování " +#~ "příspěvků a komentářů používáte Textile. Pokud chcete dále využívat tento " +#~ "formátovací nástroj, doporučujeme stáhnout a nainstalovat <a href=" +#~ "\"http://www.huddledmasses.org/category/development/wordpress/textile/" +#~ "\">Textile for WordPress</a>.<br /><br />Můžete také vyzkoušet třeba <a " +#~ "href=\"http://www.texy.info/\" title=\"Texy! - HTML formátovač\">české " +#~ "Texy!</a>." + +#~ msgid "Textpattern Database User:" +#~ msgstr "Uživatel Textpatern (TXP) databáze:" + +#~ msgid "Textpattern Database Password:" +#~ msgstr "Heslo do TXP databáze:" + +#~ msgid "Textpattern Database Name:" +#~ msgstr "Název TXP databáze:" + +#~ msgid "Textpattern Database Host:" +#~ msgstr "Host TXP databáze:" + +#~ msgid "Textpattern Table prefix (if any):" +#~ msgstr "Prefix tabulek TXP (pokud nějaký existuje):" + +#~ msgid "Textpattern" +#~ msgstr "Textpattern" + +#~ msgid "" +#~ "Import categories, users, posts, comments, and links from a Textpattern " +#~ "blog." +#~ msgstr "" +#~ "Importovat rubriky, uživatele, příspěvky, komentáře a odkazy z " +#~ "Textpatternu." + +#~ msgid "Import Ultimate Tag Warrior" +#~ msgstr "Importovat štítky z pluginu Ultimate Tag Warrior" + +#~ msgid "" +#~ "Howdy! This imports tags from Ultimate Tag Warrior 3 into WordPress tags." +#~ msgstr "" +#~ "Tímto importovacím nástrojem můžete převést štítky z pluginu Ultimate Tag " +#~ "Warrior 3 přímo do WordPressu." + +#~ msgid "" +#~ "This has not been tested on any other versions of Ultimate Tag Warrior. " +#~ "Mileage may vary." +#~ msgstr "" +#~ "Tento skript nebyl testován na jiných verzích, než je výše uvedená. Pokud " +#~ "tedy používáte jinou verzi, nemůžeme bohužel zaručit správnou funkčnost." + +#~ msgid "" +#~ "To accommodate larger databases for those tag-crazy authors out there, we " +#~ "have made this into an easy 5-step program to help you kick that nasty " +#~ "UTW habit. Just keep clicking along and we will let you know when you are " +#~ "in the clear!" +#~ msgstr "" +#~ "Aby nástroj bezchybně fungoval a přizpůsobil se i ne zcela šťastnému a " +#~ "databázově velmi náročnému řešení, které zvolili autoři pluginu Ultimate " +#~ "Tag Warrior, proběhne převod postupně v 5 krocích. Postupně si je " +#~ "společně projdeme a nakonec budou štítky určitě správně převedeny." + +#~ msgid "Reading UTW Tags…" +#~ msgstr "Probíhá načítání UTW Tags…" + +#~ msgid "No Tags Found!" +#~ msgstr "Nebyly nalezeny žádné štítky!" + +#~ msgid "Done! <strong>%s</strong> tag were read." + +#~ msgid_plural "Done! <strong>%s</strong> tags were read." +#~ msgstr[0] "Hotovo! Načten <strong>%s</strong> štítek." +#~ msgstr[1] "Hotovo! Načteny <strong>%s</strong> štítky." +#~ msgstr[2] "Hotovo! Načteno <strong>%s</strong> štítků." + +#~ msgid "The following tags were found:" +#~ msgstr "Byly nalezeny následující štítky:" + +#~ msgid "" +#~ "If you don’t want to import any of these tags, you should delete " +#~ "them from the UTW tag management page and then re-run this import." +#~ msgstr "" +#~ "Pokud nechcete importovat některý z těchto štítků, můžete ho smazat v " +#~ "administraci pluginu Ultimate Tag Warrior a potom spustit znovu tento " +#~ "převaděč." + +#~ msgid "Reading UTW Post Tags…" +#~ msgstr "Probíhá načítání UTW Post Tags…" + +#~ msgid "Done! <strong>%s</strong> tag were added!" + +#~ msgid_plural "Done! <strong>%s</strong> tags were added!" +#~ msgstr[0] "Hotovo! Byl přidán <strong>%s</strong> štítek." +#~ msgstr[1] "Hotovo! Byly přidány <strong>%s</strong> štítky." +#~ msgstr[2] "Hotovo! Bylo přidáno <strong>%s</strong> štítků." + +#~ msgid "Step 4" +#~ msgstr "Krok č. 5" + +#~ msgid "OK, so we lied about this being a 5-step program! You’re done!" +#~ msgstr "" +#~ "Všechno je úspěšně dokončeno, nakonec k tomu stačily pouze 2 kroky (ty " +#~ "další 3 navíc jsme si vlastně vymysleli)." + +#~ msgid "Import Ultimate Tag Warrior tags into WordPress tags." +#~ msgstr "Importuje štítky z pluginu Ultimate Tag Warrior." + +#~ msgid "Import WordPress" +#~ msgstr "Importovat z WordPressu" + +#, fuzzy +#~ msgid "" +#~ "Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll " +#~ "import the posts, pages, comments, custom fields, categories, and tags " +#~ "into this site." +#~ msgstr "" +#~ "Nahráním svého WXR (WordPress eXtended RSS) souboru umožníte import " +#~ "příspěvků, stránek, komentářů, uživatelských polí, rubrika a štítků do " +#~ "databáze tohoto webu." + +#~ msgid "" +#~ "Choose a WordPress WXR file to upload, then click Upload file and import." +#~ msgstr "" +#~ "Vyberte WXR soubor WordPressu k nahrání a poté klikněte na tlačítko " +#~ "\"Nahrát soubor a importovat\"." + +#~ msgid "" +#~ "To make it easier for you to edit and save the imported posts and drafts, " +#~ "you may want to change the name of the author of the posts. For example, " +#~ "you may want to import all the entries as <code>admin</code>s entries." +#~ msgstr "" +#~ "Pro snadnější upravování a ukládání importovaných příspěvků či konceptů " +#~ "můžete hromadně změnit jména jejich autorů. Například, chcete-li všem " +#~ "příspěvkům přiřadit stejného autora (třeba <code>admin</code>)." + +#~ msgid "Import author:" +#~ msgstr "Importovat autora:" + +#~ msgid "Import Attachments" +#~ msgstr "Importovat přílohy" + +#~ msgid "Download and import file attachments" +#~ msgstr "Stáhnout a importovat soubory příloh" + +#~ msgid "Map to existing" +#~ msgstr "Přiřadit existujícího autora" + +#~ msgid "- Select -" +#~ msgstr "- Vybrat -" + +#~ msgid "Invalid file" +#~ msgstr "Nesprávný soubor" + +#~ msgid "Please upload a valid WXR (WordPress eXtended RSS) export file." +#~ msgstr "" +#~ "Nahrajte, prosím, správný WXR (<code>WordPress eXtended RSS</code>) " +#~ "soubor." + +#, fuzzy +#~ msgid "Importing category <em>%s</em>…" +#~ msgstr "Příklad: <em>category_name=Nezařazené</em>" + +#, fuzzy +#~ msgid "Importing tag <em>%s</em>…" +#~ msgstr "Probíhá načítání UTW Tags…" + +#, fuzzy +#~ msgid "Importing <em>%s</em>…" +#~ msgstr "Importuji přílohu <em>%s</em>..." + +#~ msgid "All done." +#~ msgstr "Všechno je hotovo." + +#~ msgid "Have fun!" +#~ msgstr "Hodně štěstí!" + +#~ msgid "Importing attachment <em>%s</em>... " +#~ msgstr "Importuji přílohu <em>%s</em>..." + +#~ msgid "Remote file error: %s" +#~ msgstr "Chyba při nahrávání vzdáleného souboru: %s" + +#, fuzzy +#~ msgid "Zero length file, deleting" +#~ msgstr "Chyba při mazání nastavení '%s'." + +#~ msgid "Skipping attachment <em>%s</em>" +#~ msgstr "Přeskakuji přílohu <em>%s</em>" + +#~ msgid "Remote server did not respond" +#~ msgstr "Vzdálený soubor neodpověděl" + +#~ msgid "Remote file returned error response %1$d %2$s" +#~ msgstr "Vzdálený soubor odpověděl s následující chybovou hláškou %1$d %2$s" + +#~ msgid "Remote file is incorrect size" +#~ msgstr "Velikost vzdáleného souboru není správná" + +#~ msgid "Remote file is too large, limit is %s" +#~ msgstr "Vzdálený soubor je příliš velký a přesahuje limit %s" + +#~ msgid "Sorry, there has been an error." +#~ msgstr "Omlouváme se, ale stala se nějaká nečekaná chyba." + +#~ msgid "Categories to Tags" +#~ msgstr "Převod rubrik na štítky" + +#~ msgid "Tags to Categories" +#~ msgstr "Převod štítků na rubriky" + +#~ msgid "Convert Category to Tag." + +#~ msgid_plural "Convert Categories (%d) to Tags." +#~ msgstr[0] "Převést rubriku na štítek" +#~ msgstr[1] "Převést rubriky (%d) na štítky" +#~ msgstr[2] "Převést rubriky (%d) na štítky" + +#~ msgid "" +#~ "Hey there. Here you can selectively convert existing categories to tags. " +#~ "To get started, check the categories you wish to be converted, then click " +#~ "the Convert button." +#~ msgstr "" +#~ "Zde můžete převést vybrané existující rubriky na štítky. Zaškrtněte " +#~ "nejprve všechny rubriky, které chcete převést a potom klikněte na " +#~ "tlačítko \"Převést rubriky na štítky\"." + +#~ msgid "" +#~ "Keep in mind that if you convert a category with child categories, the " +#~ "children become top-level orphans." +#~ msgstr "" +#~ "Nezapomeňte, že pokud převedete na štítek rubriku, která obsahuje nějaké " +#~ "podrubriky, tak budou tyto podrubriky přesunuty mezi hlavní rubriky." + +#~ msgid "You have no categories to convert!" +#~ msgstr "Nemáte žádné rubriky, které by se daly převést na štítky!" + +#~ msgid "Uncheck All" +#~ msgstr "Odebrat vše" + +#~ msgid "Check All" +#~ msgstr "Vybrat vše" + +#~ msgid "" +#~ "* This category is also a tag. Converting it will add that tag to all " +#~ "posts that are currently in the category." +#~ msgstr "" +#~ "* Tato rubrika existuje také jako štítek. Jejím převedením bude tento " +#~ "štítek přidán ke všem příspěvkům, které jsou v současné době zařazeny do " +#~ "této rubriky." + +#~ msgid "Convert Categories to Tags" +#~ msgstr "Převést rubriky na štítky" + +#~ msgid "Convert Tag to Category." + +#~ msgid_plural "Convert Tags (%d) to Categories." +#~ msgstr[0] "Převést štítek na rubriku." +#~ msgstr[1] "Převést (%d) štítky na rubriky." +#~ msgstr[2] "Převést (%d) štítků na rubriky." + +#~ msgid "" +#~ "Here you can selectively convert existing tags to categories. To get " +#~ "started, check the tags you wish to be converted, then click the Convert " +#~ "button." +#~ msgstr "" +#~ "Zde můžete převést vybrané existující štítky na rubriky. Zaškrtněte " +#~ "nejprve všechny štítky, které chcete převést a potom klikněte na tlačítko " +#~ "Převést štítky na rubriky." + +#~ msgid "" +#~ "The newly created categories will still be associated with the same posts." +#~ msgstr "" +#~ "Nově vytvořené rubriky budou samozřejmě přiřazeny ke stejným příspěvkům." + +#~ msgid "You have no tags to convert!" +#~ msgstr "Nemáte žádné štítky, které by se daly převést na rubriky!" + +#~ msgid "" +#~ "* This tag is also a category. When converted, all posts associated with " +#~ "the tag will also be in the category." +#~ msgstr "" +#~ "* Tento štítek existuje také jako rubrika. Jeho převedením budou všechny " +#~ "příspěvky označené tímto štítkem zařazeny také do této rubriky." + +#~ msgid "Convert Tags to Categories" +#~ msgstr "Převést štítky na rubriky" + +#~ msgid "" +#~ "Uh, oh. Something didn’t work. Please <a href=\"%s\">try again</a>." +#~ msgstr "" +#~ "Oh, nějaká chybička se nám sem vloudila. Zkuste to, prosím, <a href=\"%s" +#~ "\">znovu</a>." + +#~ msgid "Category %s doesn’t exist!" +#~ msgstr "Rubrika %s neexistuje!" + +#~ msgid "Converting category <strong>%s</strong> ... " +#~ msgstr "Převádím rubriku <strong>%s</strong> ... " + +#~ msgid "Converted successfully." +#~ msgstr "Převod byl úspěšně dokončen." + +#~ msgid "Tag added to all posts in this category." +#~ msgstr "Štítek byl přidán ke všem příspěvkům v této rubrice." + +#~ msgid "" +#~ "* This category is also a tag. The converter has added that tag to all " +#~ "posts currently in the category. If you want to remove it, please confirm " +#~ "that all tags were added successfully, then delete it from the <a href=\"%" +#~ "s\">Manage Categories</a> page." +#~ msgstr "" +#~ "* Tato rubrika existuje také jako štítek. Tento štítek byl automaticky " +#~ "přidán ke všem příspěvkům, které jsou v současné době v této rubrice. " +#~ "Pokud ji chcete odstranit, potvrďte, prosím, že byly všechny štítky " +#~ "úspěšně přidány a potom tuto rubriku odstraňte pomocí menu <a href=\"%s" +#~ "\">Správa - Rubriky</a>." + +#~ msgid "" +#~ "We’re all done here, but you can always <a href=\"%s\">convert " +#~ "more</a>." +#~ msgstr "" +#~ "Tady už máte všechno hotovo, ale stále ještě můžete <a href=\"%s" +#~ "\">převést další rubriku</a>." + +#~ msgid "Converting tag <strong>%s</strong> ... " +#~ msgstr "Převádím štítek <strong>%s</strong> ... " + +#~ msgid "All posts were added to the category with the same name." +#~ msgstr "" +#~ "Všechny příspěvky byly úspěšně zařazeny do rubriky se stejným názvem." + +#~ msgid "Tag #%s doesn’t exist!" +#~ msgstr "Štítek #%s neexistuje!" + +#~ msgid "" +#~ "* This tag is also a category. The converter has added all posts from it " +#~ "to the category. If you want to remove it, please confirm that all posts " +#~ "were added successfully, then delete it from the <a href=\"%s\">Manage " +#~ "Tags</a> page." +#~ msgstr "" +#~ "* Tento štítek existuje také jako rubrika. Všechny příspěvky s tímto " +#~ "štítkem byly také zařazeny do stejnojmenné rubriky. Pokud ho chcete " +#~ "odstranit, potvrďte, prosím, že byly všechny příspěvky do rubriky úspěšně " +#~ "zařazeny a potom tento štítek odstraňte pomocí menu <a href=\"%s\">Správa " +#~ "- Štítky</a>." + +#, fuzzy +#~ msgid "Category/Tag Conversion" +#~ msgstr "Převést rubriku na štítek" + +#, fuzzy +#~ msgid "" +#~ "You are about to permanently delete this menu item. \n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Požadujete smazání všech záznamů o emailech\\nTato akce je nevratná.\\n" +#~ "\\nVyberte [Cancel] pro zrušení, [OK] pro smazání" + +#, fuzzy +#~ msgid "Current Background" +#~ msgstr "%1$s [Aktuální verze]" + +#~ msgid "Edit Comments" +#~ msgstr "Správa komentářů" + +#, fuzzy +#~ msgid "Allow people to post comments on new pages" +#~ msgstr "" +#~ "Povolit návštěvníkům webu přidávat komentáře k příspěvkům a stránkám" + +#, fuzzy +#~ msgid "These settings may be overridden for individual pages." +#~ msgstr "" +#~ "Toto nastavení se dá ještě změnit u konkrétního příspěvku nebo stránky." + +#, fuzzy +#~ msgid "— Parent %s —" +#~ msgstr "Nadřazená rubrika" + +#, fuzzy +#~ msgctxt "%s: singular taxonomy name" + +#~ msgid "Edit %s" +#~ msgstr "Upravit %s" + +#, fuzzy +#~ msgctxt "%s: singular taxonomy name" + +#~ msgid "Update %s" +#~ msgstr "Aktualizovat" + +#, fuzzy +#~ msgctxt "%s: plural taxonomy name" + +#~ msgid "Search %s" +#~ msgstr "Hledat" + +#, fuzzy +#~ msgctxt "%s: plural taxonomy name" + +#~ msgid "Popular %s" +#~ msgstr "Oblíbené" + +#, fuzzy +#~ msgctxt "%s: singular taxonomy name" + +#~ msgid "Add a New %s" +#~ msgstr "Vytvořit uživatele" + +#, fuzzy +#~ msgctxt "%s: singular taxonomy name" + +#~ msgid "Add %s" +#~ msgstr "Vytvořit" + +#~ msgid "All %s" +#~ msgstr "Všechny %s" + +#~ msgid "+ Add New %s" +#~ msgstr "+ Vytvořit %s" + +#~ msgid "Add New %s" +#~ msgstr "Vytvořit %s" + +#, fuzzy +#~ msgid "Parent %s" +#~ msgstr "Nadřazená stránka" + +#, fuzzy +#~ msgid "Update %s" +#~ msgstr "Aktualizovat" + +#, fuzzy +#~ msgid "Select Menu: " +#~ msgstr "Aktuální pořadí" + +#, fuzzy +#~ msgid "Current Image" +#~ msgstr "Přidat obrázek" + +#, fuzzy +#~ msgid "Edit %s" +#~ msgstr "Upravit %s" + +#, fuzzy +#~ msgctxt "%s: post type name" + +#~ msgid "Search %s" +#~ msgstr "Hledat" + +#, fuzzy +#~ msgid "No %s found." +#~ msgstr "Nebyly nalezeny žádné štítky!" + +#, fuzzy +#~ msgid "No %s exists" +#~ msgstr "(již existuje)" + +#, fuzzy +#~ msgid "View %s" +#~ msgstr "Zobrazit" + +#, fuzzy +#~ msgid "New %s" +#~ msgstr "Vytvořit uživatele" + +#~ msgid "(at most 15)" +#~ msgstr "(maximálně 15)" + +#, fuzzy +#~ msgid "Month" +#~ msgstr "Vybrat měsíc" + +#, fuzzy +#~ msgid "Year" +#~ msgstr "Vymazat pořadí" + +#, fuzzy +#~ msgid "Restrict Category" +#~ msgstr "%1$s %2$s %3$s RSS rubriky" + +#, fuzzy +#~ msgid "Privately published" +#~ msgstr "Publikován jako soukromý" + +#, fuzzy +#~ msgid "Themes Activated: %d" +#~ msgstr "Dostupné šablony" + +#~ msgid "" +#~ "<strong>ERROR</strong>: This username is invalid. Please enter a valid " +#~ "username." +#~ msgstr "" +#~ "<strong>CHYBA</strong>: Špatné uživatelské jméno. Zadejte prosím platné " +#~ "uživatelské jméno." + +#~ msgid "The category you are trying to create already exists." +#~ msgstr "Rubrika, kterou se snažíte vytvořit, již existuje." + +#~ msgid "Category <a href=\"#%s\">%s</a> added" +#~ msgstr "Rubrika <a href=\"#%s\">%s</a> byla vytvořena" + +#~ msgid "Tag not updated." +#~ msgstr "Štítek nebyl aktualizován." + +#~ msgid "Turbo" +#~ msgstr "Zrychlit WordPress" + +#~ msgid "You are not allowed to delete categories." +#~ msgstr "Nemáte dostatečné oprávnění pro mazání rubrik." + +#~ msgid "Category Name" +#~ msgstr "Název rubriky" + +#~ msgid "" +#~ "The name is used to identify the category almost everywhere, for example " +#~ "under the post or in the category widget." +#~ msgstr "" +#~ "Název slouží k identifikaci rubriky kdekoliv na webu, například u " +#~ "příspěvku nebo v seznamu rubrik." + +#~ msgid "Category Slug" +#~ msgstr "Název v URL" + +#~ msgid "Category Parent" +#~ msgstr "Nadřazená rubrika" + +#~ msgid "You are not allowed to delete comments on this post." +#~ msgstr "" +#~ "Nemáte dostatečné oprávnění pro mazání komentářů u tohoto příspěvku." + +#~ msgid "" +#~ "You are not allowed to edit comments on this post, so you cannot approve " +#~ "this comment." +#~ msgstr "" +#~ "Nemáte dostatečné oprávnění pro úpravy komentářů u tohoto příspěvku, " +#~ "takže nemůžete schválit ani tento komentář." + +#~ msgid "Are you sure you want to do that?" +#~ msgstr "Opravdu to chcete udělat?" + +#~ msgid "" +#~ "You are not allowed to edit comments on this post, so you cannot " +#~ "disapprove this comment." +#~ msgstr "" +#~ "Nemáte dostatečné oprávnění pro úpravy komentářů u tohoto příspěvku, " +#~ "takže nemůžete odmítnout ani tento komentář." + +#~ msgid "Header updated." +#~ msgstr "Záhlaví aktualizováno." + +#~ msgid "Header complete!" +#~ msgstr "Úprava záhlaví byla dokončena!" + +#~ msgid "Visit your site and you should see the new header now." +#~ msgstr "Podívejte se na nové nastavení záhlaví na svém webu." + +#~ msgid "" +#~ "You do not have sufficient permissions to edit categories for this blog." +#~ msgstr "Nemáte dostatečné oprávnění pro úpravu rubrik na tomto webu." + +#~ msgid "Post Thumbnail" +#~ msgstr "Náhledový obrázek příspěvku" + +#~ msgid "Post Slug" +#~ msgstr "Název v URL" + +#~ msgid "Post Author" +#~ msgstr "Autor" + +#~ msgid "" +#~ "There is an autosave of this page that is more recent than the version " +#~ "below. <a href=\"%s\">View the autosave</a>." +#~ msgstr "" +#~ "Existuje automaticky uložená verze této stránky, která je novější než " +#~ "tato verze. <a href=\"%s\">Prohlédněte si automaticky uloženou verzi</a>." + +#~ msgid "Page Slug" +#~ msgstr "Název v URL" + +#~ msgid "Page Image" +#~ msgstr "Náhledový obrázek stránky" + +#~ msgid "Page Author" +#~ msgstr "Autor stránky" + +#~ msgid "Page Revisions" +#~ msgstr "Starší verze stránky" + +#~ msgid "Edit Pages" +#~ msgstr "Správa stránek" +#~ msgctxt "page" + +#~ msgid "Published" +#~ msgstr "Publikované" + +#~ msgid "Published pages" +#~ msgstr "Publikované stránky" +#~ msgctxt "page" + +#~ msgid "Published <span class=\"count\">(%s)</span>" + +#~ msgid_plural "Published <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Publikovaná <span class=\"count\">(%s)</span>" +#~ msgstr[1] "Publikované <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Publikovaných <span class=\"count\">(%s)</span>" +#~ msgctxt "page" + +#~ msgid "Scheduled" +#~ msgstr "Plánované" + +#~ msgid "Scheduled pages" +#~ msgstr "Naplánované stránky" +#~ msgctxt "page" + +#~ msgid "Scheduled <span class=\"count\">(%s)</span>" + +#~ msgid_plural "Scheduled <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Plánovaná <span class=\"count\">(%s)</span>" +#~ msgstr[1] "Plánované <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Plánovaných <span class=\"count\">(%s)</span>" +#~ msgctxt "page" + +#~ msgid "Pending Review" +#~ msgstr "Čekající na schválení" + +#~ msgid "Pending pages" +#~ msgstr "Stránky čekající na schválení" +#~ msgctxt "page" + +#~ msgid "Pending Review <span class=\"count\">(%s)</span>" + +#~ msgid_plural "Pending Review <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Čekající na schválení <span class=\"count\">(%s)</span>" +#~ msgstr[1] "Čekající na schválení <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Čekajících na schválení <span class=\"count\">(%s)</span>" +#~ msgctxt "page" + +#~ msgid "Draft" +#~ msgstr "Koncept" +#~ msgctxt "manage posts header" + +#~ msgid "Drafts" +#~ msgstr "Koncepty" +#~ msgctxt "page" + +#~ msgid "Draft <span class=\"count\">(%s)</span>" + +#~ msgid_plural "Drafts <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Koncept <span class=\"count\">(%s)</span>" +#~ msgstr[1] "Koncepty <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Konceptů <span class=\"count\">(%s)</span>" +#~ msgctxt "page" + +#~ msgid "Private" +#~ msgstr "Soukromé" + +#~ msgid "Private pages" +#~ msgstr "Soukromé stránky" +#~ msgctxt "page" + +#~ msgid "Private <span class=\"count\">(%s)</span>" + +#~ msgid_plural "Private <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Soukromá <span class=\"count\">(%s)</span>" +#~ msgstr[1] "Soukromé <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Soukromých <span class=\"count\">(%s)</span>" +#~ msgctxt "page" + +#~ msgid "Trash" +#~ msgstr "Koš" + +#~ msgid "Trash pages" +#~ msgstr "Odstraněné stránky" +#~ msgctxt "page" + +#~ msgid "Trash <span class=\"count\">(%s)</span>" + +#~ msgid_plural "Trash <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Koš <span class=\"count\">(%s)</span>" +#~ msgstr[1] "Koš <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Koš <span class=\"count\">(%s)</span>" + +#~ msgid "%s page updated." + +#~ msgid_plural "%s pages updated." +#~ msgstr[0] "%s stránka byla aktualizována." +#~ msgstr[1] "%s stránky byly aktualizovány." +#~ msgstr[2] "%s stránek bylo aktualizováno." + +#~ msgid "%s page not updated, invalid parent page specified." + +#~ msgid_plural "%s pages not updated, invalid parent page specified." +#~ msgstr[0] "" +#~ "%s stránka nebyla aktualizována, protože byla zadána neplatná nadřazená " +#~ "stránka." +#~ msgstr[1] "" +#~ "%s stránky nebyly aktualizovány, protože byla zadána neplatná nadřazená " +#~ "stránka." +#~ msgstr[2] "" +#~ "%s stránek nebylo aktualizováno, protože byla zadána neplatná nadřazená " +#~ "stránka." + +#~ msgid "Page moved to the trash." + +#~ msgid_plural "%s pages moved to the trash." +#~ msgstr[0] "Stránka byla přesunuta do koše." +#~ msgstr[1] "%s stránky byly přesunuty do koše." +#~ msgstr[2] "%s stránek bylo přesunuto do koše." + +#~ msgid "Your page has been saved." +#~ msgstr "Stránka byla uložena." + +#~ msgid "View page" +#~ msgstr "Zobrazit stránku" + +#~ msgid "Edit page" +#~ msgstr "Upravit stránku" +#~ msgctxt "pages" + +#~ msgid "All <span class=\"count\">(%s)</span>" + +#~ msgid_plural "All <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Celkem <span class=\"count\">(%s)</span>" +#~ msgstr[1] "Celkem <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Celkem <span class=\"count\">(%s)</span>" + +#~ msgid "Submitted" +#~ msgstr "Odesláno" + +#~ msgid "You do not have sufficient permissions to edit tags for this blog." +#~ msgstr "Nemáte dostatečné oprávnění pro úpravu štítků na tomto webu." + +#~ msgid "Tag name" +#~ msgstr "Název štítku" + +#~ msgid "Tag slug" +#~ msgstr "Název v URL" + +#~ msgid "Tag added." +#~ msgstr "Štítek byl vytvořen." + +#~ msgid "Tag deleted." +#~ msgstr "Štítek byl smazán." + +#~ msgid "Tag updated." +#~ msgstr "Štítek byl aktualizován." + +#~ msgid "Tag not added." +#~ msgstr "Štítek nebyl vytvořen." + +#~ msgid "Add Tag" +#~ msgstr "Vytvořit štítek" + +#~ msgid "You are not allowed to restore this post from the trash." +#~ msgstr "Nemáte dostatečné oprávnění pro obnovení tohoto příspěvku z koše." + +#~ msgid "Edit Posts" +#~ msgstr "Správa příspěvků" + +#~ msgid "Edit post" +#~ msgstr "Upravit příspěvek" + +#~ msgid "%s post not updated, somebody is editing it." + +#~ msgid_plural "%s posts not updated, somebody is editing them." +#~ msgstr[0] "" +#~ "%s příspěvek nebyl aktualizován, protože ho právě někdo upravuje." +#~ msgstr[1] "" +#~ "%s příspěvky nebyly aktualizovány, protože je právě někdo upravuje." +#~ msgstr[2] "" +#~ "%s příspěvků nebylo aktualizováno, protože je právě někdo upravuje." + +#~ msgid "Post permanently deleted." + +#~ msgid_plural "%s posts permanently deleted." +#~ msgstr[0] "Příspěvek byl smazán." +#~ msgstr[1] "%s příspěvky byly smazány." +#~ msgstr[2] "%s příspěvků bylo smazáno." + +#~ msgid "Post moved to the trash." + +#~ msgid_plural "%s posts moved to the trash." +#~ msgstr[0] "Příspěvek byl přesunut do koše." +#~ msgstr[1] "%s příspěvky byly přesunuty do koše." +#~ msgstr[2] "%s příspěvků bylo přesunuto do koše." + +#~ msgid "Post restored from the trash." + +#~ msgid_plural "%s posts restored from the trash." +#~ msgstr[0] "Příspěvek byl obnoven z koše." +#~ msgstr[1] "%s příspěvky byly obnoveny z koše." +#~ msgstr[2] "%s příspěvků bylo obnoveno z koše." + +#~ msgid "Installing the latest version." +#~ msgstr "Instaluji nejnovější verzi." + +#~ msgid "Attempting reactivation of the plugin" +#~ msgstr "Pokus o opětovnou aktivaci pluginu" + +#~ msgid "WordPress Development Blog" +#~ msgstr "Blog vývojářů WordPressu" + +#~ msgid "At a Glance" +#~ msgstr "Aktuálně máte..." + +#~ msgid "Approved|Right Now" + +#~ msgid_plural "Approved" +#~ msgstr[0] "schválený|Přehled" +#~ msgstr[1] "schválené" +#~ msgstr[2] "schválených" + +#~ msgid "Incompatible archive" +#~ msgstr "Nekompatibilní achiv" + +#~ msgid "Could not copy file" +#~ msgstr "Nepodařilo se zkopírovat soubor" + +#~ msgid "Keyboard shortcuts" +#~ msgstr "Klávesové zkratky" + +#~ msgid "Full size" +#~ msgstr "Původní velikost" + +#~ msgid "(%d × %d)" +#~ msgstr "(%d × %d)" + +#~ msgid "Alternate text" +#~ msgstr "Alternativní text" + +#~ msgid "Edit image" +#~ msgstr "Upravit obrázek" + +#~ msgid "Use as thumbnail" +#~ msgstr "Použít jako náhledový obrázek" + +#~ msgid "2" +#~ msgstr "2" + +#~ msgid "3" +#~ msgstr "3" + +#~ msgid "4" +#~ msgstr "4" + +#~ msgid "5" +#~ msgstr "5" + +#~ msgid "6" +#~ msgstr "6" + +#~ msgid "7" +#~ msgstr "7" + +#~ msgid "8" +#~ msgstr "8" + +#~ msgid "9" +#~ msgstr "9" + +#~ msgid "" +#~ "An Unexpected HTTP Error occurred during the API request.</p> <p><a href=" +#~ "\"?\" onclick=\"document.location.reload(); return false;\">Try again</a>" +#~ msgstr "" +#~ "Objevila se nějaká neočekávaná chyba HTTP protokolu během zpracovávání " +#~ "API požadavku.</p> <p><a href=\"?\" onclick=\"document.location.reload(); " +#~ "return false;\">Zkuste to prosím znovu</a>" + +#~ msgid "You are not allowed to create pages on this blog." +#~ msgstr "" +#~ "Nemáte dostatečné oprávnění pro vytváření nových stránek na tomto webu." + +#~ msgid "Published posts" +#~ msgstr "Publikované příspěvky" + +#~ msgid "Scheduled posts" +#~ msgstr "Naplánované příspěvky" +#~ msgctxt "post" + +#~ msgid "Pending Review" +#~ msgstr "Čekající na schválení" + +#~ msgid "Pending posts" +#~ msgstr "Příspěvky čekající na schválení" + +#~ msgid "Private posts" +#~ msgstr "Soukromé příspěvky" + +#~ msgid "Trash posts" +#~ msgstr "Odstraněné příspěvky" + +#~ msgid "Set thumbnail" +#~ msgstr "Přidat náhledový obrázek" + +#~ msgid "Remove thumbnail" +#~ msgstr "Odstranit náhledový obrázek" + +#~ msgid "My Blog" +#~ msgstr "Můj web" +#~ msgctxt "column name" + +#~ msgid "Post" +#~ msgstr "Příspěvek" + +#~ msgid "Bulk Edit Posts" +#~ msgstr "Hromadné úpravy příspěvků" + +#~ msgid "- No Change -" +#~ msgstr "- Beze změny -" + +#~ msgid "Private page" +#~ msgstr "Soukromá stránka" + +#~ msgid "Private post" +#~ msgstr "Soukromý příspěvek" + +#~ msgid "Update Pages" +#~ msgstr "Aktualizovat stránky" + +#~ msgid "Update Posts" +#~ msgstr "Aktualizovat příspěvky" + +#~ msgid "e-mail: %s" +#~ msgstr "email: %s" + +#~ msgid "g:ia" +#~ msgstr "G:i" + +#~ msgid "Add new custom field:" +#~ msgstr "Přidat nové uživatelské pole:" + +#~ msgid "WordPress recommends a better browser" +#~ msgstr "WordPress doporučuje kvalitnější internetový prohlížeč." + +#~ msgid "Posts per page:" +#~ msgstr "Počet příspěvků na stránku:" + +#~ msgid "Pages per page:" +#~ msgstr "Počet stránek na stránku:" + +#~ msgid "Comments per page:" +#~ msgstr "Počet komentářů na stránku:" + +#~ msgid "Categories per page:" +#~ msgstr "Počet rubrik na stránku:" + +#~ msgid "Tags per page:" +#~ msgstr "Počet štítků na stránku:" + +#~ msgid "Plugins per page:" +#~ msgstr "Počet pluginů na stránku:" + +#~ msgid "" +#~ "Notice: you're using the auto-generated password for your account. Would " +#~ "you like to change it to something you'll remember easier?<br />\n" +#~ "\t\t\t <a href='%s'>Yes, Take me to my profile page</a> | <a href='%s' " +#~ "id='default-password-nag-no'>No Thanks, Do not remind me again.</a>" +#~ msgstr "" +#~ "Poznámka: Pro vaše přihlášení do WordPressu používáte automaticky " +#~ "vygenerované heslo. Nechcete si ho změnit na nějaké, které si budete lépe " +#~ "pamatovat?<br />\n" +#~ "\t\t\t <a href='%s'>Ano, chci si heslo změnit na stránce se svým " +#~ "profilem</a> | <a href='%s' id='default-password-nag-no'>Ne, děkuji za " +#~ "upozornění, ale ponechám si toto heslo a už mi to nepřipomínejte.</a>" + +#~ msgid "Blog Title" +#~ msgstr "Název webu" + +#~ msgid "First Step" +#~ msgstr "První krok" +#~ msgctxt "links" + +#~ msgid "Add New" +#~ msgstr "Vytvořit odkaz" + +#~ msgid "Add New Themes" +#~ msgstr "Instalace šablon" + +#~ msgid "Miscellaneous" +#~ msgstr "Ostatní" + +#~ msgid "Avatar display" +#~ msgstr "Zobrazení avatarů" + +#~ msgid "Miscellaneous Settings" +#~ msgstr "Ostatní nastavení" + +#~ msgid "Track Links’ Update Times" +#~ msgstr "Automaticky sledovat aktualizace odkazů" + +#~ msgid "Blog Visibility" +#~ msgstr "Viditelnost webu" + +#~ msgid "" +#~ "You can’t edit this page because it is in the Trash. Please move it " +#~ "out of the Trash and try again." +#~ msgstr "" +#~ "Nemůžete upravovat tuto stránku, protože byla přesunuta do koše. Nejdříve " +#~ "ji prosím obnovte na původní místo a potom to zkuste znovu." + +#~ msgid "Delete Plugin(s)" +#~ msgstr "Smazat plugin(y)" + +#~ msgid "" +#~ "Deleting the selected plugins will remove the following plugin(s) and " +#~ "their files:" +#~ msgstr "" +#~ "Smazáním vybraných pluginů odstraníte následující plugin(y) a všechny " +#~ "jejich soubory:" + +#~ msgid "" +#~ "You attempted to edit a post that doesn’t exist. Perhaps it was " +#~ "deleted?" +#~ msgstr "" +#~ "Pokoušíte se upravit příspěvek, který neexistuje. Nemohl být smazán?" + +#~ msgid "Theme Files" +#~ msgstr "Soubory šablony" +#~ msgctxt "theme" + +#~ msgid "Add New" +#~ msgstr "Instalace šablon" + +#~ msgid "" +#~ "You only have one theme installed at the moment so there is nothing to " +#~ "show you here. Maybe you should download some more to try out." +#~ msgstr "" +#~ "V současné chvíli máte nainstalovanou pouze jednu šablonu, takže se tady " +#~ "zatím nic nezobrazuje. Můžete si zkusit stáhnout a vyzkoušet nějaké další " +#~ "šablony." + +#~ msgid "Turbo:" +#~ msgstr "Zrychlit WordPress:" + +#~ msgid "Speed up WordPress" +#~ msgstr "Využití Google Gears k urychlení práce s WordPressem" + +#~ msgid "" +#~ "WordPress now has support for Gears, which adds new features to your web " +#~ "browser." +#~ msgstr "" +#~ "WordPress nyní podporuje Google Gears, které umožňují vašemu prohlížeči " +#~ "využívat některé nové možnosti." + +#~ msgid "" +#~ "After you install and enable Gears, most of WordPress’ images, " +#~ "scripts, and CSS files will be stored locally on your computer. This " +#~ "speeds up page load time." +#~ msgstr "" +#~ "Po instalaci a povolení Google Gears bude většina obrázků, PHP skriptů a " +#~ "CSS souborů používaných WordPressem uložena přímo ve vašem počítači. Tím " +#~ "si na svém počítači zrychlíte načítání internetových stránek." + +#~ msgid "Don’t install on a public or shared computer." +#~ msgstr "Neinstalujte na veřejném, nebo jinak sdíleném počítači." + +#~ msgid "Gears Status" +#~ msgstr "Stav Google Gears" + +#~ msgid "" +#~ "Gears is installed on this computer, but is not enabled for use with " +#~ "WordPress." +#~ msgstr "" +#~ "Google Gears jsou sice nainstalovány na tomto počítači, ale zatím ještě " +#~ "nejsou zapnuty pro vaše internetové stránky s WordPressem." + +#~ msgid "To enable it click the button below." +#~ msgstr "Můžete Google Gears povolit kliknutím na dolní tlačítko." + +#~ msgid "Note: Do not enable Gears if this is a public or shared computer!" +#~ msgstr "" +#~ "Poznámka: Neinstalujte Google Gears na veřejném, nebo jinak sdíleném " +#~ "počítači." + +#~ msgid "Enable Gears" +#~ msgstr "Povolit Gears" + +#~ msgid "" +#~ "Gears is installed and enabled on this computer. You can disable it from " +#~ "the Under the Hood tab in Chrome’s Options menu." +#~ msgstr "" +#~ "Google Gears jsou nainstalovány na tomto počítači a povoleny pro tyto " +#~ "internetové stránky. Můžete je odstranit pomocí záložky Hood v menu " +#~ "Nastavení vašeho prohlížeče Chrome." + +#~ msgid "" +#~ "Gears is installed and enabled on this computer. You can disable it from " +#~ "the Safari menu." +#~ msgstr "" +#~ "Gears jsou nainstalovány na tomto počítači a povoleny pro tyto " +#~ "internetové stránky. Můžete je odstranit pomocí menu v Safari." + +#~ msgid "" +#~ "Gears is installed and enabled on this computer. You can disable it from " +#~ "your browser’s Tools menu." +#~ msgstr "" +#~ "Google Gears jsou nainstalovány na tomto počítači a povoleny pro tyto " +#~ "internetové stránky. Můžete je odstranit pomocí menu Nástroje - Google " +#~ "Gears ve vašem prohlížeči." + +#~ msgid "" +#~ "If there are any errors try disabling Gears, reloading the page, and re-" +#~ "enabling Gears." +#~ msgstr "" +#~ "Pokud se objevila nějaká chyba, zkuste Google Gears na těchto stránkách " +#~ "vypnout, poté obnovit načtenou stránku v prohlížeči (stisknutím klávesy " +#~ "F5) a následně Google Gears opět povolit." + +#~ msgid "Local storage status:" +#~ msgstr "Stav uložených souborů:" + +#~ msgid "Updating files:" +#~ msgstr "Aktualizuji soubory:" + +#~ msgid "" +#~ "Your browser’s settings do not permit this website to use Google " +#~ "Gears." +#~ msgstr "" +#~ "Nastavení vašeho prohlížeče neumožňuje použít pro zrychlení načítání " +#~ "vašich stránek Google Gears." + +#~ msgid "" +#~ "To allow it, change the Gears settings in your browser’s Options, " +#~ "Under the Hood menu and reload this page." +#~ msgstr "" +#~ "Google Gears povolíte tak, že změníte jejich nastavení ve vašem " +#~ "prohlížeči v menu Nástroje - Google Gears a poté obnovíte tuto stránku " +#~ "(klávesa F5)." + +#~ msgid "" +#~ "To allow it, change the Gears settings in the Safari menu and reload this " +#~ "page." +#~ msgstr "" +#~ "Google Gears povolíte tak, že změníte jejich nastavení ve vašem " +#~ "prohlížeči v menu Safari a poté obnovíte tuto stránku." + +#~ msgid "" +#~ "To allow it, change the Gears settings in your browser’s Tools menu " +#~ "and reload this page." +#~ msgstr "" +#~ "Google Gears povolíte tak, že změníte jejich nastavení ve vašem " +#~ "prohlížeči v menu Nástroje a poté obnovíte tuto stránku." + +#~ msgid "Turbo is not available for your browser." +#~ msgstr "" +#~ "Funkce pro zrychlení WordPressu není ve vašem internetovém prohlížeči " +#~ "dostupná." + +#~ msgid "Feature disabled." +#~ msgstr "Funkce je vypnuta." + +#~ msgid "No links" +#~ msgstr "Žádné odkazy" + +#~ msgid "Request Failed." +#~ msgstr "Požadavek selhal." + +#~ msgid "Unattached" +#~ msgstr "Nepřiřazeno" + +#~ msgid "Last name" +#~ msgstr "Příjmení" + +#~ msgid "-- select --" +#~ msgstr "-- vybrat --" + +#~ msgid "Sorry, you do not have the right to access this blog." +#~ msgstr "Nemáte bohužel dostatečné oprávnění pro přístup na tento web." + +#~ msgid "by" +#~ msgstr "od" + +#~ msgid "Logged in as %s." +#~ msgstr "Přihlášen jako %s." + +#~ msgid "" +#~ "<cite>Powered by <a href=\"http://wordpress.org\" title=\"%s" +#~ "\"><strong>WordPress</strong></a></cite>" +#~ msgstr "" +#~ "<cite>Tento web je provozován s využitím systému <a href=\"http://" +#~ "wordpress.org\" title=\"%s\"><strong>WordPress</strong></a></cite>" + +#~ msgid "TrackBack <abbr title=\"Universal Resource Locator\">URL</abbr>" +#~ msgstr "TrackBack <abbr title=\"Uniform Resource Locator\">URL</abbr>" + +#~ msgid "You can use these tags: %s" +#~ msgstr "Můžete použít následující XHTML tagy: %s" + +#~ msgid "" +#~ "Powered by <a href='http://wordpress.org/' title='%s'><strong>WordPress</" +#~ "strong></a>" +#~ msgstr "" +#~ "Tento web je provozován s využitím systému <a href='http://wordpress." +#~ "org/' title='%s'><strong>WordPress</strong></a>. (<a href=\"http://" +#~ "separatista.net\">Česká lokalizace</a>)" + +#~ msgid "Filed under:" +#~ msgstr "Zařazen do:" + +#~ msgid "Comments (1)" +#~ msgstr "1 komentář" + +#~ msgid "Comments (%)" +#~ msgstr "Komentáře: %" + +#~ msgid "« Newer Posts" +#~ msgstr "« Novější příspěvky" + +#~ msgid "Older Posts »" +#~ msgstr "Starší příspěvky »" + +#~ msgid "Categories:" +#~ msgstr "Rubriky:" + +#~ msgid "Search:" +#~ msgstr "Vyhledávání:" + +#~ msgid "Archives:" +#~ msgstr "Archiv:" + +#~ msgid "Meta:" +#~ msgstr "Další informace:" + +#~ msgid "Syndicate this site using RSS" +#~ msgstr "Sledovat aktuální obsah tohoto webu pomocí RSS" + +#~ msgid "<abbr title=\"Really Simple Syndication\">RSS</abbr>" +#~ msgstr "<abbr title=\"Really Simple Syndication\">RSS</abbr>" + +#~ msgid "Close Color Picker" +#~ msgstr "Zavřít výběr barev" + +#~ msgid "Customize Header" +#~ msgstr "Upravit záhlaví" + +#~ msgid "Font Color:" +#~ msgstr "Barva písma:" + +#~ msgid "Any CSS color (%s or %s or %s)" +#~ msgstr "Libovolná CSS barva (%s nebo %s nebo %s)" + +#~ msgid "Upper Color:" +#~ msgstr "Vrchní barva:" + +#~ msgid "HEX only (%s or %s)" +#~ msgstr "Pouze HEX (%s nebo %s)" + +#~ msgid "Lower Color:" +#~ msgstr "Spodní barva:" + +#~ msgid "Toggle Text" +#~ msgstr "Přepnout text" + +#~ msgid "Use Defaults" +#~ msgstr "Použít původní nastavení" + +#~ msgid "Upper Color" +#~ msgstr "Vrchní barva" + +#~ msgid "Lower Color" +#~ msgstr "Spodní barva" + +#~ msgid "Update Header" +#~ msgstr "Změnit záhlaví" + +#~ msgid "Font Color (CSS):" +#~ msgstr "Barva písma (CSS):" + +#~ msgid "Upper Color (HEX):" +#~ msgstr "Vrchní barva (HEX):" + +#~ msgid "Lower Color (HEX):" +#~ msgstr "Spodní barva (HEX):" + +#~ msgid "Select Default Colors" +#~ msgstr "Nastavit původní barvy" + +#~ msgid "Toggle Text Display" +#~ msgstr "Přepnout zobrazení textu" + +#~ msgid "Enter your password to view comments" +#~ msgstr "Pro zobrazení komentářů zadejte heslo." + +#~ msgid "Insert page break." +#~ msgstr "Vložit značku pro přechod na další stránku" + +#~ msgid "Align left" +#~ msgstr "Zarovnat doleva" + +#~ msgid "Align center" +#~ msgstr "Zarovnat na střed" + +#~ msgid "Align right" +#~ msgstr "Zarovnat doprava" + +#~ msgid "Insert More tag" +#~ msgstr "Vložit značku pro pokračování textu" + +#~ msgid "Header 1" +#~ msgstr "Nadpis 1" + +#~ msgid "Header 2" +#~ msgstr "Nadpis 2" + +#~ msgid "Header 3" +#~ msgstr "Nadpis 3" + +#~ msgid "Header 4" +#~ msgstr "Nadpis 4" + +#~ msgid "Header 5" +#~ msgstr "Nadpis 5" + +#~ msgid "Header 6" +#~ msgstr "Nadpis 6" + +#~ msgid "Edit tag" +#~ msgstr "Upravit štítek" + +#~ msgid "Edit link" +#~ msgstr "Upravit odkaz " + +#~ msgid "number_format_decimals" +#~ msgstr "number_format_decimals" + +#~ msgid "Update completed." +#~ msgstr "Aktualizace proběhla úspěšně." + +#~ msgid "Blog Tagline" +#~ msgstr "Zaměření webu" + +#, fuzzy +#~ msgid "Compatibility with WordPress %1$s: Unknown)" +#~ msgstr "" +#~ "Děkujeme, že používáte <a href=\"http://wordpress.org\">WordPress</a>." + +#~ msgid "oEmbed discovery" +#~ msgstr "Vyzkoušet dostupnost oEmbed" + +#~ msgid "" +#~ "Attempt to embed content from unknown URLs using <a href=\"%s\">oEmbed</a>" +#~ msgstr "" +#~ "Pokusit se vkládat s využitím <a href=\"%s\">oEmbed</a> i média z " +#~ "neznámých URL adres služeb, které WordPress zatím nepodporuje." + +#~ msgid "Page Thumbnail" +#~ msgstr "Náhledový obrázek stránky" + +#~ msgid "Allow Comments on this page." +#~ msgstr "Povolit přidávání komentářů k této stránce." + +#, fuzzy +#~ msgid "" +#~ "\n" +#~ "Welcome to WordPress! This post contains important information. After " +#~ "you read it, you can make it private to hide it from visitors but still " +#~ "have the information handy for future reference.\n" +#~ "\n" +#~ "First things first:\n" +#~ "<ul>\n" +#~ "<li><a href=\"%1$s\" title=\"Subscribe to the WordPress mailing list for " +#~ "Release Notifications\">Subscribe to the WordPress mailing list for " +#~ "release notifications</a></li>\n" +#~ "</ul>\n" +#~ "As a subscriber, you will receive an email every time an update is " +#~ "available (and only then). This will make it easier to keep your site up " +#~ "to date, and secure from evildoers.\n" +#~ "When a new version is released, <a href=\"%2$s\" title=\"If you are " +#~ "already logged in, this will take you directly to the Dashboard\">log in " +#~ "to the Dashboard</a> and follow the instructions.\n" +#~ "Upgrading is a couple of clicks!\n" +#~ "\n" +#~ "Then you can start enjoying the WordPress experience:\n" +#~ "<ul>\n" +#~ "<li>Edit your personal information at <a href=\"%3$s\" title=\"Edit " +#~ "settings like your password, your display name and your contact " +#~ "information\">Users › Your Profile</a></li>\n" +#~ "<li>Start publishing at <a href=\"%4$s\" title=\"Create a new post" +#~ "\">Posts › Add New</a> and at <a href=\"%5$s\" title=\"Create a new " +#~ "page\">Pages › Add New</a></li>\n" +#~ "<li>Browse and install plugins at <a href=\"%6$s\" title=\"Browse and " +#~ "install plugins at the official WordPress repository directly from your " +#~ "Dashboard\">Plugins › Add New</a></li>\n" +#~ "<li>Browse and install themes at <a href=\"%7$s\" title=\"Browse and " +#~ "install themes at the official WordPress repository directly from your " +#~ "Dashboard\">Appearance › Add New Themes</a></li>\n" +#~ "<li>Modify and prettify your website’s links at <a href=\"%8$s\" " +#~ "title=\"For example, select a link structure like: http://example." +#~ "com/1999/12/post-name\">Settings › Permalinks</a></li>\n" +#~ "<li>Import content from another system or WordPress site at <a href=\"%9$s" +#~ "\" title=\"WordPress comes with importers for the most common publishing " +#~ "systems\">Tools › Import</a></li>\n" +#~ "<li>Find answers to your questions at the <a href=\"%10$s\" title=\"The " +#~ "official WordPress documentation, maintained by the WordPress community" +#~ "\">WordPress Codex</a></li>\n" +#~ "</ul>\n" +#~ "To keep this post for reference, <a href=\"%11$s\" title=\"Click to edit " +#~ "the content and settings of this post\">click to edit it</a>, go to the " +#~ "Publish box and change its Visibility from Public to Private.\n" +#~ "\n" +#~ "Thank you for selecting WordPress. We wish you happy publishing!\n" +#~ "\n" +#~ "PS. Not yet subscribed for update notifications? <a href=\"%1$s\" title=" +#~ "\"Subscribe to the WordPress mailing list for Release Notifications\">Do " +#~ "it now!</a>\n" +#~ msgstr "" +#~ "\n" +#~ "Vítejte ve WordPressu! Tento první testovací příspěvek obsahuje některé " +#~ "důležité informace. Až si ho přečtete, tak ho můžete v administraci " +#~ "jednoduše označit jako Soukromý, čímž ho skryjete před vašimi čtenáři, " +#~ "ale stále ho budete mít k dispozici, když budete něco s WordPressem " +#~ "potřebovat.\n" +#~ "\n" +#~ "Nejdříve novinky:\n" +#~ "<ul>\n" +#~ "<li><a href=\"%1$s\" title=\"Přihlásit se k emailovému odběru novinek o " +#~ "vydaných verzích WordPressu\">Přihlásit se k emailovému odběru novinek o " +#~ "vydaných verzích WordPressu</a></li>\n" +#~ "</ul>\n" +#~ "Jako oběratel těchto zpráv o nových verzích WordPressu dostanete email " +#~ "pokaždé, když je vydána nová verze (a nikdy jindy). Bude tak pro vás " +#~ "jednodušší sledování nových verzí WordPressu a udržování nejnovější " +#~ "verze, která je vždy nejbezpečnější a ochraňuje váš web před nájezdníky.\n" +#~ "Když bude vydána nová verze WordPressu, <a href=\"%2$s\" title=\"If you " +#~ "are already logged in, this will take you directly to the Dashboard" +#~ "\">přihlašte se do administrace</a> a postupujte podle instrukcí.\n" +#~ "Samotná aktualizace WordPressu vám zabere jen několik kliknutí!\n" +#~ "\n" +#~ "A poté si už můžete začít užívat práci s WordPressem:\n" +#~ "<ul>\n" +#~ "<li>Upravit informace o sobě můžete v menu <a href=\"%3$s\" title=\"Edit " +#~ "settings like your password, your display name and your contact " +#~ "information\">Uživatelé › Váš profil</a></li>\n" +#~ "<li>Vytvořit příspěvek nebo stránku v menu <a href=\"%4$s\" title=" +#~ "\"Create a new post\">Příspěvky › Vytvořit příspěvek</a> a <a href=" +#~ "\"%5$s\" title=\"Create a new page\">Stránky › Vytvořit stránku</" +#~ "a></li>\n" +#~ "<li>Browse and install plugins at <a href=\"%6$s\" title=\"Browse and " +#~ "install plugins at the official WordPress repository directly from your " +#~ "Dashboard\">Plugins › Add New</a></li>\n" +#~ "<li>Browse and install themes at <a href=\"%7$s\" title=\"Browse and " +#~ "install themes at the official WordPress repository directly from your " +#~ "Dashboard\">Appearance › Add New Themes</a></li>\n" +#~ "<li>Modify and prettify your website’s links at <a href=\"%8$s\" " +#~ "title=\"For example, select a link structure like: http://example." +#~ "com/1999/12/post-name\">Settings › Permalinks</a></li>\n" +#~ "<li>Import content from another system or WordPress site at <a href=\"%9$s" +#~ "\" title=\"WordPress comes with importers for the most common publishing " +#~ "systems\">Tools › Import</a></li>\n" +#~ "<li>Find answers to your questions at the <a href=\"%10$s\" title=\"The " +#~ "official WordPress documentation, maintained by the WordPress community" +#~ "\">WordPress Codex</a></li>\n" +#~ "</ul>\n" +#~ "To keep this post for reference, <a href=\"%11$s\" title=\"Click to edit " +#~ "the content and settings of this post\">click to edit it</a>, go to the " +#~ "Publish box and change its Visibility from Public to Private.\n" +#~ "\n" +#~ "Thank you for selecting WordPress. We wish you happy publishing!\n" +#~ "\n" +#~ "PS. Not yet subscribed for update notifications? <a href=\"%1$s\" title=" +#~ "\"Subscribe to the WordPress mailing list for Release Notifications\">Do " +#~ "it now!</a>\n" + +#, fuzzy +#~ msgctxt "url for release notification mailing list subscription." + +#~ msgid "http://wordpress.org/download/" +#~ msgstr "http://wordpress.org/download/" + +#, fuzzy +#~ msgid "Welcome!" +#~ msgstr "Vítejte" + +#, fuzzy +#~ msgctxt "Default post slug" + +#~ msgid "welcome" +#~ msgstr "Vítejte" + +#~ msgid "Undo?" +#~ msgstr "Vrátit zpět?" + +#~ msgid "Sorry, can’t call files with their real path." +#~ msgstr "Nelze bohužel otevírat soubory s jejich skutečnou cestou." + +#~ msgid "Embed a picture from a web site that supports oEmbed" +#~ msgstr "Vložit obrázek z webu, který podporuje formát oEmbed" + +#~ msgid "Embed image" +#~ msgstr "URL obrázku" + +#~ msgid "Embed" +#~ msgstr "Vložit do příspěvku" + +#~ msgid "Comment by" +#~ msgstr "Komentář jehož autorem je" + +#~ msgid "Time" +#~ msgstr "Čas" + +#~ msgid "You did not enter a tag name." +#~ msgstr "Nezadali jste název štítku." + +#~ msgid "Tag <a href=\"#%s\">%s</a> added" +#~ msgstr "Štítek <a href=\"#%s\">%s</a> byl vytvořen" + +#~ msgid "" +#~ "You are about to delete this attachment '%s'\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat přílohu '%s'\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "Delete All Spam" +#~ msgstr "Smazat všechny spamy" + +#~ msgid "" +#~ "You are about to delete this draft '%s'\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat koncept '%s'\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "You are about to delete this post '%s'\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat příspěvek '%s'\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "Keep this post private" +#~ msgstr "Soukromý příspěvek" + +#~ msgid "Password Protect This Post" +#~ msgstr "Ochrana příspěvku heslem" + +#~ msgid "" +#~ "Setting a password will require people who visit your blog to enter the " +#~ "above password to view this post and its comments." +#~ msgstr "" +#~ "Tato volba zapne nutnost zadat heslo v případě, že chce návštěvník " +#~ "zobrazit celý příspěvek a komentáře k němu." + +#~ msgid "" +#~ "You are about to delete this comment. \n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat tento komentář. \n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "You are about to delete this page '%s'\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat stránku '%s'\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "Page Password" +#~ msgstr "Heslo pro přístup ke stránce" + +#~ msgid "Password Protect This Page" +#~ msgstr "Ochrana stránky heslem" + +#~ msgid "" +#~ "Setting a password will require people who visit your blog to enter the " +#~ "above password to view this page and its comments." +#~ msgstr "" +#~ "Tato volba zapne nutnost zadat heslo v případě, že chce návštěvník " +#~ "zobrazit celou stránku a komentáře k ní." + +#~ msgid "" +#~ "These settings apply to this page only. “Pings” are <a href=" +#~ "\"http://codex.wordpress.org/Introduction_to_Blogging#Managing_Comments\" " +#~ "target=\"_blank\">trackbacks and pingbacks</a>." +#~ msgstr "" +#~ "Toto nastavení bude použito pouze pro tuto stránku. „Pingy“ " +#~ "jsou <a href=\"http://codex.wordpress.org/" +#~ "Introduction_to_Blogging#Managing_Comments\" target=\"_blank\">trackbacky " +#~ "a pingbacky</a>." + +#~ msgid "Also used as alternate text for the image" +#~ msgstr "Bude použito také jako alternativní text k obrázku" + +#~ msgid "" +#~ "You are about to delete this draft '%s'\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat koncept '%s'\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "You are about to delete this post '%s'\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat příspěvek '%s'\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "You are about to delete this page '%s'\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat stránku '%s'\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "The character encoding you write your blog in (UTF-8 is <a href=\"http://" +#~ "developer.apple.com/documentation/macos8/TextIntlSvcs/" +#~ "TextEncodingConversionManager/TEC1.5/TEC.b0.html\">recommended</a>)" +#~ msgstr "" +#~ "Znaková sada vašich stránek (<a href=\"http://developer.apple.com/" +#~ "documentation/macos8/TextIntlSvcs/TextEncodingConversionManager/TEC1.5/" +#~ "TEC.b0.html\">doporučená je UTF-8</a>)." + +#~ msgid "You do not have sufficient permissions to edit themes for this blog." +#~ msgstr "Nemáte dostatečné oprávnění pro úpravu šablon na tomto webu." + +#~ msgid "Image (%s)" + +#~ msgid_plural "Images (%s)" +#~ msgstr[0] "%s obrázek" +#~ msgstr[1] "%s obrázky" +#~ msgstr[2] "%s obrázků" + +#~ msgid "Audio (%s)" + +#~ msgid_plural "Audio (%s)" +#~ msgstr[0] "Audio (%s)" +#~ msgstr[1] "%s audio soubory" +#~ msgstr[2] "%s audio souborů" + +#~ msgid "Video (%s)" + +#~ msgid_plural "Video (%s)" +#~ msgstr[0] "%s video soubor" +#~ msgstr[1] "%s video soubory" +#~ msgstr[2] "%s video souborů" + +#~ msgid "Import Bunny’s Technorati Tags" +#~ msgstr "Importovat štítky z Bunny’s Technorati Tags" + +#~ msgid "" +#~ "Howdy! This imports tags from Bunny’s Technorati Tags into " +#~ "WordPress tags." +#~ msgstr "" +#~ "Tímto nástrojem můžete importovat štítky ze systému Bunny’s " +#~ "Technorati Tags do formátu štítků, které se používají ve WordPressu." + +#~ msgid "This is suitable for Bunny’s Technorati Tags version 0.6." +#~ msgstr "" +#~ "Tento převaděč je kompatibilní s Bunny’s Technorati Tags verze 0.6." + +#~ msgid "" +#~ "All existing Bunny’s Technorati Tags will be removed after import." +#~ msgstr "" +#~ "Všechny existující štítky v Bunny’s Technorati Tags budou po " +#~ "importu smazány." + +#~ msgid "Import Tags" +#~ msgstr "Importovat štítky" + +#~ msgid "Reading Bunny’s Technorati Tags…" +#~ msgstr "Probíhá načítání Bunny’s Technorati Tags…" + +#~ msgid "Done! <strong>%s</strong> post with tags were read." + +#~ msgid_plural "Done! <strong>%s</strong> posts with tags were read." +#~ msgstr[0] "Hotovo! Byl načten <strong>%s</strong> příspěvek se štítky." +#~ msgstr[1] "Hotovo! Byly načteny <strong>%s</strong> příspěvky se štítky." +#~ msgstr[2] "Hotovo! Bylo načteno <strong>%s</strong> příspěvků se štítky." + +#~ msgid "Import Bunny’s Technorati Tags into WordPress tags." +#~ msgstr "Importovat Bunny’s Technorati Tags." + +#~ msgid "Import Jerome’s Keywords" +#~ msgstr "Importovat Jerome’s Keywords" + +#~ msgid "" +#~ "Howdy! This imports tags from Jerome’s Keywords into WordPress tags." +#~ msgstr "" +#~ "Tímto importovacím nástrojem můžete do WordPressu importovat štítky ze " +#~ "systému Jerome’s Keywords." + +#~ msgid "This is suitable for Jerome’s Keywords version 1.x and 2.0a." +#~ msgstr "" +#~ "Tento převaděč je kompatibilní s Jerome’s Keywords verze 1.x a 2.0a." + +#~ msgid "All existing Jerome’s Keywords will be removed after import." +#~ msgstr "" +#~ "Všechny existující štítky v systému Jerome’s Keywords budou po " +#~ "importu smazány." + +#~ msgid "Import Version 1.x" +#~ msgstr "Importovat verzi 1.x" + +#~ msgid "Import Version 2.0a" +#~ msgstr "Importovat verzi 2.0a" + +#~ msgid "Reading Jerome’s Keywords Tags…" +#~ msgstr "Probíhá načítání štítků z Jerome’s Keywords…" + +#~ msgid "Import Jerome’s Keywords into WordPress tags." +#~ msgstr "Importuje štítky ze systému Jerome’s Keywords." + +#~ msgid "Enable syntax highlighting" +#~ msgstr "Povolit zvýrazňování zdrojového kódu" + +#~ msgid "Disable syntax highlighting" +#~ msgstr "Zakázat zvýrazňování zdrojového kódu" + +#~ msgid "Return to Theme Installer." +#~ msgstr "Zpět na Instalaci šablon." + +#~ msgid "%s Feed" +#~ msgstr "%s RSS zdroj" + +#~ msgid "%s Comments Feed" +#~ msgstr "%s RSS komentářů" + +#~ msgid "" +#~ "<p>There is a new version of %1$s available. <a href=\"%2$s\" class=" +#~ "\"thickbox\" title=\"%1$s\">View version %3$s Details</a>.</p>" +#~ msgstr "" +#~ "<p>Nová verze pluginu %1$s je k dispozici. <a href=\"%2$s\" class=" +#~ "\"thickbox\" title=\"%1$s\">Prohlédněte si informace o nové verzi %3$s</" +#~ "a>.</p>" + +#~ msgid "(Password not shown)" +#~ msgstr "(Heslo se nezobrazí)" + +#, fuzzy +#~ msgid "Algiers" +#~ msgstr "řádků" + +#, fuzzy +#~ msgid "Blantyre" +#~ msgstr "Vyvážení" + +#, fuzzy +#~ msgid "Cairo" +#~ msgstr "Titulek" + +#, fuzzy +#~ msgid "Ceuta" +#~ msgstr "Vyjmout" + +#, fuzzy +#~ msgid "Conakry" +#~ msgstr "Pondělí" + +#, fuzzy +#~ msgid "Dar es Salaam" +#~ msgstr "Označit jako spam" + +#, fuzzy +#~ msgid "Djibouti" +#~ msgstr "Něco o mě" + +#, fuzzy +#~ msgid "Douala" +#~ msgstr "Oblíbené" + +#, fuzzy +#~ msgid "Freetown" +#~ msgstr "Smazání" + +#, fuzzy +#~ msgid "Gaborone" +#~ msgstr "zrušit" + +#, fuzzy +#~ msgid "Harare" +#~ msgstr "Odkaz" + +#, fuzzy +#~ msgid "Lagos" +#~ msgstr "Štítky" + +#, fuzzy +#~ msgid "Lome" +#~ msgstr "Hlavní stránka" + +#, fuzzy +#~ msgid "Luanda" +#~ msgstr "Neděle" + +#, fuzzy +#~ msgid "Maputo" +#~ msgstr "Titulek" + +#, fuzzy +#~ msgid "Maseru" +#~ msgstr "Základna" + +#, fuzzy +#~ msgid "Ndjamena" +#~ msgstr "Název" + +#, fuzzy +#~ msgid "Niamey" +#~ msgstr "Název" + +#, fuzzy +#~ msgid "Sao Tome" +#~ msgstr "Komentářový spam" + +#, fuzzy +#~ msgid "Windhoek" +#~ msgstr "Šířka" + +#, fuzzy +#~ msgid "Anchorage" +#~ msgstr "Název kotvy" + +#, fuzzy +#~ msgid "Araguaina" +#~ msgstr "Průměrné hodnocení" + +#, fuzzy +#~ msgid "Argentina" +#~ msgstr "Průměrné hodnocení" + +#, fuzzy +#~ msgid "Jujuy" +#~ msgstr "Červenec" + +#, fuzzy +#~ msgid "Mendoza" +#~ msgstr "Média" + +#, fuzzy +#~ msgid "San Luis" +#~ msgstr "Hledat odkazy" + +#, fuzzy +#~ msgid "Tucuman" +#~ msgstr "štítek" + +#, fuzzy +#~ msgid "Asuncion" +#~ msgstr "Akce" + +#, fuzzy +#~ msgid "Atikokan" +#~ msgstr "Akce" + +#, fuzzy +#~ msgid "Atka" +#~ msgstr "Přiložit" + +#, fuzzy +#~ msgid "Belem" +#~ msgstr "Modré" + +#, fuzzy +#~ msgid "Belize" +#~ msgstr "Na účaří řádku" + +#, fuzzy +#~ msgid "Bogota" +#~ msgstr "Odhlásit se" + +#, fuzzy +#~ msgid "Boise" +#~ msgstr "Procházet" + +#, fuzzy +#~ msgid "Cancun" +#~ msgstr "Zrušit" + +#, fuzzy +#~ msgid "Cayenne" +#~ msgstr "Zrušit" + +#, fuzzy +#~ msgid "Chicago" +#~ msgstr "Změnit" + +#, fuzzy +#~ msgid "Dawson" +#~ msgstr "Hotovo" + +#, fuzzy +#~ msgid "Denver" +#~ msgstr "Na střed" + +#, fuzzy +#~ msgid "Edmonton" +#~ msgstr "Smajlíci" + +#, fuzzy +#~ msgid "Fort Wayne" +#~ msgstr "Jméno" + +#, fuzzy +#~ msgid "Grenada" +#~ msgstr "přítel" + +#, fuzzy +#~ msgid "Indiana" +#~ msgstr "Zvětšit odsazení" + +#, fuzzy +#~ msgid "Marengo" +#~ msgstr "rodič" + +#, fuzzy +#~ msgid "Vincennes" +#~ msgstr "Licence" + +#, fuzzy +#~ msgid "Iqaluit" +#~ msgstr "Kurzíva" + +#, fuzzy +#~ msgid "Juneau" +#~ msgstr "Červen" + +#, fuzzy +#~ msgid "Monticello" +#~ msgstr "Ostatní" + +#, fuzzy +#~ msgid "Managua" +#~ msgstr "Správa audio souborů" + +#, fuzzy +#~ msgid "Marigot" +#~ msgstr "Cíl (target)" + +#, fuzzy +#~ msgid "Menominee" +#~ msgstr "žádný" + +#, fuzzy +#~ msgid "Merida" +#~ msgstr "Média" + +#, fuzzy +#~ msgid "Moncton" +#~ msgstr "Akce" + +#, fuzzy +#~ msgid "Montevideo" +#~ msgstr "Správa video souborů" + +#, fuzzy +#~ msgid "Montreal" +#~ msgstr "Ovládání" + +#, fuzzy +#~ msgid "Montserrat" +#~ msgstr "Vložit" + +#, fuzzy +#~ msgid "Nome" +#~ msgstr "Žádné" + +#, fuzzy +#~ msgid "New Salem" +#~ msgstr "Vytvořit stránku" + +#, fuzzy +#~ msgid "Recife" +#~ msgstr "Obnovit" + +#, fuzzy +#~ msgid "Regina" +#~ msgstr "Čtení" + +#, fuzzy +#~ msgid "Resolute" +#~ msgstr "Úroveň" + +#, fuzzy +#~ msgid "Santiago" +#~ msgstr "Počáteční obrázek" + +#, fuzzy +#~ msgid "St Thomas" +#~ msgstr "Nastavit autory" + +#, fuzzy +#~ msgid "Thule" +#~ msgstr "Út" + +#, fuzzy +#~ msgid "Thunder Bay" +#~ msgstr "Čtvrtek" + +#, fuzzy +#~ msgid "Tijuana" +#~ msgstr "štítek" + +#, fuzzy +#~ msgid "Virgin" +#~ msgstr "Verze" + +#, fuzzy +#~ msgid "Whitehorse" +#~ msgstr "Webová stránka" + +#, fuzzy +#~ msgid "Yellowknife" +#~ msgstr "Povolit" + +#, fuzzy +#~ msgid "Casey" +#~ msgstr "Základna" + +#, fuzzy +#~ msgid "Mawson" +#~ msgstr "Po" + +#, fuzzy +#~ msgid "Palmer" +#~ msgstr "Galerie" + +#, fuzzy +#~ msgid "Rothera" +#~ msgstr "Zápatí" + +#, fuzzy +#~ msgid "South Pole" +#~ msgstr "Váš profil" + +#, fuzzy +#~ msgid "Syowa" +#~ msgstr "Zobrazit" + +#, fuzzy +#~ msgid "Vostok" +#~ msgstr "příspěvek" + +#, fuzzy +#~ msgid "Arctic" +#~ msgstr "Akce" + +#, fuzzy +#~ msgid "Aden" +#~ msgstr "Zvětšit odsazení" + +#, fuzzy +#~ msgid "Almaty" +#~ msgstr "poslední" + +#, fuzzy +#~ msgid "Aqtobe" +#~ msgstr "Říjen" + +#, fuzzy +#~ msgid "Baku" +#~ msgstr "Bez avataru" + +#, fuzzy +#~ msgid "Bangkok" +#~ msgstr "Bez avataru" + +#, fuzzy +#~ msgid "Brunei" +#~ msgstr "Modré" + +#, fuzzy +#~ msgid "Chongqing" +#~ msgstr "Pokračovat" + +#, fuzzy +#~ msgid "Chungking" +#~ msgstr "Změna na %s" + +#, fuzzy +#~ msgid "Colombo" +#~ msgstr "Barva:" + +#, fuzzy +#~ msgid "Istanbul" +#~ msgstr "Instalovat" + +#, fuzzy +#~ msgid "Karachi" +#~ msgstr "Březen" + +#, fuzzy +#~ msgid "Kashgar" +#~ msgstr "Nástěnka" + +#, fuzzy +#~ msgid "Kuwait" +#~ msgstr "Kvalita" + +#, fuzzy +#~ msgid "Macao" +#~ msgstr "Březen" + +#, fuzzy +#~ msgid "Macau" +#~ msgstr "Březen" + +#, fuzzy +#~ msgid "Makassar" +#~ msgstr "Označit jako spam" + +#, fuzzy +#~ msgid "Oral" +#~ msgstr "Změnit" + +#, fuzzy +#~ msgid "Pontianak" +#~ msgstr "Pingy" + +#, fuzzy +#~ msgid "Qatar" +#~ msgstr "Avataři" + +#, fuzzy +#~ msgid "Rangoon" +#~ msgstr "Hodnocení" + +#, fuzzy +#~ msgid "Saigon" +#~ msgstr "SAlign" + +#, fuzzy +#~ msgid "Seoul" +#~ msgstr "Plánování" + +#, fuzzy +#~ msgid "Taipei" +#~ msgstr "Popis webu" + +#, fuzzy +#~ msgid "Tehran" +#~ msgstr "štítek" + +#, fuzzy +#~ msgid "Thimbu" +#~ msgstr "Čt" + +#, fuzzy +#~ msgid "Thimphu" +#~ msgstr "Čt" + +#, fuzzy +#~ msgid "Tokyo" +#~ msgstr "Nástroje" + +#, fuzzy +#~ msgid "Atlantic" +#~ msgstr "Aktuálně máte..." + +#, fuzzy +#~ msgid "Azores" +#~ msgstr "Adresa" + +#, fuzzy +#~ msgid "Canary" +#~ msgstr "Leden" + +#, fuzzy +#~ msgid "Cape Verde" +#~ msgstr "Pořadí stránky" + +#, fuzzy +#~ msgid "Faroe" +#~ msgstr "Doporučené" + +#, fuzzy +#~ msgid "Jan Mayen" +#~ msgstr "Leden" + +#, fuzzy +#~ msgid "Madeira" +#~ msgstr "Média" + +#, fuzzy +#~ msgid "Stanley" +#~ msgstr "Zmenšení/zvětšení" + +#, fuzzy +#~ msgid "Hobart" +#~ msgstr "Port" + +#, fuzzy +#~ msgid "North" +#~ msgstr "Port" + +#, fuzzy +#~ msgid "Perth" +#~ msgstr "Port" + +#, fuzzy +#~ msgid "South" +#~ msgstr "Něco o mě" + +#, fuzzy +#~ msgid "West" +#~ msgstr "Webová stránka" + +#, fuzzy +#~ msgid "Universal" +#~ msgstr "Obecné" + +#, fuzzy +#~ msgid "Europe" +#~ msgstr "Profil" + +#, fuzzy +#~ msgid "Athens" +#~ msgstr "Akce" + +#, fuzzy +#~ msgid "Belfast" +#~ msgstr "poslední" + +#, fuzzy +#~ msgid "Belgrade" +#~ msgstr "Aktualizovat Wordpress" + +#, fuzzy +#~ msgid "Berlin" +#~ msgstr "Na účaří řádku" + +#, fuzzy +#~ msgid "Copenhagen" +#~ msgstr "Změnit" + +#, fuzzy +#~ msgid "Dublin" +#~ msgstr "Veřejné" + +#, fuzzy +#~ msgid "Gibraltar" +#~ msgstr "Knihovna médií" + +#, fuzzy +#~ msgid "Lisbon" +#~ msgstr "Seznam" + +#, fuzzy +#~ msgid "London" +#~ msgstr "žádný" + +#, fuzzy +#~ msgid "Malta" +#~ msgstr "Další informace" + +#, fuzzy +#~ msgid "Minsk" +#~ msgstr "Pingy" + +#, fuzzy +#~ msgid "Monaco" +#~ msgstr "Pondělí" + +#, fuzzy +#~ msgid "Paris" +#~ msgstr "Pingy" + +#, fuzzy +#~ msgid "Prague" +#~ msgstr "stránka" + +#, fuzzy +#~ msgid "Riga" +#~ msgstr "Doprava" + +#, fuzzy +#~ msgid "Rome" +#~ msgstr "Úroveň" + +#, fuzzy +#~ msgid "Samara" +#~ msgstr "Pouze několik úvodních vět" + +#, fuzzy +#~ msgid "Tallinn" +#~ msgstr "Popis webu" + +#, fuzzy +#~ msgid "Tirane" +#~ msgstr "Změnit" + +#, fuzzy +#~ msgid "Vaduz" +#~ msgstr "Hodnota" + +#, fuzzy +#~ msgid "Vatican" +#~ msgstr "Hodnocení" + +#, fuzzy +#~ msgid "Vienna" +#~ msgstr "Zobrazit" + +#, fuzzy +#~ msgid "Vilnius" +#~ msgstr "Dokončit" + +#, fuzzy +#~ msgid "Zagreb" +#~ msgstr "stránka" + +#, fuzzy +#~ msgid "Zurich" +#~ msgstr "Číselné" + +#, fuzzy +#~ msgid "Indian" +#~ msgstr "Zvětšit odsazení" + +#, fuzzy +#~ msgid "Chagos" +#~ msgstr "Změnit" + +#, fuzzy +#~ msgid "Cocos" +#~ msgstr "Barva:" + +#, fuzzy +#~ msgid "Comoro" +#~ msgstr "Barva:" + +#, fuzzy +#~ msgid "Mahe" +#~ msgstr "Březen" + +#, fuzzy +#~ msgid "Maldives" +#~ msgstr "řádků" + +#, fuzzy +#~ msgid "Mayotte" +#~ msgstr "Květen" + +#, fuzzy +#~ msgid "Apia" +#~ msgstr "Duben" + +#, fuzzy +#~ msgid "Easter" +#~ msgstr "Vložit" + +#, fuzzy +#~ msgid "Efate" +#~ msgstr "partner(ka)" + +#, fuzzy +#~ msgid "Fiji" +#~ msgstr "Dokončit" + +#, fuzzy +#~ msgid "Guam" +#~ msgstr "am" + +#, fuzzy +#~ msgid "Johnston" +#~ msgstr "Příspěvek|podstatné jméno" + +#, fuzzy +#~ msgid "Midway" +#~ msgstr "Květen" + +#, fuzzy +#~ msgid "Noumea" +#~ msgstr "Hlasitost" + +#, fuzzy +#~ msgid "Pago Pago" +#~ msgstr "Heslo pro přístup ke stránce" + +#, fuzzy +#~ msgid "Palau" +#~ msgstr "Hodnota" + +#, fuzzy +#~ msgid "Pitcairn" +#~ msgstr "Příspěvek|podstatné jméno" + +#, fuzzy +#~ msgid "Ponape" +#~ msgstr "Žádné" + +#, fuzzy +#~ msgid "Port Moresby" +#~ msgstr "Řadit podle:" + +#, fuzzy +#~ msgid "Rarotonga" +#~ msgstr "Hodnocení" + +#, fuzzy +#~ msgid "Saipan" +#~ msgstr "spam" + +#, fuzzy +#~ msgid "Samoa" +#~ msgstr "spam" + +#, fuzzy +#~ msgid "Wake" +#~ msgstr "Slabé" + +#~ msgid "%s by %s" +#~ msgstr "%s od %s" + +#~ msgid "Required." +#~ msgstr "Vyžadováno." + +#~ msgid "Username (required)" +#~ msgstr "Uživatelské jméno (vyžadováno)" + +#~ msgid "E-mail (required)" +#~ msgstr "Email (vyžadován)" + +#, fuzzy +#~ msgid "Downloading update from %s." +#~ msgstr "Stahuji aktualizaci z %s" + +#~ msgid "" +#~ "The file exceeds the <code>upload_max_filesize</code> directive in " +#~ "<code>php.ini</code>." +#~ msgstr "" +#~ "Velikost souboru překročila nastavení <code>upload_max_filesize</code> v " +#~ "souboru <code>php.ini</code>." + +#~ msgid "" +#~ "The file exceeds the <em>MAX_FILE_SIZE</em> directive that was specified " +#~ "in the HTML form." +#~ msgstr "" +#~ "Velikost souboru překročila nastavení <em>MAX_FILE_SIZE</em>, které bylo " +#~ "specifikováno v HTML formuláři." + +#~ msgid "The file was only partially uploaded." +#~ msgstr "Soubor byl nahrán pouze částečně." + +#~ msgid "No file was sent." +#~ msgstr "Žádný soubor nebyl odeslán." + +#, fuzzy +#~ msgid "" +#~ "Plugins extend and expand the functionality of WordPress. <a href=\"%s" +#~ "\">Install new plugins</a> and then activate, deactivate, or delete them " +#~ "here." +#~ msgstr "" +#~ "Pluginy přidávají Wordpressu další funkce. Jejich instalace spočívá v " +#~ "nahrání (ručně s pomocí FTP klienta) souborů s pluginem do adresáře " +#~ "<code>wp-content/plugins</code>. Po instalaci můžete jednotlivé pluginy " +#~ "aktivovat či deaktivovat." + +#~ msgid "" +#~ "You can find additional themes for your site in the <a href=\"http://" +#~ "wordpress.org/extend/themes/\">WordPress theme directory</a>. To install " +#~ "a theme you generally just need to upload the theme folder into your " +#~ "<code>wp-content/themes</code> directory. Once a theme is uploaded, you " +#~ "should see it on this page." +#~ msgstr "" +#~ "Více šablon pro váš web můžete najít v <a href=\"http://wordpress.org/" +#~ "extend/themes/\">oficiálním adresáři šablon pro Wordpress</a>. Jejich " +#~ "instalace spočívá v tom, že je nejprve nahrajete do adresáře <code>wp-" +#~ "content/themes</code>. Potom už je uvidíte v přehledu na této stránce a " +#~ "můžete je aktivovat." + +#~ msgid "" +#~ "You are about to delete the selected categories.\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat vybrané rubriky.\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "Comment|noun" +#~ msgstr "Komentář|podstatné jméno" + +#~ msgid "" +#~ "You are about to delete the selected comments.\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat vybrané komentáře.\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "Post updated. Continue editing below or <a href=\"%s\">go back</a>." +#~ msgstr "" +#~ "Příspěvek byl aktualizován. Pokračujte v úpravách níže nebo se <a href=\"%" +#~ "s\">vraťte zpět.</a>" + +#~ msgid "M j, Y @ G:i|Publish box date format" +#~ msgstr "j.n.Y @ G:i|formát data publikace" + +#~ msgid "Approved|adjective" +#~ msgstr "Schválený|přídavné jméno" + +#~ msgid "Pending|adjective" +#~ msgstr "Čekající na schválení|přídavné jméno" + +#~ msgid "Spam|adjective" +#~ msgstr "Spam|přídavné jméno" + +#~ msgid "" +#~ "You are about to delete the selected link categories.\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat vybrané rubriky odkazů.\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "Choose the frame your link targets. Essentially this means if you choose " +#~ "<code>_blank</code> your link will open in a new window." +#~ msgstr "" +#~ "Výběr cílového zobrazení odkazu. V podstatě se používá pouze parametr " +#~ "<code>_blank</code>, který otevře odkaz v novém okně." + +#~ msgid "Page updated. Continue editing below or <a href=\"%s\">go back</a>." +#~ msgstr "" +#~ "Stránka byla aktualizována. Můžete pokračovat v úpravách, nebo se <a href=" +#~ "\"%s\">vrátit zpět</a>." + +#~ msgid "Published|page" +#~ msgstr "Publikované|stránka" + +#~ msgid "Published <span class=\"count\">(%s)</span>|page" + +#~ msgid_plural "Published <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Publikované <span class=\"count\">(%s)</span>" +#~ msgstr[1] "Publikované <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Publikované <span class=\"count\">(%s)</span>" + +#~ msgid "Scheduled|page" +#~ msgstr "Plánované|stránka" + +#~ msgid "Scheduled <span class=\"count\">(%s)</span>|page" + +#~ msgid_plural "Scheduled <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Plánované <span class=\"count\">(%s)</span>|stránka" +#~ msgstr[1] "Plánované <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Plánované <span class=\"count\">(%s)</span>" + +#~ msgid "Pending Review|page" +#~ msgstr "Čekající na schválení|stránka" + +#~ msgid "Pending Review <span class=\"count\">(%s)</span>|page" + +#~ msgid_plural "Pending Review <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Čekající na schválení <span class=\"count\">(%s)</span>|stránka" +#~ msgstr[1] "Čekající na schválení <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Čekající na schválení <span class=\"count\">(%s)</span>" + +#~ msgid "Draft|page" +#~ msgstr "Koncept|stránka" + +#~ msgid "Drafts|manage posts header" +#~ msgstr "Koncepty" + +#~ msgid "Draft <span class=\"count\">(%s)</span>|page" + +#~ msgid_plural "Drafts <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Koncepty <span class=\"count\">(%s)</span>|page" +#~ msgstr[1] "Koncepty <span class=\"count\">(%s)</span>|page" +#~ msgstr[2] "Koncepty <span class=\"count\">(%s)</span>|page" + +#~ msgid "Private|page" +#~ msgstr "Soukromá stránka|stránka" + +#~ msgid "Private <span class=\"count\">(%s)</span>|page" + +#~ msgid_plural "Private <span class=\"count\">(%s)</span>" +#~ msgstr[0] "Soukromé <span class=\"count\">(%s)</span>|stránka" +#~ msgstr[1] "Soukromé <span class=\"count\">(%s)</span>" +#~ msgstr[2] "Soukromé <span class=\"count\">(%s)</span>" + +#~ msgid "" +#~ "You are about to delete the selected pages.\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat vybrané stránky.\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "You are about to delete the selected posts.\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat vybrané příspěvky.\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "Also, since you're coming from DotClear, you probably have been using " +#~ "Textile to format your comments and posts. If this is the case, we " +#~ "recommend downloading and installing <a href=\"http://www.huddledmasses." +#~ "org/category/development/wordpress/textile/\">Textile for WordPress</a>. " +#~ "Trust me... You'll want it." +#~ msgstr "" +#~ "Pokud přecházíte ze systému DotClear, pravděpodobně pro formátování " +#~ "příspěvků a komentářů používáte Textile. Pokud chcete dále využívat tento " +#~ "formátovací nástroj, doporučujeme stáhnout a nainstalovat <a href=" +#~ "\"http://www.huddledmasses.org/category/development/wordpress/textile/" +#~ "\">Textile for WordPress</a>.<br /><br />Můžete také vyzkoušet třeba <a " +#~ "href=\"http://www.texy.info/\" title=\"Texy! - HTML formátovač\">české " +#~ "Texy!</a>." + +#~ msgid "That's it! What are you waiting for? Go <a href=\"%1$s\">login</a>!" +#~ msgstr "A to je všechno! Můžete se <a href=\"%1$s\">přihlásit</a>!" + +#~ msgid "" +#~ "Howdy! Upload your LiveJournal XML export file and we’ll import the " +#~ "posts into this blog." +#~ msgstr "" +#~ "Tento importovací nástroj vám umožní přidat příspěvky z exportního XML " +#~ "souboru systému LiveJournal do databáze tohoto webu ve Wordpressu." + +#~ msgid "" +#~ "Choose a LiveJournal XML file to upload, then click Upload file and " +#~ "import." +#~ msgstr "" +#~ "Vyberte XML soubor LiveJournalu k nahrání a poté klikněte na tlačítko " +#~ "\"Nahrát a importovat\"." + +#~ msgid "Connection to the server has timeout after %s seconds." +#~ msgstr "Pro připojení k serveru je nastaven časový limit %s vteřin." + +#~ msgid "Spam|verb" +#~ msgstr "Spam|sloveso" + +#~ msgid "something" +#~ msgstr "něco" + +#~ msgid " on %4$s|feed_display" +#~ msgstr " na %4$s" + +#~ msgid "[need help?]" +#~ msgstr "[potřebujete pomoc?]" + +#~ msgid "No plugin Specified" +#~ msgstr "Nebyl specifikován žádný plugin" + +#~ msgid "Successfully installed the plugin." +#~ msgstr "Plugin byl úspěšně nainstalován." + +#~ msgid "Editor|User role" +#~ msgstr "Šéfredaktor|Uživatelská úroveň" + +#~ msgid "Author|User role" +#~ msgstr "Redaktor|Uživatelská úroveň" + +#~ msgid "Subscriber|User role" +#~ msgstr "Návštěvník|Uživatelská úroveň" + +#~ msgid "" +#~ "You are about to delete this category '%s'\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat rubriku '%s'\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "You are about to delete this tag '%s'\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat štítek '%s'\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "File|media column header" +#~ msgstr "Soubor|záhlaví sloupce médií" + +#~ msgid "Attached to|media column header" +#~ msgstr "Uloženo|záhlaví sloupce médií" + +#~ msgid "Date|media column header" +#~ msgstr "Datum nahrání|záhlaví sloupce médií" + +#~ msgid "rel" +#~ msgstr "rel" + +#~ msgid "" +#~ "–OR–|Between password field and private checkbox on post " +#~ "quick edit interface" +#~ msgstr "" +#~ "–NEBO–|Mezi polem pro heslo a označením soukromého příspěvku " +#~ "ve formuláři Rychlé úpravy" + +#~ msgid "Preview \"%s\"" +#~ msgstr "Náhled \"%s\"" + +#~ msgid "" +#~ "%1$s%2$s, %3$s @ %4$s : %5$s|1: month input, 2: day input, 3: year input, " +#~ "4: hour input, 5: minute input" +#~ msgstr "" +#~ "%1$s%2$s, %3$s @ %4$s : %5$s||1: měsíc, 2: den, 3: rok, 4: hodina, 5: " +#~ "minuta" + +#~ msgid "Get help with \"%s\"" +#~ msgstr "Získat nápovědu pro \"%s\"" + +#~ msgid "Unpacking the core update" +#~ msgstr "Rozbaluji aktualizační balíček Wordpressu" + +#~ msgid "Uncategorized|Default category slug" +#~ msgstr "nezarazene|Výchozí název v URL pro rubriku" + +#~ msgid "Blogroll|Default link category slug" +#~ msgstr "odkazy|Výchozí název v URL pro rubriku odkazů" + +#~ msgid "hello-world|Default post slug" +#~ msgstr "" +#~ "ahoj-vsichni|Výchozí název v URL prvního automaticky vytvořeného příspěvku" + +#~ msgid "about|Default page slug" +#~ msgstr "neco-o-me|Výchozí název v URL první automaticky vytvořené stránky" + +#~ msgid "No matching widgets" +#~ msgstr "Nebyly nalezeny žádné odpovídající widgety" + +#~ msgid "%1$s: %2$s|1: widget name, 2: widget title" +#~ msgstr "%1$s: %2$s|1: název widgetu, 2: titulek widgetu" + +#~ msgid "" +#~ "You are about to delete the selected links.\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat vybrané odkazy.\n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "Add New|file" +#~ msgstr "Nahrát soubor|soubor" + +#~ msgid "Add New|links" +#~ msgstr "Vytvořit odkaz|odkazy" + +#~ msgid "Add New|page" +#~ msgstr "Vytvořit stránku|stránka" + +#~ msgid "Add New|plugin" +#~ msgstr "Instalace pluginů|plugin" + +#~ msgid "Use legacy <code>my-hacks.php</code> file support" +#~ msgstr "Používat soubor <code>my-hacks.php</code>" + +#~ msgid "Currently Active Plugins" +#~ msgstr "Aktivní pluginy" + +#~ msgid "Recently Active Plugins" +#~ msgstr "Nedávno aktivní pluginy" + +#~ msgid "" +#~ "The following plugins were recently active. When a plugin has been " +#~ "inactive for more than 7 days it will be moved to the Inactive plugin " +#~ "list." +#~ msgstr "" +#~ "Následující pluginy byly ještě nedávno aktivní. Pokud bude plugin " +#~ "neaktivní déle než 7 dní, tak bude automaticky přesunut mezi Neaktivní " +#~ "pluginy." + +#~ msgid "Get More Plugins" +#~ msgstr "Získat další pluginy" + +#~ msgid "" +#~ "To <em>manually</em> install a plugin you generally just need to upload " +#~ "the plugin file into your <code>%s</code> directory." +#~ msgstr "" +#~ "<em>Ruční</em> instalace pluginu probíhá tak, že nahrajete instalační " +#~ "balíček do adresáře <code>%s</code>. Potom už plugin uvidíte v Přehledu " +#~ "pluginů a můžete ho pouhým kliknutím aktivovat." + +#~ msgid "Once a plugin has been installed, you may activate it here." +#~ msgstr "Poté, co byl plugin nainstalován, můžete ho zde aktivovat." + +#~ msgid "Styles|Theme stylesheets in theme editor" +#~ msgstr "Styly|Styly šablony v editoru šablon" + +#~ msgid "%1$s %2$s by %3$s|1: theme title, 2: theme version, 3: theme author" +#~ msgstr "" +#~ "%1$s %2$s od %3$s|1: název šablony, 2: verze šablony, 3: autor šablony" + +#~ msgid "Preview of \"%s\"" +#~ msgstr "Náhled \"%s\"" + +#~ msgid "" +#~ "Gears is installed and enabled on this computer. You can disable it from " +#~ "your browser’s Options, Under the Hood menu." +#~ msgstr "" +#~ "Google Gears jsou nainstalovány na tomto počítači a povoleny pro tyto " +#~ "internetové stránky. Můžete je odstranit pomocí menu Nástroje - Google " +#~ "Gears ve vašem prohlížeči." + +#~ msgid "Setting theme as Current" +#~ msgstr "Zvolit šablonu jako výchozí" + +#~ msgid "" +#~ "Your WordPress database is out-of-date, and must be upgraded before you " +#~ "can continue." +#~ msgstr "" +#~ "Vaše WordPress databáze není aktuální. Musí být aktualizována než budete " +#~ "pokračovat dále." + +#~ msgid "Media|media column header" +#~ msgstr "Médium|záhlaví sloupce médií" + +#~ msgid "Date Added|media column header" +#~ msgstr "Datum nahrání|záhlaví sloupce médií" + +#~ msgid "" +#~ "You are about to delete the selected attachments.\n" +#~ " 'Cancel' to stop, 'OK' to delete." +#~ msgstr "" +#~ "Chystáte se smazat vybrané přílohy. \n" +#~ " Akci můžete zastavit kliknutím na 'Storno', nebo potvrdit pomocí 'OK'." + +#~ msgid "" +#~ "Enable keyboard shortcuts for comment moderation. <a href=\"http://codex." +#~ "wordpress.org/Keyboard_Shortcuts\">More information</a>" +#~ msgstr "" +#~ "Povolit klávesové zkratky pro rychlou správu komentářů. <a href=\"http://" +#~ "codex.wordpress.org/Keyboard_Shortcuts\">Další informace</a>" + +#~ msgid "%1$s <span class=\"count\">(%2$s)</span>|user role with count" +#~ msgstr "" +#~ "%1$s <span class=\"count\">(%2$s)</span>|uživatelská úroveň s počtem" + +#~ msgid "Add Widget" +#~ msgstr "Přidat widget" + +#~ msgid "You are using %1$s widget in the \"%2$s\" sidebar." + +#~ msgid_plural "You are using %1$s widgets in the \"%2$s\" sidebar." +#~ msgstr[0] "Nyní používáte v postranním panelu \"%2$s\" celkem %1$s widget." +#~ msgstr[1] "Nyní používáte v postranním panelu \"%2$s\" celkem %1$s widgety." +#~ msgstr[2] "Nyní používáte v postranním panelu \"%2$s\" celkem %1$s widgetů." + +#~ msgid "You are using %1$s widget in the sidebar." + +#~ msgid_plural "You are using %1$s widgets in the sidebar." +#~ msgstr[0] "Nyní používáte v postranním panelu celkem %1$s widget." +#~ msgstr[1] "Nyní používáte v postranním panelu celkem %1$s widgety." +#~ msgstr[2] "Nyní používáte v postranním panelu celkem %1$s widgetů." + +#~ msgid "Show any widgets" +#~ msgstr "Jakékoliv widgety" + +#~ msgid "Show all widgets" +#~ msgstr "Všechny widgety" + +#~ msgid "Show unused widgets" +#~ msgstr "Nepoužité widgety" + +#~ msgid "Show used widgets" +#~ msgstr "Použité widgety" + +#~ msgid "Current Widgets" +#~ msgstr "Použité widgety" + +#~ msgid "Add more from the Available Widgets section." +#~ msgstr "Další widgety si můžete na web přidat z nabídky Dostupné widgety." + +#~ msgid "Header Image and Color" +#~ msgstr "Nastavení obrázku a barvy v záhlaví" + +#~ msgid ", |between list items" +#~ msgstr ", |mezi položkami v seznamu" + +#~ msgid ", and |between last two list items" +#~ msgstr " a |mezi dvěma posledními položkami v seznamu" + +#~ msgid " and |between only two list items" +#~ msgstr " a |mezi pouze dvěma posledními položkami v seznamu" + +#~ msgid "%1$s %2$s|Used as a calendar caption" +#~ msgstr "%1$s %2$s" + +#~ msgid "0| Extra width for the media popup in pixels" +#~ msgstr "0| Speciální šířka (v pixelech) pro mediální soubory v popup okně" + +#~ msgid "0| Extra height for the media popup in pixels" +#~ msgstr "0| Speciální výška (v pixelech) pro mediální soubory v popup okně" + +#~ msgid "0| Extra width for the link popup in pixels" +#~ msgstr "0| Speciální šířka (v pixelech) pro odkazy v popup okně" + +#~ msgid "0| Extra height for the link popup in pixels" +#~ msgstr "0| Speciální výška (v pixelech) pro odkazy v popup okně" + +#~ msgid "0| Extra width for the image popup in pixels" +#~ msgstr "0| Speciální šířka (v pixelech) pro obrázky v popup okně" + +#~ msgid "0| Extra height for the image popup in pixels" +#~ msgstr "0| Speciální výška (v pixelech) pro obrázky v popup okně" + +#~ msgid "0| Extra width for the colorpicker popup in pixels" +#~ msgstr "0| Speciální šířka (v pixelech) pro okno s výběrem barev" + +#~ msgid "0| Extra height for the colorpicker popup in pixels" +#~ msgstr "0| Speciální výška (v pixelech) pro okno s výběrem barev" + +#~ msgid "" +#~ "number_format_decimals|$decimals argument for http://php.net/" +#~ "number_format, default is 0" +#~ msgstr "" +#~ "number_format_decimals|$decimals argument pro funkci http://php.net/" +#~ "number_format, výchozí hodnota je 0" + +#~ msgid "" +#~ "number_format_decimal_point|$dec_point argument for http://php.net/" +#~ "number_format, default is ." +#~ msgstr "" +#~ "number_format_decimal_point|$dec_point argument pro funkci http://php.net/" +#~ "number_format, výchozí hodnota je ." + +#~ msgid "" +#~ "number_format_thousands_sep|$thousands_sep argument for http://php.net/" +#~ "number_format, default is ," +#~ msgstr "" +#~ "number_format_thousands_sep|$thousands_sep argument pro funkci http://php." +#~ "net/number_format, výchozí hodnota je ," + +#~ msgid "<strong>ERROR</strong>: Invalid username." +#~ msgstr "<strong>CHYBA</strong>: Neplatné uživatelské jméno" + +#~ msgid "<strong>ERROR</strong>: Incorrect password." +#~ msgstr "<strong>Chyba</strong>: Neplatné heslo." + +#~ msgid "j F, Y @ G:i|revision date format" +#~ msgstr "j. n. Y @ G:i|formát data pro různé verze" + +#~ msgid "%1$s by %2$s|post revision 1:datetime, 2:name" +#~ msgstr "%1$s - autor: %2$s|starší verze 1:datum, 2:název" + +#~ msgid "Medium|password strength" +#~ msgstr "Střední|síla hesla" + +#~ msgid "You're about to leave without having saved your changes!" +#~ msgstr "" +#~ "Chystáte se opustit tuto stránku aniž byste uložili provedené změny!" + +#~ msgid "Error: could not find an RSS or ATOM feed at that URL." +#~ msgstr "Chyba: Na zadané URL adrese se nepodařilo najít RSS/ATOM zdroj." + +#~ msgid "Error in RSS %1$d" +#~ msgstr "Chyba v RSS %1$d" + +#~ msgid "Invalid post id." +#~ msgstr "Neplatné ID příspěvku." + +#~ msgid "Does not appear to be chunked encoded or body is malformed." +#~ msgstr "Nezdá se, že by měl špatné kódování nebo byl nějak poškozen." diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-de_DE.mo b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-de_DE.mo new file mode 100644 index 0000000000000000000000000000000000000000..867423dd9b3391ba5d019d43dd59e79898bc4517 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-de_DE.mo differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-de_DE.po b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-de_DE.po new file mode 100644 index 0000000000000000000000000000000000000000..1ba5d2b9ec8d0e2f5e44fb8ac094df88f78c9b57 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-de_DE.po @@ -0,0 +1,5929 @@ +msgid "" +msgstr "" +"Project-Id-Version: NextGEN Gallery\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-04-24 15:13+0100\n" +"PO-Revision-Date: 2014-04-24 15:14+0100\n" +"Last-Translator: \n" +"Language-Team: Alex Rabe\n" +"Language: de_DE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-KeywordsList: __;_e;_n:1,2;esc_html_e;esc_attr_e;_n;esc_html__;" +"esc_attr__;esc_html;esc_js;_\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SourceCharset: UTF-8\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 1.6.4\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPath-1: ../../nextgen-gallery-pro\n" +"X-Poedit-SearchPath-2: ..\n" + +#: ../../nextgen-gallery-pro/modules/autoupdate/module.autoupdate.php:17 +msgid "Photocrati Auto Update" +msgstr "Photocrati Automatisches Update" + +#: ../../nextgen-gallery-pro/modules/autoupdate/module.autoupdate.php:18 +msgid "Provides automatic updates" +msgstr "Stellt automatische Updates bereit" + +#: ../../nextgen-gallery-pro/modules/autoupdate/module.autoupdate.php:687 +msgid "Could not download package file." +msgstr "Konnte die Zip-Datei nicht herunterladen" + +#: ../../nextgen-gallery-pro/modules/autoupdate/module.autoupdate.php:757 +msgid "Could not " +msgstr "Konnte nicht" + +#: ../../nextgen-gallery-pro/modules/autoupdate/module.autoupdate.php:763 +msgid "No permission to " +msgstr "Keine Berechtigung um" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:21 +msgid "Photocrati Auto Update Admin" +msgstr "Photocrati Administrator Automatisches Update" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:22 +msgid "" +"Provides an AJAX admin interface to sequentially and progressively download " +"and install updates" +msgstr "" +"Bietet eine AJAX-Admin-Interface, um nacheinander und schrittweise Updates " +"herunterladen und zu installieren" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:99 +msgid "No updates available. You are using the latest version of Photocrati." +msgstr "" +"Keine Updates verfügbar. Sie nutzen die aktuelle Version von Photocrati." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:100 +msgid "An update is available." +msgstr "Ein Update ist verfügbar" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:101 +msgid "Update size is {0} and a total of <b>{1}</b> will be downloaded." +msgstr "" +"Update Größe ist {0} und in der Summe von <b>{1}</b> wird heruntergeladen." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:102 +msgid "" +"In order to update, we need to confirm that you are still an active member. " +"You'll be redirected to our site, prompted for the email address you used " +"during purchase, and returned here for the update. {2}This is part of a new " +"update mechanism, and you'll only need to do it once." +msgstr "" +"Um zu aktualisieren müssen Sie bestätigen, dass Sie ein aktives Mitglied " +"sind. Sie werden dazu auf unsere Website geleitet und aufgefordert die Email " +"Adresse einzugeben, die beim Kauf verwendet wurde. Danach werden Sie wieder " +"hierher geleitet und können das Update ausführen. {2} Das ist ein neuer " +"Update Kontrollmechanismus, den Sie nur einmal ausführen müssen. " + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:103 +msgid "Start confirmation" +msgstr "Starte Bestätigung" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:104 +msgid "" +"Your updates cannot be installed because your membership has expired. You " +"can update in minutes and get immediate access to updates and support for an " +"additional year." +msgstr "" +"Ihre Updates können nicht installiert werden, weil Ihre Mitgliedschaft " +"abgelaufen ist. Sie können die Mitgliedschaft sofort erneuern und haben dann " +"wieder Support für ein zusätzliches Jahr." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:105 +msgid "Renew my membership" +msgstr "Meine Mitgliedschaft erneuern" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:106 +msgid "Start Update" +msgstr "Update starten" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:107 +msgid "Return to dashboard" +msgstr "Zurück zum Dashboard gehen" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:108 +msgid "Success! Everything is now up-to-date." +msgstr "Erfolgreich! Alles ist nun auf dem aktuellen Stand." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:109 +msgid "Click <b>Start Update</b> to begin the upgrade process." +msgstr "" +"Klicke <b>Update starten</b> um den Aktualisierungsprozess zu beginnen." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:110 +msgid "Preparing upgrade process..." +msgstr "Der Upgrade Prozess wird vorbereitet..." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:111 +msgid "Downloading package {1} of {0}..." +msgstr "Download Paket {1} von {0}..." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:112 +msgid "Installing package {1} of {0}..." +msgstr "Installiere Paket {1} von {0}..." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:113 +msgid "Activating packages..." +msgstr "Pakete werden aktiviert..." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:114 +msgid "Cleaning up..." +msgstr "Aufräumen" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:115 +msgid "Update was canceled." +msgstr "Das Update wurde abgebrochen." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:116 +msgid "An error occurred during your update ({0})." +msgstr "Während des Updates trat ein Fehler auf ({0})." + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:117 +msgid "Show Update Log" +msgstr "Zeige das Update Protokoll" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:118 +msgid "Download Update Log" +msgstr "Das Update Protokoll herunterladen" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:207 +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/templates/admin_page.php:2 +msgid "Photocrati Updates" +msgstr "Photocrati Updates" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:207 +msgid "Photocrati" +msgstr "Photocrati" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:219 +msgid "Welcome to Photocrati" +msgstr "Willkommen bei Photocrati" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:261 +msgid "version" +msgstr "Version" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:292 +msgid "You are using the following products:" +msgstr "Du nutzt die folgenden Produkte:" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/module.autoupdate_admin.php:295 +msgid "You are using" +msgstr "Du verwendest" + +#: ../../nextgen-gallery-pro/modules/autoupdate_admin/templates/admin_page.php:4 +msgid "Loading..." +msgstr "Wird geladen..." + +#: ../../nextgen-gallery-pro/modules/comments/module.comments.php:19 +#: ../../nextgen-gallery-pro/modules/comments/module.comments.php:88 +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:171 +msgid "Comments" +msgstr "Kommentare" + +#: ../../nextgen-gallery-pro/modules/comments/module.comments.php:20 +msgid "AJAX operations for retrieving and creating comments on arbitrary items" +msgstr "" +"AJAX Operationen zum Abrufen und Erstellen von Kommentaren auf beliebigen " +"Artikeln" + +#: ../../nextgen-gallery-pro/modules/comments/module.comments.php:89 +msgid "Comment" +msgstr "Kommentar" + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:28 +#, php-format +msgid "%1$s" +msgstr "%1$s" + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:37 +msgid "Reply" +msgstr "Antworten" + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:49 +msgid "Your comment is awaiting moderation." +msgstr "Dein Kommentar wartet auf Freischaltung durch den Moderator." + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:119 +msgid "»" +msgstr "»" + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:135 +msgid "«" +msgstr "«" + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:145 +msgid "Hide comments" +msgstr "Kommentare verstecken" + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:151 +#, php-format +msgid "%1$s comment" +msgid_plural "%1$s comments" +msgstr[0] "%1$s Kommentar" +msgstr[1] "%1$s Kommentare" + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:168 +msgid "Comments are closed." +msgstr "Kommentare nicht möglich." + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:177 +msgid "Click here to cancel reply" +msgstr "Klicke hier um die Antwort abzubrechen" + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:186 +#, php-format +msgid "" +"You must be <a href=\"%s\" id=\"comment-logout\">logged in</a> to post a " +"comment." +msgstr "" +"Du musst <a href=\"%s\" id=\"comment-logout\">eingeloggt sein</a> um einen " +"Kommentar schreiben zu können." + +#: ../../nextgen-gallery-pro/modules/comments/templates/comments.php:187 +msgid "Leave a comment" +msgstr "Hinterlasse einen Kommentar" + +#: ../../nextgen-gallery-pro/modules/galleria/module.galleria.php:17 +msgid "Galleria" +msgstr "Galerie" + +#: ../../nextgen-gallery-pro/modules/galleria/module.galleria.php:18 +msgid "Provides support for displaying galleries using Galleria Themes" +msgstr "" +"Bietet Support für die Anzeige von Bildergalerien innerhalb der NextGen " +"Gallery" + +#: ../../nextgen-gallery-pro/modules/image_protection/adapter.protect_image_admin_controller.php:8 +msgid "Site Protection" +msgstr "Downloadschutz" + +#: ../../nextgen-gallery-pro/modules/image_protection/adapter.protect_image_admin_controller.php:8 +msgid "C_Protect_Image_Settings" +msgstr "C_Bildschutz Einstellungen" + +#: ../../nextgen-gallery-pro/modules/image_protection/module.protect_image.php:19 +msgid "Protect Images" +msgstr "Bilder Downloadschutz" + +#: ../../nextgen-gallery-pro/modules/image_protection/module.protect_image.php:20 +msgid "" +"Protects images from being stored locally by preventing right clicks and " +"drag & drop of the images" +msgstr "" +"Schützt Bilder vor einem unbefugten Download durch Rechtsklick oder kopieren " +"der Bilder" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:5 +msgid "Protect whole site:" +msgstr "Schalte den Downloadschutz für die ganze Seite ein:" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:9 +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:21 +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:33 +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:45 +#: ../products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_radio.php:16 +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_radio.php:16 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:122 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:24 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:40 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:65 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:191 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php:37 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:486 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:533 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:536 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:539 +msgid "Yes" +msgstr "Ja" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:10 +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:22 +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:34 +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:46 +#: ../products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_radio.php:24 +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_radio.php:24 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:123 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:23 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:47 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:72 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:198 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php:44 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:488 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:534 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:537 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:540 +msgid "No" +msgstr "Nein" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:17 +msgid "Protect all site images:" +msgstr "Schalte den Downloadschutz für alle Bilder auf der Seite ein:" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:29 +msgid "Protect gallery images:" +msgstr "Schütze Galeriebilder:" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_image_settings_form.php:41 +msgid "Protect lightbox pop-ups:" +msgstr "Schütze Lightbox Bilder:" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_settings_form.php:5 +msgid "Enable protection on whole site:" +msgstr "Schalte den Downloadschutz für die ganze Seite ein:" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_settings_form.php:16 +msgid "Enable protection on all site images:" +msgstr "Schalte den Downloadschutz für alle Bilder auf der Seite ein:" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_settings_form.php:27 +msgid "Enable protection on gallery images:" +msgstr "Schalte den Downloadschutz für Galeriebilder ein:" + +#: ../../nextgen-gallery-pro/modules/image_protection/templates/protect_settings_form.php:38 +msgid "Enable protection on lightbox pop-ups:" +msgstr "Schalte den Downloadschutz für Lightbox Bilder ein:" + +#: ../../nextgen-gallery-pro/modules/lazyload_gallery/module.lazyload_gallery.php:14 +msgid "LazyLoad Gallery Engine" +msgstr "" +"Galerie lädt nur im Bildschirm sichtbare Bilder (Performance Steigerung)" + +#: ../../nextgen-gallery-pro/modules/lazyload_gallery/module.lazyload_gallery.php:15 +msgid "Provides an engine for galleries that require lazyload capabilities" +msgstr "" +"Nur im Bildschirm sichtbare Bilder werden mit dieser Technik geladen " +"(Performance Steigerung)" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_album_form.php:57 +#: ../products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:25 +msgid "Display galleries as" +msgstr "Galerien anzeigen als" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_album_form.php:60 +#: ../products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:26 +msgid "How would you like galleries to be displayed?" +msgstr "Wie möchtest Du Galerien gerne zeigen?" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_album_form.php:79 +msgid "Caption size" +msgstr "Schriftgröße der Beschreibung" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_album_form.php:93 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_blog_gallery/adapter.nextgen_pro_blog_form.php:57 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_film/adapter.nextgen_pro_film_form.php:79 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:183 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_thumbnail_grid/adapter.nextgen_pro_thumbnail_grid_form.php:100 +msgid "Border color" +msgstr "Rahmenfarbe" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_album_form.php:103 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_blog_gallery/adapter.nextgen_pro_blog_form.php:43 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_film/adapter.nextgen_pro_film_form.php:65 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:169 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_thumbnail_grid/adapter.nextgen_pro_thumbnail_grid_form.php:65 +msgid "Border size" +msgstr "Rahmengröße" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_album_form.php:117 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:101 +msgid "Background color" +msgstr "Hintergrund (BG) Farbe" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_album_form.php:127 +msgid "Padding" +msgstr "Innenabstand" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_album_form.php:141 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_thumbnail_grid/adapter.nextgen_pro_thumbnail_grid_form.php:79 +msgid "Spacing" +msgstr "Abstand" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_list_album_form.php:26 +msgid "Description color" +msgstr "Farbe der Beschreibung" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/adapter.nextgen_pro_list_album_form.php:36 +msgid "Description size" +msgstr "Schriftgröße der Beschreibung" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/module.nextgen_pro_albums.php:18 +msgid "NextGEN Pro Albums" +msgstr "NextGen Pro Bilderalben" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_albums/module.nextgen_pro_albums.php:19 +msgid "Provides Photocrati styled albums for NextGEN Gallery" +msgstr "Bietet von Photocrati gestylte Alben für die NextGEN Galerie" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_blog_gallery/adapter.nextgen_pro_blog_form.php:67 +msgid "Image display size" +msgstr "Bildegröße" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_blog_gallery/adapter.nextgen_pro_blog_form.php:69 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_blog_gallery/adapter.nextgen_pro_blog_form.php:83 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_masonry/adapter.nextgen_pro_masonry_form.php:28 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_masonry/adapter.nextgen_pro_masonry_form.php:39 +msgid "Measured in pixels" +msgstr "Gemessen in Pixel" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_blog_gallery/adapter.nextgen_pro_blog_form.php:81 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_film/adapter.nextgen_pro_film_form.php:113 +msgid "Image spacing" +msgstr "Bildabstand" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_blog_gallery/module.nextgen_pro_blog_gallery.php:14 +msgid "NextGEN Pro Blog Gallery" +msgstr "NextGEN Pro Blog Galerie" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_blog_gallery/module.nextgen_pro_blog_gallery.php:15 +msgid "Provides Photocrati's Blog Style gallery type for NextGEN Gallery" +msgstr "Bietet den Photocrati Blog Stil Galerie Typ für die NextGEN Galerie" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_film/adapter.nextgen_pro_film_form.php:51 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_thumbnail_grid/adapter.nextgen_pro_thumbnail_grid_form.php:51 +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:65 +msgid "Images per page" +msgstr "Anzahl der Bilder pro Seite" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_film/adapter.nextgen_pro_film_form.php:53 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_thumbnail_grid/adapter.nextgen_pro_thumbnail_grid_form.php:53 +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:67 +msgid "\"0\" will display all images at once" +msgstr "\"0\" wird alle Bilder sofort anzeigen" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_film/adapter.nextgen_pro_film_form.php:89 +msgid "Frame size" +msgstr "Umrahmungsgröße" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_film/adapter.nextgen_pro_film_form.php:103 +msgid "Frame color" +msgstr "Umrahmungsfarbe" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_film/module.nextgen_pro_film.php:14 +msgid "NextGEN Pro Film" +msgstr "NextGen Pro Film" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_film/module.nextgen_pro_film.php:15 +msgid "Provides a film-like gallery for NextGEN Gallery" +msgstr "Bietet eine Photocrati Film Galerie für die NextGEN Gallerie" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_horizontal_filmstrip/module.nextgen_pro_horizontal_filmstrip.php:15 +msgid "NextGEN Pro Horizontal Filmstrip" +msgstr "NextGen Pro Horizontale Filmstreifen" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_horizontal_filmstrip/module.nextgen_pro_horizontal_filmstrip.php:16 +msgid "Provides Photocrati's Horizontal Filmstrip for NextGEN Gallery" +msgstr "" +"Bietet die Photocrati Horizontal Filmstreifen Technik für die NextEN-Galerie" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:62 +msgid "Router slug" +msgstr "Router Slug" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:64 +msgid "Used to route JS actions to the URL" +msgstr "Wird gebraucht um Javascript Aktionen zu aktivieren " + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:79 +msgid "Icon color" +msgstr "Farbe des Icon" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:81 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:92 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:103 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:114 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:125 +msgid "An empty setting here will use your style defaults" +msgstr "Ein leeres Feld oder \"0\" erzeugt Standard-Einstellungen" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:90 +msgid "Carousel text color" +msgstr "Textfarbe im Karussell" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:112 +msgid "Carousel background color" +msgstr "Hintergrund (BG) Farbe im Karussell" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:123 +msgid "Sidebar background color" +msgstr "Hintergrund (BG) Farbe der Seitenleiste" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:134 +msgid "Pan cropped images" +msgstr "Beschnittene Breitwandbilder" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:136 +msgid "When enabled images can be panned with the mouse" +msgstr "Bei Aktivierung können Bilder mit der Maus bewegt werden" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:145 +msgid "Pause on interaction" +msgstr "Pause bei Interaktion" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:147 +msgid "" +"When enabled image display will be paused if the user presses a thumbnail or " +"any navigational link" +msgstr "" +"Bei Aktivierung wird kein Bild gezeigt, wenn gerade ein Vorschau- oder ein " +"anderer Navigierungslink aktiviert ist" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:156 +msgid "Enable browser routing" +msgstr "Browser-Routing aktivieren" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:158 +msgid "Necessary for commenting to be enabled" +msgstr "Um Kommentare zu ermöglichen bitte aktivieren" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:167 +msgid "Enable comments" +msgstr "Kommentare aktivieren" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:179 +msgid "Display comments" +msgstr "Kommentare anzeigen" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:181 +msgid "When on the commenting sidebar will be opened at startup" +msgstr "Wenn aktiviert, wird die Sidebar für Kommentare beim Start geöffnet" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:191 +msgid "Display captions" +msgstr "Zeige Bildbeschreibungen" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:193 +msgid "When on the captions toolbar will be opened at startup" +msgstr "Wenn aktiviert, werden die Titel der Bilder beim Start angezeigt" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:202 +msgid "Display carousel" +msgstr "Karussell zeigen" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:204 +msgid "" +"When disabled the navigation carousel will be docked and hidden offscreen at " +"startup" +msgstr "" +"Wenn deaktiviert, ist die Karussell Anzeige nicht sichtbar und muss " +"eingeblendet werden." + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:213 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:155 +msgid "Transition speed" +msgstr "Übergangsgeschwindigkeit" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:215 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:229 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:124 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:157 +msgid "Measured in seconds" +msgstr "Gemessen in Sekunden" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:227 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:122 +msgid "Slideshow speed" +msgstr "Slideshow Geschwindigkeit" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:244 +msgid "Default: a dark theme" +msgstr "Standard: Ein dunkles Thema (eigene Styles anlegen)" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:252 +msgid "Style" +msgstr "Style" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:255 +msgid "" +"Preset styles to customize the display. Selecting an option may reset some " +"color fields." +msgstr "" +"CSS Styles zurücksetzen um das Aussehen anzupassen. Bei Auswahl dieser " +"Option können vorher gewählte Farben verloren gehen. " + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:262 +msgid "Crossfade betweens images" +msgstr "Blendet von Bild zu Bild" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:263 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:139 +msgid "Fades into background color between images" +msgstr "Blendet die Hintergrundfarbe zwischen den Bildern ein" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:264 +msgid "" +"Quickly removes the image into background color, then fades the next image" +msgstr "" +"Das Bild wechselt schnell zur Hintergrundfarbe und dann Wechsel zu weiterem " +"Bild" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:265 +msgid "Slides the images depending on image position" +msgstr "" +"Verschiebt die Bilder je nach Bildposition (von links, von rechts, von oben " +"oder unten)" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:266 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:142 +msgid "Fade between images and slide slightly at the same time" +msgstr "Wechselt (Blende) oder verschiebt die Bilder zur gleichen Zeit " + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:275 +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:136 +msgid "Transition effect" +msgstr "Effekt Bildübergang" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:286 +msgid "Touch transition effect" +msgstr "Übergangseffekt bei Maus Berührung" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:289 +msgid "" +"The transition to use on touch devices if the default transition is too " +"intense" +msgstr "" +"Diesen Übergang für Touch Screens nutzen wenn der Standard Übergang zu " +"intensiv ist" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:298 +msgid "Crop image display" +msgstr "Bild ausschneiden" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:300 +msgid "Images will be scaled to fill the display, centered and cropped" +msgstr "Bilder werden skaliert auf ein Vollbild, zentriert und geschnitten" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:301 +msgid "Images will be scaled down until the entire image fits" +msgstr "" +"Die Bilder werden nach unten skaliert, bis das gesamte Bild passt. (kein " +"Ausschnitt) " + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:302 +msgid "Images will scale to fill the height of the display" +msgstr "Die Bilder werden vertikal skaliert bis zur Hoehe des Bildschirms" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:303 +msgid "Images will scale to fill the width of the display" +msgstr "Die Bilder werden horizontal skaliert bis zur Breite des Bildschirms" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:304 +msgid "Landscape images will fill the display, but scale portraits to fit" +msgstr "" +"Horizontal (Querformat) ausgerichtete Bilder sind Vollbilder im Bildschirm " +"aber vertikal (Hochformat) ausgerichtete Bilder werden geschnitten" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_form.php:305 +msgid "Portrait images will fill the display, but scale landscapes to fit" +msgstr "" +"Vertikal (Hochformat) ausgerichtete Bilder sind Vollbilder im Bildschirm " +"aber horizontal (Querformat) ausgerichtete Bilder werden geschnitten" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_triggers_form.php:57 +msgid "Display Triggers" +msgstr "Anzeige Icons unter Vorschaubild" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_triggers_form.php:58 +msgid "Always" +msgstr "Immer" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_triggers_form.php:58 +msgid "Exclude Small Screens" +msgstr "Ohne kleine Vorschaubilder " + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_triggers_form.php:58 +msgid "Never" +msgstr "Niemals" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_triggers_form.php:69 +msgid "Plain" +msgstr "Ebene" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/adapter.nextgen_pro_lightbox_triggers_form.php:69 +msgid "Fancy" +msgstr "Phantasie" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/module.nextgen_pro_lightbox.php:17 +msgid "NextGEN Pro Lightbox" +msgstr "NextGen Pro Lightbox Technik" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_lightbox/module.nextgen_pro_lightbox.php:18 +msgid "" +"Provides a lightbox with integrated commenting, social sharing, and e-" +"commerce functionality" +msgstr "" +"Bietet eine Lightbox mit integrierter Kommentarfunktion, Social Buttons und " +"E-Commerce Funktionalität" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_masonry/adapter.nextgen_pro_masonry_form.php:26 +msgid "Maximum image width" +msgstr "Maximale Bildbreite" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_masonry/adapter.nextgen_pro_masonry_form.php:37 +msgid "Image padding" +msgstr "Bildabstand" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_masonry/module.nextgen_pro_masonry.php:17 +msgid "NextGEN Pro Masonry" +msgstr "" +"NextGen Pro Masonry (Bildet Bilder ab in vertikaler und horizontaler " +"Position ab)" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_masonry/module.nextgen_pro_masonry.php:18 +msgid "Provides the NextGEN Pro Masonry Display Type" +msgstr "" +"Bietet den Photocrati NextGEN Pro Masonry Abbildungs Typ (Horizontal und " +"vertikal zusammen)" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:55 +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:359 +msgid "Gallery width" +msgstr "Galerie Breite" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:61 +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:365 +msgid "Pixels" +msgstr "Pixel" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:61 +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:365 +msgid "Percent" +msgstr "Prozent" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:72 +msgid "Crop images" +msgstr "Bild ausschneiden" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:82 +msgid "Pan images" +msgstr "Breitwandbilder" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:94 +msgid "Show captions" +msgstr "Beschriftung zeigen" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:104 +msgid "Caption location" +msgstr "Platzierung der Beschreibung" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:106 +msgid "Top" +msgstr "Oben" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:107 +msgid "Bottom" +msgstr "Unten" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:108 +msgid "Top (Overlay)" +msgstr "Im Overlay oben" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:109 +msgid "Bottom (Overlay)" +msgstr "Im Overlay unten" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:138 +msgid "Crossfade between images" +msgstr "Bilder ueberblenden" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:140 +msgid "" +"Quickly move the image into the background color, then fade into the next " +"image" +msgstr "" +"Schneller Wechsel vom Bild zur Hintergrundfarbe, dann Wechsel zum folgenden " +"Bild " + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:141 +msgid "Slide images depending on image position" +msgstr "" +"Verschiebt Bilder je nach der Bildposition (von links, von rechts, von oben " +"oder unten)" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:195 +msgid "Stage aspect ratio" +msgstr "Darstellung Bildseitenverhältnis" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_slideshow/adapter.nextgen_pro_slideshow_form.php:208 +msgid "Show play controls" +msgstr "Steuerkontrollen zeigen" + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_thumbnail_grid/adapter.nextgen_pro_thumbnail_grid_form.php:89 +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:85 +msgid "Number of columns to display" +msgstr "Anzahl Spalten " + +#: ../../nextgen-gallery-pro/modules/nextgen_pro_thumbnail_grid/adapter.nextgen_pro_thumbnail_grid_form.php:91 +msgid "An empty or zero in this field will use a responsive layout" +msgstr "" +"Ein leeres Feld oder eine 0 in diesem Feld erzeugt ein responsives Layout" + +#: ../../nextgen-gallery-pro/nggallery-pro.php:91 +#, php-format +msgid "There are updates available. You can <a href=\"%s\">Update Now</a>." +msgstr "" +"Es sind Updates verfügbar. Du kannst <a href=\"%s\">jetzt aktualisieren</a>." + +#: ../../nextgen-gallery-pro/nggallery-pro.php:137 +msgid "" +"Please install & activate <a href=\"http://wordpress.org/plugins/nextgen-" +"gallery/\" target=\"_blank\">NextGEN Gallery</a> to allow NextGEN Gallery " +"Pro to work." +msgstr "" +"Bitte installiere & aktiviere zuerst die <a href=\"http://wordpress.org/" +"plugins/nextgen-gallery/\" target=\"_blank\">NextGEN Gallery</a> um NextGEN " +"Gallery Pro in Betrieb zu nehmen." + +#: ../../nextgen-gallery-pro/nggallery-pro.php:151 +msgid "" +"To activate the NextGEN Gallery Pro Lightbox please go to Gallery > Other " +"Options > Lightbox Effects." +msgstr "" +"Um die NextGEN Gallery Pro Lightbox zu aktivieren, geh bitte im Dashbord zu " +"Galerie > Andere Optionen > Lightbox Effekte" + +#: ../nggallery.php:297 +#, php-format +msgid "Every %d seconds" +msgstr "Alle %d Sekunden" + +#: ../products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:157 +msgid "Album: " +msgstr "Album" + +#: ../products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:159 +msgid "Gallery: " +msgstr "Galerie" + +#: ../products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:177 +msgid "Missing parameters" +msgstr "Parameter werden vermisst" + +#: ../products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:213 +msgid "Displayed gallery does not exist" +msgstr "Die ausgewählte Galerie existiert nicht" + +#: ../products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:216 +msgid "Invalid request" +msgstr "Ungültige Anfrage" + +#: ../products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:248 +msgid "NextGEN Gallery - Attach To Post" +msgstr "NextGEN Gallery - Beitrag schreiben" + +#: ../products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:266 +msgid "Display Galleries" +msgstr "Galerien anzeigen" + +#: ../products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:273 +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_controller.php:7 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:192 +msgid "Add Gallery / Images" +msgstr "Galerie / Bilder hinzufügen" + +#: ../products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:280 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:160 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:194 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:168 +msgid "Manage Galleries" +msgstr "Galerien verwalten" + +#: ../products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:287 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:161 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:196 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:404 +msgid "Manage Albums" +msgstr "Verwalte Alben" + +#: ../products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:294 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:162 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:198 +msgid "Manage Tags" +msgstr "Tags verwalten" + +#: ../products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:115 +msgid "What would you like to display?" +msgstr "Was möchtest Du gerne zeigen?" + +#: ../products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:139 +msgid "Select a display type" +msgstr "Layout auswählen" + +#: ../products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:162 +msgid "Customize the display settings" +msgstr "Layout Einstellungen bearbeiten" + +#: ../products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:253 +msgid "No display type selected" +msgstr "Kein Anzeigentyp gewählt" + +#: ../products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:271 +msgid "Sort or Exclude Images" +msgstr "Sortiere oder schließe Bilder aus" + +#: ../products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:186 +msgid "Invalid Displayed Gallery" +msgstr "Defekte Galerie wird angezeigt" + +#: ../products/photocrati_nextgen/modules/lightbox/module.lightbox.php:22 +msgid "Provides integration with several JavaScript lightbox effect libraries" +msgstr "" +"Bietet die Integration mit mehreren JavaScript Lightbox-Effekt-Bibliotheken" + +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php:7 +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:6 +msgid "Import Folder" +msgstr "Ordner importieren" + +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:7 +msgid "Upload Images" +msgstr "Bilder hochladen" + +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:1 +msgid "" +"Select a folder to import. The folder name will be used as the title of the " +"gallery." +msgstr "" +"Wähle einen Ordner aus um ihn zu importieren. Der Name des Ordners wird " +"als Galerie Name eingetragen." + +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:5 +msgid "Keep images in original location." +msgstr "Bilder im ursprünglichen Speicherort belassen." + +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:5 +msgid "" +"Caution: If you keep images in the original folder and later delete the " +"gallery, the images in that folder might be deleted depending on your " +"settings." +msgstr "" +"Achtung: Wenn Bilder im Original Ordner sind und später die Galerie gelöscht " +"wird, kann es sein, abhängig von den Einstellungen, dass auch der Ordner " +"gelöscht wird." + +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:2 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:158 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:171 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:189 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:458 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:515 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:814 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:457 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:286 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:317 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:318 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:217 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:226 +msgid "Gallery" +msgstr "Galerie" + +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:4 +msgid "Create a new gallery" +msgstr "Eine neue Galerie erzeugen" + +#: ../products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:13 +msgid "You browser doesn't have Flash, Silverlight, HTML5, or HTML4 support." +msgstr "Dein Browser unterstützt kein Flash, Silverlight, HTML5, oder HTML4." + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:226 +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:167 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:537 +msgid "Enable AJAX pagination" +msgstr "Aktiviere AJAX-Navigation" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:238 +msgid "Override thumbnail settings" +msgstr "Vorschaubild-Einstellungen überschreiben" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:240 +msgid "" +"This does not affect existing thumbnails; overriding the thumbnail settings " +"will create an additional set of thumbnails. To change the size of existing " +"thumbnails please visit 'Manage Galleries' and choose 'Create new " +"thumbnails' for all images in the gallery." +msgstr "" +"Dies betrifft nicht vorhandene Vorschaubilder. Das Überschreiben der " +"Vorschaubilder-Einstellungen erzeugt einen zusätzlichen Satz von " +"Vorschaubildern. Um die Größen der bestehenden Vorschaubilder zu ändern, " +"besuche bitte den Navigationspunkt \"Galerien verwalten\" und wähle \"Neue " +"Vorschaubilder erstellen\" für alle Bilder in der Galerie." + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:248 +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:37 +msgid "Thumbnail dimensions" +msgstr "Vorschaubilder Einstellungen" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:262 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:431 +msgid "Thumbnail quality" +msgstr "Vorschaubild Qualität" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:272 +msgid "Thumbnail crop" +msgstr "Vorschaubild ausschneiden" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:281 +msgid "Thumbnail watermark" +msgstr "Vorschaubild Wasserzeichen" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:306 +msgid "Override image settings" +msgstr "Bild-Einstellungen überschreiben" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:308 +msgid "Overriding the image settings will create an additional set of images" +msgstr "" +"Das überschreiben der Bildeinstellungen erzeugt ein zusätzliches Bilderset" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:316 +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:66 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:456 +msgid "Image quality" +msgstr "Bild Qualität" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:326 +msgid "Image crop" +msgstr "Bild ausschneiden" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:335 +msgid "Image watermark" +msgstr "Bild Wasserzeichen" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:361 +msgid "An empty or \"0\" setting will make the gallery full width" +msgstr "" +"Ein leeres Feld oder \"0\" erzeugt eine Galerie in voller Bildschirmbreite" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:374 +msgid "First Image" +msgstr "Erstes Bild" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.form.php:375 +msgid "Average" +msgstr "Durchschnitt" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:100 +msgid "Clear" +msgstr "Leeren" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:101 +msgid "Default" +msgstr "Standard" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:102 +msgid "Select Color" +msgstr "Farbe wählen" + +#: ../products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:103 +msgid "Current Color" +msgstr "Aktuelle Farbe" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:28 +msgid "Galleries per page" +msgstr "Galerien pro Seite" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:47 +msgid "Items per page" +msgstr "Produkte pro Seite" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:48 +msgid "Maximum number of galleries or sub-albums to appear on a single page" +msgstr "" +"Maximale Anzahl von Galerien oder Unteralbums die auf einer Einzelseite " +"angezeigt werden" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php:28 +#: ../products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php:15 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/album-compact.php:45 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/album-extend.php:31 +msgid "Photos" +msgstr "Fotos" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_mapper.php:94 +msgid "[Show PicLens]" +msgstr "Bildershow zeigen" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:63 +msgid "Interval" +msgstr "Interval" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:77 +msgid "Image limit" +msgstr "Bild Limit" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:79 +msgid "Maximum number of images to display with recent or random sources" +msgstr "" +"Maximale Anzahl von Bildern mit den aktuellsten oder zufälligen Einstellungen" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:91 +msgid "Effect" +msgstr "Effekt" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:112 +msgid "Maximum dimensions" +msgstr "Größte Dimensionen" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:123 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:765 +msgid "Enable flash slideshow" +msgstr "Aktiviere Flash Slideshow" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:125 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:767 +msgid "Integrate the flash based slideshow for all flash supported devices" +msgstr "Verwende die Flash Slideshow für alle Flash-unterstützte Geräte" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:134 +msgid "Shuffle" +msgstr "Stapeln" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:146 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:782 +msgid "Show next image on click" +msgstr "Zeige nächstes Bild bei Klick" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:158 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:786 +msgid "Show navigation bar" +msgstr "Zeige Navigations-Leiste" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:170 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:790 +msgid "Show loading icon" +msgstr "Zeige Lade-Bildchen" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:182 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:794 +msgid "Use watermark logo" +msgstr "Wasserzeichen anzeigen" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:184 +msgid "" +"Use the watermark image in the Flash object. Note: this does not watermark " +"the image itself, and cannot be applied with text watermarks" +msgstr "" +"Nutze das Wasserzeichen im Flash Objekt. Achtung: Diese Einstellung markiert " +"das Bild selbst nicht mit einem Wasserzeichen und kann auch nicht mit einem " +"Text-Wasserzeichen ergänzt werden. " + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:194 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:799 +msgid "Stretch image" +msgstr "Bild dehnen" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:207 +msgid "Transition / fade effect" +msgstr "Fade Effekt" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:231 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:827 +msgid "Use slow zooming effect" +msgstr "nutze Zoom-Effekt" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:243 +msgid "Background music (url)" +msgstr "Hintergrundmusik (URL)" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:256 +msgid "Try XHTML validation" +msgstr "Integriere XHTML-Validierung (mittels CDATA)" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:258 +msgid "Uses CDATA. Important: Could cause problems with some older browsers" +msgstr "" +"Nutzung von CDATA, Wichtig : Es könnten Probleme bei älteren Browsern " +"entstehen." + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:268 +msgid "Background" +msgstr "Hintergrund" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:280 +msgid "Text / buttons" +msgstr "Text / Buttons" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:292 +msgid "Rollover / active" +msgstr "Rollover / Aktiv " + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:304 +msgid "Screen" +msgstr "Bildschirm" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:322 +msgid "Show thumbnail link" +msgstr "Zeige den Link zum Vorschaubild" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:338 +msgid "Thumbnail link text" +msgstr "Vorschaubild Link-Text" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:105 +msgid "Piclens link text" +msgstr "Piclens Link-Text" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:123 +msgid "Show piclens link" +msgstr "Zeige den Piclens Bildtext" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:139 +msgid "Add Hidden Images" +msgstr "Versteckte Bilder hinzufügen" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:141 +msgid "" +"If pagination is used this option will show all images in the modal window " +"(Thickbox, Lightbox etc.) This increases page load." +msgstr "" +"Wenn Du die Blätterfunktion nutzt, dann kannst Du mit dieser Option alle " +"Bilder im Modal-Fenster (Thickbox,Lightbox etc.) anzeigen. Berücksichtige, " +"dass die Ladezeit der Seite erhöht wird." + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:150 +msgid "Use imagebrowser effect" +msgstr "Es wird der Bilder-Browser angezeigt (Kein JavaScript Effekt)" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:152 +msgid "" +"When active each image in the gallery will link to an imagebrowser display " +"and lightbox effects will not be applied." +msgstr "" +"Wenn aktiviert, verlinkt jedes Bild in der Galerie zu einer Bildanzeige im " +"Browser. Lightboxeffekte sind dann ausgeschlossen." + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:169 +msgid "Browse images without reloading the page." +msgstr "Bilder durchsuchen ohne die Seite neu zu laden." + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:184 +msgid "Show slideshow link" +msgstr "Zeige den Slideshow Link" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:200 +msgid "Slideshow link text" +msgstr "Slideshow Link-Text" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/index.php:35 +msgid "" +"Slideshows require the <a href=\"http://www.macromedia.com/go/" +"getflashplayer\">Flash Player</a> and a <a href=\"http://www." +"mozilla.com/firefox/\">browser with Javascript support</a>." +msgstr "" +"Slideshow erfordert den <a href=\"http://www.macromedia.com/go/" +"getflashplayer\">Flash Player</a> und einen <a href=\"http://www." +"mozilla.com/firefox/\">Browser mit Javascript Unterstützung</a>." + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php:13 +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:38 +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_dimensions.php:13 +msgid "Width" +msgstr "Breite" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php:21 +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:40 +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_dimensions.php:20 +msgid "Height" +msgstr "Höhe:" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:41 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:26 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:30 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:26 +msgid "Back" +msgstr "Zurueck" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:49 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:29 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:33 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:29 +msgid "Next" +msgstr "Vor" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:90 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:220 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31 +msgid "Picture" +msgstr "Bild" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31 +msgid "of" +msgstr "von" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:53 +msgid "Link" +msgstr "Link" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:78 +msgid "Display watermark" +msgstr "Wasserzeichen setzen" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:88 +msgid "Display reflection" +msgstr "Spiegelung zeigen" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:98 +msgid "Crop thumbnail" +msgstr "Vorschaubild ausschneiden" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:108 +msgid "Float" +msgstr "Ausrichten" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:109 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:252 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:47 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:583 +msgid "None" +msgstr "Keiner" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:109 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:254 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:49 +msgid "Left" +msgstr "Links" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:109 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:258 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:53 +msgid "Right" +msgstr "Rechts" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:24 +msgid "Maximum number of tags" +msgstr "Maximale Anzahl Schlagwörter" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:46 +msgid "Display type" +msgstr "Anzeigetyp" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:49 +msgid "The display type that the tagcloud will point its results to" +msgstr "" +"Der Anzeigetyp der Schlagwortwolke als Ergebnis aus der Darstellung durch" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:46 +msgid "Template" +msgstr "Template" + +#: ../products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:47 +msgid "Use a legacy template when rendering (not recommended)." +msgstr "Verwenden Sie eine ältere Vorlage beim Rendern (nicht empfohlen)." + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php:588 +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:649 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/multisite.php:23 +msgid "" +"Sorry, you have used your space allocation. Please delete some files to " +"upload more files." +msgstr "" +"Schade, Dein freier Speicher scheint aufgebraucht zu sein. Bitte lösche " +"zuerst ein paar Bilder." + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php:1010 +msgid "Could not calculate resized image dimensions" +msgstr "Es konnten keine veränderten Bildgrößen berechnet werden" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:154 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:135 +msgid " mm" +msgstr " mm" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:163 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:141 +msgid " sec" +msgstr " Sek." + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:168 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:145 +msgid "Fired" +msgstr "ausgelöst" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:168 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:145 +msgid "Not fired" +msgstr "Nicht ausgelöst" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:539 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:452 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:46 +msgid "Aperture" +msgstr "Blende" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:540 +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:565 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:453 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:478 +msgid "Credit" +msgstr "Autor" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:541 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:454 +msgid "Camera" +msgstr "Kamera" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:542 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:455 +msgid "Caption" +msgstr "Beschreibung" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:543 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:26 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:114 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:456 +msgid "Date/Time" +msgstr "Datum/Zeit" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:544 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:457 +msgid "Copyright" +msgstr "Rechte" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:545 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:458 +msgid "Focal length" +msgstr "Brennweite" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:546 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:459 +msgid "ISO" +msgstr "ISO" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:547 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:460 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:54 +msgid "Shutter speed" +msgstr "Belichtungszeit" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:548 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:678 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:461 +msgid "Title" +msgstr "Titel" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:549 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:459 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:410 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:132 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:462 +msgid "Author" +msgstr "Autor" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:550 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:51 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:176 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:389 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:463 +msgid "Tags" +msgstr "Stichwörter" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:551 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:464 +msgid "Subject" +msgstr "Betreff" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:552 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:465 +msgid "Make" +msgstr "Hersteller" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:553 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:466 +msgid "Edit Status" +msgstr "Ändere Status" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:554 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:467 +msgid "Category" +msgstr "Kategorie" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:555 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:468 +msgid "Keywords" +msgstr "Schlüsselwörter" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:556 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:469 +msgid "Date Created" +msgstr "erstellt (Datum)" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:557 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:470 +msgid "Time Created" +msgstr "erstellt (Zeit)" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:558 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:471 +msgid "Author Position" +msgstr "Autor Position" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:559 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:472 +msgid "City" +msgstr "Stadt" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:560 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:473 +msgid "Location" +msgstr "Ort" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:561 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:474 +msgid "Province/State" +msgstr "Staat / PLZ" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:562 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:475 +msgid "Country code" +msgstr "Landescode" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:563 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:476 +msgid "Country" +msgstr "Land" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:564 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:477 +msgid "Headline" +msgstr "Kopfzeile" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:566 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:479 +msgid "Source" +msgstr "Quelle" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:567 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:480 +msgid "Copyright Notice" +msgstr "Copyright Hinweise / Credits" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:568 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:481 +msgid "Contact" +msgstr "Kontakt" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:569 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:482 +msgid "Last modified" +msgstr "Zuletzt geändert" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:570 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:483 +msgid "Program tool" +msgstr "Programm" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:571 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:484 +msgid "Format" +msgstr "Format" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:572 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:485 +msgid "Image Width" +msgstr "Breite" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:573 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:486 +msgid "Image Height" +msgstr "Höhe" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:574 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:487 +msgid "Flash" +msgstr "Blitz" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:638 +#, php-format +msgid "Unable to create directory %s." +msgstr "Außerstande den Pfad %s zu erstellen " + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:643 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:928 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1126 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1211 +#, php-format +msgid "" +"Unable to write to directory %s. Is this directory writable by the server?" +msgstr "" +"Kann das Verzeichnis %s nicht erstellen. Ist das Hauptverzeichnis vielleicht " +"schreibgeschützt ?" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:672 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1251 +#, php-format +msgid "Failed to copy database row for picture %s" +msgstr "Fehler bei der Datenbank-Operation für Bild %s" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:684 +#, php-format +msgid "Failed to get image path for %s" +msgstr "Fehler beim Bildpfad für %s" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:702 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1237 +#, php-format +msgid "Failed to copy image %1$s to %2$s" +msgstr "Konnte das Bild %1$s nicht nach %2$s kopieren" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:706 +#, php-format +msgid "Copied image %1$s to %2$s" +msgstr "Kopiert Bild %1$s zu %2$s" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:714 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1263 +#, php-format +msgid "" +"Image %1$s (%2$s) copied as image %3$s (%4$s) » The file already " +"existed in the destination gallery." +msgstr "" +"Bild %1$s (%2$s) als Bild %3$s (%4$s) kopiert » Die Datei existierte " +"bereits." + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:718 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1266 +#, php-format +msgid "Image %1$s (%2$s) copied as image %3$s (%4$s)" +msgstr "Bild %1$s (%2$s) kopiert als Bild %3$s (%4$s)" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:731 +#, php-format +msgid "Copied %1$s picture(s) to gallery %2$s ." +msgstr "Kopiert %1$s Bild(er) in die Galerie %2$s ." + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:758 +msgid "Could not find image" +msgstr "Bild wurde nicht gefunden" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:763 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:388 +msgid " is not writeable" +msgstr "ist schreibgeschützt !" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:768 +msgid "Backup file does not exist" +msgstr "Backup Datei existiert nicht" + +#: ../products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:773 +msgid "Could not restore original image" +msgstr "Konnte das Originalbild nicht wiederherstellen" + +#: ../products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_controller.php:17 +#: ../products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:241 +#: ../products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:327 +msgid "Gallery Settings" +msgstr "Galerie Einstellungen" + +#: ../products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php:73 +msgid "Source not compatible with selected display type" +msgstr "Software ist nicht kompatibel mit dem ausgewählten Anzeigetyp" + +#: ../products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:326 +msgid "NextGEN Gallery & Album Settings" +msgstr "NextGEN Galerie & Album Einstellungen" + +#: ../products/photocrati_nextgen/modules/nextgen_gallery_display/templates/alt_view_link_text.php:15 +#: ../products/photocrati_nextgen/modules/nextgen_gallery_display/templates/return_link_text.php:15 +msgid "link text" +msgstr "Link-Text" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:12 +msgid "Image Options" +msgstr "Bild Optionen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:22 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:588 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:76 +msgid "Custom" +msgstr "Eigener" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:23 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:111 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:549 +msgid "Image ID" +msgstr "Bilder ID" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:24 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:570 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:112 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:166 +msgid "Filename" +msgstr "Dateiname" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:25 +msgid "Alt/Title Text" +msgstr "Alternativtext & Titel" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:38 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:115 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:557 +msgid "Ascending" +msgstr "Aufsteigend" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:39 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:116 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:558 +msgid "Descending" +msgstr "Absteigend" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:50 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:388 +msgid "Categories" +msgstr "Kategorien" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:81 +msgid "Gallery path does not exist and could not be created" +msgstr "Der Galeriepfad existiert nicht und konnte auch nicht erzeugt werden" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:86 +msgid "Where would you like galleries stored?" +msgstr "Wo möchtest Du gerne Galerien gespeichert haben?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:87 +msgid "Where galleries and their images are stored" +msgstr "Wo Galerien und deren Bilder gespeichert sind" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:89 +msgid "Delete Image Files?" +msgstr "Lösche Bilddateien" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:90 +msgid "" +"When enabled, image files will be removed after a Gallery has been deleted" +msgstr "" +"Im aktivierten Zustand werden Bilddateien entfernt, wenn eine Galerie " +"gelöscht wird" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:92 +msgid "Show Related Images on Posts?" +msgstr "Zeige ähnliche Bilder in Beiträgen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:93 +msgid "" +"When enabled, related images will be appended to each post by matching the " +"posts tags/categories to image tags" +msgstr "" +"Im aktivierten Zustand werden ähnliche Bilder zu jedem Beitrag hinzugefügt, " +"indem die Beitrags Tags / Kategorien, an die Bild Tags angehängt werden" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:95 +msgid "(Show Customization Settings)" +msgstr "(Zeige Benutzer Einstellungen)" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:96 +msgid "(Hide Customization Settings)" +msgstr "(Verstecke Benutzer Einstellungen)" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:97 +msgid "How should related images be match?" +msgstr "Wie sollen ähnliche Bilder mit eingebunden werden?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:100 +msgid "Maximum # of related images to display" +msgstr "Maximale Anzeige # von ähnlichen Bildern" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:102 +msgid "Heading for related images" +msgstr "Überschrift für ähnliche Bilder" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:104 +msgid "What's the default sorting method?" +msgstr "Was ist die Standard Einstellung zum sortieren?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:107 +msgid "Sort in what direction?" +msgstr "Sortieren in welche Richtung?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:110 +msgid "Automatically resize images after upload" +msgstr "Passt die Grösse automatisch beim Upload an" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:111 +msgid "It is recommended that your images be resized to be web friendly" +msgstr "" +"Es ist empfehlenswert Deine Bilder webgerecht zu formatieren. (Breite x Höhe " +"und Schwere KB)" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:113 +msgid "What should images be resized to?" +msgstr "Was soll an den Bildern geändert werden?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:114 +msgid "" +"After images are uploaded, they will be resized to the above dimensions and " +"quality" +msgstr "" +"Nach dem Upload der Bilder werden sie in die anzeigte Größe und Qualität " +"geändert" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:115 +#: ../products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:52 +msgid "Width:" +msgstr "Breite:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:116 +#: ../products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:40 +msgid "Height:" +msgstr "Höhe:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:117 +msgid "Quality:" +msgstr "Qualität:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:121 +msgid "Backup the original images?" +msgstr "Ein Backup für das Originalbild erstellen?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:12 +msgid "Lightbox Effects" +msgstr "Lightbox Effekte" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:38 +msgid "What effect would you like to use?" +msgstr "Welchen Effekt wollen Sie gerne verwenden?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:12 +msgid "Miscellaneous" +msgstr "Verschiedenes" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:21 +msgid "Add MediaRSS link?" +msgstr "Link MediaRSS einfügen?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:22 +msgid "" +"When enabled, adds a MediaRSS link to your header. Third-party web services " +"can use this to publish your galleries" +msgstr "" +"In aktiviertem Zustand wird ein MEDIA RSS Feed zum Header hinzugefügt. " +"Dritte Web Service Anbieter können ihn nutzen um Ihre Galerien zu " +"veröffentlichen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:26 +msgid "Clear image cache" +msgstr "Das Bilder Cache leeren" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:27 +msgid "" +"Completely clear the NextGEN cache of all image modifications?\\n\\nChoose " +"[Cancel] to Stop, [OK] to proceed." +msgstr "" +"Das NextGEN Cache mit allen Bild Modifikationen komplett leeren?\\n\\nWähle " +"[Cancel] um abzubrechen, [OK] zum Fortfahren." + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:32 +msgid "Permalink slug" +msgstr "Permalink Slug" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:39 +msgid "Maximum image count" +msgstr "Maximale Bilderzahl" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:41 +msgid "" +"This is the maximum limit of images that NextGEN will restrict itself to " +"querying" +msgstr "" +"Das ist die maximale Anzahl von Bildern auf die sich die Abfrage der NextGEN " +"Gallery beschränkt" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_controller.php:22 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php:39 +msgid "Other Options" +msgstr "Andere Optionen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:7 +msgid "Reset Options" +msgstr "Standardeinstellungen wiederherstellen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:15 +msgid "Reset all options to default settings" +msgstr "Alle Optionen zu den Standard Einstellungen zurücksetzen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:16 +msgid "" +"Replace all existing options and gallery options with their default settings" +msgstr "" +"Ersetze alle existierenden Optionen und Galerie Optionen Optionen mit den " +"Standard Einstellungen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:17 +msgid "Reset settings" +msgstr "Einstellungen zurücksetzen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:18 +msgid "" +"Reset all options to default settings?\\n\\nChoose [Cancel] to Stop, [OK] to " +"proceed." +msgstr "" +"Alle Optionen zu Standard zurücksetzen ?\\n\\nWähle [Cancel] um abzubrechen, " +"[OK] zum Fortfahren." + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.roles_form.php:7 +msgid "Roles & Capabilities" +msgstr "Rollen & Zugriffsrechte freischalten" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:12 +msgid "Styles" +msgstr "Style Einstellungen (eigene CSS)" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:18 +msgid "What stylesheet would you like to use?" +msgstr "Welche eigene CSS Style Anweisung soll verwendet werden? " + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:21 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:137 +msgid "(Show Customization Options)" +msgstr "(Zeige Benutzer Einstellungen)" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:22 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:138 +msgid "(Hide Customization Options)" +msgstr "(Verstecke Benutzer Einstellungen)" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:23 +msgid "File Content:" +msgstr "Datei-Inhalt:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:24 +msgid "Changes you make to the contents will be saved to" +msgstr "Änderungen im Inhalt werden gespeichert" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:25 +msgid "You could edit this file if it were writable" +msgstr "Wenn diese Datei beschreibbar wäre, könntest Du sie bearbeiten." + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:12 +msgid "Thumbnail Options" +msgstr "Optionen der Vorschaubilder" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:20 +msgid "Default thumbnail dimensions:" +msgstr "Standardgrößen der Vorschaubilder:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:21 +msgid "When generating thumbnails, what image dimensions do you desire?" +msgstr "Wenn Sie Vorschaubilder erzeugen, welche Bildgröße möchten Sie gerne?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:24 +msgid "Set fix dimension?" +msgstr "Feste Größe setzen?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:25 +msgid "Ignore the aspect ratio, no portrait thumbnails?" +msgstr "Ignoriere Bildseitenverhältnis, keine Portrait Vorschaubilder?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:27 +msgid "Adjust Thumbnail Quality?" +msgstr "Qualität der Vorschaubilder anpassen?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:28 +msgid "When generating thumbnails, what image quality do you desire?" +msgstr "" +"Wenn Sie Vorschaubilder erzeugen, welche Bildqualität möchten Sie gerne?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:30 +msgid "Size List" +msgstr "Größentabelle" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:31 +msgid "List of default sizes used for thumbnails and images" +msgstr "Derzeit gibt es keine Empfehlungslisten für Vorschaubilder und Bilder." + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:12 +msgid "Watermarks" +msgstr "Wasserzeichen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:41 +msgid "Using an Image" +msgstr "Ein Bild nutzen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:42 +msgid "Using Text" +msgstr "Einen Text nutzen" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:69 +msgid "An absolute or relative (to the site document root) file system path" +msgstr "Ein absoluter oder relativer (zur Root des Dokumentes) Dateipfad" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:71 +msgid "" +"An absolute or relative (to the site document root) file system path or an " +"HTTP url" +msgstr "" +"Ein absoluter oder relativer (zur Root des Dokumentes) Dateipfad oder eine " +"http URL" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:74 +msgid "Image URL:" +msgstr "Bild URL:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:90 +msgid "Font Family:" +msgstr "Schriftart" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:92 +msgid "Font Size:" +msgstr "Schriftgröße:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:94 +msgid "Font Color:" +msgstr "Schriftfarbe:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:97 +msgid "Text:" +msgstr "Text:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:99 +msgid "Opacity:" +msgstr "Transparenz:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:127 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:615 +msgid "" +"Please note : You can only activate the watermark under -> Manage Gallery . " +"This action cannot be undone." +msgstr "" +"Bitte beachten : Das Wasserzeichen kann nur unter der Galerieverwaltung " +"gesetzt werden. " + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:128 +msgid "How will you generate a watermark?" +msgstr "Wie willst Du ein Wasserzeichen erzeugen?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:132 +msgid "Position:" +msgstr "Position:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:134 +msgid "Offset:" +msgstr "Abstand:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:140 +msgid "Preview of saved settings:" +msgstr "Vorschau der gespeicherten Einstellungen:" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:141 +msgid "Refresh preview image" +msgstr "Das Vorschaubild aktualisieren" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:34 +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:37 +msgid "(Show Advanced Settings)" +msgstr "(Zeige erweiterte Einstellungen) " + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:35 +msgid "(Hide Advanced Settings)" +msgstr "(Verstecke erweiterte Einstellungen)" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:56 +msgid "What must the lightbox be applied to?" +msgstr "Wie soll Lightbox verwendet werden?" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:60 +msgid "Only apply to NextGEN images" +msgstr "Das gilt nur für NextGEN Bilder" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:61 +msgid "Only apply to NextGEN and WordPress images" +msgstr "Das gilt nur für NextGEN und WordPress Bilder" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:62 +msgid "Try to apply to all images" +msgstr "Versuche das für alle Bilder anzuwenden" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:63 +msgid "Try to apply to all images that link to image files" +msgstr "Das soll für alle Bilder gelten die mit den Bilddateien verlinkt sind" + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:21 +msgid "" +"Place any custom stylesheets in <strong>wp-content/ngg_styles</strong><br/" +">All stylesheets must contain a <a href=' onclick='javascript:alert(\"/*" +"\\nCSS Name: Example\\nDescription: This is an example stylesheet\\nAuthor: " +"John Smith\\nVersion: 1.0\\n*/\");'>file header</a>" +msgstr "" +"Patziere eine eigene CSS Anweisung im Ordner <strong>wp-content/ngg_styles</" +"strong><br/>Eine eigene CSS Anweisung muss einen sogenannten <a href=' " +"onclick='javascript:alert(\"/*\\nCSS Name: Example\\nDescription: This is an " +"example stylesheet\\nAuthor: John Smith\\nVersion: 1.0\\n*/\");'>Dateikopf</" +"a> wie im Beispiel enthalten." + +#: ../products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php:92 +msgid "<i>No default sizes present.</i>" +msgstr "" +"<i>Es gibt derzeit keine Empfehlungen. Du kannst frei variieren je nach " +"Platz.</i>" + +#: ../products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php:41 +msgid "<h3>Related Images:</h3>" +msgstr "<h3>Ähnliche Bilder:</h3>" + +#: ../products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php:61 +msgid "[Show slideshow]" +msgstr "[Zeige eine Slideshow]" + +#: ../products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php:62 +msgid "[Show thumbnails]" +msgstr "[Zeige Vorschaubilder]" + +#: ../products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php:425 +msgid "Sorry, you must be able to manage galleries" +msgstr "Sorry, Du hast nicht das Recht, diese Galerie zu bearbeiten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:159 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:190 +msgid "Overview" +msgstr "Übersicht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:172 +msgid "Network settings" +msgstr "Netzwerk Einstellungen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:305 +msgid "You do not have the correct permission" +msgstr "Du hast keine Zugriffsrechte" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:306 +msgid "Unexpected Error" +msgstr "Unerwarteter Fehler" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:307 +msgid "A failure occurred" +msgstr "Ein Fehler ist aufgetreten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:311 +msgid "You have attempted to queue too many files." +msgstr "Du hast zu viele Bilder versucht zu laden." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:312 +msgid "This file exceeds the maximum upload size for this site." +msgstr "Diese Datei übersteigt die zugelassene Uploadmenge." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:313 +msgid "This file is empty. Please try another." +msgstr "Diese Datei ist leer." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:314 +msgid "This file type is not allowed. Please try another." +msgstr "Dieser Dateityp ist nicht erlaubt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:315 +msgid "This file is not an image. Please try another." +msgstr "Diese Datei ist kein Bild. Bitte versuche es mit einer anderen Datei." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:316 +msgid "Memory exceeded. Please try another smaller file." +msgstr "Speicher überschritten. Bitte verkleinere das Bild zuerst" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:317 +msgid "This is larger than the maximum size. Please try another." +msgstr "Die Datei ist zu groß. " + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:318 +msgid "An error occurred in the upload. Please try again later." +msgstr "Währende dem upload trat ein Fehler. Bitte verusche es später nochmal." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:319 +msgid "" +"There was a configuration error. Please contact the server administrator." +msgstr "Es besteht ein Konfigurationsfehler." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:320 +msgid "You may only upload 1 file." +msgstr "Du kannst nur ein Bild uploaden." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:321 +msgid "HTTP error." +msgstr "HTTP Fehler." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:322 +msgid "Upload failed." +msgstr "Upload fehlgeschlagen!" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:323 +msgid "IO error." +msgstr "IO Fehler." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:324 +msgid "Security error." +msgstr "Sicherheitsfehler." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:325 +msgid "File canceled." +msgstr "Datei abbgebrochen." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:326 +msgid "Upload stopped." +msgstr "Upload angehalten." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:327 +msgid "Dismiss" +msgstr "Verwerfen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:328 +msgid "Crunching…" +msgstr "Bearbeiten…" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:329 +msgid "moved to the trash." +msgstr "in den Papierkorb geschoben." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:330 +#, php-format +msgid "“%s” has failed to upload due to an error" +msgstr "“%s” konnte auf Grund eines Fehler nicht geladen werden." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:352 +msgid "L O A D I N G" +msgstr "B I T T E W A R T E N" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:353 +msgid "Click to Close" +msgstr "Klicken zum Schliessen " + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:462 +msgid "" +"<a href=\"http://www.nextgen-gallery.com\" target=\"_blank\">Introduction</a>" +msgstr "" +"<a href=\"http://www.curlyrob.de/curlyrob/?page_id=129\" target=\"_blank" +"\">Einführung</a>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:465 +msgid "" +"<a href=\"http://www.nextgen-gallery.com/languages\" target=\"_blank" +"\">Languages</a>" +msgstr "" +"<a href=\"http://alexrabe.de/wordpress-plugins/nextgen-gallery/languages/\" " +"target=\"_blank\">Unterstütze bei der Übersetzung</a>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:470 +msgid "Get help with NextGEN Gallery" +msgstr "Weitere Hilfe zu NextGEN Gallery" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:474 +msgid "More Help & Info" +msgstr "Weitere Hilfe & Informationen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:476 +msgid "" +"<a href=\"http://wordpress.org/tags/nextgen-gallery?forum_id=10\" target=" +"\"_blank\">Support Forums</a>" +msgstr "" +"<a href=\"http://wordpress.org/tags/nextgen-gallery?forum_id=10\" target=" +"\"_blank\">Support Forum (englisch)</a>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:477 +msgid "FAQ" +msgstr "FAQ (englisch)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:478 +msgid "Feature request" +msgstr "Wünsch Dir was" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:479 +msgid "Get your language pack" +msgstr "Lade Deine Sprachdatei" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:480 +msgid "Contribute development" +msgstr "Bei der Entwicklung helfen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:481 +msgid "Download latest version" +msgstr "Aktuelle Version downloaden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/ajax.php:364 +#, php-format +msgid "Could create image with %s x %s pixel" +msgstr "Konnte ein Bild mit %s x %s Pixel erstellen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:172 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:216 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:239 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:19 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:22 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:619 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:7 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:10 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:13 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:17 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:20 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:10 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:13 +msgid "Cheatin’ uh?" +msgstr "Cheatin’ uh?" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:180 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:209 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:253 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:178 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:24 +msgid "Update Successfully" +msgstr "Update erfolgreich" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:227 +msgid "Album deleted" +msgstr "Album gelöscht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:389 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:55 +msgid "Edit Album" +msgstr "Album erstellen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:410 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:459 +msgid "Select album" +msgstr "Wähle Album" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:412 +msgid "No album selected" +msgstr "Kein Album ausgewählt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:423 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:166 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:434 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:94 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:112 +msgid "Update" +msgstr "Aktualisiere" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:425 +msgid "Edit album" +msgstr "Album ändern" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:428 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:187 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:362 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:364 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:227 +msgid "Delete" +msgstr "Löschen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:428 +msgid "Delete album ?" +msgstr "Album löschen ?" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:432 +msgid "Add new album" +msgstr "Album hinzufügen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:434 +msgid "Add" +msgstr "Hinzufügen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:445 +msgid "Show / hide used galleries" +msgstr "Zeige / Verstecke verwendete Galerien" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:445 +msgid "[Show all]" +msgstr "[Alle zeigen]" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:446 +msgid "Maximize the widget content" +msgstr "Maximiere die Widgets" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:446 +msgid "[Maximize]" +msgstr "[Vergrößern]" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:447 +msgid "Minimize the widget content" +msgstr "Minimiere die Widgets" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:447 +msgid "[Minimize]" +msgstr "[Verkleinern]" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:449 +msgid "" +"After you create and select a album, you can drag and drop a gallery or " +"another album into your new album below" +msgstr "" +"Nachdem Du ein Album erstellt und ausgewählt hast, kannst Du per Drag & Drop " +"eine Galerie oder ein anderes Album in das neue Album ziehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:475 +msgid "Select gallery" +msgstr "Wähle Galerie" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:500 +msgid "Album ID" +msgstr "Album ID" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:513 +msgid "No album selected!" +msgstr "Kein Album ausgewählt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:534 +msgid "Album name:" +msgstr "Album Name :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:540 +msgid "Album description:" +msgstr "Beschreibung:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:546 +msgid "Select a preview image:" +msgstr "Wähle Vorschaubild:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:549 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:552 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_preview_image_field.php:3 +msgid "No picture" +msgstr "Kein Bild" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:563 +msgid "Page Link to" +msgstr "Seite verlinkt zu" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:572 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_link_to_page_field.php:3 +msgid "Not linked" +msgstr "Nicht verlinkt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:582 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:337 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:366 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:397 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:406 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:442 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:471 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:502 +msgid "OK" +msgstr "OK" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:584 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:339 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:368 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:399 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:408 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:444 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:473 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:504 +msgid "Cancel" +msgstr "Abbrechen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:677 +msgid "Name" +msgstr "Name" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/album.php:679 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:229 +msgid "Page" +msgstr "Seite" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:116 +msgid "Select with the mouse the area for the new thumbnail" +msgstr "Wähle mit der Maus den Bereich für das neue Vorschaubild" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:130 +msgid "Thumbnail updated" +msgstr "Vorschaubild geändert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:135 +msgid "Error updating thumbnail" +msgstr "Konnte Vorschaubild nicht erzeugen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:151 +msgid "Select the area for the thumbnail from the picture on the left." +msgstr "Wähle den Ausschnitt für das Vorschaubild innerhalb des Bildes" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:39 +msgid "No valid gallery name!" +msgstr "Kein gültiger Galerie-Name!" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:46 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:80 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:780 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:788 +msgid "Directory" +msgstr "Verzeichnis" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:46 +msgid "didn't exist. Please create first the main gallery folder " +msgstr "nicht gefunden. Bitte erstelle zuerst das Hauptverzeichnis." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:47 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:56 +msgid "Check this link, if you didn't know how to set the permission :" +msgstr "Dieser Link zeigt Dir, wie man Verzeichnisrechte ändert :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:80 +msgid "is not writeable !" +msgstr "ist schreibgeschützt !" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:76 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:85 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:736 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/core.php:101 +msgid "Unable to create directory " +msgstr "Kann Verzeichnis nicht erstellen " + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:89 +msgid "The server setting Safe-Mode is on !" +msgstr "Auf dem Server ist Safe-Mode aktiviert (PHP.INI)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:90 +msgid "If you have problems, please create directory" +msgstr "Wenn Probleme auftreten, erstelle bitte das Verzeichnis" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:91 +msgid "and the thumbnails directory" +msgstr "und das Verzeichnis der Vorschaubilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:91 +msgid "with permission 777 manually !" +msgstr "mit den Berechtigungen 777 manuell !" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:116 +#, php-format +msgid "" +"Gallery ID %1$s successfully created. You can show this gallery in your post " +"or page with the shortcode %2$s.<br/>" +msgstr "" +"Galerie ID %1$s erstellt..<br/>Du kannst diese Galerie jetzt mit dem " +"Stichwort %2$s in einen Artikel einbinden.<br/>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:119 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:853 +msgid "Edit gallery" +msgstr "Galerie ändern" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:188 +msgid "Error while creating thumbnail." +msgstr "Fehler beim erzeugen des Vorschaubildes." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:242 +msgid "Error while resizing image." +msgstr "Fehler beim wiederherstellen des Bildes." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:326 +msgid "Error while rotating image." +msgstr "Fehler beim Bildwechsel." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:361 +msgid "Error while applying watermark to image." +msgstr "Fehler während des Versuches, ein Wasserzeichen zu setzen." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:385 +msgid "Object didn't contain correct data" +msgstr "Das Objekt enhält nicht die notwendigen Daten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:391 +msgid "File do not exists" +msgstr "Datei existiert nicht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:395 +msgid "Couldn't restore original image" +msgstr "Konnte Originalbild nicht wiederherstellen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:511 +msgid "(Error : Couldn't not update data base)" +msgstr "(Fehler : Konnte Datenbank nicht aktualisieren)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:518 +msgid "(Error : Couldn't not update meta data)" +msgstr "(Fehler : Konnte Metadaten nicht speichern)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:527 +msgid "(Error : Couldn't not find image)" +msgstr "(Fehler : Konnte das Bild nicht finden)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:670 +msgid "No valid URL path " +msgstr "Kein gültiger URL-Pfad" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:686 +msgid "Import via cURL failed." +msgstr "Import via cURL abgebrochen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:703 +msgid "Uploaded file was no or a faulty zip file ! The server recognized : " +msgstr "Die hochgeladene Datei war keine korrekte Zip-Datei. Servermeldung :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:720 +msgid "Could not get a valid foldername" +msgstr "Konnte keinen gültigen Verzeichnisnamen finden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:731 +#, php-format +msgid "" +"Unable to create directory %s. Is its parent directory writable by the " +"server?" +msgstr "" +"Kann das Verzeichnis %s nicht erstellen. Ist das Hauptverzeichnis vielleicht " +"schreibgeschützt ?" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:746 +msgid "Zip-File successfully unpacked" +msgstr "Zip-Datei erfolgreich entpackt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:780 +msgid "doesn`t exist!" +msgstr "gibt es nicht !" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:788 +msgid "contains no pictures" +msgstr "enthält keine Bilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:808 +msgid "Database error. Could not add gallery!" +msgstr "Datenbank-Fehler. Kann Galerie nicht hinzufügen!" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:814 +msgid "successfully created!" +msgstr "erfolgreich erstellt!" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:848 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:958 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:111 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:189 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:238 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:322 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:661 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:740 +msgid "Create new thumbnails" +msgstr "Neue Vorschaubilder erstellen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:851 +msgid " picture(s) successfully added" +msgstr " Bild(er) erfolgreich hinzugefügt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:882 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:982 +msgid "No gallery selected !" +msgstr "Keine Galerie ausgewählt !" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:890 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1007 +msgid "Failure in database, no gallery path set !" +msgstr "Datenbankfehler! Kein Galerie-Pfad gesetzt !" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:914 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1001 +msgid "is no valid image file!" +msgstr "ist keine zulässige Bilddatei !" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:935 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1024 +msgid "Error, the file could not be moved to : " +msgstr "Fehler: Diese Datei kann nicht verschoben werden zu :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:940 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1028 +msgid "Error, the file permissions could not be set" +msgstr "Fehler: Die Berechtigungen für diese Datei können nicht gesetzt werden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:963 +msgid " Image(s) successfully added" +msgstr " Bild(er) erfolgreich hinzugefügt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:990 +msgid "Invalid upload. Error Code : " +msgstr "Ungültiger Upload. Fehler Code :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1066 +#, php-format +msgid "" +"SAFE MODE Restriction in effect! You need to create the folder <strong>%s</" +"strong> manually" +msgstr "" +"SAFE MODE Einschränkungen ist aktiv. Du musst das Verzeichnis <strong>%s</" +"strong> manuell anlegen." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1067 +#, php-format +msgid "" +"When safe_mode is on, PHP checks to see if the owner (%s) of the current " +"script matches the owner (%s) of the file to be operated on by a file " +"function or its directory" +msgstr "" +"Wenn der Safe-Mode eingeschaltet ist, überprüft PHP, ob der Besitzer (%s) " +"des Skript mit dem Besitzer (%s) der Datei/Verzeichnis übereinstimmt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1120 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1197 +msgid "The destination gallery does not exist" +msgstr "Die ausgewählte Galerie existiert nicht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1151 +#, php-format +msgid "Failed to move image %1$s to %2$s" +msgstr "Konnte das Bild %1$s nicht nach %2$s verschieben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1171 +#, php-format +msgid "Moved %1$s picture(s) to gallery : %2$s ." +msgstr " %1$s Bild(er) in Galerie : %2$s verschoben." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1275 +#, php-format +msgid "Copied %1$s picture(s) to gallery: %2$s ." +msgstr "Kopiere %1$s Bild(er) in die Galerie : %2$s ." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1383 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini" +msgstr "" +"Die Datei überschreitet die erlaubte Grösse (upload_max_filesize) in der php." +"ini" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1386 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form" +msgstr "Die Datei ist zu gross" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1389 +msgid "The uploaded file was only partially uploaded" +msgstr "Die Datei wurde nur teilweise hochgeladen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1392 +msgid "No file was uploaded" +msgstr "Keinen Datei wurde geladen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1395 +msgid "Missing a temporary folder" +msgstr "Konnte temporäres Verzeichnis nicht finden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1398 +msgid "Failed to write file to disk" +msgstr "Konnte Datei nicht speichern" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1401 +msgid "File upload stopped by extension" +msgstr "Upload dieser Dateierweiterung nicht erlaubt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1404 +msgid "Unknown upload error" +msgstr "Unbekannter Uploadfehler" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/install.php:20 +msgid "Sorry, NextGEN Gallery works only with a role called administrator" +msgstr "" +"Tut mir leid, aber NextGEN Gallery benötigt zwingend die Rolle " +"\"Administrator\"" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/install.php:92 +msgid "" +"NextGEN Gallery : Tables could not created, please check your database " +"settings" +msgstr "" +"NextGEN Gallery : Tabellen konnten nicht erstellt werden, überprüfe Deine " +"Datenbank" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:99 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:206 +msgid "No images selected" +msgstr "Keine Bilder ausgewählt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:107 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:190 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:234 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:323 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:642 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:724 +msgid "Resize images" +msgstr "Bilder verkleinern" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:116 +#, php-format +msgid "" +"You are about to start the bulk edit for %s galleries \n" +" \n" +" 'Cancel' to stop, 'OK' to proceed." +msgstr "" +"Du startest die Bearbeitung von %s Galerien \n" +" \n" +" 'Abbrechen' um zu stoppen, 'OK' um die Bearbeitung durchzuführen." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:154 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:197 +msgid "Add new gallery" +msgstr "Neue Galerie erstellen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:171 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:174 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:272 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:275 +msgid "Search Images" +msgstr "Suche Bilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:186 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:320 +msgid "Bulk actions" +msgstr "Aktion wählen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:188 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:321 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:572 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:687 +msgid "Set watermark" +msgstr "Wasserzeichen setzen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:191 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:326 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:577 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:708 +msgid "Import metadata" +msgstr "Metadaten importieren" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:192 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:324 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:567 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:684 +msgid "Recover from backup" +msgstr "Original wiederherstellen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:194 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:335 +msgid "Apply" +msgstr "Übernehmen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:262 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:253 +msgid "Edit" +msgstr "Bearbeiten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:309 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:379 +msgid "No entries found" +msgstr "Keine Einträge gefunden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:327 +msgid "New Gallery" +msgstr "Neue Galerie" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:329 +msgid "Create a new , empty gallery below the folder" +msgstr "Erstelle eine neue, leere Galerie unter dem Verzeichnis" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:331 +msgid "Allowed characters for file and folder names are" +msgstr "Erlaubte Zeichen für die Datei- und Verzeichnisnamen sind" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:357 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:462 +msgid "Resize Images to" +msgstr "Verkleinere Bilder auf" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:361 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:466 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:453 +msgid "Width x height (in pixel). NextGEN Gallery will keep ratio size" +msgstr "Breite x Höhe (in Pixel). Das Seitenverhältnis wird berücksichtigt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:385 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:490 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:40 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:416 +msgid "Width x height (in pixel)" +msgstr "Breite x Höhe (in Pixel)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:391 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:496 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:426 +msgid "Set fix dimension" +msgstr "Setze feste Größe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:393 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:498 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:428 +msgid "Ignore the aspect ratio, no portrait thumbnails" +msgstr "Ignoriere Bildseitenverhältnis" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:456 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:568 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:156 +msgid "ID" +msgstr "ID" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:458 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:571 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:245 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:134 +msgid "Description" +msgstr "Beschreibung" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:460 +msgid "Page ID" +msgstr "Seiten-ID" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:461 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:311 +msgid "Image" +msgid_plural "Images" +msgstr[0] "Bild" +msgstr[1] "Bilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:35 +msgid "Gallery not found." +msgstr "Galerie nicht gefunden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:41 +msgid "Sorry, you have no access here" +msgstr "Sorry, Du hast nicht genügend Rechte" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:214 +msgid "Copy image to..." +msgstr "Kopiere nach..." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:218 +msgid "Move image to..." +msgstr "Verschiebe nach..." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:222 +msgid "Add new tags" +msgstr "Stichwörter hinzufügen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:226 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:332 +msgid "Delete tags" +msgstr "Stichwörter löschen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:230 +msgid "Overwrite" +msgstr "Überschreiben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:243 +#, php-format +msgid "" +"You are about to start the bulk edit for %s images \n" +" \n" +" 'Cancel' to stop, 'OK' to proceed." +msgstr "" +"Du startest die Bearbeitung von %s Bildern \n" +" \n" +" 'Abbrechen' um zu stoppen, 'OK' um die Bearbeitung durchzuführen." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:269 +#, php-format +msgid "Search results for “%s”" +msgstr "Suchergebinsse für “%s”" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:298 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:488 +msgid "Gallery settings" +msgstr "Galerie Einstellungen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:298 +msgid "Click here for more settings" +msgstr "Hier klicken für weitere Einstellungen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:304 +msgid "Scan Folder for new images" +msgstr "Überprüfe Verzeichnis nach neuen Bildern" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:306 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:341 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:386 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:400 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:436 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:478 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:563 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:598 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:708 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:861 +msgid "Save Changes" +msgstr "Änderungen speichern" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:325 +msgid "Delete images" +msgstr "Bilder löschen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:327 +msgid "Rotate images clockwise" +msgstr "Rechts drehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:328 +msgid "Rotate images counter-clockwise" +msgstr "Links drehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:329 +msgid "Copy to..." +msgstr "Kopiere nach..." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:330 +msgid "Move to..." +msgstr "Verschiebe nach..." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:331 +msgid "Add tags" +msgstr "Stichwörter hinzufügen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:333 +msgid "Overwrite tags" +msgstr "Stichwörter überschreiben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:338 +msgid "Sort gallery" +msgstr "Sortiere Bilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:402 +msgid "Enter the tags" +msgstr "Stichwörter angeben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:426 +msgid "Select the destination gallery:" +msgstr "Galerie auswählen:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:569 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:161 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:266 +msgid "Thumbnail" +msgstr "Vorschaubild" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:571 +msgid "Alt & Title Text" +msgstr "Alt & Titel Text" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:572 +msgid "Tags (comma separated list)" +msgstr "Stichwörter (Tags)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:35 +msgid "Sort order changed" +msgstr "Reihenfolge aktualisiert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:97 +msgid "Sort Gallery" +msgstr "Sortiere Bilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:101 +msgid "Update Sort Order" +msgstr "Sortierung speichern" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:104 +msgid "Back to gallery" +msgstr "Zurueck zur Galerie" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:109 +msgid "Presort" +msgstr "Vorsortieren" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:110 +msgid "Unsorted" +msgstr "Unsortiert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:113 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:241 +msgid "Alt/Title text" +msgstr "Alt / Titel Text" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:90 +msgid "deleted successfully" +msgstr "erfolgreich gelöscht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:106 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:115 +msgid "Operation successful. Please clear your browser cache." +msgstr "Vorschaubilder erfolgreich erstellt. Bitte Browser-Cache löschen." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:171 +msgid "Alt & Title Text / Description" +msgstr "Alt & Titel Text / Beschreibung" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:214 +msgid "Exclude ?" +msgstr "Ausschließen?" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:299 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:301 +msgid "View" +msgstr "Ansehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:309 +msgid "Show meta data" +msgstr "Metadaten zeigen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:310 +msgid "Meta" +msgstr "Meta" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:318 +msgid "Customize thumbnail" +msgstr "Vorschaubilder anpassen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:319 +msgid "Edit thumbs" +msgstr "Vorschau bearbeiten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:327 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:328 +msgid "Rotate" +msgstr "Drehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:338 +msgid "Publish this image" +msgstr "Bild veröffentlichen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:339 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:58 +msgid "Publish" +msgstr "Veröffentlichen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:349 +msgid "Recover image from backup" +msgstr "Original wiederherstellen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:350 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:352 +msgid "Recover" +msgstr "Rücksetzen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:361 +msgid "Delete image" +msgstr "Lösche Bilddatei" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:392 +#: ../products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:3 +msgid "Title:" +msgstr "Titel:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:398 +msgid "Description:" +msgstr "Beschreibung:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:404 +msgid "Gallery path:" +msgstr "Galerie-Pfad:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:419 +msgid "Link to page:" +msgstr "Link zur Seite:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:425 +msgid "Preview image:" +msgstr "Vorschaubild:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:431 +msgid "Create new page:" +msgstr "Eine neue Seite erzeugen:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:607 +msgid "Gallery deleted successfully " +msgstr "Galerie gelöscht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:678 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:681 +msgid "Rotate images" +msgstr "Bild drehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:704 +msgid "Pictures deleted successfully " +msgstr "Bilder erfolgreich gelöscht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:802 +msgid "Tags changed" +msgstr "Stichwörter geändert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:842 +msgid "Update successful" +msgstr "Aktualisierung erfolgreich" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:877 +msgid "New gallery page ID" +msgstr "Neue Galerie Seiten ID" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:877 +msgid "created" +msgstr "erstellt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:915 +msgid "Published a new post" +msgstr "Veröffentliche einen neuen Beitrag" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1046 +#, php-format +msgid "1 item" +msgid_plural "%s items" +msgstr[0] "1 Element" +msgstr[1] "%s Elemente" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1062 +msgid "Go to the first page" +msgstr "Zur 1. Seite gehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1069 +msgid "Go to the previous page" +msgstr "Zur vorherigen Seite gehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1078 +msgid "Current page" +msgstr "Aktuelle Seite" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1089 +msgid "Go to the next page" +msgstr "Zur nächsten Seite gehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1096 +msgid "Go to the last page" +msgstr "Zur letzten Seite gehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:11 +msgid "NextGEN Gallery" +msgstr "NextGEN Gallery" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:186 +msgid "No gallery" +msgstr "Keine Galerie" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:198 +msgid "Select »" +msgstr "Wähle »" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:229 +msgid "Show" +msgstr "Zeige" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:230 +msgid "Hide" +msgstr "Verstecke" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:235 +msgid "Image ID:" +msgstr "Bild ID:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:249 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:45 +msgid "Alignment" +msgstr "Ausrichtung" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:256 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:51 +msgid "Center" +msgstr "Zentrieren" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:262 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:690 +msgid "Size" +msgstr "Größe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:268 +msgid "Full size" +msgstr "Volle Größe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:270 +msgid "Singlepic" +msgstr "Einzelbilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:282 +msgid "Use as featured image" +msgstr "Benutze als empfohlenes Bild" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:284 +msgid "Insert into Post" +msgstr "In den Beitrag einfügen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:295 +msgid "Save all changes" +msgstr "Änderungen speichern" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:14 +msgid "NextGEN Gallery Overview" +msgstr "NextGEN Gallery Übersicht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:85 +msgid "Welcome to NextGEN Gallery !" +msgstr "Willkomen bei NextGEN Gallery" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:86 +msgid "Do you like this Plugin?" +msgstr "Bist Du mit dem Plugin zufrieden ?" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:88 +msgid "Translation" +msgstr "Übersetzung" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:90 +msgid "About" +msgstr "Über" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:93 +msgid "Server Settings" +msgstr "Server- Einstellungen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:100 +msgid "" +"NextGEN Gallery is one of the most popular Wordpress plugins of all time " +"with over 9 million downloads. It is developed and supported by Photocrati " +"Media. We'd like to offer a special thanks to Alex Rabe, who first developed " +"the plugin and maintained it through 2011." +msgstr "" +"NextGEN Gallery ist eines der populärsten WordPress Plugins mit über 9 " +"Millionen Downloads. Es ist entwickelt und unterstützt von Photocrati Media. " +"Gerne sagen wir besondere Dankesworte zu Alex Rabe, der das Plugin zuerst " +"entwickelt und bis 2011 im Besitz hatte. " + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:101 +msgid "" +"<strong>NEED HELP?</strong> If you need help or assistance please visit the " +"<a href='http://wordpress.org/support/plugin/nextgen-gallery'>NextGEN " +"Gallery forums on WordPress.org</a>. Please note that we actively monitor " +"and participate in the forums, but given that NextGEN Gallery is a free " +"product, we don't guarantee replies to support queries." +msgstr "" +"<strong>DU BRAUCHST HILFE?</strong> Wenn Du Hilfe oder Unterstützung " +"brauchst, besuche bitte <a href='http://wordpress.org/support/plugin/nextgen-" +"gallery'>NextGEN Gallery forums on WordPress.org</a>. Bitte beachte, dass " +"wir die Support Foren aktiv sichten und antworten. Da NextGEN Gallery ein " +"kostenloses Produkt ist, garantieren wir keine Antworten auf Anfragen in der " +"Support Seite. Dazu ist ein Upgrade auf NextGEN Gallery Pro notwendig. " + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:102 +msgid "" +"<strong>EXTENDING NEXTGEN?</strong> There are many third party plugins that " +"add displays and functionality for NextGEN Gallery. See our <a href='http://" +"www.nextgen-gallery.com/nextgen-gallery-extension-plugins/'>Complete List of " +"NextGEN Extension Plugins</a>." +msgstr "" +"<strong>ERGÄNZUNGEN ZU NEXTGEN?</strong> Es gibt eine Vielzahl von " +"Zusatzplugins, die spezielle Ansichten und Funktionalität abbilden. Hier ist " +"die <a href='http://www.nextgen-gallery.com/nextgen-gallery-extension-" +"plugins/'>komplette Liste von NextGEN Ergänzungs-Plugins</a>." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:110 +#, php-format +msgid "" +"This plugin is primarily developed, maintained, supported and documented by " +"<a href=\"%s\" target=\"_blank\">Photocrati Media</a> with a lot of love & " +"effort. Any kind of contribution would be highly appreciated. Thanks!" +msgstr "" +"Dieses Plugin wird mit viel Mühe & Leidenschaft entwickelt, dokumentiert und " +"supported von <a href=\"%s\" target=\"_blank\">Photocrati Media</a>. Jede " +"Form der Ünterstützung ist willkommen. Vielen Dank." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:115 +msgid "Please click \"Works\" on WordPress.org" +msgstr "Bitte klicke \"Works\" auf WordPress.org" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:120 +msgid "Give it a good rating on WordPress.org" +msgstr "Bitte gib eine gute Bewertung bei WordPress.org." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:125 +msgid "Visit the plugin homepage" +msgstr "Besuche die Pugin-Webseite" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:130 +msgid "Help translating it" +msgstr "Hilf das Plugin zu übersetzen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:152 +msgid "Graphic Library" +msgstr "Grafik-Bibliothek" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:168 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:217 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:415 +msgid "Loading…" +msgstr "Lade…" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:168 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:217 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:415 +msgid "This widget requires JavaScript." +msgstr "Dieses Widget braucht JavaScript." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:181 +msgid "Thanks to all donators..." +msgstr "Danke an alle Spender..." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:203 +msgid "View all" +msgstr "Alle ansehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:229 +#, php-format +msgid "" +"Newsfeed could not be loaded. Check the <a href=\"%s\">front page</a> to " +"check for updates." +msgstr "" +"Der Newsfeed kann nicht geladen werden. Schaue auf die <a href=\"%s" +"\">Hauptseite</a>, um Updates mitzubekommen." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:241 +msgid "Untitled" +msgstr "Kein Titel" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:306 +msgid "At a Glance" +msgstr "Übersicht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:323 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:223 +msgid "Album" +msgid_plural "Albums" +msgstr[0] "Album" +msgstr[1] "Alben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:359 +msgid "Storage Space" +msgstr "Speicherplatz" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:363 +#, php-format +msgid "" +"<a href=\"%1$s\" title=\"Manage Uploads\" class=\"musublink\">%2$sMB</a>" +msgstr "" +"<a href=\"%1$s\" title=\"Verwalte Uploads\" class=\"musublink\">%2$sMB</a>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:364 +msgid "Space Allowed" +msgstr "Speicher verfügbar" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:371 +#, php-format +msgid "" +"<a href=\"%1$s\" title=\"Manage Uploads\" class=\"musublink\">%2$sMB (%3$s" +"%%)</a>" +msgstr "" +"<a href=\"%1$s\" title=\"Verwalte Uploads\" class=\"musublink\">%2$sMB (%3$s" +"%%)</a>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:372 +msgid "Space Used" +msgstr "Verbrauchter Uploadspeicher" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:401 +msgid "Translation file successful updated. Please reload page." +msgstr "Übersetzungsdatei aktualisiert. Bitte Seite neu laden." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:403 +msgid "Reload page" +msgstr "Seite neu laden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:408 +msgid "Translation file couldn't be updated" +msgstr "Übersetzung konnte nicht aktualisiert werden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:445 +msgid "Download" +msgstr "Jetzt updaten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:474 +msgid "No GD support" +msgstr "Keine GD Unterstützung" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:506 +msgid "Not set" +msgstr "Nicht gesetzt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:508 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:511 +msgid "On" +msgstr "An" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:509 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:512 +msgid "Off" +msgstr "Aus" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:516 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:519 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:522 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:525 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:528 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:531 +msgid "N/A" +msgstr "N/A" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:530 +msgid " MByte" +msgstr " MByte" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:543 +msgid "Operating System" +msgstr "Betriebssystem" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:544 +msgid "Server" +msgstr "Server" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:545 +msgid "Memory usage" +msgstr "Speicherverbrauch" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:546 +msgid "MYSQL Version" +msgstr "MySQL Version" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:547 +msgid "SQL Mode" +msgstr "SQL Modus" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:548 +msgid "PHP Version" +msgstr "PHP Version" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:549 +msgid "PHP Safe Mode" +msgstr "PHP Safe Mode" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:550 +msgid "PHP Allow URL fopen" +msgstr "PHP Allow URL fopen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:551 +msgid "PHP Memory Limit" +msgstr "PHP Memory Limit" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:552 +msgid "PHP Max Upload Size" +msgstr "PHP Max Upload Größe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:553 +msgid "PHP Max Post Size" +msgstr "PHP Max Post Größe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:554 +msgid "PCRE Backtracking Limit" +msgstr "PCRE Backtracking Limit" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:555 +msgid "PHP Max Script Execute Time" +msgstr "PHP Max Script Execute Time" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:556 +msgid "PHP Exif support" +msgstr "PHP Exif Modul" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:557 +msgid "PHP IPTC support" +msgstr "PHP IPTC Modul" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:558 +msgid "PHP XML support" +msgstr "PHP XML Modul" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:570 +msgid "" +"NextGEN Gallery contains some functions which are only available under PHP " +"5.2. You are using the old PHP 4 version, upgrade now! It's no longer " +"supported by the PHP group. Many shared hosting providers offer both PHP 4 " +"and PHP 5, running simultaneously. Ask your provider if they can do this." +msgstr "" +"NextGEN Gallery enthält einige Funktionen, die nur unter PHP 5.2 verfügbar " +"sind. Du nutzt immer noch die alte PHP 4 Version. Bitte aktualisiere so bald " +"wie möglich diese Version, sie wird nicht mehr gepflegt und " +"weiterentwicklelt. Die meisten Hoster bieten bereits PHP5 an. Bitte " +"kontaktiere Deinen Provider und frag kurz nach, ob sie ein Update " +"durchführen können." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:690 +msgid "and all donators..." +msgstr "und allen anderen Spendern..." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:35 +msgid "Post title" +msgstr "Beitragstitel" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:37 +msgid "Enter the post title " +msgstr "Artikelüberschrift " + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:42 +msgid "Size of the image" +msgstr "Größe des Bildes" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:60 +msgid "Draft" +msgstr "Entwurf" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:26 +msgid "" +"Select the lowest role which should be able to access the following " +"capabilities. NextGEN Gallery supports the standard roles from WordPress." +msgstr "" +"Wähle die niedrigste Rolle aus, die Zugriff haben soll. NextGEN Gallery " +"unterstützt nur die Standard-Wordpress-Rollen-Fähigkeiten von WordPress." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:27 +msgid "For a more flexible user management you can use the" +msgstr "Nutze für eine flexiblere Rechteverwaltung den " + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:31 +msgid "Main NextGEN Gallery overview" +msgstr "NextGEN Galerie Übersicht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:35 +msgid "Use TinyMCE Button / Upload tab" +msgstr "TinyMCE Button / Upload Tab" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:39 +msgid "Add gallery / Upload images" +msgstr "Galerie einrichten / Bilder hochladen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:43 +msgid "Manage gallery" +msgstr "Galerie verwalten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:47 +msgid "Manage others gallery" +msgstr "Alle Galerien verwalten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:51 +msgid "Manage tags" +msgstr "Verwalte Stichwörter" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:59 +msgid "Change style" +msgstr "Style anpassen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:63 +msgid "Change options" +msgstr "Optionen änderen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:67 +msgid "NextGEN Attach Interface" +msgstr "NextGEN Schnittstelle" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:60 +msgid "Image rotated" +msgstr "Bild gedreht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:62 +msgid "Error rotating thumbnail" +msgstr "Konnte Bild nicht bearbeiten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:85 +msgid "90° clockwise" +msgstr "90° rechts drehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:86 +msgid "90° anticlockwise" +msgstr "90° links drehen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:87 +msgid "Flip vertically" +msgstr "Vertikal spiegeln" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:88 +msgid "Flip horizontally" +msgstr "Horizontal spiegeln" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:22 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:204 +#, php-format +msgid "Rebuild image structure : %s / %s images" +msgstr "Erzeuge Permalinks für Bilder : %s / %s Bilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:23 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:205 +#, php-format +msgid "Rebuild gallery structure : %s / %s galleries" +msgstr "Erzeuge Permalinks für Galerien : %s / %s Galerien" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:24 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:206 +#, php-format +msgid "Rebuild album structure : %s / %s albums" +msgstr "Erzeuge Permalinks für Alben : %s / %s Alben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:81 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:263 +msgid "Done." +msgstr "Fertig." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:196 +msgid "Cache cleared" +msgstr "Cache löschen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:315 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:334 +msgid "General Options" +msgstr "Allg. Optionen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:316 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:520 +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:26 +msgid "Thumbnails" +msgstr "Vorschaubilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:317 +msgid "Images" +msgstr "Bilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:319 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:572 +msgid "Effects" +msgstr "Effekte" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:320 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:614 +msgid "Watermark" +msgstr "Wasserzeichen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:321 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:521 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:721 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:215 +#: ../products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:76 +msgid "Slideshow" +msgstr "Slideshow" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:340 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:54 +msgid "Gallery path" +msgstr "Galerie-Pfad" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:342 +msgid "This is the default path for all galleries" +msgstr "Dies ist der Standard-Pfad für alle Galerien" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:345 +msgid "Delete image files" +msgstr "Lösche Bilddateien" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:347 +msgid "Delete files, when removing a gallery in the database" +msgstr "" +"Löscht auch die Dateien, falls die Galerie aus der Datenbank entfernt wird" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:350 +msgid "Activate permalinks" +msgstr "Aktiviere Permalinks" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:352 +msgid "" +"When you activate this option, you need to update your permalink structure " +"one time." +msgstr "" +"Wenn Du diese Option aktivierst, muss Du einmal die Permalink Struktur " +"aktualisieren." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:353 +msgid "Gallery slug name :" +msgstr "Galerie Schlagwort :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:357 +msgid "Create new URL friendly image slugs" +msgstr "Erstelle neue URL lesbare Schlagwörter " + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:358 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:474 +msgid "Proceed now" +msgstr "Jetzt durchführen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:361 +msgid "Select graphic library" +msgstr "Wähle Grafik-Bibliothek" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:362 +msgid "GD Library" +msgstr "GD Bibliothek" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:363 +msgid "ImageMagick (Experimental). Path to the library :" +msgstr "ImageMagick (Experimental). Pfad zur Bibliothek :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:368 +msgid "Activate Media RSS feed" +msgstr "Aktiviere Media-RSS-Feed" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:370 +msgid "" +"A RSS feed will be added to you blog header. Useful for CoolIris/PicLens" +msgstr "Ein Bilder-RSS Feed wird zum Blog hinzugefügt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:373 +msgid "Activate PicLens/CoolIris support" +msgstr "Aktiviere PicLens/CoolIris" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:375 +msgid "" +"When you activate this option, some javascript is added to your site footer. " +"Make sure that wp_footer is called in your theme." +msgstr "" +"Dieser Effekt fügt ein neues Javascript zu Deinem Theme hinzu. Beachte, dass " +"wp_footer() in Deinen Vorlagen aufgerufen wird." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:378 +msgid "Tags / Categories" +msgstr "Stichwörter / Kategorien" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:381 +msgid "Activate related images" +msgstr "Verwandte Bilder anzeigen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:383 +msgid "This option will append related images to every post" +msgstr "Diese Option hängt verwandte Bilder an jeden Beitrag" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:387 +msgid "Match with" +msgstr "Vergleiche mit" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:393 +msgid "Max. number of images" +msgstr "Max. Anzahl der Bilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:395 +msgid "0 will show all images" +msgstr "0 zeige alle verwandten Bilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:399 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:435 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:477 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:562 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:597 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:860 +msgid "More settings" +msgstr "Mehr Einstellungen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:409 +msgid "Thumbnail settings" +msgstr "Einstellungen Vorschaubilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:413 +msgid "" +"Please note : If you change the settings, you need to recreate the " +"thumbnails under -> Manage Gallery ." +msgstr "" +"Bitte beachten : Änderungen der Einstellungen werden erst übernommen, wenn " +"Du neue Vorschaubilder unter -> \"Gallery verwalten\" erstellst" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:422 +msgid "These values are maximum values " +msgstr "Diese Angaben sind maximale Angaben." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:445 +msgid "Image settings" +msgstr "Bild-Einstellungen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:451 +msgid "Resize Images" +msgstr "Bilder verkleinern" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:460 +msgid "Backup original images" +msgstr "Backup von Original-Bildern " + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:462 +msgid "Creates a backup for inserted images" +msgstr "Backup der Bilder anlegen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:465 +msgid "Automatically resize" +msgstr "Grösse automatisch anpassen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:467 +msgid "Automatically resize images on upload." +msgstr "Passt die Grösse automatisch beim Upload an" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:470 +msgid "Single picture" +msgstr "Einzelbilder" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:473 +msgid "Clear cache folder" +msgstr "Lösche Cache-Verzeichnis" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:494 +msgid "Deactivate gallery page link" +msgstr "Keine Seitenverzweigung" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:496 +msgid "" +"The album will not link to a gallery subpage. The gallery is shown on the " +"same page." +msgstr "" +"Ein Album benötigt dann keinen Link zur Seite. Die Galerie wird direkt " +"angezeigt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:500 +msgid "Number of images per page" +msgstr "Anzahl der Bilder pro Seite" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:502 +msgid "0 will disable pagination, all images on one page" +msgstr "0 schaltet Blätterfunktion ab ( = alle Bilder auf einer Seite )" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:506 +msgid "Number of columns" +msgstr "Anzahl der Spalten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:508 +msgid "" +"0 will display as much as possible based on the width of your theme. Setting " +"normally only required for captions below the images" +msgstr "" +"Mit \"0\" werden soviele Bilder wie möglich in einer Reihe dargestellt. Die " +"Einstellung ist normalerweise nur für Beschriftungen unterhalb der Bilder " +"sinnvoll." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:512 +msgid "Integrate slideshow" +msgstr "Slideshow verwenden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:519 +msgid "Show first" +msgstr "Zeige als Erstes" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:525 +msgid "Show ImageBrowser" +msgstr "Zeige Bilder-Browser" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:527 +msgid "The gallery will open the ImageBrowser instead the effect." +msgstr "Es wird der Bilder-Browser angezeigt (Kein JavaScript Effekt)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:531 +msgid "Add hidden images" +msgstr "Versteckte Bilder hinzufügen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:533 +msgid "" +"If pagination is used, this option will still show all images in the modal " +"window (Thickbox, Lightbox etc.). Note : This increases the page load" +msgstr "" +"Wenn Du die Blätterfunktion nutzt, dann kannst Du mit dieser Option alle " +"Bilder im Modal-Fenster (Thickbox,Lightbox etc.) anzeigen. Berücksichtige, " +"dass die Ladezeit der Seite erhöht wird." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:539 +msgid "" +"Browse images without reload the page. Note : Works only in combination with " +"Shutter effect" +msgstr "" +"Ermöglicht das Blättern zwischen den Bildern ohne die Seite neu zu laden. " +"Hinweis : Funktioniert nur mit dem Shutter-Effekt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:543 +msgid "Sort options" +msgstr "Sortierung" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:546 +msgid "Sort thumbnails" +msgstr "Vorschaubilder sortieren" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:548 +msgid "Custom order" +msgstr "Benutzerdefiniert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:550 +msgid "File name" +msgstr "Dateiname" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:551 +msgid "Alt / Title text" +msgstr "Alt / Titel Text" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:552 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:58 +msgid "Date / Time" +msgstr "Datum/Zeit" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:556 +msgid "Sort direction" +msgstr "Sortierreihenfolge" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:576 +msgid "" +"Here you can select the thumbnail effect, NextGEN Gallery will integrate the " +"required HTML code in the images. Please note that only the Shutter and " +"Thickbox effect will automatic added to your theme." +msgstr "" +"Hier kannst Du den Effekt für die Vorschaubilder auswählen. NextGEN Galerie " +"wird den benötigten HTML-Code verwenden. Bitte beachte, dass nur Shutter und " +"der Thickbox Effekt automatisch in Dein Theme von Wordpress integriert wird. " +"Alle anderen Effekte mußt Du selbst in die header.php eintragen (JS)." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:577 +msgid "With the placeholder" +msgstr "Mit Platzhalter" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:577 +msgid "" +"you can activate a navigation through the images (depend on the effect). " +"Change the code line only , when you use a different thumbnail effect or you " +"know what you do." +msgstr "" +"Du kannst eine Navigation durch die Bilder aktivieren (hängt vom Effekt ab). " +"Ändere nur die Codezeile, falls Du einen anderen Effekt für die " +"Vorschaubilder verwendest oder einfach weißt, was Du tust." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:580 +msgid "JavaScript Thumbnail effect" +msgstr "JavaScript Vorschaubild Effekt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:584 +msgid "Thickbox" +msgstr "Thickbox" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:585 +msgid "Lightbox" +msgstr "Lightbox" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:586 +msgid "Highslide" +msgstr "Highslide" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:587 +msgid "Shutter" +msgstr "Shutter" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:593 +msgid "Link Code line" +msgstr "Link-Code-Zeile" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:620 +msgid "Preview" +msgstr "Vorschau" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:622 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:627 +msgid "Position" +msgstr "Position" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:647 +msgid "Offset" +msgstr "Abstand" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:663 +msgid "Use image as watermark" +msgstr "Benutze das Bild als Wasserzeichen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:666 +msgid "URL to file" +msgstr "URL zur Datei" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:668 +msgid "The accessing of URL files is disabled at your server (allow_url_fopen)" +msgstr "" +"Der Dateizugriff von URLs ist auf diesem Server deaktiviert (allow_url_fopen)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:671 +msgid "Use text as watermark" +msgstr "Benutze Text als Wasserzeichen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:674 +msgid "Font" +msgstr "Schriftart" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:683 +msgid "This function will not work, cause you need the FreeType library" +msgstr "Diese Funktion benötigt die FreeType-Bibliothek" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:685 +msgid "" +"You can upload more fonts in the folder <strong>nggallery/fonts</strong>" +msgstr "" +"Du kannst mehr Schriftarten in das Verzeichniss <strong>nggallery/fonts</" +"strong> hochladen." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:694 +msgid "Color" +msgstr "Farbe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:696 +msgid "(hex w/o #)" +msgstr "(hex w/o #)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:699 +msgid "Text" +msgstr "Text" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:703 +msgid "Opaque" +msgstr "Transparenz" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:724 +msgid "Default size (W x H)" +msgstr "Standard Größe (B x H)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:729 +msgid "Duration time" +msgstr "Dauer" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:730 +msgid "sec." +msgstr "Sek." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:733 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:810 +msgid "Transition / Fade effect" +msgstr "Fade Effekt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:736 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:813 +msgid "fade" +msgstr "Fade" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:737 +msgid "blindX" +msgstr "blindX" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:738 +msgid "cover" +msgstr "Blenden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:739 +msgid "scrollUp" +msgstr "ScrollUp" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:740 +msgid "scrollDown" +msgstr "ScrollDown" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:741 +msgid "shuffle" +msgstr "Shuffle" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:742 +msgid "toss" +msgstr "Schüttel" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:743 +msgid "wipe" +msgstr "wischen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:745 +msgid "See here for more information about the effects :" +msgstr "Hier bekommst du mehr Informationen über die Effekte :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:749 +msgid "Settings for the JW Image Rotator" +msgstr "JW-Image-Rotator Einstellungen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:758 +msgid "" +"The path to JW Image Rotator is not defined, the slideshow will not work." +msgstr "" +"Der Pfad zum JW Image Rotator ist nicht definiert. Die Slideshow " +"funktioniert nicht." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:770 +msgid "Path to the JW Image Rotator (URL)" +msgstr "Pfad zum JW Image Rotator (URL)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:773 +msgid "Search now" +msgstr "Suche jetzt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:774 +msgid "Press the button below to search for the JW Image Rotator" +msgstr "Den Button unten nutzen um den JW Image Rotator zu suchen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:778 +msgid "Shuffle mode" +msgstr "Shuffle Modus" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:796 +msgid "You can change the logo at the watermark settings" +msgstr "Du kannst den Pfad in Einstellungen für das Wasserzeichen angeben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:802 +msgid "true" +msgstr "Ja" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:803 +msgid "false" +msgstr "Nein" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:804 +msgid "fit" +msgstr "Passend" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:805 +msgid "none" +msgstr "keiner" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:814 +msgid "bgfade" +msgstr "BGFade" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:815 +msgid "slowfade" +msgstr "Slowfade" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:816 +msgid "circles" +msgstr "Kreise" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:817 +msgid "bubbles" +msgstr "Blasen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:818 +msgid "blocks" +msgstr "Blöcke" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:819 +msgid "fluids" +msgstr "Fluids" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:820 +msgid "flash" +msgstr "Flash" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:821 +msgid "lines" +msgstr "Linien" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:822 +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:42 +msgid "random" +msgstr "Zufall" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:831 +msgid "Background Color" +msgstr "Hintergrund (BG) Farbe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:836 +msgid "Texts / Buttons Color" +msgstr "Text- / Button Farbe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:841 +msgid "Rollover / Active Color" +msgstr "Rollover / Aktiv (Link) Farbe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:846 +msgid "Screen Color" +msgstr "Seiten-Farbe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:851 +msgid "Background music (URL)" +msgstr "Hintergrundmusik (URL)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:855 +msgid "Try XHTML validation (with CDATA)" +msgstr "Integriere XHTML-Validierung (mittels CDATA)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:857 +msgid "" +"Important : Could causes problem at some browser. Please recheck your page." +msgstr "" +"Wichtig : Es könnten Probleme bei einigen Browser entstehen. Unbedingt Seite " +"danach prüfen." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:29 +msgid "Meta Data" +msgstr "Metadaten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:34 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:60 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:85 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:109 +msgid "Tag" +msgstr "Stichwort" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:35 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:61 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:86 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:110 +msgid "Value" +msgstr "Wert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:49 +msgid "No meta data saved" +msgstr "Keine Metadaten gespeichert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:55 +msgid "EXIF Data" +msgstr "EXIF-Daten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:74 +msgid "No exif data" +msgstr "Keine Exif-Daten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:81 +msgid "IPTC Data" +msgstr "IPTC-Daten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:105 +msgid "XMP Data" +msgstr "XMP-Daten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:11 +msgid "(From the theme folder)" +msgstr "(Aus dem Theme Verzeichnis)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:43 +msgid "You do not have sufficient permissions to edit templates for this blog." +msgstr "" +"Du hast nicht die benötigten Rechte, um Vorlagen in diesem Blog zu " +"bearbeiten." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:52 +msgid "CSS file successfully updated" +msgstr "CSS-Datei erfolgreich aktualisiert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:91 +msgid "Activate and use style sheet:" +msgstr "Aktiviere und nutze Stylesheet:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:111 +msgid "Activate" +msgstr "Aktiviere" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:121 +#, php-format +msgid "Editing <strong>%s</strong>" +msgstr "Bearbeite <strong>%s</strong>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:123 +#, php-format +msgid "Browsing <strong>%s</strong>" +msgstr "Durchsuche <strong>%s</strong>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:133 +msgid "Version" +msgstr "Version" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:136 +msgid "" +"Tip : Copy your stylesheet (nggallery.css) to your theme folder, so it will " +"be not lost during a upgrade" +msgstr "" +"Kleiner Tipp: Kopiere das Stylesheet (nggallery.css) in Dein Theme-" +"Verzeichnis, dadurch wird es beim nächsten Update nicht überschrieben." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:138 +msgid "" +"Your theme contain a NextGEN Gallery stylesheet (nggallery.css), this file " +"will be used" +msgstr "" +"Dein Theme-Paket enthält ein NextGEN-Gallery-Stylesheet (nggallery.css), " +"dieses Sheet wird automatisch eingebunden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:140 +msgid "" +"Tip No. 2: Use the color picker below to help you find the right color " +"scheme for your gallery!" +msgstr "" +"2.Tipp : Benutze die Farbauswahl, um den zugehörigen HTML-Farbcode zu " +"erhalten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:156 +msgid "Update File" +msgstr "Datei aktualisieren" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:159 +msgid "If this file were writable you could edit it." +msgstr "Wenn diese Datei beschreibbar wäre, könntest Du sie bearbeiten." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/style.php:164 +msgid "Oops, no such file exists! Double check the name and try again, merci." +msgstr "" +"Oha, eine solche Datei existiert nicht! Bitte überprüfe den Namen und " +"probiere es erneut. Danke." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:41 +msgid "Most popular" +msgstr "Beliebteste Stichwörter" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:42 +msgid "Least used" +msgstr "Zuletzt benutzt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:43 +msgid "Alphabetical" +msgstr "Alphabetisch" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:100 +msgid "Manage image tags" +msgstr "Verwalte Bilder-Stichwörter" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:112 +msgid "Existing Tags" +msgstr "Vorhandene Stichwörter" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:116 +msgid "Search tags" +msgstr "Suche nach Stichwörter" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:120 +msgid "Go" +msgstr "Start" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:125 +msgid "Sort Order:" +msgstr "Sortierung :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:160 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:164 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:177 +msgid "Previous tags" +msgstr "Vorheriges Stichwort" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:173 +msgid "Next tags" +msgstr "Nächstes Stichwort" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:185 +msgid "Rename Tag" +msgstr "Schlagwort umbenennen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:193 +msgid "" +"Enter the tag to rename and its new value. You can use this feature to " +"merge tags too. Click \"Rename\" and all posts which use this tag will be " +"updated." +msgstr "" +"Trage das Stichwort ein, das Du umbenennen willst und seinen neuen Wert/" +"Namen. Du kannst diese Funktion auch nutzen, um Stichwörter " +"zusammenzuführen. Klicke auf \"Umbenennen\" und alle Bilder, die das " +"Stichwort verwenden, werden aktualisiert." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:194 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:242 +msgid "You can specify multiple tags to rename by separating them with commas." +msgstr "Mehrere Stichwörter zum Umbenennen durch Komma trennen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:198 +msgid "Tag(s) to rename:" +msgstr "Stichwörter umbennenen:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:202 +msgid "New tag name(s):" +msgstr "Neuer Name für das Stichwort" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:205 +msgid "Rename" +msgstr "Umbenennen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:211 +msgid "Delete Tag" +msgstr "Stichwort löschen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:219 +msgid "" +"Enter the name of the tag to delete. This tag will be removed from all " +"posts." +msgstr "" +"Trage das zu löschende Stichwort ein. Das Stichwort wird aus allen Bildern " +"entfernt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:220 +msgid "You can specify multiple tags to delete by separating them with commas" +msgstr "" +"Du kannst mehrere Stichwörter zum Löschen markieren, indem Du sie mit Kommas " +"trennst" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:224 +msgid "Tag(s) to delete:" +msgstr "Folgede Stichwörter löschen:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:233 +msgid "Edit Tag Slug" +msgstr "Ändere Schlagwort" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:241 +msgid "" +"Enter the tag name to edit and its new slug. This will be used in tagcloud " +"links. <a href=\"http://codex.wordpress.org/Glossary#Slug\" target=\"_blank" +"\">Slug definition</a>" +msgstr "" +"Trage den Namen des zu ändernden Stichworts und seinen neuen \"Slug\" ein. " +"<a href=\"http://codex.wordpress.org/Glossary#Slug\" target=\"_blank\">Was " +"ist ein Slug?</a>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:246 +msgid "Tag(s) to match:" +msgstr "Stichwörter vergleichen :" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:250 +msgid "Slug(s) to set:" +msgstr "Schlagwörter setzen:" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:3 +msgid "Main Page (no parent)" +msgstr "Hauptseite (keine Eltern)" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:10 +msgid "Add page" +msgstr "Seite hinzufügen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:103 +msgid "These are maximum values" +msgstr "Diese Angaben sind maximale Angaben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:61 +msgid "" +"Some folders/files could not renamed, please recheck the permission and " +"rescan the folder in the manage gallery section." +msgstr "" +"Einige Verzeichnisse / Bilder konnten nicht umbenannt werden, bitte " +"überprüfe die Zugriffsrechte und scanne dann das Verzeichnis neu ein." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:63 +msgid "Rename failed" +msgstr "Konnte nicht umbenannt werden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:159 +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:178 +msgid "Upgrade NextGEN Gallery" +msgstr "NextGEN-Gallery aktualisieren" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:160 +msgid "The script detect that you upgrade from a older version." +msgstr "Es wurde eine ältere NextGEN-Datenbank erkannt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:161 +msgid "" +"Your database tables for NextGEN Gallery is out-of-date, and must be " +"upgraded before you can continue." +msgstr "" +"Deine Datenbanktabellen für NextGEN-Gallery sind nicht auf dem aktuellen " +"Stand, sie müssen jetzt aktualisiert werden." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:162 +msgid "" +"If you would like to downgrade later, please make first a complete backup of " +"your database and the images." +msgstr "" +"Wenn Du wieder auf eine ältere Version zurückgehen möchtest, solltest Du " +"vorher die Datenbank sichern." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:163 +msgid "The upgrade process may take a while, so please be patient." +msgstr "Der Upgrade-Prozess kann etwas dauern, bitte sei geduldig..." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:164 +msgid "Start upgrade now" +msgstr "Aktualisierung starten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:180 +msgid "Upgrade finished..." +msgstr "Upgrade beendet..." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:181 +msgid "Continue" +msgstr "Weiter" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:33 +msgid "Update successfully" +msgstr "Aktualisierung erfolgreich" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:48 +msgid "Network Options" +msgstr "Netzwerk Optionen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:56 +msgid "" +"This is the default path for all blogs. With the placeholder %BLOG_ID% you " +"can organize the folder structure better." +msgstr "" +"Dieses ist der Default-Pfad für alle Blogs. Mit dem Platzhalter %BLOG_ID% " +"wird die Ordnerstruktur gesteuert. Der Pfad muss mit / enden." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:57 +#, php-format +msgid "The default setting should be %s" +msgstr "Grundeinstellung ist %s" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:61 +msgid "Enable upload quota check" +msgstr "Schalte die Uploadbegrenzung ein" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:63 +msgid "Should work if the gallery is bellow the blog.dir" +msgstr "" +"Sollte funktionieren, wenn die Galerien sich unterhalb blog.dir befinden" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:67 +msgid "Enable zip upload option" +msgstr "Erlaube ZIP-Upload" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:69 +msgid "Allow users to upload zip folders." +msgstr "Erlaubt die Nutzung des ZIP-Upload" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:73 +msgid "Enable import function" +msgstr "Erlaube Import Funktion" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:75 +msgid "Allow users to import images folders from the server." +msgstr "" +"Erlaube dem User Bilder direkt aus den Server Verzeichnissen zu importieren." + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:79 +msgid "Enable style selection" +msgstr "Freie CSS-Style-Auswahl" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:81 +msgid "Allow users to choose a style for the gallery." +msgstr "Erlaube dem User, ein CSS für die Galerie zu wählen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:85 +msgid "Enable roles/capabilities" +msgstr "Rollen / Zugriffsrechte freischalten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:87 +msgid "Allow users to change the roles for other blog authors." +msgstr "Erlaube dem User die Anpassung der Zugangsberechtigung" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:91 +msgid "Default style" +msgstr "Standard-CSS-Style" + +#: ../products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:108 +msgid "Choose the default style for the galleries." +msgstr "Wähle das Default-Stylesheet für die Galerien" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/core.php:410 +#, php-format +msgid "" +"Note : Based on your server memory limit you should not upload larger images " +"then <strong>%d x %d</strong> pixel" +msgstr "" +"Hinweis: Basierend auf der Speicherbegrenzung auf dem Server, solltest Du " +"keine Bilder grösser als <strong>%d x %d</strong> Pixel hochladen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/locale.php:120 +msgid "Invalid URL Provided." +msgstr "Ungültige URL" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/locale.php:124 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/locale.php:128 +msgid "Could not create Temporary file." +msgstr "Konnte temporäre Datei nicht erstellen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:337 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:338 +msgid "Album overview" +msgstr "Album Übersicht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:68 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:70 +msgid "Set NextGEN featured image" +msgstr "Zeige das NextGEN empfohlene Bild" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:328 +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:329 +msgid "Set featured image" +msgstr "Zeige empfohlenes Bild" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:356 +msgid "Remove featured image" +msgstr "Entferne das empfohlene Bild" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:35 +msgid "No new tag specified!" +msgstr "Kein neues Stichwort definiert!" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:50 +msgid "No new/old valid tag specified!" +msgstr "Kein neues Stichwort definiert!" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:86 +msgid "No tag renamed." +msgstr "Kein Stichwort umbenannt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:88 +#, php-format +msgid "Renamed tag(s) «%1$s» to «%2$s»" +msgstr "" +"Es wurden die Stichwörter «%1$s» bis «%2$s» umbenannt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:95 +msgid "No valid new tag." +msgstr "Kein gültiges Stichwort" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:112 +msgid "No objects (post/page) found for specified old tags." +msgstr "Keine Objekte (Seite/Beitrag) enthält das ausgewählte Stichwort" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:141 +msgid "No tag merged." +msgstr "Keine Stichwörter zusammengeführt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:143 +#, php-format +msgid "" +"Merge tag(s) «%1$s» to «%2$s». %3$s objects edited." +msgstr "" +"Stichwörter «%1$s» bis «%2$s» zusammengeführt. %3$s " +"Objekte geändert." + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:146 +msgid "Error. No enough tags for rename. Too for merge. Choose !" +msgstr "Fehler. Es wurden nicht genug Stichwörter ausgewählt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:165 +msgid "No tag specified!" +msgstr "Kein Stichwort angegeben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:188 +msgid "No tag deleted." +msgstr "Kein Stichwort gelöscht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:190 +#, php-format +msgid "%1s tag(s) deleted." +msgstr "%1s Stichwörter gelöscht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:206 +msgid "No new slug(s) specified!" +msgstr "Keine neuen Stichwörter ausgewählt" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:218 +msgid "Tags number and slugs number isn't the same!" +msgstr "Stichwort und Schlagwort ist nicht das Gleiche!" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:245 +msgid "No slug edited." +msgstr "Kein Stichwort geändert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:247 +#, php-format +msgid "%s slug(s) edited." +msgstr "%s Stichwörter geändert" + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggallery.php:67 +msgid "" +"<strong>Translation by : </strong><a target=\"_blank\" href=\"http://" +"alexrabe.de/wordpress-plugins/nextgen-gallery/languages/\">See here</a>" +msgstr "" +"<strong>Übersetzt von : </strong><a target=\"_blank\" href=\"http://alexrabe." +"de/wordpress-plugins/wordtube/translation-of-plugins/\">Alex Rabe</a>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggallery.php:68 +msgid "" +"<strong>This translation is not yet updated for Version 1.9.0</strong>. If " +"you would like to help with translation, download the current po from the " +"plugin folder and read <a href=\"http://alexrabe.de/wordpress-plugins/" +"wordtube/translation-of-plugins/\">here</a> how you can translate the plugin." +msgstr "" +"Sollten jemand Rechtschreibfehler, Deppenapostrophe oder andere deutsche " +"Ungereimtheiten finden, freue ich mich jederzeit über einen kurzen Hinweis</" +"p>" + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggallery.php:161 +msgid "" +"Sorry, NextGEN Gallery works only with a Memory Limit of 16 MB or higher" +msgstr "" +"Tut mir leid, aber NextGEN-Galerie benötigt mindestens 16MB Speicher (Memory " +"Limit) oder mehr" + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggallery.php:187 +msgid "Picture tag" +msgstr "Bilder-Stichwort" + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggallery.php:188 +msgid "Picture tag: %2$l." +msgstr "Bilder-Stichwort: %2$l." + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggallery.php:189 +msgid "Separate picture tags with commas." +msgstr "Trenne Stichwörter mittels Komma" + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggallery.php:333 +msgid "Get help" +msgstr "Hilfe" + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggallery.php:334 +msgid "Contribute" +msgstr "Mithelfen" + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php:29 +msgid "[Gallery not found]" +msgstr "[Galerie nicht gefunden]" + +#: ../products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php:163 +msgid "Related images for" +msgstr "Verwandte Bilder von" + +#: ../products/photocrati_nextgen/modules/ngglegacy/view/gallery-caption.php:32 +#: ../products/photocrati_nextgen/modules/ngglegacy/view/gallery.php:32 +#: ../products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:93 +msgid "[View with PicLens]" +msgstr "[Mit PicLens anzeigen]" + +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:38 +msgid "Meta data" +msgstr "Metadaten" + +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:42 +msgid "Camera / Type" +msgstr "Kameratyp" + +#: ../products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:50 +msgid "Focal Length" +msgstr "Brennweite" + +#: ../products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:50 +msgid "No galleries have been yet created." +msgstr "Keine Galerie wurde derzeit erstellt." + +#: ../products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:69 +#, php-format +msgid "The gallery ID=%s does not exist." +msgstr "Die Galerie ID=%s existiert nicht." + +#: ../products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:100 +msgid "No album ID has been provided as parameter" +msgstr "Es wurde kein Album als Parameter übergeben" + +#: ../products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:108 +#, php-format +msgid "The album ID=%s does not exist." +msgstr "Album-ID %s existiert nicht" + +#: ../products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:115 +msgid "Invalid MediaRSS command" +msgstr "Ungültiger Media-RSS-Befehl" + +#: ../products/photocrati_nextgen/modules/widget/class.widget_gallery.php:7 +msgid "Add recent or random images from the galleries" +msgstr "Füge die neusten Bilder oder Zufallsbilder aus NextGEN-Gallery ein" + +#: ../products/photocrati_nextgen/modules/widget/class.widget_gallery.php:8 +msgid "NextGEN Widget" +msgstr "NextGEN-Widget" + +#: ../products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:9 +msgid "Widget that displays Media RSS links for NextGEN Gallery." +msgstr "Hiermit können NextGEN-Bilder als Media RSS eingebunden werden" + +#: ../products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:10 +msgid "NextGEN Media RSS" +msgstr "NextGEN Media RSS" + +#: ../products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:22 +msgid "Media RSS" +msgstr "Media RSS" + +#: ../products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:23 +msgid "Link to the main image feed" +msgstr "Link zum Bilder-Feed" + +#: ../products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:7 +msgid "Show a NextGEN Gallery Slideshow" +msgstr "Binde eine NextGEN-Gallery-Slideshow ein" + +#: ../products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:8 +msgid "NextGEN Slideshow" +msgstr "NextGEN-Diashow" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:4 +#: ../products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:3 +msgid "Title :" +msgstr "Titel :" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:15 +msgid "Show :" +msgstr "Zeige als :" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:29 +msgid "Original images" +msgstr "Original Bilder" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:50 +msgid "recent added " +msgstr "zuletzt hinzugefügt" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:62 +msgid "Enable IE8 Web Slices" +msgstr "IE8 Web Slices aktivieren" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:68 +msgid "Width x Height :" +msgstr "Breite x Höhe :" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:87 +msgid "Select :" +msgstr "Wähle :" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:92 +msgid "All galleries" +msgstr "Alle Galerien" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:95 +msgid "Only which are not listed" +msgstr "Nur ungelistete" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:98 +msgid "Only which are listed" +msgstr "Nur gelistete" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:107 +msgid "Gallery ID :" +msgstr "Galerie-ID :" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_gallery.php:114 +msgid "Gallery IDs, separated by commas." +msgstr "Galerie-IDs, mit Kommas getrennt" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:20 +msgid "Show Media RSS icon" +msgstr "Zeige Media RSS Icon" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:31 +msgid "Show the Media RSS link" +msgstr "Zeige den globalen Media RSS Link" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:37 +msgid "Text for Media RSS link:" +msgstr "Text für den globalen Media RSS Link:" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:49 +msgid "Tooltip text for Media RSS link:" +msgstr "Tooltipp-Text für den globalen Media RSS Link." + +#: ../products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:15 +msgid "Select Gallery:" +msgstr "Wähle Galerie" + +#: ../products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:23 +msgid "All images" +msgstr "Alle Bilder" + +#~ msgid "" +#~ "Reset all options to default settings?\n" +#~ "\n" +#~ "Choose [Cancel] to Stop, [OK] to proceed." +#~ msgstr "" +#~ "Alle Optionen zu Standard zurücksetzen ?\n" +#~ "\n" +#~ "Wähle [Cancel] um abzubrechen, [OK] zum Fortfahren." + +#~ msgid "Enable fullscreen on double tap" +#~ msgstr "Vollbild aktivieren mit Doppelklick" + +#~ msgid "Enabling this may cause compatibility issues with some devices" +#~ msgstr "" +#~ "Die Aktivierung könnte Kombatibilitätsprobleme mit anderer Software " +#~ "verursachen" + +#~ msgid "Save" +#~ msgstr "Speichern" + +#~ msgid "Reset all settings to default parameter" +#~ msgstr "Stelle alle Einstellungen auf Anfangswerte zurück" + +#~ msgid "" +#~ "Uninstall sucessful ! Now delete the plugin and enjoy your life ! Good " +#~ "luck !" +#~ msgstr "" +#~ "Deinstallation erfolgreich! Nun kannst Du das Plugin löschen und Dein " +#~ "Leben weiterhin genießen! Stay geeky! Viel Glück!" + +#~ msgid "Reset options" +#~ msgstr "Optionen zurücksetzen" + +#~ msgid "Reset all options/settings to the default installation." +#~ msgstr "Alle Optionen/Einstellungen zurücksetzen" + +#~ msgid "" +#~ "Reset all options to default settings ?\\n\\nChoose [Cancel] to Stop, " +#~ "[OK] to proceed.\\n" +#~ msgstr "" +#~ "Alle Optionen zu Standard zurücksetzen ?\\n\\nWähle [Cancel] um " +#~ "abzubrechen, [OK] zum Fortfahren.\\n" + +#~ msgid "Uninstall plugin tables" +#~ msgstr "Plugin Tabellen (DB) entfernen" + +#~ msgid "You don't like NextGEN Gallery ?" +#~ msgstr "Du magst die NextGEN Gallery nicht ?" + +#~ msgid "" +#~ "No problem, before you deactivate this plugin press the Uninstall Button, " +#~ "because deactivating NextGEN Gallery does not remove any data that may " +#~ "have been created. " +#~ msgstr "" +#~ "Null Problemo. Einfach nur vor dem Deaktivieren dieses Plugins den " +#~ "Uninstall-Button betätigen, damit alle Tabellen der Galerie entfernt " +#~ "werden." + +#~ msgid "WARNING:" +#~ msgstr "WARNUNG:" + +#~ msgid "" +#~ "Once uninstalled, this cannot be undone. You should use a Database Backup " +#~ "plugin of WordPress to backup all the tables first. NextGEN gallery is " +#~ "stored in the tables" +#~ msgstr "" +#~ "Eine einmalig durchgeführte Deinstallation kann nicht mehr rückgängig " +#~ "gemacht werden, da alle Tabellen der Galerie aus der Datenbank entfernt " +#~ "werden und KEIN Backup dieser Galerie-Tabellen angelegt wird." + +#~ msgid "and" +#~ msgstr "und" + +#~ msgid "Uninstall plugin" +#~ msgstr "Plugin deinstallieren" + +#~ msgid "" +#~ "You are about to Uninstall this plugin from WordPress.\\nThis action is " +#~ "not reversible.\\n\\nChoose [Cancel] to Stop, [OK] to Uninstall.\\n" +#~ msgstr "" +#~ "Du bist dabei, das Plugin zu deinstallieren.\\nDiese Aktion kann NICHT " +#~ "rückgängig gemacht werden.\\n\\nWähle [Cancel] zum Abbrechen, [OK] zum " +#~ "Deinstallieren.\\n" + +#, fuzzy +#~ msgid "BildThumbnail" +#~ msgstr "Vorschaubild" + +#~ msgid "NGG_BASIC_COMPACT_ALBUM" +#~ msgstr "NextGEN Basis Kompakt-Album " + +#~ msgid "NextGEN Basic Compact Album" +#~ msgstr "NextGEN Basis Kompakt-Album" + +#, fuzzy +#~ msgid "NextGen Pro Slideshow" +#~ msgstr "NextGen Pro Slideshow" + +#~ msgid "NextGEN Basic Extended Album" +#~ msgstr "NextGEN Basis Gestrecktes Album" + +#~ msgid "NextGEN Pro Thumbnail Grid" +#~ msgstr "NextGen Pro Vorschaubild Raster" + +#~ msgid "Add Files" +#~ msgstr "Dateien hinzufügen" + +#, fuzzy +#~ msgid "Manage Gallerien" +#~ msgid_plural "Manage Gallerien" +#~ msgstr[0] "Galerien verwalten" +#~ msgstr[1] "Galerien verwalten" + +#~ msgid "Please update the database of NextGEN Gallery." +#~ msgstr "Bitte aktualisiere die Datenbank von NextGEN Gallery." + +#~ msgid "Donate" +#~ msgstr "Spenden" + +#~ msgid "[Album not found]" +#~ msgstr "[Album nicht gefunden]" + +#~ msgid "[SinglePic not found]" +#~ msgstr "[Bild nicht gefunden]" + +#~ msgid "Copyright notes / Credits" +#~ msgstr "Copyright Hinweise / Credits" + +#~ msgid "" +#~ "This plugin is primarily developed, maintained, supported, documented by" +#~ msgstr "" +#~ "Dieses Plugin wird hauptsächlich entwickelt, dokumentiert und supported " +#~ "von" + +#~ msgid "" +#~ "There are many other folks who have made contributions to this project :" +#~ msgstr "Folgende Personen haben die Entwicklung unterstützt :" + +#~ msgid "Contributors / Tribute to" +#~ msgstr "Anerkennung / Hinweise" + +#~ msgid "" +#~ "If you study the code of this plugin, you will find out that we mixed a " +#~ "lot of good already existing code and ideas together." +#~ msgstr "" +#~ "Falls Du Dir den Sourcecode dieses Plugins ansiehst, wirst Du merken, " +#~ "dass wir verschiedene gute Scripte sowie Ideen verwendet haben." + +#~ msgid "" +#~ "So, we would like to thank the following people for their pioneer work " +#~ "(without this work it's impossible to create such a plugin so fast)" +#~ msgstr "" +#~ "Wir möchten folgenden Menschen für Ihre Pionier-Arbeit danken (ohne diese " +#~ "Vorleistung wäre es unmöglich, ein Plugin so schnell zu entwickeln)" + +#~ msgid "for their great documented code" +#~ msgstr "für ihren großartig dokumentierten Code" + +#~ msgid "for jQuery, which is the best Web2.0 framework" +#~ msgstr "für jQuery, das Beste Web 2.0 Framework" + +#~ msgid "for the fantastic PHP Thumbnail Class" +#~ msgstr "für die fantastische PHP-Thumbnail-Klasse" + +#~ msgid "for a lot of very useful plugins and ideas" +#~ msgstr "für viele nützliche Plugins und Ideen" + +#~ msgid "for Shutter Reloaded, a real lightweight image effect" +#~ msgstr "für Shutter Reloaded, ein wirklich smarten Bildeffekt" + +#~ msgid "for the best Media Flash Scripts on earth" +#~ msgstr "für die besten Media-Flash-Scripte" + +#~ msgid "for the Gallery Icon" +#~ msgstr "für das Galerie Icon" + +#~ msgid "for the Watermark plugin" +#~ msgstr "für das Wasserzeichen-Plugin" + +#~ msgid "" +#~ "If you didn't find your name on this list and there is some code which I " +#~ "integrate in my plugin, don't hesitate to send me a mail." +#~ msgstr "" +#~ "Falls Du Deinen Namen nicht auf dieser Liste findest und es aber Code " +#~ "gibt, den ich in meinem Plugin verwendet habe, so schicken mir bitte " +#~ "sofort eine E-Mail." + +#~ msgid "How to support ?" +#~ msgstr "Unterstützung / Hilfe" + +#~ msgid "" +#~ "There exist several ways to contribute, help or support us in this work. " +#~ "Non of them are mandatory." +#~ msgstr "" +#~ "Es existieren verschiedene Möglichkeiten, diese Arbeit zu unterstützen." + +#~ msgid "Send us bugfixes / code changes" +#~ msgstr "Schicke uns Verbesserungen / Bugfixes" + +#~ msgid "" +#~ "The most motivated support for this plugin are your ideas and brain work" +#~ msgstr "Der beste Support für dieses Plugin sind Deine Ideen und Gedanken" + +#~ msgid "Translate the plugin" +#~ msgstr "Übersetze das Plugin" + +#~ msgid "" +#~ "To help people to work with this plugin, I would like to have it in all " +#~ "available languages" +#~ msgstr "" +#~ "Um jedem das Arbeiten mit diesem Plugin zu vereinfachen, würde ich es " +#~ "gerne in allen möglichen Sprachen anbieten" + +#~ msgid "Donate the work via paypal" +#~ msgstr "Zeig Dich für diese Arbeit per PayPal dankbar" + +#~ msgid "No doubt a very useful and easy motivation :-)" +#~ msgstr "Kein Zweifel, eine schöne und einfache Motivationshilfe" + +#~ msgid "Place a link to the plugin in your blog/webpage" +#~ msgstr "Setze einen Link zu diesem Plugin auf Deinen Blog" + +#~ msgid "Yes, share and trackback is also a good support for this work " +#~ msgstr "" +#~ "Natürlich sind Trackbacks und Links auch ein guter Support für diese " +#~ "Arbeit" + +#~ msgid "Thanks!" +#~ msgstr "Vielen Dank!" + +#~ msgid "We would like to thank this people which support us in the work :" +#~ msgstr "" +#~ "Ich möchte mich bei diesen Menschen für Ihre Unterstützung bedanken:" + +#~ msgid "Upload failed!" +#~ msgstr "Upload fehlgeschlagen!" + +#~ msgid "Upload failed! " +#~ msgstr "Upload fehlgeschlagen!" + +#~ msgid "remove" +#~ msgstr "Entfernen" + +#~ msgid "Browse..." +#~ msgstr "Durchsuche..." + +#~ msgid "Upload images" +#~ msgstr "Bilder hochladen" + +#~ msgid "Upload a Zip-File" +#~ msgstr "Zip-Datei hochladen" + +#~ msgid "Import image folder" +#~ msgstr "Bilder-Verzeichnis importieren" + +#~ msgid "Add gallery" +#~ msgstr "Galerie hinzufügen" + +#~ msgid "Upload a zip file with images" +#~ msgstr "Lade eine Zip-Datei mit Bildern hoch" + +#~ msgid "or enter a Zip-File URL" +#~ msgstr "oder gib eine URL zur ZIP-Datei an" + +#~ msgid "Import a zip file with images from a url" +#~ msgstr "Lade eine Zip-Datei mit Bildern über ein URL hoch" + +#~ msgid "in to" +#~ msgstr "in" + +#~ msgid "Note : The upload limit on your server is " +#~ msgstr "Hinweis : Das Upload-Limit auf dem Server beträgt " + +#~ msgid "Start upload" +#~ msgstr "Upload starten" + +#~ msgid "Import from Server path:" +#~ msgstr "Importieren aus Server-Pfad:" + +#~ msgid "Note : Change the default path in the gallery settings" +#~ msgstr "" +#~ "Hinweis : Der Standard-Pfad kann in den Einstellungen angepasst werden" + +#~ msgid "" +#~ " Please note : For safe-mode = ON you need to add the subfolder thumbs " +#~ "manually" +#~ msgstr "" +#~ "Achtung : Da der Safe-Mode (PHP.INI) eingeschaltet ist, mußt Du das " +#~ "Unterverzeichnis für die Vorschaubilder (\"thumbs\") manuell (per FTP) " +#~ "anlegen" + +#~ msgid "Upload image" +#~ msgstr "Bild hochladen" + +#~ msgid "Choose files to upload" +#~ msgstr "Wähle die Bilder zum Upload aus" + +#~ msgid "Select Files" +#~ msgstr "Wähle Datei" + +#~ msgid "Or you can drop the files into this window." +#~ msgstr "Du kannst auch die Bilder per Drag & Drop in den Browser schieben." + +#~ msgid "Scale images to max width %1$dpx or max height %2$dpx" +#~ msgstr "" +#~ "Skaliere die Bilder mit einer max. Breite von %1$dpx oder max. Höhe von " +#~ "%2$dpx" + +#~ msgid "Choose gallery" +#~ msgstr "Wähle Galerie" + +#~ msgid "" +#~ "The batch upload requires Adobe Flash 10, disable it if you have problems" +#~ msgstr "" +#~ "Das Batch-Upload benötigt Adbode Flash 10, wenn es Probleme gibt " +#~ "deaktiviere es besser." + +#~ msgid "Disable flash upload" +#~ msgstr "Deaktiviere Batch-Upload" + +#~ msgid "Upload multiple files at once by ctrl/shift-selecting in dialog" +#~ msgstr "Wähle im Dialog mit Ctrl/Shift mehrere Bilder gleichzeitig aus." + +#~ msgid "Enable flash based upload" +#~ msgstr "Aktiviere Flash Batch Upload" + +#~ msgid "Manage Gallery" +#~ msgstr "Galerie verwalten" + +#~ msgid "Options" +#~ msgstr "Optionen" + +#~ msgid "Roles" +#~ msgstr "Zugriff" + +#~ msgid "About this Gallery" +#~ msgstr "Über diese Galerie" + +#~ msgid "Reset / Uninstall" +#~ msgstr "Rücksetzen" + +#~ msgid "" +#~ "Thanks for using this plugin, I hope you are satisfied ! If you would " +#~ "like to support the further development, please consider a <strong><a " +#~ "href=\"%s\">donation</a></strong>! If you still need some help, please " +#~ "post your questions <a href=\"http://wordpress.org/tags/nextgen-gallery?" +#~ "forum_id=10\">here</a> ." +#~ msgstr "" +#~ "Vielen Dank, dass Du dieses Plugin nutzt. Ich hoffe, Du bist soweit " +#~ "zufrieden! Wenn Du die Weiterentwicklung unterstützen möchtest, würde ich " +#~ "mich über eine kleine <strong><a href=\"%s\">Spende</a></strong> freuen! " +#~ "Wenn Du Fragen oder Problem hast, schreib sie doch <a href=\"http://" +#~ "wordpress.org/tags/nextgen-gallery?forum_id=10\">hier</a> ins Forum." + +#~ msgid "OK, hide this message now !" +#~ msgstr "OK, danke für die Info !" + +#~ msgid "" +#~ "<a href=\"http://dpotter.net/Technical/2008/03/nextgen-gallery-review-" +#~ "introduction/\" target=\"_blank\">Setup</a>" +#~ msgstr "" +#~ "<a href=\"http://www.curlyrob.de/curlyrob/?page_id=129\" target=\"_blank" +#~ "\">Setup</a>" + +#~ msgid "" +#~ "<a href=\"http://dpotter.net/Technical/2008/03/nextgen-gallery-review-" +#~ "introduction/\" target=\"_blank\">Roles / Capabilities</a>" +#~ msgstr "" +#~ "<a href=\"http://www.curlyrob.de/curlyrob/?page_id=129\" target=\"_blank" +#~ "\">Einführung</a>" + +#~ msgid "" +#~ "<a href=\"http://dpotter.net/Technical/2008/03/nextgen-gallery-review-" +#~ "introduction/\" target=\"_blank\">Styles</a>" +#~ msgstr "" +#~ "<a href=\"http://www.curlyrob.de/curlyrob/?page_id=129\" target=\"_blank" +#~ "\">Einführung</a>" + +#~ msgid "" +#~ "<a href=\"http://dpotter.net/Technical/2008/03/nextgen-gallery-review-" +#~ "introduction/\" target=\"_blank\">Gallery management</a>" +#~ msgstr "" +#~ "<a href=\"http://www.curlyrob.de/curlyrob/?page_id=129\" target=\"_blank" +#~ "\">Einführung</a>" + +#~ msgid "Gallery example" +#~ msgstr "Galerie Beispiel" + +#~ msgid "Gallery tags" +#~ msgstr "Galerie Stichwörter" + +#~ msgid "" +#~ "<a href=\"http://dpotter.net/Technical/2008/03/nextgen-gallery-review-" +#~ "introduction/\" target=\"_blank\">Album management</a>" +#~ msgstr "" +#~ "<a href=\"http://www.curlyrob.de/curlyrob/?page_id=129\" target=\"_blank" +#~ "\">Einführung</a>" + +#~ msgid "Album example" +#~ msgstr "Album Beispiel" + +#~ msgid "Album tags" +#~ msgstr "Album Stichwörter" + +#~ msgid "" +#~ "<a href=\"http://dpotter.net/Technical/2008/03/nextgen-gallery-review-" +#~ "introduction/\" target=\"_blank\">Gallery tags</a>" +#~ msgstr "" +#~ "<a href=\"http://www.curlyrob.de/curlyrob/?page_id=129\" target=\"_blank" +#~ "\">Einführung</a>" + +#~ msgid "" +#~ "<a href=\"http://dpotter.net/Technical/2008/03/nextgen-gallery-review-" +#~ "image-management/\" target=\"_blank\">Image management</a>" +#~ msgstr "" +#~ "<a href=\"http://dpotter.net/Technical/2008/03/nextgen-gallery-review-" +#~ "image-management/\" target=\"_blank\">Bilderverwaltung (englisch)</a>" + +#~ msgid "Custom fields" +#~ msgstr "Spezialfelder" + +#~ msgid "You are not allowed to be here" +#~ msgstr "Keine Zugangsberechtigung" + +#~ msgid " is not writeable " +#~ msgstr "ist schreibgeschützt !" + +#~ msgid "No Picture" +#~ msgstr "Kein Bild" + +#~ msgid "Path" +#~ msgstr "Pfad" + +#~ msgid "View \"%s\"" +#~ msgstr "Anzeigen \"%s\"" + +#~ msgid "Recover \"%s\" ?" +#~ msgstr " \"%s\" wiederherstellen ?" + +#~ msgid "Delete \"%s\" ?" +#~ msgstr "Lösche \"%s\" ?" + +#~ msgid "Latest News" +#~ msgstr "Letzte Informationen" + +#~ msgid "Recent donators" +#~ msgstr "Neueste Spender" + +#~ msgid "Plugin Check" +#~ msgstr "Plugin prüfen" + +#~ msgid "Related plugins" +#~ msgstr "Verwandte Plugins" + +#~ msgid "Donate the work via paypal." +#~ msgstr "Zeig Dich für diese Arbeit per PayPal dankbar" + +#~ msgid "Running..." +#~ msgstr "Läuft... Bitte warten" + +#~ msgid "Check plugin/theme conflict" +#~ msgstr "Plugin/Theme Konflikt prüfen" + +#~ msgid "Not tested" +#~ msgstr "Nicht getested" + +#~ msgid "No conflict could be detected" +#~ msgstr "Es konnte kein Konflikt festgestellt werden" + +#~ msgid "Test failed, disable other plugins & switch to default theme" +#~ msgstr "" +#~ "Test fehlgeschlagen, deaktiviere andere Plugins & aktiviere das Default " +#~ "Theme" + +#~ msgid "Test image function" +#~ msgstr "Teste Bildbearbeitung" + +#~ msgid "The plugin could create images" +#~ msgstr "Es konnte ein Bild erstellt werden" + +#~ msgid "Couldn't create image, check your memory limit" +#~ msgstr "Konnte kein Bild erzeugen, überprüfe dein Speicherlimit (Server)" + +#~ msgid "Check theme compatibility" +#~ msgstr "Theme Kompatibilität prüfen" + +#~ msgid "Your theme should work fine with NextGEN Gallery" +#~ msgstr "Dein Theme sollte mit NextGEN Gallery funktionieren" + +#~ msgid "wp_head()/wp_footer() is missing, contact the theme author" +#~ msgstr "" +#~ "wp_head()/wp_footer() wurde nicht gefunden, kontaktiere den Theme Author" + +#~ msgid "Check plugin" +#~ msgstr "Plugin prüfen" + +#~ msgid "Upload pictures" +#~ msgstr "Bilder hochladen" + +#~ msgid "Here you can control your images, galleries and albums." +#~ msgstr "Hier kannst Du die Bilder, Galerien und Alben verwalten." + +#~ msgid "Install" +#~ msgstr "Installieren" + +#~ msgid "" +#~ "<h3>Client side resize</h3><p>You can now resize the images before you " +#~ "start with the upload.</p>" +#~ msgstr "" +#~ "<h3>Neue Funktion</h3><p>Du kannst nun die Bilder bereits vor dem Upload " +#~ "beschneiden.</p>" + +#~ msgid "Updated capabilities" +#~ msgstr "Zugriffsrechte geändert" + +#~ msgid "Update capabilities" +#~ msgstr "Rechte aktualisieren" + +#~ msgid "The settings are only used in the JW Image Rotator Version" +#~ msgstr "" +#~ "Die Einstellungen werden im JW-Image-Rotator benutzt, in der Version" + +#~ msgid "See more information for the Flash Player on the web page" +#~ msgstr "Weitere Informationen auf der Flash-Player-Homepage" + +#~ msgid "" +#~ "If you would like to use the JW Image Rotatator, please download the " +#~ "player <a href=\"http://www.longtailvideo.com/players/jw-image-rotator/\" " +#~ "target=\"_blank\" >here</a> and upload it to your Upload folder (Default " +#~ "is wp-content/uploads)." +#~ msgstr "" +#~ "Wenn Du den JW-Image-Rotator (Slideshow) nutzen möchtest, lade Dir die " +#~ "aktuelle Version <a href=\"http://www.longtailvideo.com/players/jw-image-" +#~ "rotator/\" target=\"_blank\" >hier</a> herunter und übertrage sie dann in " +#~ "Dein WordPress-Upload-Verzeichnis (normalerweise wp-content/uploads)," + +#~ msgid "" +#~ "Press the button to search automatically for the imagerotator, if you " +#~ "uploaded it to wp-content/uploads or a subfolder" +#~ msgstr "" +#~ "Drücke 'Suche jetzt' um automatisch den Pfad zum Image-Rotator zu " +#~ "ermitteln, sofern Du den Player in wp-content/uploads oder ein " +#~ "Unterverzeichnis hochgeladen hast." + +#~ msgid "Style Editor" +#~ msgstr "CSS-Editor" + +#~ msgid "Upgrade database structure..." +#~ msgstr "Aktualisiere die Datenbank-Strukturen..." + +#~ msgid "finished" +#~ msgstr "beendet" + +#~ msgid "Update file structure..." +#~ msgstr "Aktualisiere Verzeichnisse..." + +#~ msgid "Import date and time information..." +#~ msgstr "Importiere Datum/Uhrzeit..." + +#~ msgid "Move imagerotator to new location..." +#~ msgstr "Verschiebe den Image-Rotator in ein neues Verzeichnis..." + +#~ msgid "Update settings..." +#~ msgstr "Einstellungen gespeichert..." + +#~ msgid "" +#~ "Updated widget structure. If you used NextGEN Widgets, you need to setup " +#~ "them again..." +#~ msgstr "" +#~ "Die Widgets wurden überarbeitet. Wenn Du NextGEN Widgets nutzt, musst du " +#~ "Sie nun neu einfügen..." + +#~ msgid "Updated options." +#~ msgstr "Einstellungen gespeichert." + +#~ msgid "Create unique slug" +#~ msgstr "Permalinks erstellen" + +#~ msgid "One of the upcomming features are a reworked permalinks structure." +#~ msgstr "Die Permalinkstruktur wird in einer kommenden Version überarbeitet." + +#~ msgid "" +#~ "Therefore it's needed to have a unique identifier for each image, gallery " +#~ "and album." +#~ msgstr "" +#~ "Deshalb ist es notwendig ein eindeutiges Schlagwort für jedes Bild, " +#~ "Galerie und Album zu erzeugen." + +#~ msgid "" +#~ "Depend on the amount of database entries this will take a while, don't " +#~ "reload this page." +#~ msgstr "" +#~ "Diese Operation kann je nach Anzahl der Bilder eine Weile daueren, bitte " +#~ "die Seite nicht neu laden." + +#~ msgid "Could not find NextGEN Gallery database tables, upgrade failed !" +#~ msgstr "" +#~ "Konnte die NextGEN Gallery Tabellen nicht finden, Upgrade fehlgeschlagen !" + +#~ msgid "" +#~ "Thanks for using this plugin, NextGEN Gallery is initially developed for " +#~ "self hosted blogs. A multisite setup is possible, but cannot currently " +#~ "fully supported, as it can have several special condition ( i.e. Domain " +#~ "mapping).<br /> If you would like to support the further development, " +#~ "please consider a <strong><a href=\"%s\">donation</a></strong>! If you " +#~ "still need some help, please post your questions <a href=\"http://" +#~ "wordpress.org/tags/nextgen-gallery?forum_id=10\">here</a> ." +#~ msgstr "" +#~ "Vielen Dank, dass Du dieses Plugin nutzt. NextGEN Gallery wurde für " +#~ "einfache Blogs entwickelt. Die Nutzung im Netzwerk (Multisite) ist " +#~ "möglich, aber wird nicht vollständig unterstützt (z.B. Domain Mapping)." +#~ "<br /> Wenn Du die Weiterentwicklung unterstützen möchtest, würde ich " +#~ "mich über eine kleine <strong><a href=\"%s\">Spende</a></strong> freuen! " +#~ "Wenn Du Fragen oder Problem hast, schreib sie doch <a href=\"http://" +#~ "wordpress.org/tags/nextgen-gallery?forum_id=10\">hier</a> ins Forum." + +#~ msgid "Select or enter gallery" +#~ msgstr "Wähle oder Suche Galerie" + +#~ msgid "Show as" +#~ msgstr "Zeige als" + +#~ msgid "Select or enter album" +#~ msgstr "Wähle oder Suche Album" + +#~ msgid "Extended version" +#~ msgstr "Erweiterte Version" + +#~ msgid "Compact version" +#~ msgstr "Kompakte Version" + +#~ msgid "Select or enter picture" +#~ msgstr "Wähle oder Suche Bild" + +#~ msgid "Width x Height" +#~ msgstr "Breite x Höhe" + +#~ msgid "No effect" +#~ msgstr "Kein Effekt" + +#~ msgid "Web 2.0" +#~ msgstr "Web 2.0" + +#~ msgid "No float" +#~ msgstr "Kein Float" + +#~ msgid "Insert" +#~ msgstr "Einfügen" + +#~ msgid "[Pictures not found]" +#~ msgstr "[Bilder nicht gefunden]" + +#~ msgid "" +#~ "XML-RPC services are disabled on this blog. An admin user can enable " +#~ "them at %s" +#~ msgstr "" +#~ "XML-RPC Service ist ausgeschaltet. Der Administrator kann es hier %s " +#~ "einschalten" + +#~ msgid "Bad login/pass combination." +#~ msgstr "Username/Password falsch" + +#~ msgid "You are not allowed to upload files to this site." +#~ msgstr "Du hast keine Berechtigung, Bilder hochzuladen" + +#~ msgid "Could not find gallery " +#~ msgstr "Konnte Galerie nicht finden" + +#~ msgid "You are not allowed to upload files to this gallery." +#~ msgstr "Du hast keine Berechtigung, Bilder in diese Galerie zuladen" + +#~ msgid "This is no valid image file." +#~ msgstr "Das ist keine zulässige Bilddatei!" + +#~ msgid "Failed to delete image %1$s " +#~ msgstr "Konnte das Bild %1$s nicht löschen" + +#~ msgid "Could not write file %1$s (%2$s)" +#~ msgstr "Konnte die Datei %1$s (%2$s) nicht schreiben " + +#~ msgid "Invalid image ID" +#~ msgstr "Keine gültige Bilder ID" + +#~ msgid "Sorry, you must be able to edit this image" +#~ msgstr "Sorry, Du hast nicht das Recht, dieses Bild zu bearbeiten" + +#~ msgid "Sorry, could not update the image" +#~ msgstr "Konnte das Bild nicht aktualisieren" + +#~ msgid "Sorry, could not create the gallery" +#~ msgstr "Konnte die Galerie nicht anlegen" + +#~ msgid "Sorry, you must be able to manage this gallery" +#~ msgstr "Sorry, Du hast nicht das Recht, diese Galerie zu bearbeiten" + +#~ msgid "Sorry, could not update the gallery" +#~ msgstr "Konnte die Galerie nicht aktualisieren" + +#~ msgid "Sorry, you must be able to manage albums" +#~ msgstr "Sorry, Du hast nicht das Recht, dieses Album zu bearbeiten" + +#~ msgid "Sorry, could not create the album" +#~ msgstr "Konnte das Album nicht anlegen" + +#~ msgid "Invalid album ID" +#~ msgstr "Ungültige Album ID" + +#~ msgid "Sorry, could not update the album" +#~ msgstr "Konnte das Album nicht aktualisieren" + +#~ msgid "" +#~ "<a href=\"http://www.macromedia.com/go/getflashplayer\">Get the Flash " +#~ "Player</a> to see the slideshow." +#~ msgstr "" +#~ "<a href=\"http://www.macromedia.com/go/getflashplayer\">Lade Dir den " +#~ "Flash Player</a>, um die Diashow zu sehen." + +#~ msgid "Cache single pictures" +#~ msgstr "Nutze Cache für Einzelbilder" + +#~ msgid "Creates a file for each singlepic settings. Reduce the CPU load" +#~ msgstr "" +#~ "Erstellt ein Cache-Bild für jedes Einzelbild (singlepic). Reduziert die " +#~ "CPU Belastung." + +#~ msgid "Currently not used, prepare database for upcoming version" +#~ msgstr "Derzeit nicht genutzt, Vorbereitung für kommende Versionen" + +#~ msgid "Send a gift to show your appreciation." +#~ msgstr "Schau doch einfach auf meinen Wunschzettel." + +#~ msgid "Displaying %s–%s of %s" +#~ msgstr "Zeige %s–%s von %s" + +#~ msgid "A new version of NextGEN Gallery is available !" +#~ msgstr "Eine neue Version von NextGEN Gallery ist jetzt verfügbar" + +#~ msgid "Download here" +#~ msgstr "Hier downloaden" + +#~ msgid "already exists" +#~ msgstr "gibt es bereits" + +#~ msgid "Gallery Overview" +#~ msgstr "Galerie Übersicht" + +#~ msgid "Quantity" +#~ msgstr "Anzahl" + +#~ msgid "Action" +#~ msgstr "Aktion" + +#~ msgid "Delete this gallery ?" +#~ msgstr "Diese Galerie löschen ?" + +#~ msgid "General WordPress MU Settings" +#~ msgstr "WordPress-MU-Einstellungen" + +#~ msgid "No album" +#~ msgstr "Kein Album" + +#~ msgid "for the Fugue Iconset" +#~ msgstr "für das Fugue-Iconset" + +#~ msgid "Gallery Administrator" +#~ msgstr "Galerie-Administrator" + +#~ msgid "Gallery Editor" +#~ msgstr "Galerie-Mitarbeiter" + +#~ msgid "You currently have %s rights." +#~ msgstr "Du hast derzeit %s Rechte." + +#~ msgid "Upload Space Remaining:" +#~ msgstr "Verbleibender Speicher:" + +#~ msgid "View all images tagged with %s" +#~ msgstr "Zeige alle Bilder, die mit dem Stichwort %s markiert sind" + +#~ msgid "Upgrade sucessful" +#~ msgstr "Aktualisierung erfolgreich" + +#~ msgid "" +#~ "<strong>Would you like to help to translate this plugin ?</strong> <a " +#~ "target=\"_blank\" href=\"%s\">Download</a> the current pot file and read " +#~ "<a href=\"http://alexrabe.de/wordpress-plugins/wordtube/translation-of-" +#~ "plugins/\">here</a> how you can translate the plugin." +#~ msgstr "" +#~ "<strong>Would you like to help to translate this plugin ?</strong> <a " +#~ "target=\"_blank\" href=\"%s\">Download</a> the current pot file and read " +#~ "<a href=\"http://alexrabe.de/wordpress-plugins/wordtube/translation-of-" +#~ "plugins/\">here</a> how you can translate the plugin." + +#~ msgid "" +#~ "<strong>Translation by : </strong><a target=\"_blank\" href=\"\">N/A</a>" +#~ msgstr "" +#~ "<strong>Übersetzt von : </strong><a target=\"_blank\" href=\"\">Alex " +#~ "Rabe</a>" + +#~ msgid "Setup Gallery" +#~ msgstr "Galerie Setup" + +#~ msgid "Setup" +#~ msgstr "Setup" + +#~ msgid "PHP Output Buffer Size" +#~ msgstr "PHP Output Buffer Größe" + +#~ msgid "for PclZip , a PHP library that manage ZIP archives" +#~ msgstr "für PclZip, eine ZIP PHP Library" + +#~ msgid "Crop square thumbnail from image" +#~ msgstr "Mittige Thumbnails aus Bildern ausschneiden" + +#~ msgid "Create square thumbnails, use only the width setting :" +#~ msgstr "Erstellt viereckige Thumbnails, nutzt nur den Wert der Breite :" + +#, fuzzy +#~ msgid "Search Media" +#~ msgstr "Suche nach Stichwörter" + +#~ msgid "Select Gallery" +#~ msgstr "Wähle Galerie" + +#~ msgid "Album Page ID" +#~ msgstr "Album Seiten ID (Page ID)" + +#~ msgid "Import a folder with all images." +#~ msgstr "Importiere ein Verzeichnis mit Bildern." + +#~ msgid "Show tags" +#~ msgstr "Zeige Tags" + +#~ msgid "Delete this file ?" +#~ msgstr "Diese Datei löschen ?" + +#~ msgid "" +#~ "You are about to copy or move %s images \n" +#~ " \n" +#~ " 'Cancel' to stop, 'OK' to proceed." +#~ msgstr "" +#~ "Willst du wirklich %s Bild(er) verschieben \n" +#~ " \n" +#~ " 'Abbrechen' um zu stoppen, 'OK' um die Bearbeitung durchzuführen." + +#~ msgid "Add Gallery" +#~ msgstr "Bilder/Galerie hinzufügen" + +#~ msgid "" +#~ "There are totally %1$s pictures in %2$s galleries, which are spread " +#~ "across %3$s albums." +#~ msgstr "" +#~ "Es gibt insgesamt %1$s Bilder in %2$s Galerien - verteilt in %3$s Alben." + +#~ msgid "GD support" +#~ msgstr "GD Unterstützung" + +#~ msgid "ImageMagick" +#~ msgstr "ImageMagick" + +#~ msgid "Add Metadata :" +#~ msgstr "Metadaten hinzufügen :" + +#~ msgid "Import EXIF, IPTC or XMP data (if available)" +#~ msgstr "EXIF, IPTC oder XMP Daten importieren (wenn verfügbar)" + +#~ msgid "New Version available" +#~ msgstr "Neue Version verfügbar !!" + +#~ msgid "" +#~ "The server reports that a new NextGEN Gallery Version is now available. " +#~ "Please visit the plugin homepage for more information." +#~ msgstr "" +#~ "Der Server benachrichtigt Dich über eine neu verfügbare Version der " +#~ "NextGEN Galerie. Bitte besuche die Plugin Homepage um weitere " +#~ "Informationen zu erhalten." + +#~ msgid "Resample Mode" +#~ msgstr "Resample Modus" + +#~ msgid "Value between 1-5 (higher value, more CPU load)" +#~ msgstr "Wähle zwischen 1-5 (je höhere desto länger braucht der Server)" + +#~ msgid "How many NextGEN Gallery widgets would you like?" +#~ msgstr "Wie viele NextGEN Gallery Widgets möchtest du haben ?" + +#~ msgid "for Simple:Press Forum, it saved me a lot of time" +#~ msgstr "für das Simple:Press Forum, welches mir viel Zeit sparte" + +#~ msgid "Sorry, NextGEN Gallery works only under WordPress 2.5 or higher" +#~ msgstr "" +#~ "Tut mir leid aber NextGEN Gallery arbeitet nur ab WordPress 2.5 und " +#~ "aufwärts" + +#~ msgid "Watch gallery" +#~ msgstr "Galerie ansehen" + +#~ msgid "from" +#~ msgstr "von" + +#~ msgid " : Image resized..." +#~ msgstr " : Bild angepasst..." + +#~ msgid "Some pictures are not writeable :" +#~ msgstr "Einige Bilder sind schreibgeschützt :" + +#~ msgid " : Watermark created..." +#~ msgstr " : Wasserzeichen gesetzt..." + +#~ msgid " : Thumbnail created..." +#~ msgstr ": Thumbnail erstellt..." + +#~ msgid "Follow thumbnails could not created." +#~ msgstr "Folgende Thumbnails konnten nicht erstellt werden :" + +#~ msgid "Some thumbnails are not writeable :" +#~ msgstr "Einige Thumbnails sind schreibgeschützt :" + +#~ msgid "Watermark successfully added" +#~ msgstr "Wasserzeichen erfolgreich erstellt" + +#~ msgid " (require WordPress 2.3 or higher)" +#~ msgstr " (benötigt WordPress 2.3 oder höher)" + +#~ msgid "Description text" +#~ msgstr "Beschreibung" + +#~ msgid "Import a folder with images. Please note :" +#~ msgstr "Importiere ein Verzeichnis mit Bildern. Bitte beachte:" + +#~ msgid "For safe-mode = ON you need to add the subfolder thumbs manually" +#~ msgstr "" +#~ "Da der Safe-Mode (PHP.INI) eingeschaltet ist, mußt Du das " +#~ "Unterverzeichnis für die Vorschaubilder (\"thumbs\") manuell (per FTP) " +#~ "anlegen" + +#~ msgid "The Zip-file is too large. Exceed Memory limit !" +#~ msgstr "Das Zip-File ist zu groß. Speicherlimit überschritten !" + +#~ msgid "Summary" +#~ msgstr "Zusammenfassung" + +#~ msgid "Welcome" +#~ msgstr "Willkommen" + +#~ msgid "" +#~ "Welcome to NextGEN Gallery. Here you can control your images, galleries " +#~ "and albums. You currently have %s rights." +#~ msgstr "" +#~ "Willkommen zur NextGEN Galerie. Hier kannst Du Deine Bilder, Galerien und " +#~ "Alben verwalten. Du hast im Moment %s Rechte." + +#~ msgid "Add a new gallery or import pictures" +#~ msgstr "Neue Galerie erstellen oder Bilder importieren" + +#~ msgid "URL" +#~ msgstr "URL" + +#~ msgid "Delete File" +#~ msgstr "Datei löschen" + +#~ msgid "Delete image ?" +#~ msgstr "Bilder löschen ?" + +#~ msgid "Browse your files" +#~ msgstr "Durchsuche deine Dateien" + +#~ msgid "Direct link to file" +#~ msgstr "Link zur Datei" + +#~ msgid "Show:" +#~ msgstr "Zeige als:" + +#~ msgid "Send to editor »" +#~ msgstr "Zum Editor schicken »" + +#~ msgid "" +#~ "Are you sure you want to delete the file '%s'?\n" +#~ "Click ok to delete or cancel to go back." +#~ msgstr "Bist du sicher das Du diese Datei '%s' löschen willst ?" + +#~ msgid "Alt/Titel text" +#~ msgstr "Alt / Titel Text" diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-fi_FI.mo b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-fi_FI.mo new file mode 100644 index 0000000000000000000000000000000000000000..2139923ae1cfbf6023f79f808fb0ff93a5e376a6 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-fi_FI.mo differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-fi_FI.po b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-fi_FI.po new file mode 100644 index 0000000000000000000000000000000000000000..84d8169473f66d5ebed15572f2f6485b52484fee --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery-fi_FI.po @@ -0,0 +1,4017 @@ +# NextGEN Gallery base (English) .po source +# Copyright (C) 2014 Photocrati Media +# This file is distributed under the same license as the NextGEN Gallery package. +# +msgid "" +msgstr "" +"Project-Id-Version: NextGEN Gallery\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-02-20 19:45-0800\n" +"PO-Revision-Date: 2014-04-12 14:41+0200\n" +"Last-Translator: Vesa Tiirikainen <vesa@tiirikainen.fi>\n" +"Language-Team: Photocrati Media\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: nggallery.php:290 +#, php-format +msgid "Every %d seconds" +msgstr "Joka %dta sekunti" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:157 +#, php-format +msgid "Album: %s" +msgstr "Albumi: %s" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:159 +#, php-format +msgid "Gallery: %s" +msgstr "Galleria: %s" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:177 +msgid "Missing parameters" +msgstr "Puuttuvia parametrejä" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:213 +msgid "Displayed gallery does not exist" +msgstr "Näytettävää galleriaa ei ole olemassa" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:216 +msgid "Invalid request" +msgstr "Väärä pyyntö" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:248 +msgid "NextGEN Gallery - Attach To Post" +msgstr "NextGEN Galleria - Liitä artikkeliin" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:266 +msgid "Display Galleries" +msgstr "Näytä galleriat" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:273 +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_controller.php:7 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:192 +msgid "Add Gallery / Images" +msgstr "Add Gallery / Images" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:280 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:160 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:194 +msgid "Manage Galleries" +msgid_plural "Manage Galleries" +msgstr[0] "Galleria" +msgstr[1] "Galleriat" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:287 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:404 +msgid "Manage Albums" +msgid_plural "Manage Albums" +msgstr[0] "Albumi" +msgstr[1] "Albumit" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:294 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:162 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:198 +msgid "Manage Tags" +msgstr "Tägit" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:115 +msgid "What would you like to display?" +msgstr "Mitä haluat näyttää?" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:139 +msgid "Select a display type" +msgstr "Valitse näyttötapa" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:162 +msgid "Customize the display settings" +msgstr "Muokkaa näyttöasetuksia" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:253 +msgid "No display type selected" +msgstr "Mitään näyttötapaa ei valittuna" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:271 +msgid "Sort or Exclude Images" +msgstr "Lajittele tai piilota kuvat" + +#: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:186 +msgid "Invalid Displayed Gallery" +msgstr "Väärä näytettävä galleria" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:10 +#: products/photocrati_nextgen/modules/nextgen_admin/templates/nextgen_admin_page.php:25 +msgid "Save" +msgstr "Tallenna" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:612 +msgid "Sources" +msgstr "Lähteet" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:646 +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:362 +msgid "(optional)" +msgstr "(valinnainen)" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:654 +msgid "Sets an SEO-friendly name to this gallery for URLs. Currently only in use by the Pro Lightbox." +msgstr "" +"Asettaa SEO-ystävällisen nimen tälle gallerialle URLiä varten. Toistaiseksi " +"käytössä vain Pro Lightboxissa." + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:655 +msgid "Slug" +msgstr "Lyhytnimi" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:860 +msgid "No entities to display for this source." +msgstr "Tästä lähteestä ei näytettäviä kohteita." + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:1264 +msgid "Select a gallery" +msgstr "Valitse galleria" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:1292 +msgid "Albums" +msgstr "Albumit" + +#: products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php:34 +msgid "Code" +msgstr "Koodi" + +#: products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php:48 +msgid "Stylesheet URL" +msgstr "Tyylitiedoston URL" + +#: products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php:62 +msgid "Javascript URL" +msgstr "Javascript URL" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php:7 +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:6 +msgid "Import Folder" +msgstr "Tuontikansio" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:41 +msgid "No gallery name specified" +msgstr "Gallerianimeä ei määritelty" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:55 +msgid "Failed to extract images from ZIP" +msgstr "Epäonnistui purkamaan kuvia ZIP-tiedostosta" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:61 +msgid "Image generation failed" +msgstr "Kuvien generointi epäonnistui" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:70 +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:150 +msgid "An unexpected error occured." +msgstr "Odottamaton virhe" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:77 +msgid "No permissions to upload images. Try refreshing the page or ensuring that your user account has sufficient roles/privileges." +msgstr "" +"Ei valtuuksia tuoda kuvia. Yritä päivittää sivu tai varmista, että " +"käyttäjätililläsi on riittävät roolit/oikeudet." + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:117 +msgid "Directory does not exist." +msgstr "Hakemistoa ei ole olemassa" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:121 +msgid "No directory specified." +msgstr "Hakemistoa ei määritelty." + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:125 +msgid "No permissions to browse folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges." +msgstr "" +"Ei valtuuksia selata kansioita. Yritä päivittää sivu tai varmista, että " +"käyttäjätililläsi on riittävät roolit/oikeudet." + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:155 +msgid "No folder specified" +msgstr "Kansiota ei määritelty" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:159 +msgid "No permissions to import folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges." +msgstr "" +"Ei valtuuksia tuoda kansioita. Yritä päivittää sivu tai varmista, että " +"käyttäjätililläsi on riittävät roolit/oikeudet." + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:7 +msgid "Upload Images" +msgstr "Tuo kuvia" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:1 +msgid "Select a folder to import. The folder name will be used as the title of the gallery." +msgstr "Valitse kansio tuotavaksi. Kansion nimeä käytetään gallerian nimenä." + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:5 +msgid "Keep images in original location." +msgstr "Säilytä kuvat alkuperäissijainnissa." + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:5 +msgid "Caution: If you keep images in the original folder and later delete the gallery, the images in that folder might be deleted depending on your settings." +msgstr "" +"Varoitus: jos säilytät kuvat alkuperäiskansiossa ja myöhemmin poistat " +"gallerian, kuvat tuossa kansiossa voidaan poistaa riippuen asetuksistasi." + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:39 +msgid "Importing gallery" +msgstr "Tuon gallerian" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:41 +msgid "In Progress..." +msgstr "Käynnissä..." + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:56 +#, php-format +msgid "Done! Successfully imported %s images" +msgstr "Valmis! Tuotu onnistuneesti %s kuvaa" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:1268 +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:2 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:189 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:217 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:226 +msgid "Gallery" +msgid_plural "Galleries" +msgstr[0] "Galleria" +msgstr[1] "Gallerioita" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:4 +msgid "Create a new gallery" +msgstr "Luo uusi galleria" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:13 +msgid "You browser doesn't have Flash, Silverlight, HTML5, or HTML4 support." +msgstr "Selaimesi ei tue seuraavia: Flash, Silverlight, HTML5, tai HTML4." + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:99 +msgid "Drag image and ZIP files here or click <strong>Add Files</strong>" +msgstr "" +"Vedä kuva ja ZIP-tiedostot tähän tai klikkaa <strong>Lisää tiedostoja</strong>" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:149 +#, php-format +msgid "%s images were uploaded successfully" +msgstr "%s kuvaa tuotu onnistuneesti" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:152 +msgid "1 image was uploaded successfully" +msgstr "1 kuva tuotu onnistuneesti" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:155 +msgid "0 images were uploaded" +msgstr "0 kuvaa tuotiin" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:169 +msgid "Upload complete" +msgstr "Tuonti valmis" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:191 +msgid "An unexpected error occured. This is most likely due to a server misconfiguration. Check your PHP error log or ask your hosting provider for assistance." +msgstr "" +"Tapahtui odottamaton virhe. Tämä johtuu todennäköisimmin palvelimen väärästä " +"konfiguroinnista. Tarkista PHP-virhelogisi tai pyydä apua " +"palveluntarjoajaltasi." + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:226 +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:167 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:537 +msgid "Enable AJAX pagination" +msgstr "Salli AJAX-sivutus" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:238 +msgid "Override thumbnail settings" +msgstr "Ohita esikatselukuva-asetukset" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:240 +msgid "This does not affect existing thumbnails; overriding the thumbnail settings will create an additional set of thumbnails. To change the size of existing thumbnails please visit 'Manage Galleries' and choose 'Create new thumbnails' for all images in the gallery." +msgstr "" +"Tämä ei vaikuta oleviin esikatselukuviin; esikatselukuvien asetusten ohitus " +"luo lisäjoukon esikatselukuvia. Olevien esikatselukuvien muuttamiseksi käy " +"kohdassa 'Galleriat' ja valitse 'Luo uudet esikatselukuvat' kaikille " +"gallerian kuville." + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:248 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:37 +msgid "Thumbnail dimensions" +msgstr "Esikatselukuvan mitat" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:262 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:431 +msgid "Thumbnail quality" +msgstr "Esikatselukuvan laatu" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:272 +msgid "Thumbnail crop" +msgstr "Esikatselukuvan rajaus" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:281 +msgid "Thumbnail watermark" +msgstr "Esikatselukuvan vesileima" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:306 +msgid "Override image settings" +msgstr "Ohita kuva-asetukset" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:308 +msgid "Overriding the image settings will create an additional set of images" +msgstr "Kuva-asetusten ohitus luo lisäjoukon kuvia" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:316 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:66 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:456 +msgid "Image quality" +msgstr "Kuvan laatu" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:326 +msgid "Image crop" +msgstr "Kuvan rajaus" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:335 +msgid "Image watermark" +msgstr "Kuvan vesileima" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:359 +msgid "Gallery width" +msgstr "Gallerian leveys" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:361 +msgid "An empty or 0 setting will make the gallery full width" +msgstr "Tyhjä tai 0 -asetus tekee galleriasta täysleveän" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:365 +msgid "Pixels" +msgstr "Pikseliä" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:365 +msgid "Percent" +msgstr "Prosenttia" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:374 +msgid "First Image" +msgstr "Ensimmäinen kuva" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:375 +msgid "Average" +msgstr "Keskiarvo" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:100 +msgid "Clear" +msgstr "Pyyhi" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:101 +msgid "Default" +msgstr "Oletus" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:102 +msgid "Select Color" +msgstr "Valitse väri" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:103 +msgid "Current Color" +msgstr "Nykyinen väri" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:174 +msgid "Saved successfully" +msgstr "Tallennettu onnistuneesti" + +#: products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_radio.php:16 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_radio.php:16 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:122 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:24 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:40 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:65 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:191 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php:37 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:407 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:454 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:457 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:460 +msgid "Yes" +msgstr "Kyllä" + +#: products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_radio.php:24 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_radio.php:24 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:123 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:23 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:47 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:72 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:198 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php:44 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:409 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:455 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:458 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:461 +msgid "No" +msgstr "Ei" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:25 +msgid "Display galleries as" +msgstr "Näytä galleriat" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:26 +msgid "How would you like galleries to be displayed?" +msgstr "Miten haluat näyttää galleriasi?" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:28 +msgid "Galleries per page" +msgstr "Gallerioita sivulla" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:47 +msgid "Items per page" +msgstr "Kuvia sivulla" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:48 +msgid "Maximum number of galleries or sub-albums to appear on a single page" +msgstr "Yhdellä sivulla näytettävien gallerioiden tai alialbumien maksimimäärä" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php:28 +#: products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php:15 +#: products/photocrati_nextgen/modules/ngglegacy/view/album-compact.php:45 +#: products/photocrati_nextgen/modules/ngglegacy/view/album-extend.php:31 +msgid "Photos" +msgstr "Valokuvaa" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_mapper.php:94 +msgid "[Show PicLens]" +msgstr "[Näytä PicLens]" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:63 +msgid "Interval" +msgstr "Väli" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:67 +msgid "# of seconds" +msgstr "sekuntimäärä" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:77 +msgid "Image limit" +msgstr "Kuvarajoitus" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:79 +msgid "Maximum number of images to display with recent or random sources" +msgstr "Viimeisten tai satunnaisesti esitettävien kuvien maksimimäärä" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:81 +msgid "# of images" +msgstr "Kuvamäärä" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:112 +msgid "Maximum dimensions" +msgstr "Maksimimitat" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:113 +msgid "Certain themes may allow images to flow over their container if this setting is too large" +msgstr "" +"Jotkin teemat voivat sallia kuvien ylittävän esitysalueen rajat jos tämä " +"asetus on liian suuri" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:123 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:765 +msgid "Enable flash slideshow" +msgstr "Salli flash-diashow" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:125 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:767 +msgid "Integrate the flash based slideshow for all flash supported devices" +msgstr "Integroi flash-diashow kaikille flashia tukeville laitteille" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:134 +msgid "Shuffle" +msgstr "Sekoita" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:146 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:782 +msgid "Show next image on click" +msgstr "Näytä seuraava kuva klikkauksella" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:158 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:786 +msgid "Show navigation bar" +msgstr "Näytä navigointipalkki" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:170 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:790 +msgid "Show loading icon" +msgstr "Näytä latauskuvake" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:182 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:794 +msgid "Use watermark logo" +msgstr "Käytä vesileimalogoa" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:184 +msgid "Use the watermark image in the Flash object. Note: this does not watermark the image itself, and cannot be applied with text watermarks" +msgstr "" +"Käytä vesileimakuvaa Flash-objektissa. Huom: tämä ei vesileimaa varsinaista " +"kuvaa, eikä tätä voi käyttää tekstipohjaisten vesileimojen kanssa" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:194 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:799 +msgid "Stretch image" +msgstr "Venytä kuvaa" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:231 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:827 +msgid "Use slow zooming effect" +msgstr "Käytä hidasta zoomausefektiä" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:243 +msgid "Background music (url)" +msgstr "Taustamusiikki (URL)" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:256 +msgid "Try XHTML validation" +msgstr "Kokeile XHTML-validointia" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:268 +msgid "Background" +msgstr "Tausta" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:280 +msgid "Texts / buttons" +msgstr "Tekstit / painikkeet" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:292 +msgid "Rollover / active" +msgstr "Hiiri päällä / aktiivinen" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:304 +msgid "Screen" +msgstr "Näyttö" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:322 +msgid "Show thumbnail link" +msgstr "Näytä esikatselukuvalinkki" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:338 +msgid "Thumbnail link text" +msgstr "Esikatselukuvan linkin teksti" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:65 +msgid "Images per page" +msgstr "Kuvia sivulla" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:67 +msgid "0 will display all images at once" +msgstr "0 näyttää kaikki kuvat kerralla" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:85 +msgid "Number of columns to display" +msgstr "Näytettävien sarakkeiden lukumäärä" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:89 +msgid "# of columns" +msgstr "Sarakemäärä" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:105 +msgid "Piclens link text" +msgstr "Piclens-linkin teksti" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:123 +msgid "Show piclens link" +msgstr "Näytä piclens-linkki" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:139 +msgid "Add Hidden Images" +msgstr "Lisää piilotetut kuvat" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:141 +msgid "If pagination is used this option will show all images in the modal window (Thickbox, Lightbox etc.) This increases page load." +msgstr "" +"Jos sivutus on käytössä, tämä valinta näyttää kaikki kuvat " +"modaali-ikkunassa(Thickbox, Lightbox jne.) Tämä kasvattaa sivukuormitusta." + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:150 +msgid "Use imagebrowser effect" +msgstr "Käytä kuvaselainefektiä" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:152 +msgid "When active each image in the gallery will link to an imagebrowser display and lightbox effects will not be applied." +msgstr "" +"Jos aktiivisena, jokainen gallerian kuva linkittyy kuvaselainnäyttöön eikä " +"lightbox-efektejä sovelleta." + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:169 +msgid "Browse images without reloading the page." +msgstr "Selaa kuvia lataamatta sivua." + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:184 +msgid "Show slideshow link" +msgstr "Näytä diashow-linkki." + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:200 +msgid "Slideshow link text" +msgstr "Diashow-linkin teksti." + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/index.php:35 +msgid "Slideshows require the <a href=\"http://www.macromedia.com/go/getflashplayer\">Flash Player</a> and a <a href=\"http://www.mozilla.com/firefox/\">browser with Javascript support</a>." +msgstr "" +"Diashowt vaaativat <a href=\"http://www.macromedia.com/go/getflashplayer" +"\">Flash Playerin</a> ja a <a href=\"http://www.mozilla.com/firefox/" +"\">Javascriptiä tukevan selaimen</a>." + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php:13 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:38 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_dimensions.php:13 +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:52 +msgid "Width" +msgstr "Leveys" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php:21 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:40 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_dimensions.php:20 +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:40 +msgid "Height" +msgstr "Korkeus" + +#: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:41 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:26 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:30 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:26 +msgid "Back" +msgstr "Takaisin" + +#: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:49 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:29 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:33 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:29 +msgid "Next" +msgstr "Seuraava" + +#: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:90 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:220 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31 +msgid "Picture" +msgstr "Kuva" + +#: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31 +msgid "of" +msgstr " / " + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:53 +msgid "Link" +msgstr "Linkki" + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:78 +msgid "Display watermark" +msgstr "Näytä vesileima" + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:88 +msgid "Display reflection" +msgstr "Näytä heijastus" + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:98 +msgid "Crop thumbnail" +msgstr "Rajaa esikatselukuvaa" + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:108 +msgid "Float" +msgstr "Kellu" + +#: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:24 +msgid "Maximum number of tags" +msgstr "Tägien maksimimäärä" + +#: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:47 +msgid "Display type" +msgstr "Näyttötyyppi" + +#: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:50 +msgid "The display type that the tagcloud will point its results to" +msgstr "Näyttötyyppi, johon tägipilvi tuottaa tulokset" + +#: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:46 +msgid "Template" +msgstr "Malli" + +#: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:47 +msgid "Use a legacy template when rendering (not recommended)." +msgstr "Käytä legacy-mallia kuvan renderoinnissa (ei suositella)." + +#: products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php:580 +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:658 +#: products/photocrati_nextgen/modules/ngglegacy/lib/multisite.php:23 +msgid "Sorry, you have used your space allocation. Please delete some files to upload more files." +msgstr "" +"Sori, olet käyttänyt tilavarauksesi. Poista joitakin tiedostoja " +"lisätiedostojen tuomiseksi." + +#: products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php:1002 +msgid "Could not calculate resized image dimensions" +msgstr "Ei voinut laskea muutettua kuvakokoa" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:154 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:135 +msgid " mm" +msgstr " mm" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:163 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:141 +msgid " sec" +msgstr " s" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:168 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:145 +msgid "Fired" +msgstr "Laukaistu" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:168 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:145 +msgid "Not fired" +msgstr "Ei laukaistu" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:539 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:452 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:46 +msgid "Aperture" +msgstr "Aukko" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:540 +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:565 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:453 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:478 +msgid "Credit" +msgstr "Tunnustus" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:541 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:454 +msgid "Camera" +msgstr "Kamera" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:542 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:455 +msgid "Caption" +msgstr "Kuvateksti" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:543 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:26 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:114 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:456 +msgid "Date/Time" +msgstr "Pvm/aika" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:544 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:457 +msgid "Copyright" +msgstr "Copyright" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:545 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:458 +msgid "Focal length" +msgstr "Polttoväli" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:546 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:459 +msgid "ISO" +msgstr "ISO" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:547 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:460 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:54 +msgid "Shutter speed" +msgstr "Suljinnopeus" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:548 +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:4 +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:3 +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:3 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:678 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:461 +msgid "Title" +msgstr "Otsikko" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:549 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:459 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:410 +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:132 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:462 +msgid "Author" +msgstr "Tekijä" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:550 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:51 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:176 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:389 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:463 +msgid "Tags" +msgstr "Tägit" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:551 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:464 +msgid "Subject" +msgstr "Kohde" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:552 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:465 +msgid "Make" +msgstr "Malli" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:553 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:466 +msgid "Edit Status" +msgstr "Muokkaustila" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:554 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:467 +msgid "Category" +msgstr "Luokka" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:555 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:468 +msgid "Keywords" +msgstr "Avainsanat" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:556 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:469 +msgid "Date Created" +msgstr "Luontipäivä" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:557 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:470 +msgid "Time Created" +msgstr "Luontiaika" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:558 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:471 +msgid "Author Position" +msgstr "Tekijän ammatti" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:559 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:472 +msgid "City" +msgstr "Kaupunki" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:560 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:473 +msgid "Location" +msgstr "Sijainti" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:561 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:474 +msgid "Province/State" +msgstr "Provinssi/Osavaltio" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:562 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:475 +msgid "Country code" +msgstr "Maakoodi" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:563 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:476 +msgid "Country" +msgstr "Maa" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:564 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:477 +msgid "Headline" +msgstr "Otsikko" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:566 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:479 +msgid "Source" +msgstr "Lähde" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:567 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:480 +msgid "Copyright Notice" +msgstr "Copyright-merkintä" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:568 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:481 +msgid "Contact" +msgstr "Yhteys" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:569 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:482 +msgid "Last modified" +msgstr "Viimeksi muokattu" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:570 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:483 +msgid "Program tool" +msgstr "Muokkausohjelma" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:571 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:484 +msgid "Format" +msgstr "Muoto" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:572 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:485 +msgid "Image Width" +msgstr "Kuvan leveys" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:573 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:486 +msgid "Image Height" +msgstr "Kuvan korkeus" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:574 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:487 +msgid "Flash" +msgstr "Salama" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:647 +#, php-format +msgid "Unable to create directory %s." +msgstr "Ei pysty luomaan hakemistoa %s." + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:652 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:823 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1021 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1106 +#, php-format +msgid "Unable to write to directory %s. Is this directory writable by the server?" +msgstr "" +"Hakemistoon %s ei voi kirjoittaa. Onko tämä hakemisto kirjoitettavissa " +"palvelimella?" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:681 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1146 +#, php-format +msgid "Failed to copy database row for picture %s" +msgstr "Kuvan %s tietokantarivin kopiointi epäonnistui" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:693 +#, php-format +msgid "Failed to get image path for %s" +msgstr "Kuvan %s hakemistopolun haku epäonnistui" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:711 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1132 +#, php-format +msgid "Failed to copy image %1$s to %2$s" +msgstr "Kuvan %1$s kopiointi kuvaksi %2$s epäonnistui" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:715 +#, php-format +msgid "Copied image %1$s to %2$s" +msgstr "Kopioi kuvan %1$s kuvaksi %2$s" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:723 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1158 +#, php-format +msgid "Image %1$s (%2$s) copied as image %3$s (%4$s) » The file already existed in the destination gallery." +msgstr "" +"Kuva %1$s (%2$s) kopioitu kuvaksi %3$s (%4$s) » kohdegalleriassa oli jo " +"samanniminen tiedosto." + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:727 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1161 +#, php-format +msgid "Image %1$s (%2$s) copied as image %3$s (%4$s)" +msgstr "Kuva %1$s (%2$s) kopioitu kuvaksi %3$s (%4$s)" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:740 +#, php-format +msgid "Copied %1$s picture(s) to gallery %2$s ." +msgstr "Kopioitu %1$s kuva(a) galleriaan %2$s ." + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:767 +msgid "Could not find image" +msgstr "Kuvaa ei löytynyt" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:772 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:388 +msgid " is not writeable" +msgstr " ei voi kirjoittaa" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:777 +msgid "Backup file does not exist" +msgstr "Varmistustiedostoa ei ole olemassa" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:782 +msgid "Could not restore original image" +msgstr "Alkuperäiskuvan palautus ei onnistunut" + +#: products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_controller.php:17 +#: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:242 +#: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:328 +msgid "Gallery Settings" +msgstr "Gallerian asetukset" + +#: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php:73 +msgid "Source not compatible with selected display type" +msgstr "Lähde ei sovi yhteen valitun näyttötyypin kanssa" + +#: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:327 +msgid "NextGEN Gallery & Album Settings" +msgstr "NextGEN galleria- & albumiasetukset" + +#: products/photocrati_nextgen/modules/nextgen_gallery_display/templates/alt_view_link_text.php:15 +#: products/photocrati_nextgen/modules/nextgen_gallery_display/templates/return_link_text.php:15 +msgid "link text" +msgstr "linkkiteksti" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:12 +msgid "Image Options" +msgstr "Kuvavalinnat" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:22 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:588 +#: products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:76 +msgid "Custom" +msgstr "Räätälöity" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:23 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:111 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:549 +msgid "Image ID" +msgstr "Kuvan ID" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:24 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:570 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:112 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:166 +msgid "Filename" +msgstr "Tiedostonimi" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:25 +msgid "Alt/Title Text" +msgstr "Alt/Otsikkoteksti" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:38 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:115 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:557 +msgid "Ascending" +msgstr "Nouseva" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:39 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:116 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:558 +msgid "Descending" +msgstr "Laskeva" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:50 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:388 +msgid "Categories" +msgstr "Kategoriat" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:81 +msgid "Gallery path does not exist and could not be created" +msgstr "Galleriapolkua ei ole eikä sitä voitu luoda" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:86 +msgid "Where would you like galleries stored?" +msgstr "Minne haluaisit tallentaa galleriasi?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:87 +msgid "Where galleries and their images are stored" +msgstr "Gallerioiden ja niiden kuvien tallennuspaikka" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:89 +msgid "Delete Image Files?" +msgstr "Poista kuvatiedostot?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:90 +msgid "When enabled, image files will be removed after a Gallery has been deleted" +msgstr "Kun vlittu, kuvatiedostot poistetaan gallerian poiston jälkeen" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:92 +msgid "Show Related Images on Posts?" +msgstr "Näytä liittyvät kuvat artikkeleissa?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:93 +msgid "When enabled, related images will be appended to each post by matching the posts tags/categories to image tags" +msgstr "" +"Kun valittu, liittyvät kuvat lisätään jokaiseen artikkeliin, jonka " +"tägit/kategoriat vastaavat kuvien tägejä" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:95 +msgid "(Show Customization Settings)" +msgstr "(Näytä räätälöintiasetukset)" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:96 +msgid "(Hide Customization Settings)" +msgstr "(Piilota räätälöintiasetukset)" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:97 +msgid "How should related images be match?" +msgstr "Miten liittyvien kuvien pitäisi vastata?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:100 +msgid "Maximum # of related images to display" +msgstr "Näytettävien liittyvien kuvien maksimimäärä" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:102 +msgid "Heading for related images" +msgstr "Liittyvien kuvien otsikko" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:104 +msgid "What's the default sorting method?" +msgstr "Mikä on oletus lajittelumenetelmälle?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:107 +msgid "Sort in what direction?" +msgstr "Mihin suuntaan lajitellaan?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:110 +msgid "Automatically resize images after upload" +msgstr "Muuta kuvien koko automaattisesti tuonnin jälkeen" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:111 +msgid "It is recommended that your images be resized to be web friendly" +msgstr "On suositeltavaa muuttaa kuvien koko nettiystävälliseksi" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:113 +msgid "What should images be resized to?" +msgstr "Mihin kokoon kuvat pitäisi muuttaa?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:114 +msgid "After images are uploaded, they will be resized to the above dimensions and quality" +msgstr "Kun kuvat on tuotu, ne muutetaan yllä oleviin mittoihin ja laatuun" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:115 +msgid "Width:" +msgstr "Leveys:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:116 +msgid "Height:" +msgstr "Korkeus:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:117 +msgid "Quality:" +msgstr "Laatu:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:121 +msgid "Backup the original images?" +msgstr "Varmista alkuperäiskuvat?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:12 +msgid "Lightbox Effects" +msgstr "Lightbox-efektit" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:38 +msgid "What effect would you like to use?" +msgstr "Mitä efektiä haluaisit käyttää?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:12 +msgid "Miscellaneous" +msgstr "Sekalaista" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:21 +msgid "Add MediaRSS link?" +msgstr "Lisää MediaRSS-linkki?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:22 +msgid "When enabled, adds a MediaRSS link to your header. Third-party web services can use this to publish your galleries" +msgstr "" +"Kun valittu, sivujesi yläotsikkoon lisätään MediaRSS-linkki. Kolmannen " +"osapuolen web-palvelut voivat käyttää tätä julkaistakseen gallerioitasi" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:26 +msgid "Clear image cache" +msgstr "Tyhjennä kuvien välimuisti" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:27 +msgid "" +"Completely clear the NextGEN cache of all image modifications?\n" +"\n" +"Choose [Cancel] to Stop, [OK] to proceed." +msgstr "" +"Tyhennä NextGENin välimuisti täysin kaikista kuvamuokkauksista?\n\nValitse " +"[Peruuta] pysäyttääksesi, [OK] jatkaaksesi." + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:32 +msgid "Permalink slug" +msgstr "Pysyvien linkkien lyhytnimi" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:39 +msgid "Maximum image count" +msgstr "Kuvien maksimimäärä" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:41 +msgid "This is the maximum limit of images that NextGEN will restrict itself to querying" +msgstr "Tämä on NextGENin rajoitus hauissa käytettävien kuvien maksimimäärälle" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_controller.php:22 +#: products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php:39 +msgid "Other Options" +msgstr "Muut valinnat" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:7 +msgid "Reset Options" +msgstr "Palauta valinnat" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:15 +msgid "Reset all options to default settings" +msgstr "Palauta kaikki valinnat oletusasetuksiin" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:16 +msgid "Replace all existing options and gallery options with their default settings" +msgstr "Vaihda kaikki valinnat ja galleriavalinnat niiden alkuperäisasetuksiin" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:17 +msgid "Reset settings" +msgstr "Palauta asetukseste" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:18 +msgid "" +"Reset all options to default settings?\n" +"\n" +"Choose [Cancel] to Stop, [OK] to proceed." +msgstr "" +"Palauta kaikki valinnat oletusasetuksiin?\n\nValitse [Peruuta] " +"pysäyttääksesi, [OK] jatkaaksesi." + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.roles_form.php:7 +msgid "Roles & Capabilities" +msgstr "Roolit & kyvykkyydet" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:12 +msgid "Styles" +msgstr "Tyylit" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:18 +msgid "What stylesheet would you like to use?" +msgstr "Mitä tyylitiedostoa haluat käyttää?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:21 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:136 +msgid "(Show Customization Options)" +msgstr "(Näytä räätälöintivalinnat)" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:22 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:137 +msgid "(Hide Customization Options)" +msgstr "(Piilota räätälöintivalinnat)" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:23 +msgid "File Content:" +msgstr "Tiedoston sisältö:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:24 +msgid "Changes you make to the contents will be saved to" +msgstr "Sisältöön tehtävät muutokset tallennetaan paikkaan " + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:25 +msgid "You could edit this file if it were writable" +msgstr "Voisit muokata tätä tiedostoa, jos sen voisi kirjoittaa" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:12 +msgid "Thumbnail Options" +msgstr "Esikatselukuvien valinnat" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:20 +msgid "Default thumbnail dimensions:" +msgstr "Esikatselukuvien oletusmitat:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:21 +msgid "When generating thumbnails, what image dimensions do you desire?" +msgstr "Millaiset mitat haluaisit luotaville esikatselukuville?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:24 +msgid "Set fix dimension?" +msgstr "Aseta kiinteä mitta?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:25 +msgid "Ignore the aspect ratio, no portrait thumbnails?" +msgstr "Ohita sivusuhde, ei pystyssä olevia esikatselukuvia?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:27 +msgid "Adjust Thumbnail Quality?" +msgstr "Muuta esikatselukuvien laatua?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:28 +msgid "When generating thumbnails, what image quality do you desire?" +msgstr "Minkä laadun haluaisit luotaville esikatselukuville?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:30 +msgid "Size List" +msgstr "Kokolista" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:31 +msgid "List of default sizes used for thumbnails and images" +msgstr "Oletuskokojen lista esikatselukuville ja kuville" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:12 +msgid "Watermarks" +msgstr "Vesileimat" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:41 +msgid "Using an Image" +msgstr "Käytetään kuvaa" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:42 +msgid "Using Text" +msgstr "Käytetään tekstiä" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:69 +msgid "An absolute or relative (to the site document root) file system path" +msgstr "" +"Absoluuttinen tai suhteellinen (sivuston dokumenttien juureen) " +"tiedostojärjestelmän polku" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:71 +msgid "An absolute or relative (to the site document root) file system path or an HTTP url" +msgstr "" +"Absoluuttinen tai suhteellinen (sivuston dokumenttien juureen) " +"tiedostojärjestelmän polku tai HTTP URL" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:74 +msgid "Image URL:" +msgstr "Kuvan URL:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:90 +msgid "Font Family:" +msgstr "Fonttiperhe:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:92 +msgid "Font Size:" +msgstr "Fonttikoko:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:94 +msgid "Font Color:" +msgstr "Fonttiväri:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:97 +msgid "Text:" +msgstr "Teksti:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:99 +msgid "Opacity:" +msgstr "Läpinäkyvyys:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:126 +msgid "Please note: You can only activate the watermark under Manage Gallery. This action cannot be undone." +msgstr "" +"Huom: voit aktivoida vesileiman vain gallerioiden hallinnasta. Tätä " +"toimenpidettä ei voi perua." + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:127 +msgid "How will you generate a watermark?" +msgstr "Miten haluat luoda vesileiman?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:131 +msgid "Position:" +msgstr "Sijainti:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:133 +msgid "Offset:" +msgstr "Etäisyys:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:139 +msgid "Preview of saved settings:" +msgstr "Tallennettujen asetusten esikatselu:" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:140 +msgid "Refresh preview image" +msgstr "Tuoreuta esikatselukuva" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:34 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:37 +msgid "(Show Advanced Settings)" +msgstr "(Näytä lisäasetukset)" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:35 +msgid "(Hide Advanced Settings)" +msgstr "(Piilota lisäasetukset)" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:56 +msgid "What must the lightbox be applied to?" +msgstr "Mihin lightboxia sovelletaan?" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:60 +msgid "Only apply to NextGEN images" +msgstr "Sovella vain NextGEN-kuviin" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:61 +msgid "Only apply to NextGEN and WordPress images" +msgstr "Sovella vain NextGEN- ja WordPress-kuviin" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:62 +msgid "Try to apply to all images" +msgstr "Yritä soveltaa kaikkiin kuviin" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:63 +msgid "Try to apply to all images that link to image files" +msgstr "Yritä soveltaa kaikkiin kuviin, joissa on kuvatiedostolinkki" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:21 +msgid "Place any custom stylesheets in <strong>wp-content/ngg_styles</strong>" +msgstr "" +"Sijoita räätälöidyt tyylitiedostot kansioon " +"<strong>wp-content/ngg_styles</strong>" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:24 +#, php-format +msgid "All stylesheets must contain a <a href='#' onclick='%s'>file header</a>" +msgstr "" +"Kaikissa tyylitiedostoissa on oltava <a href='#' onclick='%s'>file header</a>" + +#: products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php:41 +msgid "Related Images" +msgstr "Liittyvät kuvat" + +#: products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php:61 +msgid "[Show slideshow]" +msgstr "[Näytä diashow]" + +#: products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php:62 +msgid "[Show thumbnails]" +msgstr "[Näytä esikatselukuvat]" + +#: products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php:425 +msgid "Sorry, you must be able to manage galleries" +msgstr "Sori, sinun on voitava hallita gallerioitasi" + +#: products/photocrati_nextgen/modules/widget/class.widget_gallery.php:7 +msgid "Add recent or random images from the galleries" +msgstr "Lisää tuoreimmat tai satunnaiset kuvat gallerioista" + +#: products/photocrati_nextgen/modules/widget/class.widget_gallery.php:8 +msgid "NextGEN Widget" +msgstr "NextGEN Vimpain" + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:9 +msgid "Widget that displays Media RSS links for NextGEN Gallery." +msgstr "Vimpain, joka näyttää Media RSS -linkit NextGEN galleriaan." + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:10 +msgid "NextGEN Media RSS" +msgstr "NextGEN Media RSS" + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:22 +msgid "Media RSS" +msgstr "Media RSS" + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:23 +msgid "Link to the main image feed" +msgstr "Linkki kuvan pääsyötteseen" + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:93 +#: products/photocrati_nextgen/modules/ngglegacy/view/gallery-caption.php:32 +#: products/photocrati_nextgen/modules/ngglegacy/view/gallery.php:32 +msgid "[View with PicLens]" +msgstr "[Näytä PicLensillä]" + +#: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:7 +msgid "Show a NextGEN Gallery Slideshow" +msgstr "Näytä NextGEN Gallery diashow" + +#: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:8 +msgid "NextGEN Slideshow" +msgstr "NextGEN diashow" + +#: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:76 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:321 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:521 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:721 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:215 +msgid "Slideshow" +msgstr "Diashow" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:15 +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:229 +msgid "Show" +msgstr "Näytä" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:26 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:316 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:520 +msgid "Thumbnails" +msgstr "Esikatselukuvat" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:29 +msgid "Original images" +msgstr "Alkuperäiskuvat" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:42 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:822 +msgid "random" +msgstr "satunnaiset" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:50 +msgid "recently added" +msgstr "tuoreimmat" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:62 +msgid "Enable IE8 Web Slices" +msgstr "Salli IE8 Web Slices" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:68 +msgid "Width x Height" +msgstr "Leveys x korkeus" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:87 +msgid "Select" +msgstr "Valitse" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:92 +msgid "All galleries" +msgstr "Kaikki galleriat" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:95 +msgid "Only which are not listed" +msgstr "Vain listaamattomat" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:98 +msgid "Only which are listed" +msgstr "Vain listatut" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:107 +msgid "Gallery ID" +msgstr "Gallerian ID" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:114 +msgid "Gallery IDs, separated by commas." +msgstr "Gallerioiden ID:t erotettuna pilkuilla." + +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:19 +msgid "Show Media RSS icon" +msgstr "Näytä Media RSS -kuvake" + +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:30 +msgid "Show the Media RSS link" +msgstr "Näytä Media RSS -linkki" + +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:36 +msgid "Text for Media RSS link" +msgstr "Teksti Media RSS -linkkiin" + +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:47 +msgid "Tooltip text for Media RSS link" +msgstr "Vinkkiteksti Media RSS -linkkiin" + +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:15 +msgid "Select Gallery" +msgstr "Valitse galleria" + +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:23 +msgid "All images" +msgstr "Kaikki kuvat" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:159 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:190 +msgid "Overview" +msgstr "Yleistä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:172 +msgid "Network settings" +msgstr "Verkkoasetukset" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:305 +msgid "You do not have the correct permission" +msgstr "Sinulla ei ole oikeaa valtuutusta" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:306 +msgid "Unexpected Error" +msgstr "Odottamaton virhe" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:307 +msgid "A failure occurred" +msgstr "Tapahtui virhe" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:311 +msgid "You have attempted to queue too many files." +msgstr "Olet yrittänyt laittaa liian monta tiedostoa jonoon." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:312 +msgid "This file exceeds the maximum upload size for this site." +msgstr "Tämän tiedoston koko on suurempi kuin sivuston maksimituontikoko." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:313 +msgid "This file is empty. Please try another." +msgstr "Tämä tiedosto on tyhjä. Yritä toista." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:314 +msgid "This file type is not allowed. Please try another." +msgstr "Tämä tiedostotyyppi ei ole sallittu. Yritä toista." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:315 +msgid "This file is not an image. Please try another." +msgstr "Tämä tiedosto ei ole kuva. Yritä toista." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:316 +msgid "Memory exceeded. Please try another smaller file." +msgstr "Muisti ylitetty. Yritä toista pienempää tiedostoa." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:317 +msgid "This is larger than the maximum size. Please try another." +msgstr "Tämä on maksimikokoa suurempi. Yritä toista." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:318 +msgid "An error occurred in the upload. Please try again later." +msgstr "Tuonnissa tapahtui virhe. Yritä myöhemmin uudestaan." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:319 +msgid "There was a configuration error. Please contact the server administrator." +msgstr "Ilmeni asetusvirhe. Ota yhteys palvelimen administraattoriin." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:320 +msgid "You may only upload 1 file." +msgstr "Voit tuoda vain yhden (1) tiedoston." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:321 +msgid "HTTP error." +msgstr "HTTP-virhe." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:322 +msgid "Upload failed." +msgstr "Tuonti epäonnistui." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:323 +msgid "IO error." +msgstr "IO-virhe." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:324 +msgid "Security error." +msgstr "Turvavirhe." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:325 +msgid "File canceled." +msgstr "Tiedosto peruttu." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:326 +msgid "Upload stopped." +msgstr "Tuonti pysähtyi." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:327 +msgid "Dismiss" +msgstr "Poistu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:328 +msgid "Crunching…" +msgstr "Murskaa…" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:329 +msgid "moved to the trash." +msgstr "siirretty roskakoriin." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:330 +#, php-format +msgid "“%s” has failed to upload due to an error" +msgstr "“%s” tuonti epäonnistui virheen vuoksi" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:352 +msgid "L O A D I N G" +msgstr "L A T A A N" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:353 +msgid "Click to Close" +msgstr "Klikkaa sulkeaksesi" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:462 +msgid "<a href=\"http://www.nextgen-gallery.com\" target=\"_blank\">Introduction</a>" +msgstr "" +"<a href=\"http://www.nextgen-gallery.com\" target=\"_blank\">Johdanto</a>" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:465 +msgid "<a href=\"http://www.nextgen-gallery.com/languages\" target=\"_blank\">Languages</a>" +msgstr "" +"<a href=\"http://www.nextgen-gallery.com/languages\" " +"target=\"_blank\">Kielet</a>" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:470 +msgid "Get help with NextGEN Gallery" +msgstr "Saa apua NextGEN Galleryyn" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:474 +msgid "More Help & Info" +msgstr "Lisää apua & info" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:476 +msgid "<a href=\"http://wordpress.org/tags/nextgen-gallery?forum_id=10\" target=\"_blank\">Support Forums</a>" +msgstr "" +"<a href=\"http://wordpress.org/tags/nextgen-gallery?forum_id=10\" " +"target=\"_blank\">Tukifoorumit (engl.)</a>" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:477 +msgid "FAQ" +msgstr "FAQ (engl.)" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:478 +msgid "Feature request" +msgstr "Ominaisuuspyyntö" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:479 +msgid "Get your language pack" +msgstr "Tuo kielipakettisi" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:480 +msgid "Contribute development" +msgstr "Tue kehitystyötä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:481 +msgid "Download latest version" +msgstr "Lataa viimeisin versio" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/ajax.php:360 +#, php-format +msgid "Could create image with %s x %s pixel" +msgstr "%s x %s pikselin kuvan luonti onnistui" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:172 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:216 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:239 +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:19 +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:22 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:619 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:7 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:10 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:13 +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:17 +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:20 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:10 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:13 +msgid "Cheatin’ uh?" +msgstr "Petkutat’ häh?" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:180 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:209 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:253 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:178 +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:24 +msgid "Update Successfully" +msgstr "Päivitys onnistui" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:227 +msgid "Album deleted" +msgstr "Albumi poistettu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:389 +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:55 +msgid "Edit Album" +msgstr "Muokkaa albumia" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:410 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:459 +msgid "Select album" +msgstr "Valitse albumi" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:412 +msgid "No album selected" +msgstr "Albumia ei valittuna" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:423 +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:166 +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:94 +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:112 +msgid "Update" +msgstr "Päivitä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:425 +msgid "Edit album" +msgstr "Muokkaa albumia" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:428 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:187 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:362 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:364 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:227 +msgid "Delete" +msgstr "Poista" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:432 +msgid "Add new album" +msgstr "Lisää uusi albumi" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:434 +msgid "Add" +msgstr "Lisää" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:445 +msgid "Show / hide used galleries" +msgstr "Näytä / piilota käytetyt galleriat" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:445 +msgid "[Show all]" +msgstr "[Näytä kaikki]" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:446 +msgid "Maximize the widget content" +msgstr "Maksimoi vimpaimen sisältö" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:446 +msgid "[Maximize]" +msgstr "[Maksimoi]" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:447 +msgid "Minimize the widget content" +msgstr "Minimoi vimpaimen sisältö" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:447 +msgid "[Minimize]" +msgstr "[Minimoi]" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:449 +msgid "After you create and select a album, you can drag and drop a gallery or another album into your new album below" +msgstr "" +"Kun luot ja valitset albumin, voit vetää ja pudottaa gallerian tai toisen " +"albumin alle uuteen albumiisi" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:475 +msgid "Select gallery" +msgstr "Valitse galleria" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:500 +msgid "Album ID" +msgstr "Albumin ID" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:513 +msgid "No album selected!" +msgstr "Ei albumia valittuna!" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:534 +msgid "Album name:" +msgstr "Albumin nimi:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:540 +msgid "Album description:" +msgstr "Albumin kuvaus:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:546 +msgid "Select a preview image:" +msgstr "Valitse esikatselukuva:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:549 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:552 +#: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_preview_image_field.php:3 +msgid "No picture" +msgstr "Ei kuvaa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:563 +msgid "Page Link to" +msgstr "Linkki sivulle" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:582 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:337 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:366 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:397 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:406 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:442 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:471 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:502 +msgid "OK" +msgstr "OK" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:584 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:339 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:368 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:399 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:408 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:444 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:473 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:504 +msgid "Cancel" +msgstr "Peruuta" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:677 +msgid "Name" +msgstr "Nimi" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:679 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:229 +msgid "Page" +msgstr "Sivu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:116 +msgid "Select with the mouse the area for the new thumbnail" +msgstr "Valitse hiirellä uuden esikatselukuvan alue" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:130 +msgid "Thumbnail updated" +msgstr "Esikatselukuva päivitetty" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:135 +msgid "Error updating thumbnail" +msgstr "Virhe esikatselukuvan päivityksessä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:151 +msgid "Select the area for the thumbnail from the picture on the left." +msgstr "Valitse vasemmalla kuvasta esikatselukuvan alue" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:39 +msgid "No valid gallery name!" +msgstr "Ei kelvollinen gallerianimi!" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:46 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:80 +msgid "Directory" +msgstr "Hakemisto" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:46 +msgid "didn't exist. Please create first the main gallery folder " +msgstr "ei ole olemassa. Luo ensin gallerioiden pääkansio" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:47 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:56 +msgid "Check this link, if you didn't know how to set the permission :" +msgstr "Tarkista tämä linkki, jos et tiedä miten valtuutus asetetaan :" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:80 +msgid "is not writeable !" +msgstr "ei voi kirjoittaa !" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:76 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:85 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:736 +#: products/photocrati_nextgen/modules/ngglegacy/lib/core.php:101 +msgid "Unable to create directory " +msgstr "Hakemistoa ei voitu luoda" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:89 +msgid "The server setting Safe-Mode is on !" +msgstr "Palvelimen Safe-Mode -asetus käytössä !" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:90 +msgid "If you have problems, please create directory" +msgstr "Jos ongelmia, luo käsin hakemisto" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:91 +msgid "and the thumbnails directory" +msgstr "ja esikatselukuvien hakemisto" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:91 +msgid "with permission 777 manually !" +msgstr "valtuutuksella 777 !" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:116 +#, php-format +msgid "Gallery ID %1$s successfully created. You can show this gallery in your post or page with the shortcode %2$s.<br/>" +msgstr "" +"Galleria ID %1$s luonti onnistui. Voit näyttää tämän gallerian artikkelissa " +"tai sivulla käyttäen lyhytkoodia %2$s.<br/>" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:119 +msgid "Edit gallery" +msgstr "Muokkaa galleriaa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:188 +msgid "Error while creating thumbnail." +msgstr "Virhe esikatselukuvan luonnissa." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:242 +msgid "Error while resizing image." +msgstr "Virhe kuvan pienentämisessä," + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:326 +msgid "Error while rotating image." +msgstr "Virhe kuvan pyörityksessä." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:361 +msgid "Error while applying watermark to image." +msgstr "Virhe vesileiman soveltamisessa kuvaan." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:385 +msgid "Object didn't contain correct data" +msgstr "Kohde ei sisältänyt oikeaa dataa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:391 +msgid "File do not exists" +msgstr "Tiedostoa ei ole olemassa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:395 +msgid "Couldn't restore original image" +msgstr "Ei voinut palauttaa alkuperäiskuvaa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:511 +msgid "(Error : Couldn't not update data base)" +msgstr "(Virhe: ei voinut päivittää tietokantaa)" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:518 +msgid "(Error : Couldn't not update meta data)" +msgstr "(Virhe: ei voinut päivittää metadataa)" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:527 +msgid "(Error : Couldn't not find image)" +msgstr "(Virhe: ei löytänyt kuvaa)" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:670 +msgid "No valid URL path " +msgstr "Ei validi URL-polku" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:686 +msgid "Import via cURL failed." +msgstr "Tuonti cURL:illa epäonnistui." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:703 +msgid "Uploaded file was no or a faulty zip file ! The server recognized : " +msgstr "" +"Tuotu tiedosto ei ollut tai oli virheellinen ZIP-tiedosto. Palvelin ilmoitti :" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:720 +msgid "Could not get a valid foldername" +msgstr "Ei saanut validia kansionimeä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:731 +#, php-format +msgid "Unable to create directory %s. Is its parent directory writable by the server?" +msgstr "" +"Ei voinut luoda hakemistoa %s. Onko sen emohakemisto kirjoituskelpoinen " +"palvelimella?" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:746 +msgid "Zip-File successfully unpacked" +msgstr "ZIP-tiedosto purettu onnistuneesti" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:777 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:877 +msgid "No gallery selected !" +msgstr "Galleriaa ei valittuna !" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:785 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:902 +msgid "Failure in database, no gallery path set !" +msgstr "Virhe tietokannssa, galleriapolkua ei asetettuna !" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:809 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:896 +msgid "is no valid image file!" +msgstr "ei ole sopiva kvuatiedosto!" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:830 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:919 +msgid "Error, the file could not be moved to : " +msgstr "Virhe, tiedostoa ei voitu siirtää paikkaan :" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:835 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:923 +msgid "Error, the file permissions could not be set" +msgstr "Virhe, tiedoston valtuutuksia ei voitu asettaa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:853 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:111 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:189 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:238 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:322 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:661 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:740 +msgid "Create new thumbnails" +msgstr "Luo uudet esikatselukuvat" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:858 +msgid " Image(s) successfully added" +msgstr " Kuva(a) lisätty onnistuneesti" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:885 +msgid "Invalid upload. Error Code : " +msgstr "Väärä tuonti. Virhekoodi :" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:961 +#, php-format +msgid "SAFE MODE Restriction in effect! You need to create the folder <strong>%s</strong> manually" +msgstr "" +"SAFE MODE -rajoitus käytössä! Sinun on luotava käsin hakemisto " +"<strong>%s</strong>." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:962 +#, php-format +msgid "When safe_mode is on, PHP checks to see if the owner (%s) of the current script matches the owner (%s) of the file to be operated on by a file function or its directory" +msgstr "" +"Kun safe_mode on käytössä, PHP tarkistaa, vastaako nykyisen skriptin omistaja " +"(%s) omistajaa (%s) tiedostolle, jota käsitellään tiedostofunktiolla tai sen " +"hakemistossa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1015 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1092 +msgid "The destination gallery does not exist" +msgstr "Kohdegalleriaa ei ole olemassa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1046 +#, php-format +msgid "Failed to move image %1$s to %2$s" +msgstr "Kuvan %1$s siirto kuvaksi %2$s epäonnistui" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1066 +#, php-format +msgid "Moved %1$s picture(s) to gallery : %2$s ." +msgstr "Siirretty %1$s kuva(a) galleriaan : %2$s ." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1170 +#, php-format +msgid "Copied %1$s picture(s) to gallery: %2$s ." +msgstr "Kopioitu %1$s kuva(a) galleriaan : %2$s ." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1278 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini" +msgstr "" +"Tuontavan tiedoston koko ylittää upload_max_filesize -asetuksen php.ini " +"-tiedostossa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1281 +msgid "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" +msgstr "" +"Tuotavan tiedoston koko ylittää MAX_FILE_SIZE -asetuksen, joka on määritelty " +"HTML -lomakkeessa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1284 +msgid "The uploaded file was only partially uploaded" +msgstr "Tuotava tiedosto tuotiin vain osittain" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1287 +msgid "No file was uploaded" +msgstr "Mitään tiedostoa ei tuotu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1290 +msgid "Missing a temporary folder" +msgstr "Tilapäishakemisto puuttuu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1293 +msgid "Failed to write file to disk" +msgstr "Tiedoston kirjoitus levylle epäonnistui" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1296 +msgid "File upload stopped by extension" +msgstr "Tiedostotyyppi pysäytti tiedoston tuonnin" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1299 +msgid "Unknown upload error" +msgstr "Tuntematon tuontivirhe" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/install.php:20 +msgid "Sorry, NextGEN Gallery works only with a role called administrator" +msgstr "Sori, NextGEN Gallery toimii vain roolilla administrator" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/install.php:92 +msgid "NextGEN Gallery : Tables could not created, please check your database settings" +msgstr "" +"NextGEN Gallery : Tauluja ei voitu luoda, tarkista tietokanta-asetuksesi" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:99 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:206 +msgid "No images selected" +msgstr "Ei kuvia valittuna" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:107 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:190 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:234 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:323 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:642 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:724 +msgid "Resize images" +msgstr "Pienennä kuvien kokoa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:116 +#, php-format +msgid "" +"You are about to start the bulk edit for %s galleries \n" +" \n" +" 'Cancel' to stop, 'OK' to proceed." +msgstr "" +"Olet aloittamassa massamuokkauksen %s gallerialle \n \nKlikkaa 'Peruuta' " +"pysäyttääksesi, 'OK' jatkaaksesi." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:154 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:197 +msgid "Add new gallery" +msgstr "Lisää uusi galleria" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:171 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:174 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:272 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:275 +msgid "Search Images" +msgstr "Etsi kuvia" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:186 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:320 +msgid "Bulk actions" +msgstr "Massatoiminnot" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:188 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:321 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:572 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:687 +msgid "Set watermark" +msgstr "Aseta vesileima" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:191 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:326 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:577 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:708 +msgid "Import metadata" +msgstr "Tuo metadata" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:192 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:324 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:567 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:684 +msgid "Recover from backup" +msgstr "Palauta varmistuksesta" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:194 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:335 +msgid "Apply" +msgstr "Sovella" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:262 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:253 +msgid "Edit" +msgstr "Muokkaa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:309 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:379 +msgid "No entries found" +msgstr "Kohteita ei löydetty" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:327 +msgid "New Gallery" +msgstr "Uusi galleria" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:329 +msgid "Create a new , empty gallery below the folder" +msgstr "Luo uusi, tyhjä galleria kansion alle" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:331 +msgid "Allowed characters for file and folder names are" +msgstr "Sallitut merkit tiedosto- ja kansionimissä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:357 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:462 +msgid "Resize Images to" +msgstr "Muuta kuvien kooksi" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:361 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:466 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:453 +msgid "Width x height (in pixel). NextGEN Gallery will keep ratio size" +msgstr "Leveys x korkeus (pikseleinä). NextGEN Gallery säilyttää sivusuhteen" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:385 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:490 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:40 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:416 +msgid "Width x height (in pixel)" +msgstr "Leveys x korkeus (pikseleinä)" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:391 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:496 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:426 +msgid "Set fix dimension" +msgstr "Aseta kiinteä dimensio" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:393 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:498 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:428 +msgid "Ignore the aspect ratio, no portrait thumbnails" +msgstr "Älä välitä sivusuhteesta, ei esikatselukuvia pystyssä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:456 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:568 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:156 +msgid "ID" +msgstr "ID" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:458 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:571 +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:245 +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:134 +msgid "Description" +msgstr "Kuvaus" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:460 +msgid "Page ID" +msgstr "Sivu ID" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:35 +msgid "Gallery not found." +msgstr "Galleriaa ei löytynyt." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:41 +msgid "Sorry, you have no access here" +msgstr "Sori, sinulla ei ole pääsyä tänne" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:214 +msgid "Copy image to..." +msgstr "Kopioi kuva paikkaan..." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:218 +msgid "Move image to..." +msgstr "Siirrä kuva paikkaan..." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:222 +msgid "Add new tags" +msgstr "Lisää uusia tägejä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:226 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:332 +msgid "Delete tags" +msgstr "Poista tägejä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:230 +msgid "Overwrite" +msgstr "Kirjoita yli" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:243 +#, php-format +msgid "" +"You are about to start the bulk edit for %s images \n" +" \n" +" 'Cancel' to stop, 'OK' to proceed." +msgstr "" +"Olet aloittamassa massamuokkauksen %s kuvalle \n \nKlikkaa 'Peruuta' " +"pysäyttääksesi, 'OK' jatkaaksesi." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:269 +#, php-format +msgid "Search results for “%s”" +msgstr "Etsintätulokset haulle “%s”" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:298 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:488 +msgid "Gallery settings" +msgstr "Gallerian asetukset" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:298 +msgid "Click here for more settings" +msgstr "Klikkaa tästä lisäasetuksille" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:304 +msgid "Scan Folder for new images" +msgstr "Skannaa kansiosta uusia kuvia" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:306 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:341 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:386 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:400 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:436 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:478 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:563 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:598 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:708 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:861 +msgid "Save Changes" +msgstr "Tallenna muutokset" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:325 +msgid "Delete images" +msgstr "Poista kuvia" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:327 +msgid "Rotate images clockwise" +msgstr "Pyöritä kuvia myötäpäivään" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:328 +msgid "Rotate images counter-clockwise" +msgstr "Pyöritä kuvia vastapäivään" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:329 +msgid "Copy to..." +msgstr "Kopioi..." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:330 +msgid "Move to..." +msgstr "Siirrä..." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:331 +msgid "Add tags" +msgstr "Lisää tägejä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:333 +msgid "Overwrite tags" +msgstr "Kirjoita tägejä yli" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:338 +msgid "Sort gallery" +msgstr "Lajittele galleria" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:402 +msgid "Enter the tags" +msgstr "Anna tägit" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:426 +msgid "Select the destination gallery:" +msgstr "Valitse kohdegalleria: " + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:569 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:161 +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:266 +msgid "Thumbnail" +msgstr "Esikatselukuva" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:571 +msgid "Alt & Title Text" +msgstr "Alt & otsikkoteksti" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:572 +msgid "Tags (comma separated list)" +msgstr "Tägit (pilkulla erotettu lista)" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:35 +msgid "Sort order changed" +msgstr "Lajittelujärjestys muutettu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:97 +msgid "Sort Gallery" +msgstr "Lajittele galleria" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:101 +msgid "Update Sort Order" +msgstr "Päivitä lajittelujärjestys" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:104 +msgid "Back to gallery" +msgstr "Takaisin galleriaan" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:109 +msgid "Presort" +msgstr "Esilajittele" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:110 +msgid "Unsorted" +msgstr "Ei lajiteltu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:113 +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:241 +msgid "Alt/Title text" +msgstr "Alt/otsikkoteksti" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:90 +msgid "deleted successfully" +msgstr "poistettu onnistuneesti" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:106 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:115 +msgid "Operation successful. Please clear your browser cache." +msgstr "Operaatio onnistui. Tyhjennä selaimesi välimuisti." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:171 +msgid "Alt & Title Text / Description" +msgstr "Alt & otsikkoteksti / Kuvaus" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:214 +msgid "Exclude ?" +msgstr "Sulje pois ?" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:299 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:301 +msgid "View" +msgstr "Näytä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:309 +msgid "Show meta data" +msgstr "Näytä metadata" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:310 +msgid "Meta" +msgstr "Meta" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:318 +msgid "Customize thumbnail" +msgstr "Räätälöi esikatselukuvaa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:319 +msgid "Edit thumb" +msgstr "Muokkaa esikatselukuvaa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:327 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:328 +msgid "Rotate" +msgstr "Pyöritä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:338 +msgid "Publish this image" +msgstr "Julkaise tämä kuva" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:339 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:58 +msgid "Publish" +msgstr "Julkaise" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:349 +msgid "Recover image from backup" +msgstr "Palauta kuva varmistuksesta" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:350 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:352 +msgid "Recover" +msgstr "Palauta" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:361 +msgid "Delete image" +msgstr "Poista kuva" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:392 +msgid "Title:" +msgstr "Otsikko:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:398 +msgid "Description:" +msgstr "Kuvaus:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:404 +msgid "Gallery path:" +msgstr "Gallerian polku:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:419 +msgid "Link to page:" +msgstr "Linkki sivulle:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:420 +msgid "Albums will link this gallery to the selected page" +msgstr "Albumit linkittävät tämän gallerian valittuun sivuun" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:425 +msgid "Preview image:" +msgstr "Esikatsele kuvaa:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:431 +msgid "Create new page:" +msgstr "Luo uusi sivu:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:607 +msgid "Gallery deleted successfully " +msgstr "Gallerian poisto onnistui" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:678 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:681 +msgid "Rotate images" +msgstr "Pyöritä kuvia" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:704 +msgid "Pictures deleted successfully " +msgstr "Kuvien poisto onnistui" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:802 +msgid "Tags changed" +msgstr "Tägit muutettu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:842 +msgid "Update successful" +msgstr "Päivitys onnistui" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:877 +msgid "New gallery page ID" +msgstr "Uusi galleriasivu ID" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:877 +msgid "created" +msgstr "luotu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:915 +msgid "Published a new post" +msgstr "Julkaise uusi artikkeli" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1062 +msgid "Go to the first page" +msgstr "Mene ensimmäiselle sivulle" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1069 +msgid "Go to the previous page" +msgstr "Mene edelliselle sivulle" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1078 +msgid "Current page" +msgstr "Nykyinen sivu" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1089 +msgid "Go to the next page" +msgstr "Mene seuraavalle sivulle" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1096 +msgid "Go to the last page" +msgstr "Mene viimeiselle sivulle" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1046 +#, php-format +msgid "1 item" +msgid_plural "%s items" +msgstr[0] "1 kohde" +msgstr[1] "%s kohdetta" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1046 +#, php-format +msgctxt "paging" +msgid "%1$s of %2$s" +msgstr "%1$s / %2$s" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:11 +msgid "NextGEN Gallery" +msgstr "NextGEN Gallery" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:186 +msgid "No gallery" +msgstr "Ei gallerioita" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:198 +msgid "Select »" +msgstr "Valitse »" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:230 +msgid "Hide" +msgstr "Piilota" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:235 +msgid "Image ID:" +msgstr "Kuva ID:" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:249 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:45 +msgid "Alignment" +msgstr "Tasaus" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:252 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:47 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:583 +msgid "None" +msgstr "Ei mitään" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:254 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:49 +msgid "Left" +msgstr "Vasen" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:256 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:51 +msgid "Center" +msgstr "Keskelle" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:258 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:53 +msgid "Right" +msgstr "Oikea" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:262 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:690 +msgid "Size" +msgstr "Koko" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:268 +msgid "Full size" +msgstr "Täyskoko" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:270 +msgid "Singlepic" +msgstr "Yksittäiskuva" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:282 +msgid "Use as featured image" +msgstr "Käytetään sivukuvana" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:284 +msgid "Insert into Post" +msgstr "Lisää artikkeliin" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:295 +msgid "Save all changes" +msgstr "Tallenna kaikki muutokset" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:14 +msgid "NextGEN Gallery Overview" +msgstr "NextGEN Gallery yleistä" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:84 +msgid "Welcome to NextGEN Gallery !" +msgstr "Tervetuloa NextGEN Galleryyn !" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:85 +msgid "Do you like this Plugin?" +msgstr "Pidätkö tästä lisäosasta?" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:87 +msgid "About" +msgstr "Lisäosasta" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:90 +msgid "Server Settings" +msgstr "Palvelinasetukset" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:97 +msgid "NextGEN Gallery is one of the most popular Wordpress plugins of all time with over 9 million downloads. It is developed and supported by Photocrati Media. We'd like to offer a special thanks to Alex Rabe, who first developed the plugin and maintained it through 2011." +msgstr "" +"NextGEN Gallery on yksi suosituimmista Wordpressin lisäosista koskaan ja sitä " +"on ladattu yli 9 miljoonaa kertaa. Sitä kehittää ja tukee Photocrati Media. " +"Haluamme antaa erityiskiitokset Alex Rabelle, joka kehitti ensimmämisen " +"lisäosaversion ja piti sitä yllä vuoteen 2011." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:98 +msgid "<strong>NEED HELP?</strong> If you need help or assistance please visit the <a href='http://wordpress.org/support/plugin/nextgen-gallery'>NextGEN Gallery forums on WordPress.org</a>. Please note that we actively monitor and participate in the forums, but given that NextGEN Gallery is a free product, we don't guarantee replies to support queries." +msgstr "" +"<strong>TARVITSETKO APUA?</strong> Jos tarvitset apua, käy <a " +"href='http://wordpress.org/support/plugin/nextgen-gallery'>NextGEN Gallery " +"forums on WordPress.org [engl.]</a>. Huomioi, että seuraamme ja käymme " +"foorumeissa, mutta koska NextGEN Gallery on ilmainen tuote, emme takaa " +"vastauksia tukikyselyihin." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:99 +msgid "<strong>EXTENDING NEXTGEN?</strong> There are many third party plugins that add displays and functionality for NextGEN Gallery. See our <a href='http://www.nextgen-gallery.com/nextgen-gallery-extension-plugins/'>Complete List of NextGEN Extension Plugins</a>." +msgstr "" +"<strong>LAAJENNATKO NEXTGENIÄ?</strong> Olemassa monia lisäosia, jotka " +"lisäävät näyttötapoja ja toimintoja NextGEN Galleryyn. Katso <a " +"href='http://www.nextgen-gallery.com/nextgen-gallery-extension-plugins/'>Katta" +"vaa listaamme NextGENiä laajentavista lisäosista</a>." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:107 +#, php-format +msgid "This plugin is primarily developed, maintained, supported and documented by <a href=\"%s\" target=\"_blank\">Photocrati Media</a> with a lot of love & effort. Any kind of contribution would be highly appreciated. Thanks!" +msgstr "" +"Tätä lisäosaa kehittää, ylläpitää ja dokumentoi pääasiassa <a href=\\\"%s\\\" " +"target=\\\"_blank\\\">Photocrati Media</a> runsaalla rakkaudella ja " +"yrityksellä. Mitä tahansa lahjoitusta pidämme erittäin tärkeänä. Kiitokset!" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:112 +msgid "Please click \"Works\" on WordPress.org" +msgstr "Klikkaa \\\"Works\\\" WordPress.org-sivuilla" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:117 +msgid "Give it a good rating on WordPress.org" +msgstr "Anna hyvä arvosana WordPress.org:issa" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:122 +msgid "Visit the plugin homepage" +msgstr "Käy lisäosan kotisivulla" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:127 +msgid "Help translating it" +msgstr "Auta kääntämään se" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:149 +msgid "Graphic Library" +msgstr "Grafiikkakirjasto" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:165 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:214 +msgid "Loading…" +msgstr "Lataan…" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:165 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:214 +msgid "This widget requires JavaScript." +msgstr "Tämä vimpain edellyttää JavaScriptiä." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:178 +msgid "Thanks to all donators..." +msgstr "Kiitos kaikille lahjoittajille..." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:200 +msgid "View all" +msgstr "Katso kaikki" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:226 +#, php-format +msgid "Newsfeed could not be loaded. Check the <a href=\"%s\">front page</a> to check for updates." +msgstr "" +"Uutissyötettä ei voitu ladata. Tarkista <a href=\\\"%s\\\">etusivulta</a> " +"päivitykset." + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:238 +msgid "Untitled" +msgstr "Nimetön" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:303 +msgid "At a Glance" +msgstr "Lyhyesti" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:356 +msgid "Storage Space" +msgstr "Tallennustila" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:360 +#, php-format +msgid "<a href=\"%1$s\" title=\"Manage Uploads\" class=\"musublink\">%2$sMB</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:361 +msgid "Space Allowed" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:368 +#, php-format +msgid "<a href=\"%1$s\" title=\"Manage Uploads\" class=\"musublink\">%2$sMB (%3$s%%)</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:369 +msgid "Space Used" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:395 +msgid "No GD support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:427 +msgid "Not set" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:429 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:432 +msgid "On" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:430 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:433 +msgid "Off" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:437 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:440 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:443 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:446 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:449 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:452 +msgid "N/A" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:451 +msgid " MByte" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:464 +msgid "Operating System" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:465 +msgid "Server" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:466 +msgid "Memory usage" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:467 +msgid "MYSQL Version" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:468 +msgid "SQL Mode" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:469 +msgid "PHP Version" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:470 +msgid "PHP Safe Mode" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:471 +msgid "PHP Allow URL fopen" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:472 +msgid "PHP Memory Limit" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:473 +msgid "PHP Max Upload Size" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:474 +msgid "PHP Max Post Size" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:475 +msgid "PCRE Backtracking Limit" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:476 +msgid "PHP Max Script Execute Time" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:477 +msgid "PHP Exif support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:478 +msgid "PHP IPTC support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:479 +msgid "PHP XML support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:491 +msgid "NextGEN Gallery contains some functions which are only available under PHP 5.2. You are using the old PHP 4 version, upgrade now! It's no longer supported by the PHP group. Many shared hosting providers offer both PHP 4 and PHP 5, running simultaneously. Ask your provider if they can do this." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:35 +msgid "Post title" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:37 +msgid "Enter the post title " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:42 +msgid "Size of the image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:60 +msgid "Draft" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:26 +msgid "Select the lowest role which should be able to access the following capabilities. NextGEN Gallery supports the standard roles from WordPress." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:27 +msgid "For a more flexible user management you can use the" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:31 +msgid "Main NextGEN Gallery overview" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:35 +msgid "Use TinyMCE Button / Upload tab" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:39 +msgid "Add gallery / Upload images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:43 +msgid "Manage gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:47 +msgid "Manage others gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:51 +msgid "Manage tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:59 +msgid "Change style" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:63 +msgid "Change options" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:67 +msgid "NextGEN Attach Interface" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:60 +msgid "Image rotated" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:62 +msgid "Error rotating thumbnail" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:85 +msgid "90° clockwise" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:86 +msgid "90° anticlockwise" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:87 +msgid "Flip vertically" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:88 +msgid "Flip horizontally" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:22 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:204 +#, php-format +msgid "Rebuild image structure : %s / %s images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:23 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:205 +#, php-format +msgid "Rebuild gallery structure : %s / %s galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:24 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:206 +#, php-format +msgid "Rebuild album structure : %s / %s albums" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:81 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:263 +msgid "Done." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:196 +msgid "Cache cleared" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:315 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:334 +msgid "General Options" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:317 +msgid "Image" +msgid_plural "Images" +msgstr[0] "" +msgstr[1] "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:319 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:572 +msgid "Effects" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:320 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:614 +msgid "Watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:340 +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:54 +msgid "Gallery path" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:342 +msgid "This is the default path for all galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:345 +msgid "Delete image files" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:347 +msgid "Delete files, when removing a gallery in the database" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:350 +msgid "Activate permalinks" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:352 +msgid "When you activate this option, you need to update your permalink structure one time." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:353 +msgid "Gallery slug name :" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:357 +msgid "Create new URL friendly image slugs" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:358 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:474 +msgid "Proceed now" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:361 +msgid "Select graphic library" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:362 +msgid "GD Library" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:363 +msgid "ImageMagick (Experimental). Path to the library :" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:368 +msgid "Activate Media RSS feed" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:370 +msgid "A RSS feed will be added to you blog header. Useful for CoolIris/PicLens" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:373 +msgid "Activate PicLens/CoolIris support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:375 +msgid "When you activate this option, some javascript is added to your site footer. Make sure that wp_footer is called in your theme." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:378 +msgid "Tags / Categories" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:381 +msgid "Activate related images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:383 +msgid "This option will append related images to every post" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:387 +msgid "Match with" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:393 +msgid "Max. number of images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:395 +msgid "0 will show all images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:399 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:435 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:477 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:562 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:597 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:860 +msgid "More settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:409 +msgid "Thumbnail settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:413 +msgid "Please note : If you change the settings, you need to recreate the thumbnails under -> Manage Gallery ." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:422 +msgid "These values are maximum values " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:445 +msgid "Image settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:451 +msgid "Resize Images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:460 +msgid "Backup original images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:462 +msgid "Creates a backup for inserted images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:465 +msgid "Automatically resize" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:467 +msgid "Automatically resize images on upload." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:470 +msgid "Single picture" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:473 +msgid "Clear cache folder" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:494 +msgid "Deactivate gallery page link" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:496 +msgid "The album will not link to a gallery subpage. The gallery is shown on the same page." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:500 +msgid "Number of images per page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:502 +msgid "0 will disable pagination, all images on one page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:506 +msgid "Number of columns" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:508 +msgid "0 will display as much as possible based on the width of your theme. Setting normally only required for captions below the images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:512 +msgid "Integrate slideshow" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:519 +msgid "Show first" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:525 +msgid "Show ImageBrowser" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:527 +msgid "The gallery will open the ImageBrowser instead the effect." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:531 +msgid "Add hidden images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:533 +msgid "If pagination is used, this option will still show all images in the modal window (Thickbox, Lightbox etc.). Note : This increases the page load" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:539 +msgid "Browse images without reload the page. Note : Works only in combination with Shutter effect" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:543 +msgid "Sort options" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:546 +msgid "Sort thumbnails" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:548 +msgid "Custom order" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:550 +msgid "File name" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:551 +msgid "Alt / Title text" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:552 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:58 +msgid "Date / Time" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:556 +msgid "Sort direction" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:576 +msgid "Here you can select the thumbnail effect, NextGEN Gallery will integrate the required HTML code in the images. Please note that only the Shutter and Thickbox effect will automatic added to your theme." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:577 +msgid "With the placeholder" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:577 +msgid "you can activate a navigation through the images (depend on the effect). Change the code line only , when you use a different thumbnail effect or you know what you do." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:580 +msgid "JavaScript Thumbnail effect" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:584 +msgid "Thickbox" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:585 +msgid "Lightbox" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:586 +msgid "Highslide" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:587 +msgid "Shutter" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:593 +msgid "Link Code line" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:615 +msgid "Please note : You can only activate the watermark under -> Manage Gallery . This action cannot be undone." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:620 +msgid "Preview" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:622 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:627 +msgid "Position" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:647 +msgid "Offset" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:663 +msgid "Use image as watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:666 +msgid "URL to file" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:668 +msgid "The accessing of URL files is disabled at your server (allow_url_fopen)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:671 +msgid "Use text as watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:674 +msgid "Font" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:683 +msgid "This function will not work, cause you need the FreeType library" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:685 +msgid "You can upload more fonts in the folder <strong>nggallery/fonts</strong>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:694 +msgid "Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:696 +msgid "(hex w/o #)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:699 +msgid "Text" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:703 +msgid "Opaque" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:724 +msgid "Default size (W x H)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:729 +msgid "Duration time" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:730 +msgid "sec." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:733 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:810 +msgid "Transition / Fade effect" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:736 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:813 +msgid "fade" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:737 +msgid "blindX" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:738 +msgid "cover" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:739 +msgid "scrollUp" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:740 +msgid "scrollDown" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:741 +msgid "shuffle" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:742 +msgid "toss" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:743 +msgid "wipe" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:745 +msgid "See here for more information about the effects :" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:749 +msgid "Settings for the JW Image Rotator" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:758 +msgid "The path to JW Image Rotator is not defined, the slideshow will not work." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:770 +msgid "Path to the JW Image Rotator (URL)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:773 +msgid "Search now" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:774 +msgid "Press the button below to search for the JW Image Rotator" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:778 +msgid "Shuffle mode" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:796 +msgid "You can change the logo at the watermark settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:802 +msgid "true" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:803 +msgid "false" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:804 +msgid "fit" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:805 +msgid "none" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:814 +msgid "bgfade" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:815 +msgid "slowfade" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:816 +msgid "circles" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:817 +msgid "bubbles" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:818 +msgid "blocks" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:819 +msgid "fluids" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:820 +msgid "flash" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:821 +msgid "lines" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:831 +msgid "Background Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:836 +msgid "Texts / Buttons Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:841 +msgid "Rollover / Active Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:846 +msgid "Screen Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:851 +msgid "Background music (URL)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:855 +msgid "Try XHTML validation (with CDATA)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:857 +msgid "Important : Could causes problem at some browser. Please recheck your page." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:29 +msgid "Meta Data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:34 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:60 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:85 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:109 +msgid "Tag" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:35 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:61 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:86 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:110 +msgid "Value" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:49 +msgid "No meta data saved" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:55 +msgid "EXIF Data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:74 +msgid "No exif data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:81 +msgid "IPTC Data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:105 +msgid "XMP Data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:11 +msgid "(From the theme folder)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:43 +msgid "You do not have sufficient permissions to edit templates for this blog." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:52 +msgid "CSS file successfully updated" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:91 +msgid "Activate and use style sheet:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:111 +msgid "Activate" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:121 +#, php-format +msgid "Editing <strong>%s</strong>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:123 +#, php-format +msgid "Browsing <strong>%s</strong>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:133 +msgid "Version" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:136 +msgid "Tip : Copy your stylesheet (nggallery.css) to your theme folder, so it will be not lost during a upgrade" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:138 +msgid "Your theme contain a NextGEN Gallery stylesheet (nggallery.css), this file will be used" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:140 +msgid "Tip No. 2: Use the color picker below to help you find the right color scheme for your gallery!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:156 +msgid "Update File" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:159 +msgid "If this file were writable you could edit it." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:164 +msgid "Oops, no such file exists! Double check the name and try again, merci." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:41 +msgid "Most popular" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:42 +msgid "Least used" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:43 +msgid "Alphabetical" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:100 +msgid "Manage image tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:112 +msgid "Existing Tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:116 +msgid "Search tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:120 +msgid "Go" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:125 +msgid "Sort Order:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:160 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:164 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:177 +msgid "Previous tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:173 +msgid "Next tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:185 +msgid "Rename Tag" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:193 +msgid "Enter the tag to rename and its new value. You can use this feature to merge tags too. Click \"Rename\" and all posts which use this tag will be updated." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:194 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:242 +msgid "You can specify multiple tags to rename by separating them with commas." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:198 +msgid "Tag(s) to rename:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:202 +msgid "New tag name(s):" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:205 +msgid "Rename" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:211 +msgid "Delete Tag" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:219 +msgid "Enter the name of the tag to delete. This tag will be removed from all posts." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:220 +msgid "You can specify multiple tags to delete by separating them with commas" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:224 +msgid "Tag(s) to delete:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:233 +msgid "Edit Tag Slug" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:241 +msgid "Enter the tag name to edit and its new slug. This will be used in tagcloud links. <a href=\"http://codex.wordpress.org/Glossary#Slug\" target=\"_blank\">Slug definition</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:246 +msgid "Tag(s) to match:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:250 +msgid "Slug(s) to set:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:3 +msgid "Main Page (no parent)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:10 +msgid "Add page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_link_to_page_field.php:3 +msgid "Not linked" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:103 +msgid "These are maximum values" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:61 +msgid "Some folders/files could not renamed, please recheck the permission and rescan the folder in the manage gallery section." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:63 +msgid "Rename failed" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:159 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:178 +msgid "Upgrade NextGEN Gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:160 +msgid "The script detect that you upgrade from a older version." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:161 +msgid "Your database tables for NextGEN Gallery is out-of-date, and must be upgraded before you can continue." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:162 +msgid "If you would like to downgrade later, please make first a complete backup of your database and the images." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:163 +msgid "The upgrade process may take a while, so please be patient." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:164 +msgid "Start upgrade now" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:180 +msgid "Upgrade finished..." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:181 +msgid "Continue" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:33 +msgid "Update successfully" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:48 +msgid "Network Options" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:56 +msgid "This is the default path for all blogs. With the placeholder %BLOG_ID% you can organize the folder structure better." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:57 +#, php-format +msgid "The default setting should be %s" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:61 +msgid "Enable upload quota check" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:63 +msgid "Should work if the gallery is bellow the blog.dir" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:67 +msgid "Enable zip upload option" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:69 +msgid "Allow users to upload zip folders." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:73 +msgid "Enable import function" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:75 +msgid "Allow users to import images folders from the server." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:79 +msgid "Enable style selection" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:81 +msgid "Allow users to choose a style for the gallery." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:85 +msgid "Enable roles/capabilities" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:87 +msgid "Allow users to change the roles for other blog authors." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:91 +msgid "Default style" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:108 +msgid "Choose the default style for the galleries." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/core.php:410 +#, php-format +msgid "Note : Based on your server memory limit you should not upload larger images then <strong>%d x %d</strong> pixel" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:337 +#: products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:338 +msgid "Album overview" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:68 +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:70 +msgid "Set NextGEN featured image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:328 +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:329 +msgid "Set featured image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:356 +msgid "Remove featured image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:223 +msgid "Album" +msgid_plural "Albums" +msgstr[0] "" +msgstr[1] "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:35 +msgid "No new tag specified!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:50 +msgid "No new/old valid tag specified!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:86 +msgid "No tag renamed." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:88 +#, php-format +msgid "Renamed tag(s) «%1$s» to «%2$s»" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:95 +msgid "No valid new tag." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:112 +msgid "No objects (post/page) found for specified old tags." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:141 +msgid "No tag merged." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:143 +#, php-format +msgid "Merge tag(s) «%1$s» to «%2$s». %3$s objects edited." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:146 +msgid "Error. Not enough tags provided to rename or merge." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:165 +msgid "No tag specified!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:188 +msgid "No tag deleted." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:190 +#, php-format +msgid "%1s tag(s) deleted." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:206 +msgid "No new slug(s) specified!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:218 +msgid "Tags number and slugs number isn't the same!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:245 +msgid "No slug edited." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:247 +#, php-format +msgid "%s slug(s) edited." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:64 +msgid "<strong>Translation by : </strong><a target=\"_blank\" href=\"http://www.nextgen-gallery.com/languages/\">See here</a>" +msgstr "" +"<strong>Kääntänyt : </strong><a target=\\\"_blank\\\" " +"href=\\\"http://www.nextgen-gallery.com/languages/\\\">Katso täältä</a>" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:65 +msgid "<strong>This translation is not yet updated for Version 1.9.0</strong>. If you would like to help with translation, download the current po from the plugin folder and read <a href=\"http://www.nextgen-gallery.com/languages/\">here</a> how you can translate the plugin." +msgstr "" +"<strong>Tätä käännöstä ei ole vielä täysin päivitetty versioon " +"2.1.62</strong>. Jos haluat auttaa käännöksessä, lataa uusin .po -tiedosto " +"lisäosan hakemistosta ja lue <a href=\\\"http://www.nextgen-gallery.com/langua" +"ges/\\\">tästä</a> miten voit kääntää lisäosan." + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:158 +msgid "Sorry, NextGEN Gallery works only with a Memory Limit of 16 MB or higher" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:184 +msgid "Picture tag" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:185 +msgid "Picture tag: %2$l." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:186 +msgid "Separate picture tags with commas." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:324 +msgid "Get help" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:325 +msgid "Contribute" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php:29 +msgid "[Gallery not found]" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php:163 +msgid "Related images for" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:38 +msgid "Meta data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:42 +msgid "Camera / Type" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:50 +msgid "Focal Length" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:50 +msgid "No galleries have been yet created." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:69 +#, php-format +msgid "The gallery ID=%s does not exist." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:100 +msgid "No album ID has been provided as parameter" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:108 +#, php-format +msgid "The album ID=%s does not exist." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:115 +msgid "Invalid MediaRSS command" +msgstr "" + +msgid "NextGEN Basic Compact Album" +msgstr "" + +msgid "NextGEN Basic Extended Album" +msgstr "" + +msgid "NextGEN Basic Thumbnails" +msgstr "" + +msgid "NextGEN Basic Slideshow" +msgstr "" + +msgid "NextGEN Basic ImageBrowser" +msgstr "" + +msgid "NextGEN Basic Singlepic" +msgstr "" + +msgid "NextGEN Basic Tagcloud" +msgstr "" + diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery.po b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery.po new file mode 100644 index 0000000000000000000000000000000000000000..d1f8a57e8ce351e3101a5ab06a5bae14706d30f6 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/lang/nggallery.po @@ -0,0 +1,4070 @@ +# NextGEN Gallery base (English) .po source +# Copyright (C) 2014 Photocrati Media +# This file is distributed under the same license as the NextGEN Gallery package. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: NextGEN Gallery\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-02-20 19:45-0800\n" +"PO-Revision-Date: 2014-02-20 19:45-0800\n" +"Last-Translator: Photocrati Media\n" +"Language-Team: Photocrati Media\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: nggallery.php:290 +#, php-format +msgid "Every %d seconds" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:157 +#, php-format +msgid "Album: %s" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:159 +#, php-format +msgid "Gallery: %s" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:177 +msgid "Missing parameters" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:213 +msgid "Displayed gallery does not exist" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:216 +msgid "Invalid request" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:248 +msgid "NextGEN Gallery - Attach To Post" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:266 +msgid "Display Galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:273 +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_controller.php:7 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:192 +msgid "Add Gallery / Images" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:280 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:160 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:194 +msgid "Manage Galleries" +msgid_plural "Manage Galleries" +msgstr[0] "" +msgstr[1] "" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:287 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:404 +msgid "Manage Albums" +msgid_plural "Manage Albums" +msgstr[0] "" +msgstr[1] "" + +#: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:294 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:162 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:198 +msgid "Manage Tags" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:115 +msgid "What would you like to display?" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:139 +msgid "Select a display type" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:162 +msgid "Customize the display settings" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:253 +msgid "No display type selected" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:271 +msgid "Sort or Exclude Images" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:186 +msgid "Invalid Displayed Gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:10 +#: products/photocrati_nextgen/modules/nextgen_admin/templates/nextgen_admin_page.php:25 +msgid "Save" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:612 +msgid "Sources" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:646 +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:362 +msgid "(optional)" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:654 +msgid "" +"Sets an SEO-friendly name to this gallery for URLs. Currently only in use by " +"the Pro Lightbox." +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:655 +msgid "Slug" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:860 +msgid "No entities to display for this source." +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:1264 +msgid "Select a gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:1292 +msgid "Albums" +msgstr "" + +#: products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php:34 +msgid "Code" +msgstr "" + +#: products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php:48 +msgid "Stylesheet URL" +msgstr "" + +#: products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php:62 +msgid "Javascript URL" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php:7 +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:6 +msgid "Import Folder" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:41 +msgid "No gallery name specified" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:55 +msgid "Failed to extract images from ZIP" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:61 +msgid "Image generation failed" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:70 +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:150 +msgid "An unexpected error occured." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:77 +msgid "" +"No permissions to upload images. Try refreshing the page or ensuring that " +"your user account has sufficient roles/privileges." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:117 +msgid "Directory does not exist." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:121 +msgid "No directory specified." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:125 +msgid "" +"No permissions to browse folders. Try refreshing the page or ensuring that " +"your user account has sufficient roles/privileges." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:155 +msgid "No folder specified" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:159 +msgid "" +"No permissions to import folders. Try refreshing the page or ensuring that " +"your user account has sufficient roles/privileges." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:7 +msgid "Upload Images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:1 +msgid "" +"Select a folder to import. The folder name will be used as the title of the " +"gallery." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:5 +msgid "Keep images in original location." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:5 +msgid "" +"Caution: If you keep images in the original folder and later delete the " +"gallery, the images in that folder might be deleted depending on your " +"settings." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:39 +msgid "Importing gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:41 +msgid "In Progress..." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:56 +#, php-format +msgid "Done! Successfully imported %s images" +msgstr "" + +#: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab_js.php:1268 +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:2 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:189 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:217 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:226 +msgid "Gallery" +msgid_plural "Galleries" +msgstr[0] "" +msgstr[1] "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:4 +msgid "Create a new gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:13 +msgid "You browser doesn't have Flash, Silverlight, HTML5, or HTML4 support." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:99 +msgid "Drag image and ZIP files here or click <strong>Add Files</strong>" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:149 +#, php-format +msgid "%s images were uploaded successfully" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:152 +msgid "1 image was uploaded successfully" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:155 +msgid "0 images were uploaded" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:169 +msgid "Upload complete" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:191 +msgid "" +"An unexpected error occured. This is most likely due to a server " +"misconfiguration. Check your PHP error log or ask your hosting provider for " +"assistance." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:226 +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:167 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:537 +msgid "Enable AJAX pagination" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:238 +msgid "Override thumbnail settings" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:240 +msgid "" +"This does not affect existing thumbnails; overriding the thumbnail settings " +"will create an additional set of thumbnails. To change the size of existing " +"thumbnails please visit 'Manage Galleries' and choose 'Create new " +"thumbnails' for all images in the gallery." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:248 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:37 +msgid "Thumbnail dimensions" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:262 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:431 +msgid "Thumbnail quality" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:272 +msgid "Thumbnail crop" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:281 +msgid "Thumbnail watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:306 +msgid "Override image settings" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:308 +msgid "Overriding the image settings will create an additional set of images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:316 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:66 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:456 +msgid "Image quality" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:326 +msgid "Image crop" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:335 +msgid "Image watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:359 +msgid "Gallery width" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:361 +msgid "An empty or 0 setting will make the gallery full width" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:365 +msgid "Pixels" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:365 +msgid "Percent" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:374 +msgid "First Image" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:375 +msgid "Average" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:100 +msgid "Clear" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:101 +msgid "Default" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:102 +msgid "Select Color" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:103 +msgid "Current Color" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:174 +msgid "Saved successfully" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_radio.php:16 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_radio.php:16 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:122 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:24 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:40 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:65 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:191 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php:37 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:407 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:454 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:457 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:460 +msgid "Yes" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_radio.php:24 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_radio.php:24 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:123 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:23 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:47 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:72 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/image_options_tab.php:198 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php:44 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:409 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:455 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:458 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:461 +msgid "No" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:25 +msgid "Display galleries as" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:26 +msgid "How would you like galleries to be displayed?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:28 +msgid "Galleries per page" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:47 +msgid "Items per page" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:48 +msgid "Maximum number of galleries or sub-albums to appear on a single page" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php:28 +#: products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php:15 +#: products/photocrati_nextgen/modules/ngglegacy/view/album-compact.php:45 +#: products/photocrati_nextgen/modules/ngglegacy/view/album-extend.php:31 +msgid "Photos" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_mapper.php:94 +msgid "[Show PicLens]" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:63 +msgid "Interval" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:67 +msgid "# of seconds" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:77 +msgid "Image limit" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:79 +msgid "Maximum number of images to display with recent or random sources" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:81 +msgid "# of images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:112 +msgid "Maximum dimensions" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:113 +msgid "Certain themes may allow images to flow over their container if this setting is too large" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:123 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:765 +msgid "Enable flash slideshow" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:125 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:767 +msgid "Integrate the flash based slideshow for all flash supported devices" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:134 +msgid "Shuffle" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:146 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:782 +msgid "Show next image on click" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:158 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:786 +msgid "Show navigation bar" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:170 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:790 +msgid "Show loading icon" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:182 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:794 +msgid "Use watermark logo" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:184 +msgid "" +"Use the watermark image in the Flash object. Note: this does not watermark " +"the image itself, and cannot be applied with text watermarks" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:194 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:799 +msgid "Stretch image" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:231 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:827 +msgid "Use slow zooming effect" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:243 +msgid "Background music (url)" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:256 +msgid "Try XHTML validation" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:268 +msgid "Background" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:280 +msgid "Texts / buttons" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:292 +msgid "Rollover / active" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:304 +msgid "Screen" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:322 +msgid "Show thumbnail link" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:338 +msgid "Thumbnail link text" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:65 +msgid "Images per page" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:67 +msgid "0 will display all images at once" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:85 +msgid "Number of columns to display" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:89 +msgid "# of columns" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:105 +msgid "Piclens link text" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:123 +msgid "Show piclens link" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:139 +msgid "Add Hidden Images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:141 +msgid "" +"If pagination is used this option will show all images in the modal window " +"(Thickbox, Lightbox etc.) This increases page load." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:150 +msgid "Use imagebrowser effect" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:152 +msgid "" +"When active each image in the gallery will link to an imagebrowser display " +"and lightbox effects will not be applied." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:169 +msgid "Browse images without reloading the page." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:184 +msgid "Show slideshow link" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:200 +msgid "Slideshow link text" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/index.php:35 +msgid "" +"Slideshows require the <a href=\"http://www.macromedia.com/go/" +"getflashplayer\">Flash Player</a> and a <a href=\"http://www." +"mozilla.com/firefox/\">browser with Javascript support</a>." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php:13 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:38 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_dimensions.php:13 +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:52 +msgid "Width" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php:21 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:40 +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_dimensions.php:20 +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:40 +msgid "Height" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:41 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:26 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:30 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:26 +msgid "Back" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:49 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:29 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:33 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:29 +msgid "Next" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:90 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:220 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31 +msgid "Picture" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31 +msgid "of" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:53 +msgid "Link" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:78 +msgid "Display watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:88 +msgid "Display reflection" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:98 +msgid "Crop thumbnail" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:108 +msgid "Float" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:24 +msgid "Maximum number of tags" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:47 +msgid "Display type" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:50 +msgid "The display type that the tagcloud will point its results to" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:46 +msgid "Template" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:47 +msgid "Use a legacy template when rendering (not recommended)." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php:580 +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:658 +#: products/photocrati_nextgen/modules/ngglegacy/lib/multisite.php:23 +msgid "" +"Sorry, you have used your space allocation. Please delete some files to " +"upload more files." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php:1002 +msgid "Could not calculate resized image dimensions" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:154 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:135 +msgid " mm" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:163 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:141 +msgid " sec" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:168 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:145 +msgid "Fired" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:168 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:145 +msgid "Not fired" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:539 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:452 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:46 +msgid "Aperture" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:540 +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:565 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:453 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:478 +msgid "Credit" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:541 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:454 +msgid "Camera" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:542 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:455 +msgid "Caption" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:543 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:26 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:114 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:456 +msgid "Date/Time" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:544 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:457 +msgid "Copyright" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:545 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:458 +msgid "Focal length" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:546 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:459 +msgid "ISO" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:547 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:460 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:54 +msgid "Shutter speed" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:548 +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:4 +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:3 +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:3 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:678 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:461 +msgid "Title" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:549 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:459 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:410 +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:132 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:462 +msgid "Author" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:550 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:51 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:176 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:389 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:463 +msgid "Tags" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:551 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:464 +msgid "Subject" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:552 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:465 +msgid "Make" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:553 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:466 +msgid "Edit Status" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:554 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:467 +msgid "Category" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:555 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:468 +msgid "Keywords" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:556 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:469 +msgid "Date Created" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:557 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:470 +msgid "Time Created" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:558 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:471 +msgid "Author Position" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:559 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:472 +msgid "City" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:560 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:473 +msgid "Location" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:561 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:474 +msgid "Province/State" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:562 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:475 +msgid "Country code" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:563 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:476 +msgid "Country" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:564 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:477 +msgid "Headline" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:566 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:479 +msgid "Source" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:567 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:480 +msgid "Copyright Notice" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:568 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:481 +msgid "Contact" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:569 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:482 +msgid "Last modified" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:570 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:483 +msgid "Program tool" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:571 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:484 +msgid "Format" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:572 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:485 +msgid "Image Width" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:573 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:486 +msgid "Image Height" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:574 +#: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:487 +msgid "Flash" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:647 +#, php-format +msgid "Unable to create directory %s." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:652 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:823 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1021 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1106 +#, php-format +msgid "" +"Unable to write to directory %s. Is this directory writable by the server?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:681 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1146 +#, php-format +msgid "Failed to copy database row for picture %s" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:693 +#, php-format +msgid "Failed to get image path for %s" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:711 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1132 +#, php-format +msgid "Failed to copy image %1$s to %2$s" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:715 +#, php-format +msgid "Copied image %1$s to %2$s" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:723 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1158 +#, php-format +msgid "" +"Image %1$s (%2$s) copied as image %3$s (%4$s) » The file already " +"existed in the destination gallery." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:727 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1161 +#, php-format +msgid "Image %1$s (%2$s) copied as image %3$s (%4$s)" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:740 +#, php-format +msgid "Copied %1$s picture(s) to gallery %2$s ." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:767 +msgid "Could not find image" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:772 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:388 +msgid " is not writeable" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:777 +msgid "Backup file does not exist" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php:782 +msgid "Could not restore original image" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_controller.php:17 +#: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:242 +#: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:328 +msgid "Gallery Settings" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php:73 +msgid "Source not compatible with selected display type" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:327 +msgid "NextGEN Gallery & Album Settings" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_gallery_display/templates/alt_view_link_text.php:15 +#: products/photocrati_nextgen/modules/nextgen_gallery_display/templates/return_link_text.php:15 +msgid "link text" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:12 +msgid "Image Options" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:22 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:588 +#: products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:76 +msgid "Custom" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:23 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:111 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:549 +msgid "Image ID" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:24 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:570 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:112 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:166 +msgid "Filename" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:25 +msgid "Alt/Title Text" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:38 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:115 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:557 +msgid "Ascending" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:39 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:116 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:558 +msgid "Descending" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:50 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:388 +msgid "Categories" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:81 +msgid "Gallery path does not exist and could not be created" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:86 +msgid "Where would you like galleries stored?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:87 +msgid "Where galleries and their images are stored" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:89 +msgid "Delete Image Files?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:90 +msgid "" +"When enabled, image files will be removed after a Gallery has been deleted" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:92 +msgid "Show Related Images on Posts?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:93 +msgid "" +"When enabled, related images will be appended to each post by matching the " +"posts tags/categories to image tags" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:95 +msgid "(Show Customization Settings)" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:96 +msgid "(Hide Customization Settings)" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:97 +msgid "How should related images be match?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:100 +msgid "Maximum # of related images to display" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:102 +msgid "Heading for related images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:104 +msgid "What's the default sorting method?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:107 +msgid "Sort in what direction?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:110 +msgid "Automatically resize images after upload" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:111 +msgid "It is recommended that your images be resized to be web friendly" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:113 +msgid "What should images be resized to?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:114 +msgid "" +"After images are uploaded, they will be resized to the above dimensions and " +"quality" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:115 +msgid "Width:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:116 +msgid "Height:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:117 +msgid "Quality:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:121 +msgid "Backup the original images?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:12 +msgid "Lightbox Effects" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:38 +msgid "What effect would you like to use?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:12 +msgid "Miscellaneous" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:21 +msgid "Add MediaRSS link?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:22 +msgid "" +"When enabled, adds a MediaRSS link to your header. Third-party web services " +"can use this to publish your galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:26 +msgid "Clear image cache" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:27 +msgid "" +"Completely clear the NextGEN cache of all image modifications?\n" +"\n" +"Choose [Cancel] to Stop, [OK] to proceed." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:32 +msgid "Permalink slug" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:39 +msgid "Maximum image count" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:41 +msgid "" +"This is the maximum limit of images that NextGEN will restrict itself to " +"querying" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_controller.php:22 +#: products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php:39 +msgid "Other Options" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:7 +msgid "Reset Options" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:15 +msgid "Reset all options to default settings" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:16 +msgid "" +"Replace all existing options and gallery options with their default settings" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:17 +msgid "Reset settings" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:18 +msgid "" +"Reset all options to default settings?\n" +"\n" +"Choose [Cancel] to Stop, [OK] to proceed." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.roles_form.php:7 +msgid "Roles & Capabilities" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:12 +msgid "Styles" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:18 +msgid "What stylesheet would you like to use?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:21 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:136 +msgid "(Show Customization Options)" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:22 +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:137 +msgid "(Hide Customization Options)" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:23 +msgid "File Content:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:24 +msgid "Changes you make to the contents will be saved to" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:25 +msgid "You could edit this file if it were writable" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:12 +msgid "Thumbnail Options" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:20 +msgid "Default thumbnail dimensions:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:21 +msgid "When generating thumbnails, what image dimensions do you desire?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:24 +msgid "Set fix dimension?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:25 +msgid "Ignore the aspect ratio, no portrait thumbnails?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:27 +msgid "Adjust Thumbnail Quality?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:28 +msgid "When generating thumbnails, what image quality do you desire?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:30 +msgid "Size List" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:31 +msgid "List of default sizes used for thumbnails and images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:12 +msgid "Watermarks" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:41 +msgid "Using an Image" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:42 +msgid "Using Text" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:69 +msgid "An absolute or relative (to the site document root) file system path" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:71 +msgid "" +"An absolute or relative (to the site document root) file system path or an " +"HTTP url" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:74 +msgid "Image URL:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:90 +msgid "Font Family:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:92 +msgid "Font Size:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:94 +msgid "Font Color:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:97 +msgid "Text:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:99 +msgid "Opacity:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:126 +msgid "" +"Please note: You can only activate the watermark under Manage Gallery. This " +"action cannot be undone." +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:127 +msgid "How will you generate a watermark?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:131 +msgid "Position:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:133 +msgid "Offset:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:139 +msgid "Preview of saved settings:" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:140 +msgid "Refresh preview image" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:34 +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:37 +msgid "(Show Advanced Settings)" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:35 +msgid "(Hide Advanced Settings)" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:56 +msgid "What must the lightbox be applied to?" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:60 +msgid "Only apply to NextGEN images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:61 +msgid "Only apply to NextGEN and WordPress images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:62 +msgid "Try to apply to all images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:63 +msgid "Try to apply to all images that link to image files" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:21 +msgid "Place any custom stylesheets in <strong>wp-content/ngg_styles</strong>" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:24 +#, php-format +msgid "All stylesheets must contain a <a href='#' onclick='%s'>file header</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php:41 +msgid "Related Images" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php:61 +msgid "[Show slideshow]" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php:62 +msgid "[Show thumbnails]" +msgstr "" + +#: products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php:425 +msgid "Sorry, you must be able to manage galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_gallery.php:7 +msgid "Add recent or random images from the galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_gallery.php:8 +msgid "NextGEN Widget" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:9 +msgid "Widget that displays Media RSS links for NextGEN Gallery." +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:10 +msgid "NextGEN Media RSS" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:22 +msgid "Media RSS" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:23 +msgid "Link to the main image feed" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:93 +#: products/photocrati_nextgen/modules/ngglegacy/view/gallery-caption.php:32 +#: products/photocrati_nextgen/modules/ngglegacy/view/gallery.php:32 +msgid "[View with PicLens]" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:7 +msgid "Show a NextGEN Gallery Slideshow" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:8 +msgid "NextGEN Slideshow" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:76 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:321 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:521 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:721 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:215 +msgid "Slideshow" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:15 +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:229 +msgid "Show" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:26 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:316 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:520 +msgid "Thumbnails" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:29 +msgid "Original images" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:42 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:822 +msgid "random" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:50 +msgid "recently added" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:62 +msgid "Enable IE8 Web Slices" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:68 +msgid "Width x Height" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:87 +msgid "Select" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:92 +msgid "All galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:95 +msgid "Only which are not listed" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:98 +msgid "Only which are listed" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:107 +msgid "Gallery ID" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:114 +msgid "Gallery IDs, separated by commas." +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:19 +msgid "Show Media RSS icon" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:30 +msgid "Show the Media RSS link" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:36 +msgid "Text for Media RSS link" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:47 +msgid "Tooltip text for Media RSS link" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:15 +msgid "Select Gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:23 +msgid "All images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:159 +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:190 +msgid "Overview" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:172 +msgid "Network settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:305 +msgid "You do not have the correct permission" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:306 +msgid "Unexpected Error" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:307 +msgid "A failure occurred" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:311 +msgid "You have attempted to queue too many files." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:312 +msgid "This file exceeds the maximum upload size for this site." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:313 +msgid "This file is empty. Please try another." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:314 +msgid "This file type is not allowed. Please try another." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:315 +msgid "This file is not an image. Please try another." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:316 +msgid "Memory exceeded. Please try another smaller file." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:317 +msgid "This is larger than the maximum size. Please try another." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:318 +msgid "An error occurred in the upload. Please try again later." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:319 +msgid "" +"There was a configuration error. Please contact the server administrator." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:320 +msgid "You may only upload 1 file." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:321 +msgid "HTTP error." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:322 +msgid "Upload failed." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:323 +msgid "IO error." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:324 +msgid "Security error." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:325 +msgid "File canceled." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:326 +msgid "Upload stopped." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:327 +msgid "Dismiss" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:328 +msgid "Crunching…" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:329 +msgid "moved to the trash." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:330 +#, php-format +msgid "“%s” has failed to upload due to an error" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:352 +msgid "L O A D I N G" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:353 +msgid "Click to Close" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:462 +msgid "" +"<a href=\"http://www.nextgen-gallery.com\" target=\"_blank\">Introduction</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:465 +msgid "" +"<a href=\"http://www.nextgen-gallery.com/languages\" target=\"_blank" +"\">Languages</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:470 +msgid "Get help with NextGEN Gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:474 +msgid "More Help & Info" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:476 +msgid "" +"<a href=\"http://wordpress.org/tags/nextgen-gallery?forum_id=10\" target=" +"\"_blank\">Support Forums</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:477 +msgid "FAQ" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:478 +msgid "Feature request" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:479 +msgid "Get your language pack" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:480 +msgid "Contribute development" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:481 +msgid "Download latest version" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/ajax.php:360 +#, php-format +msgid "Could create image with %s x %s pixel" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:172 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:216 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:239 +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:19 +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:22 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:619 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:7 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:10 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:13 +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:17 +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:20 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:10 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:13 +msgid "Cheatin’ uh?" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:180 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:209 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:253 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:178 +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:24 +msgid "Update Successfully" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:227 +msgid "Album deleted" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:389 +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:55 +msgid "Edit Album" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:410 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:459 +msgid "Select album" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:412 +msgid "No album selected" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:423 +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:166 +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:94 +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:112 +msgid "Update" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:425 +msgid "Edit album" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:428 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:187 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:362 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:364 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:227 +msgid "Delete" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:432 +msgid "Add new album" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:434 +msgid "Add" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:445 +msgid "Show / hide used galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:445 +msgid "[Show all]" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:446 +msgid "Maximize the widget content" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:446 +msgid "[Maximize]" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:447 +msgid "Minimize the widget content" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:447 +msgid "[Minimize]" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:449 +msgid "" +"After you create and select a album, you can drag and drop a gallery or " +"another album into your new album below" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:475 +msgid "Select gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:500 +msgid "Album ID" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:513 +msgid "No album selected!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:534 +msgid "Album name:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:540 +msgid "Album description:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:546 +msgid "Select a preview image:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:549 +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:552 +#: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_preview_image_field.php:3 +msgid "No picture" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:563 +msgid "Page Link to" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:582 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:337 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:366 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:397 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:406 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:442 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:471 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:502 +msgid "OK" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:584 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:339 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:368 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:399 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:408 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:444 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:473 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:504 +msgid "Cancel" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:677 +msgid "Name" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:679 +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:229 +msgid "Page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:116 +msgid "Select with the mouse the area for the new thumbnail" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:130 +msgid "Thumbnail updated" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:135 +msgid "Error updating thumbnail" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:151 +msgid "Select the area for the thumbnail from the picture on the left." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:39 +msgid "No valid gallery name!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:46 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:80 +msgid "Directory" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:46 +msgid "didn't exist. Please create first the main gallery folder " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:47 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:56 +msgid "Check this link, if you didn't know how to set the permission :" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:80 +msgid "is not writeable !" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:76 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:85 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:736 +#: products/photocrati_nextgen/modules/ngglegacy/lib/core.php:101 +msgid "Unable to create directory " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:89 +msgid "The server setting Safe-Mode is on !" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:90 +msgid "If you have problems, please create directory" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:91 +msgid "and the thumbnails directory" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:91 +msgid "with permission 777 manually !" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:116 +#, php-format +msgid "" +"Gallery ID %1$s successfully created. You can show this gallery in your post " +"or page with the shortcode %2$s.<br/>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:119 +msgid "Edit gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:188 +msgid "Error while creating thumbnail." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:242 +msgid "Error while resizing image." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:326 +msgid "Error while rotating image." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:361 +msgid "Error while applying watermark to image." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:385 +msgid "Object didn't contain correct data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:391 +msgid "File do not exists" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:395 +msgid "Couldn't restore original image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:511 +msgid "(Error : Couldn't not update data base)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:518 +msgid "(Error : Couldn't not update meta data)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:527 +msgid "(Error : Couldn't not find image)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:670 +msgid "No valid URL path " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:686 +msgid "Import via cURL failed." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:703 +msgid "Uploaded file was no or a faulty zip file ! The server recognized : " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:720 +msgid "Could not get a valid foldername" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:731 +#, php-format +msgid "" +"Unable to create directory %s. Is its parent directory writable by the " +"server?" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:746 +msgid "Zip-File successfully unpacked" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:777 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:877 +msgid "No gallery selected !" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:785 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:902 +msgid "Failure in database, no gallery path set !" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:809 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:896 +msgid "is no valid image file!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:830 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:919 +msgid "Error, the file could not be moved to : " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:835 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:923 +msgid "Error, the file permissions could not be set" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:853 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:111 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:189 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:238 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:322 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:661 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:740 +msgid "Create new thumbnails" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:858 +msgid " Image(s) successfully added" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:885 +msgid "Invalid upload. Error Code : " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:961 +#, php-format +msgid "" +"SAFE MODE Restriction in effect! You need to create the folder <strong>%s</" +"strong> manually" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:962 +#, php-format +msgid "" +"When safe_mode is on, PHP checks to see if the owner (%s) of the current " +"script matches the owner (%s) of the file to be operated on by a file " +"function or its directory" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1015 +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1092 +msgid "The destination gallery does not exist" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1046 +#, php-format +msgid "Failed to move image %1$s to %2$s" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1066 +#, php-format +msgid "Moved %1$s picture(s) to gallery : %2$s ." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1170 +#, php-format +msgid "Copied %1$s picture(s) to gallery: %2$s ." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1278 +msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1281 +msgid "" +"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in " +"the HTML form" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1284 +msgid "The uploaded file was only partially uploaded" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1287 +msgid "No file was uploaded" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1290 +msgid "Missing a temporary folder" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1293 +msgid "Failed to write file to disk" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1296 +msgid "File upload stopped by extension" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:1299 +msgid "Unknown upload error" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/install.php:20 +msgid "Sorry, NextGEN Gallery works only with a role called administrator" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/install.php:92 +msgid "" +"NextGEN Gallery : Tables could not created, please check your database " +"settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:99 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:206 +msgid "No images selected" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:107 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:190 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:234 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:323 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:642 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:724 +msgid "Resize images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:116 +#, php-format +msgid "" +"You are about to start the bulk edit for %s galleries \n" +" \n" +" 'Cancel' to stop, 'OK' to proceed." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:154 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:197 +msgid "Add new gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:171 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:174 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:272 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:275 +msgid "Search Images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:186 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:320 +msgid "Bulk actions" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:188 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:321 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:572 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:687 +msgid "Set watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:191 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:326 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:577 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:708 +msgid "Import metadata" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:192 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:324 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:567 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:684 +msgid "Recover from backup" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:194 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:335 +msgid "Apply" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:262 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:253 +msgid "Edit" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:309 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:379 +msgid "No entries found" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:327 +msgid "New Gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:329 +msgid "Create a new , empty gallery below the folder" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:331 +msgid "Allowed characters for file and folder names are" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:357 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:462 +msgid "Resize Images to" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:361 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:466 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:453 +msgid "Width x height (in pixel). NextGEN Gallery will keep ratio size" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:385 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:490 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:40 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:416 +msgid "Width x height (in pixel)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:391 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:496 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:426 +msgid "Set fix dimension" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:393 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:498 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:428 +msgid "Ignore the aspect ratio, no portrait thumbnails" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:456 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:568 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:156 +msgid "ID" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:458 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:571 +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:245 +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:134 +msgid "Description" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:460 +msgid "Page ID" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:35 +msgid "Gallery not found." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:41 +msgid "Sorry, you have no access here" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:214 +msgid "Copy image to..." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:218 +msgid "Move image to..." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:222 +msgid "Add new tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:226 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:332 +msgid "Delete tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:230 +msgid "Overwrite" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:243 +#, php-format +msgid "" +"You are about to start the bulk edit for %s images \n" +" \n" +" 'Cancel' to stop, 'OK' to proceed." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:269 +#, php-format +msgid "Search results for “%s”" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:298 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:488 +msgid "Gallery settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:298 +msgid "Click here for more settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:304 +msgid "Scan Folder for new images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:306 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:341 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:386 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:400 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:436 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:478 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:563 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:598 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:708 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:861 +msgid "Save Changes" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:325 +msgid "Delete images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:327 +msgid "Rotate images clockwise" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:328 +msgid "Rotate images counter-clockwise" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:329 +msgid "Copy to..." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:330 +msgid "Move to..." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:331 +msgid "Add tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:333 +msgid "Overwrite tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:338 +msgid "Sort gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:402 +msgid "Enter the tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:426 +msgid "Select the destination gallery:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:569 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:161 +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:266 +msgid "Thumbnail" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:571 +msgid "Alt & Title Text" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:572 +msgid "Tags (comma separated list)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:35 +msgid "Sort order changed" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:97 +msgid "Sort Gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:101 +msgid "Update Sort Order" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:104 +msgid "Back to gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:109 +msgid "Presort" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:110 +msgid "Unsorted" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:113 +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:241 +msgid "Alt/Title text" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:90 +msgid "deleted successfully" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:106 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:115 +msgid "Operation successful. Please clear your browser cache." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:171 +msgid "Alt & Title Text / Description" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:214 +msgid "Exclude ?" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:299 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:301 +msgid "View" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:309 +msgid "Show meta data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:310 +msgid "Meta" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:318 +msgid "Customize thumbnail" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:319 +msgid "Edit thumb" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:327 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:328 +msgid "Rotate" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:338 +msgid "Publish this image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:339 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:58 +msgid "Publish" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:349 +msgid "Recover image from backup" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:350 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:352 +msgid "Recover" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:361 +msgid "Delete image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:392 +msgid "Title:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:398 +msgid "Description:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:404 +msgid "Gallery path:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:419 +msgid "Link to page:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:420 +msgid "Albums will link this gallery to the selected page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:425 +msgid "Preview image:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:431 +msgid "Create new page:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:607 +msgid "Gallery deleted successfully " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:678 +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:681 +msgid "Rotate images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:704 +msgid "Pictures deleted successfully " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:802 +msgid "Tags changed" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:842 +msgid "Update successful" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:877 +msgid "New gallery page ID" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:877 +msgid "created" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:915 +msgid "Published a new post" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1062 +msgid "Go to the first page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1069 +msgid "Go to the previous page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1078 +msgid "Current page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1089 +msgid "Go to the next page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1096 +msgid "Go to the last page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1046 +#, php-format +msgid "1 item" +msgid_plural "%s items" +msgstr[0] "" +msgstr[1] "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:1046 +#, php-format +msgctxt "paging" +msgid "%1$s of %2$s" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:11 +msgid "NextGEN Gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:186 +msgid "No gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:198 +msgid "Select »" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:230 +msgid "Hide" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:235 +msgid "Image ID:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:249 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:45 +msgid "Alignment" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:252 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:47 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:583 +msgid "None" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:254 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:49 +msgid "Left" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:256 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:51 +msgid "Center" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:258 +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:53 +msgid "Right" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:262 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:690 +msgid "Size" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:268 +msgid "Full size" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:270 +msgid "Singlepic" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:282 +msgid "Use as featured image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:284 +msgid "Insert into Post" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:295 +msgid "Save all changes" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:14 +msgid "NextGEN Gallery Overview" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:84 +msgid "Welcome to NextGEN Gallery !" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:85 +msgid "Do you like this Plugin?" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:87 +msgid "About" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:90 +msgid "Server Settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:97 +msgid "" +"NextGEN Gallery is one of the most popular Wordpress plugins of all time " +"with over 9 million downloads. It is developed and supported by Photocrati " +"Media. We'd like to offer a special thanks to Alex Rabe, who first developed " +"the plugin and maintained it through 2011." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:98 +msgid "" +"<strong>NEED HELP?</strong> If you need help or assistance please visit the " +"<a href='http://wordpress.org/support/plugin/nextgen-gallery'>NextGEN " +"Gallery forums on WordPress.org</a>. Please note that we actively monitor " +"and participate in the forums, but given that NextGEN Gallery is a free " +"product, we don't guarantee replies to support queries." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:99 +msgid "" +"<strong>EXTENDING NEXTGEN?</strong> There are many third party plugins that " +"add displays and functionality for NextGEN Gallery. See our <a href='http://" +"www.nextgen-gallery.com/nextgen-gallery-extension-plugins/'>Complete List of " +"NextGEN Extension Plugins</a>." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:107 +#, php-format +msgid "" +"This plugin is primarily developed, maintained, supported and documented by " +"<a href=\"%s\" target=\"_blank\">Photocrati Media</a> with a lot of love & " +"effort. Any kind of contribution would be highly appreciated. Thanks!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:112 +msgid "Please click \"Works\" on WordPress.org" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:117 +msgid "Give it a good rating on WordPress.org" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:122 +msgid "Visit the plugin homepage" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:127 +msgid "Help translating it" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:149 +msgid "Graphic Library" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:165 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:214 +msgid "Loading…" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:165 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:214 +msgid "This widget requires JavaScript." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:178 +msgid "Thanks to all donators..." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:200 +msgid "View all" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:226 +#, php-format +msgid "" +"Newsfeed could not be loaded. Check the <a href=\"%s\">front page</a> to " +"check for updates." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:238 +msgid "Untitled" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:303 +msgid "At a Glance" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:356 +msgid "Storage Space" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:360 +#, php-format +msgid "" +"<a href=\"%1$s\" title=\"Manage Uploads\" class=\"musublink\">%2$sMB</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:361 +msgid "Space Allowed" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:368 +#, php-format +msgid "" +"<a href=\"%1$s\" title=\"Manage Uploads\" class=\"musublink\">%2$sMB (%3$s%%)" +"</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:369 +msgid "Space Used" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:395 +msgid "No GD support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:427 +msgid "Not set" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:429 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:432 +msgid "On" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:430 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:433 +msgid "Off" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:437 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:440 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:443 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:446 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:449 +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:452 +msgid "N/A" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:451 +msgid " MByte" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:464 +msgid "Operating System" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:465 +msgid "Server" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:466 +msgid "Memory usage" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:467 +msgid "MYSQL Version" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:468 +msgid "SQL Mode" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:469 +msgid "PHP Version" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:470 +msgid "PHP Safe Mode" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:471 +msgid "PHP Allow URL fopen" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:472 +msgid "PHP Memory Limit" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:473 +msgid "PHP Max Upload Size" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:474 +msgid "PHP Max Post Size" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:475 +msgid "PCRE Backtracking Limit" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:476 +msgid "PHP Max Script Execute Time" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:477 +msgid "PHP Exif support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:478 +msgid "PHP IPTC support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:479 +msgid "PHP XML support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:491 +msgid "" +"NextGEN Gallery contains some functions which are only available under PHP " +"5.2. You are using the old PHP 4 version, upgrade now! It's no longer " +"supported by the PHP group. Many shared hosting providers offer both PHP 4 " +"and PHP 5, running simultaneously. Ask your provider if they can do this." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:35 +msgid "Post title" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:37 +msgid "Enter the post title " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:42 +msgid "Size of the image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/publish.php:60 +msgid "Draft" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:26 +msgid "" +"Select the lowest role which should be able to access the following " +"capabilities. NextGEN Gallery supports the standard roles from WordPress." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:27 +msgid "For a more flexible user management you can use the" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:31 +msgid "Main NextGEN Gallery overview" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:35 +msgid "Use TinyMCE Button / Upload tab" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:39 +msgid "Add gallery / Upload images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:43 +msgid "Manage gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:47 +msgid "Manage others gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:51 +msgid "Manage tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:59 +msgid "Change style" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:63 +msgid "Change options" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:67 +msgid "NextGEN Attach Interface" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:60 +msgid "Image rotated" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:62 +msgid "Error rotating thumbnail" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:85 +msgid "90° clockwise" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:86 +msgid "90° anticlockwise" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:87 +msgid "Flip vertically" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:88 +msgid "Flip horizontally" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:22 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:204 +#, php-format +msgid "Rebuild image structure : %s / %s images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:23 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:205 +#, php-format +msgid "Rebuild gallery structure : %s / %s galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:24 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:206 +#, php-format +msgid "Rebuild album structure : %s / %s albums" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:81 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:263 +msgid "Done." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:196 +msgid "Cache cleared" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:315 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:334 +msgid "General Options" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:317 +msgid "Image" +msgid_plural "Images" +msgstr[0] "" +msgstr[1] "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:319 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:572 +msgid "Effects" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:320 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:614 +msgid "Watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:340 +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:54 +msgid "Gallery path" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:342 +msgid "This is the default path for all galleries" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:345 +msgid "Delete image files" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:347 +msgid "Delete files, when removing a gallery in the database" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:350 +msgid "Activate permalinks" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:352 +msgid "" +"When you activate this option, you need to update your permalink structure " +"one time." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:353 +msgid "Gallery slug name :" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:357 +msgid "Create new URL friendly image slugs" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:358 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:474 +msgid "Proceed now" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:361 +msgid "Select graphic library" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:362 +msgid "GD Library" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:363 +msgid "ImageMagick (Experimental). Path to the library :" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:368 +msgid "Activate Media RSS feed" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:370 +msgid "" +"A RSS feed will be added to you blog header. Useful for CoolIris/PicLens" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:373 +msgid "Activate PicLens/CoolIris support" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:375 +msgid "" +"When you activate this option, some javascript is added to your site footer. " +"Make sure that wp_footer is called in your theme." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:378 +msgid "Tags / Categories" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:381 +msgid "Activate related images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:383 +msgid "This option will append related images to every post" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:387 +msgid "Match with" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:393 +msgid "Max. number of images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:395 +msgid "0 will show all images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:399 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:435 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:477 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:562 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:597 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:860 +msgid "More settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:409 +msgid "Thumbnail settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:413 +msgid "" +"Please note : If you change the settings, you need to recreate the " +"thumbnails under -> Manage Gallery ." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:422 +msgid "These values are maximum values " +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:445 +msgid "Image settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:451 +msgid "Resize Images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:460 +msgid "Backup original images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:462 +msgid "Creates a backup for inserted images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:465 +msgid "Automatically resize" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:467 +msgid "Automatically resize images on upload." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:470 +msgid "Single picture" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:473 +msgid "Clear cache folder" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:494 +msgid "Deactivate gallery page link" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:496 +msgid "" +"The album will not link to a gallery subpage. The gallery is shown on the " +"same page." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:500 +msgid "Number of images per page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:502 +msgid "0 will disable pagination, all images on one page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:506 +msgid "Number of columns" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:508 +msgid "" +"0 will display as much as possible based on the width of your theme. Setting " +"normally only required for captions below the images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:512 +msgid "Integrate slideshow" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:519 +msgid "Show first" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:525 +msgid "Show ImageBrowser" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:527 +msgid "The gallery will open the ImageBrowser instead the effect." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:531 +msgid "Add hidden images" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:533 +msgid "" +"If pagination is used, this option will still show all images in the modal " +"window (Thickbox, Lightbox etc.). Note : This increases the page load" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:539 +msgid "" +"Browse images without reload the page. Note : Works only in combination with " +"Shutter effect" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:543 +msgid "Sort options" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:546 +msgid "Sort thumbnails" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:548 +msgid "Custom order" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:550 +msgid "File name" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:551 +msgid "Alt / Title text" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:552 +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:58 +msgid "Date / Time" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:556 +msgid "Sort direction" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:576 +msgid "" +"Here you can select the thumbnail effect, NextGEN Gallery will integrate the " +"required HTML code in the images. Please note that only the Shutter and " +"Thickbox effect will automatic added to your theme." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:577 +msgid "With the placeholder" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:577 +msgid "" +"you can activate a navigation through the images (depend on the effect). " +"Change the code line only , when you use a different thumbnail effect or you " +"know what you do." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:580 +msgid "JavaScript Thumbnail effect" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:584 +msgid "Thickbox" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:585 +msgid "Lightbox" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:586 +msgid "Highslide" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:587 +msgid "Shutter" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:593 +msgid "Link Code line" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:615 +msgid "" +"Please note : You can only activate the watermark under -> Manage Gallery . " +"This action cannot be undone." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:620 +msgid "Preview" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:622 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:627 +msgid "Position" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:647 +msgid "Offset" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:663 +msgid "Use image as watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:666 +msgid "URL to file" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:668 +msgid "The accessing of URL files is disabled at your server (allow_url_fopen)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:671 +msgid "Use text as watermark" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:674 +msgid "Font" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:683 +msgid "This function will not work, cause you need the FreeType library" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:685 +msgid "" +"You can upload more fonts in the folder <strong>nggallery/fonts</strong>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:694 +msgid "Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:696 +msgid "(hex w/o #)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:699 +msgid "Text" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:703 +msgid "Opaque" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:724 +msgid "Default size (W x H)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:729 +msgid "Duration time" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:730 +msgid "sec." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:733 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:810 +msgid "Transition / Fade effect" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:736 +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:813 +msgid "fade" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:737 +msgid "blindX" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:738 +msgid "cover" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:739 +msgid "scrollUp" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:740 +msgid "scrollDown" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:741 +msgid "shuffle" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:742 +msgid "toss" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:743 +msgid "wipe" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:745 +msgid "See here for more information about the effects :" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:749 +msgid "Settings for the JW Image Rotator" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:758 +msgid "" +"The path to JW Image Rotator is not defined, the slideshow will not work." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:770 +msgid "Path to the JW Image Rotator (URL)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:773 +msgid "Search now" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:774 +msgid "Press the button below to search for the JW Image Rotator" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:778 +msgid "Shuffle mode" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:796 +msgid "You can change the logo at the watermark settings" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:802 +msgid "true" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:803 +msgid "false" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:804 +msgid "fit" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:805 +msgid "none" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:814 +msgid "bgfade" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:815 +msgid "slowfade" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:816 +msgid "circles" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:817 +msgid "bubbles" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:818 +msgid "blocks" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:819 +msgid "fluids" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:820 +msgid "flash" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:821 +msgid "lines" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:831 +msgid "Background Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:836 +msgid "Texts / Buttons Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:841 +msgid "Rollover / Active Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:846 +msgid "Screen Color" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:851 +msgid "Background music (URL)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:855 +msgid "Try XHTML validation (with CDATA)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/settings.php:857 +msgid "" +"Important : Could causes problem at some browser. Please recheck your page." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:29 +msgid "Meta Data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:34 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:60 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:85 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:109 +msgid "Tag" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:35 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:61 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:86 +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:110 +msgid "Value" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:49 +msgid "No meta data saved" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:55 +msgid "EXIF Data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:74 +msgid "No exif data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:81 +msgid "IPTC Data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:105 +msgid "XMP Data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:11 +msgid "(From the theme folder)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:43 +msgid "You do not have sufficient permissions to edit templates for this blog." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:52 +msgid "CSS file successfully updated" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:91 +msgid "Activate and use style sheet:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:111 +msgid "Activate" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:121 +#, php-format +msgid "Editing <strong>%s</strong>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:123 +#, php-format +msgid "Browsing <strong>%s</strong>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:133 +msgid "Version" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:136 +msgid "" +"Tip : Copy your stylesheet (nggallery.css) to your theme folder, so it will " +"be not lost during a upgrade" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:138 +msgid "" +"Your theme contain a NextGEN Gallery stylesheet (nggallery.css), this file " +"will be used" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:140 +msgid "" +"Tip No. 2: Use the color picker below to help you find the right color " +"scheme for your gallery!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:156 +msgid "Update File" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:159 +msgid "If this file were writable you could edit it." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/style.php:164 +msgid "Oops, no such file exists! Double check the name and try again, merci." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:41 +msgid "Most popular" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:42 +msgid "Least used" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:43 +msgid "Alphabetical" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:100 +msgid "Manage image tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:112 +msgid "Existing Tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:116 +msgid "Search tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:120 +msgid "Go" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:125 +msgid "Sort Order:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:160 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:164 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:177 +msgid "Previous tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:173 +msgid "Next tags" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:185 +msgid "Rename Tag" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:193 +msgid "" +"Enter the tag to rename and its new value. You can use this feature to " +"merge tags too. Click \"Rename\" and all posts which use this tag will be " +"updated." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:194 +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:242 +msgid "You can specify multiple tags to rename by separating them with commas." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:198 +msgid "Tag(s) to rename:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:202 +msgid "New tag name(s):" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:205 +msgid "Rename" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:211 +msgid "Delete Tag" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:219 +msgid "" +"Enter the name of the tag to delete. This tag will be removed from all " +"posts." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:220 +msgid "You can specify multiple tags to delete by separating them with commas" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:224 +msgid "Tag(s) to delete:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:233 +msgid "Edit Tag Slug" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:241 +msgid "" +"Enter the tag name to edit and its new slug. This will be used in tagcloud " +"links. <a href=\"http://codex.wordpress.org/Glossary#Slug\" target=\"_blank" +"\">Slug definition</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:246 +msgid "Tag(s) to match:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:250 +msgid "Slug(s) to set:" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:3 +msgid "Main Page (no parent)" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:10 +msgid "Add page" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_link_to_page_field.php:3 +msgid "Not linked" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:103 +msgid "These are maximum values" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:61 +msgid "" +"Some folders/files could not renamed, please recheck the permission and " +"rescan the folder in the manage gallery section." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:63 +msgid "Rename failed" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:159 +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:178 +msgid "Upgrade NextGEN Gallery" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:160 +msgid "The script detect that you upgrade from a older version." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:161 +msgid "" +"Your database tables for NextGEN Gallery is out-of-date, and must be " +"upgraded before you can continue." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:162 +msgid "" +"If you would like to downgrade later, please make first a complete backup of " +"your database and the images." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:163 +msgid "The upgrade process may take a while, so please be patient." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:164 +msgid "Start upgrade now" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:180 +msgid "Upgrade finished..." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php:181 +msgid "Continue" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:33 +msgid "Update successfully" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:48 +msgid "Network Options" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:56 +msgid "" +"This is the default path for all blogs. With the placeholder %BLOG_ID% you " +"can organize the folder structure better." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:57 +#, php-format +msgid "The default setting should be %s" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:61 +msgid "Enable upload quota check" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:63 +msgid "Should work if the gallery is bellow the blog.dir" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:67 +msgid "Enable zip upload option" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:69 +msgid "Allow users to upload zip folders." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:73 +msgid "Enable import function" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:75 +msgid "Allow users to import images folders from the server." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:79 +msgid "Enable style selection" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:81 +msgid "Allow users to choose a style for the gallery." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:85 +msgid "Enable roles/capabilities" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:87 +msgid "Allow users to change the roles for other blog authors." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:91 +msgid "Default style" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:108 +msgid "Choose the default style for the galleries." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/core.php:410 +#, php-format +msgid "" +"Note : Based on your server memory limit you should not upload larger images " +"then <strong>%d x %d</strong> pixel" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:337 +#: products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:338 +msgid "Album overview" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:68 +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:70 +msgid "Set NextGEN featured image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:328 +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:329 +msgid "Set featured image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:356 +msgid "Remove featured image" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:223 +msgid "Album" +msgid_plural "Albums" +msgstr[0] "" +msgstr[1] "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:35 +msgid "No new tag specified!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:50 +msgid "No new/old valid tag specified!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:86 +msgid "No tag renamed." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:88 +#, php-format +msgid "Renamed tag(s) «%1$s» to «%2$s»" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:95 +msgid "No valid new tag." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:112 +msgid "No objects (post/page) found for specified old tags." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:141 +msgid "No tag merged." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:143 +#, php-format +msgid "" +"Merge tag(s) «%1$s» to «%2$s». %3$s objects edited." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:146 +msgid "Error. Not enough tags provided to rename or merge." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:165 +msgid "No tag specified!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:188 +msgid "No tag deleted." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:190 +#, php-format +msgid "%1s tag(s) deleted." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:206 +msgid "No new slug(s) specified!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:218 +msgid "Tags number and slugs number isn't the same!" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:245 +msgid "No slug edited." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:247 +#, php-format +msgid "%s slug(s) edited." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:64 +msgid "" +"<strong>Translation by : </strong><a target=\"_blank\" href=\"http://www." +"nextgen-gallery.com/languages/\">See here</a>" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:65 +msgid "" +"<strong>This translation is not yet updated for Version 1.9.0</strong>. If " +"you would like to help with translation, download the current po from the " +"plugin folder and read <a href=\"http://www.nextgen-gallery.com/languages/" +"\">here</a> how you can translate the plugin." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:158 +msgid "" +"Sorry, NextGEN Gallery works only with a Memory Limit of 16 MB or higher" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:184 +msgid "Picture tag" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:185 +msgid "Picture tag: %2$l." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:186 +msgid "Separate picture tags with commas." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:324 +msgid "Get help" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:325 +msgid "Contribute" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php:29 +msgid "[Gallery not found]" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php:163 +msgid "Related images for" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:38 +msgid "Meta data" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:42 +msgid "Camera / Type" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:50 +msgid "Focal Length" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:50 +msgid "No galleries have been yet created." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:69 +#, php-format +msgid "The gallery ID=%s does not exist." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:100 +msgid "No album ID has been provided as parameter" +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:108 +#, php-format +msgid "The album ID=%s does not exist." +msgstr "" + +#: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:115 +msgid "Invalid MediaRSS command" +msgstr "" + +msgid "NextGEN Basic Compact Album" +msgstr "" + +msgid "NextGEN Basic Extended Album" +msgstr "" + +msgid "NextGEN Basic Thumbnails" +msgstr "" + +msgid "NextGEN Basic Slideshow" +msgstr "" + +msgid "NextGEN Basic ImageBrowser" +msgstr "" + +msgid "NextGEN Basic Singlepic" +msgstr "" + +msgid "NextGEN Basic Tagcloud" +msgstr "" + diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/module.i18n.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/module.i18n.php new file mode 100644 index 0000000000000000000000000000000000000000..68c2332cfc00d862bdbc860fd7469b9d6d92d538 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/i18n/module.i18n.php @@ -0,0 +1,198 @@ +<?php +/*** +{ + Module: photocrati-i18n, + Depends: {photocrati-fs, photocrati-router} +} + ***/ +class M_I18N extends C_Base_Module +{ + function define() + { + parent::define( + 'photocrati-i18n', + 'Internationalization', + "Adds I18N resources and methods", + '0.1', + 'http://www.nextgen-gallery.com/languages/', + 'Photocrati Media', + 'http://www.photocrati.com' + ); + } + + function _register_adapters() + { + // Provides translating the name & description of images, albums, and galleries + $this->get_registry()->add_adapter('I_Image_Mapper', 'A_I18N_Image_Translation'); + $this->get_registry()->add_adapter('I_Album_Mapper', 'A_I18N_Album_Translation'); + $this->get_registry()->add_adapter('I_Gallery_Mapper', 'A_I18N_Gallery_Translation'); + + // qTranslate requires we disable "Hide Untranslated Content" during routed app requests like + // photocrati-ajax, when uploading new images, or retrieving dynamically altered (watermarked) images + $this->get_registry()->add_adapter('I_Routing_App', 'A_I18N_Routing_App'); + } + + function _register_hooks() + { + $dir = str_replace( + WP_PLUGIN_DIR, + '', + C_Fs::get_instance()->get_abspath('lang', 'photocrati-i18n') + ); + + // Load text domain + load_plugin_textdomain('nggallery', false, $dir); + + // Hooks to register image, gallery, and album name & description with WPML + add_action('ngg_image_updated', array(&$this, 'register_image_strings')); + add_action('ngg_album_updated', array(&$this, 'register_album_strings')); + add_action('ngg_created_new_gallery', array(&$this, 'register_gallery_strings')); + + // do not let WPML translate posts we use as a document store + add_filter('get_translatable_documents', array(&$this, 'wpml_translatable_documents')); + + // see function comments + add_filter('ngg_displayed_gallery_cache_params', array(&$this, 'set_qtranslate_cache_parameters')); + add_filter('ngg_displayed_gallery_cache_params', array(&$this, 'set_wpml_cache_parameters')); + } + + /** + * When QTranslate is active we must add its language & url-mode settings as display parameters + * so as to generate a unique cache for each language. + * + * @param array $arr + * @return array + */ + function set_qtranslate_cache_parameters($arr) + { + if (empty($GLOBALS['q_config']) || !defined('QTRANS_INIT')) + return $arr; + + global $q_config; + $arr['qtranslate_language'] = $q_config['language']; + $arr['qtranslate_url_mode'] = $q_config['url_mode']; + + return $arr; + } + + /** + * See notes on set_qtranslate_cache_paramters() + * + * @param array $arr + * @return array + */ + function set_wpml_cache_parameters($arr) + { + if (empty($GLOBALS['sitepress']) || !defined('WPML_ST_VERSION')) + return $arr; + + global $sitepress; + $settings = $sitepress->get_settings(); + $arr['wpml_language'] = ICL_LANGUAGE_CODE; + $arr['wpml_url_mode'] = $settings['language_negotiation_type']; + + return $arr; + } + + /** + * Registers gallery strings with WPML + * + * @param object $gallery + */ + function register_gallery_strings($gallery_id) + { + if (function_exists('icl_register_string')) + { + $gallery = $this->get_registry()->get_utility('I_Gallery_Mapper')->find($gallery_id); + if ($gallery) + { + icl_register_string('plugin_ngg', 'gallery_' . $gallery->{$gallery->id_field} . '_name', $gallery->title, TRUE); + icl_register_string('plugin_ngg', 'gallery_' . $gallery->{$gallery->id_field} . '_description', $gallery->galdesc, TRUE); + } + } + } + + /** + * Registers image strings with WPML + * + * @param object $image + */ + function register_image_strings($image) + { + if (function_exists('icl_register_string')) + { + icl_register_string('plugin_ngg', 'pic_' . $image->{$image->id_field} . '_description', $image->description, TRUE); + icl_register_string('plugin_ngg', 'pic_' . $image->{$image->id_field} . '_alttext', $image->alttext, TRUE); + } + } + + /** + * Registers album strings with WPML + * + * @param object $album + */ + function register_album_strings($album) + { + if (function_exists('icl_register_string')) + { + icl_register_string('plugin_ngg', 'album_' . $album->{$album->id_field} . '_name', $album->name, TRUE); + icl_register_string('plugin_ngg', 'album_' . $album->{$album->id_field} . '_description', $album->albumdesc, TRUE); + } + } + + /** + * NextGEN stores some data in custom posts that MUST NOT be automatically translated by WPML + * + * @param array $icl_post_types + * @return array $icl_post_types without any NextGEN custom posts + */ + function wpml_translatable_documents($icl_post_types = array()) + { + $nextgen_post_types = array( + 'ngg_album', + 'ngg_gallery', + 'ngg_pictures', + 'displayed_gallery', + 'display_type', + 'gal_display_source', + 'lightbox_library', + 'photocrati-comments' + ); + foreach ($icl_post_types as $ndx => $post_type) { + if (in_array($post_type->name, $nextgen_post_types)) + unset($icl_post_types[$ndx]); + } + return $icl_post_types; + } + + static function translate($in, $name = null) + { + if (function_exists('langswitch_filter_langs_with_message')) + $in = langswitch_filter_langs_with_message($in); + + if (function_exists('polyglot_filter')) + $in = polyglot_filter($in); + + if (function_exists('qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage')) + $in = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($in); + + if (is_string($name) && !empty($name) && function_exists('icl_translate')) + $in = icl_translate('plugin_ngg', $name, $in, true); + + $in = apply_filters('localization', $in); + + return $in; + } + + function get_type_list() + { + return array( + 'A_I18N_Image_Translation' => 'adapter.i18n_image_translation.php', + 'A_I18N_Album_Translation' => 'adapter.i18n_album_translation.php', + 'A_I18N_Gallery_Translation' => 'adapter.i18n_gallery_translation.php', + 'A_I18N_Routing_App' => 'adapter.i18n_routing_app.php' + ); + } +} + +new M_I18N(); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/adapter.lightbox_factory.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/adapter.lightbox_factory.php index 11bb2da5755422c05d9323ee04c39ef3e3c85ff2..de848be3530948245b502411443aff7bda253bac 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/adapter.lightbox_factory.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/adapter.lightbox_factory.php @@ -2,13 +2,13 @@ class A_Lightbox_Factory extends Mixin { - function lightbox_library($mapper=FALSE, $properties=array(), $context=FALSE) + function lightbox_library($properties=array(), $mapper=FALSE, $context=FALSE) { - return new C_Lightbox_Library($mapper, $properties, $context); + return new C_Lightbox_Library($properties, $mapper, $context); } - function lightbox($mapper=FALSE, $properties=array(), $context=FALSE) + function lightbox($properties=array(), $mapper=FALSE, $context=FALSE) { - return $this->object->lightbox_library($mapper, $properties, $context); + return $this->object->lightbox_library($properties, $mapper, $context); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php index 1bf00c46476e21c5f70bcfb08120d3b7286b4c59..a8feb9f8c93cde6aef2a5de19d3f96cad57d04bd 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/adapter.lightbox_library_form.php @@ -17,7 +17,7 @@ class A_Lightbox_Library_Form extends Mixin { return array( 'lightbox_library_code', - 'lightbox_library_css_stylesheets', + 'lightbox_library_styles', 'lightbox_library_scripts' ); } @@ -31,7 +31,7 @@ class A_Lightbox_Library_Form extends Mixin return $this->_render_text_field( $lightbox, 'code', - 'Code', + __('Code', 'nggallery'), $lightbox->code ); } @@ -40,13 +40,13 @@ class A_Lightbox_Library_Form extends Mixin * @param $lightbox * @return mixed */ - function _render_lightbox_library_css_stylesheets_field($lightbox) + function _render_lightbox_library_styles_field($lightbox) { return $this->_render_textarea_field( $lightbox, - 'css_stylesheets', - 'Stylesheet URL', - $lightbox->css_stylesheets + 'styles', + __('Stylesheet URL', 'nggallery'), + $lightbox->styles ); } @@ -59,7 +59,7 @@ class A_Lightbox_Library_Form extends Mixin return $this->_render_textarea_field( $lightbox, 'scripts', - 'Javascript URL', + __('Javascript URL', 'nggallery'), $lightbox->scripts ); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_installer.php index 4074eeb438b7c2b49d44b7c43212038fa6f04e86..3e7ef56f1a0037a1b29d3a4b12bdb2e13ba14dd0 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_installer.php @@ -2,79 +2,73 @@ class C_Lightbox_Installer { - function __construct() - { - $this->registry = C_Component_Registry::get_instance(); - $this->router = $this->registry->get_utility('I_Router'); - $this->mapper = $this->registry->get_utility('I_Lightbox_Library_Mapper'); - } - - - function set_attr(&$obj, $key, $val) - { - if (!isset($obj->$key)) - $obj->$key = $val; - } - - /** - * Installs a lightbox library - * @param string $name - * @param string $code - * @param array $stylesheet_paths - * @param array $script_paths - * @param array $values - */ - function install_lightbox($name, $title, $code, $stylesheet_paths=array(), $script_paths=array(), $values=array()) - { - // Try to find the existing lightbox. If we can't find it, we'll create - $lightbox = $this->mapper->find_by_name($name); - if (!$lightbox) - $lightbox = new stdClass; - - $styles = array(); - foreach ($stylesheet_paths as $stylesheet) { - if (preg_match("/http(s)?/", $stylesheet)) - $styles[] = $stylesheet; - else - $styles[] = $this->router->get_static_url($stylesheet); - } - - $scripts = array(); - foreach ($script_paths as $script) { - if (preg_match("/http(s)?/", $script)) - $scripts[] = $script; - else - $scripts[] = $this->router->get_static_url($script); - } - - // Set properties - $lightbox->name = $name; - $this->set_attr($lightbox, 'title', $title); - $this->set_attr($lightbox, 'code', $code); - $this->set_attr($lightbox, 'values', $values); - $this->set_attr($lightbox, 'css_stylesheets', implode("\n", $styles)); - $this->set_attr($lightbox, 'scripts', implode("\n", $scripts)); - - // Save the lightbox - $this->mapper->save($lightbox); - } - - /** - * Uninstalls an existing lightbox - * @param string $name - */ - function uninstall_lightbox($name) - { - if (($lightbox = $this->mapper->find_by_name($name))) { - $this->mapper->destroy($lightbox); - } - } - - /** - * Installs all of the lightbox provided by this module - */ - function install() - { + function __construct() + { + $this->registry = C_Component_Registry::get_instance(); + $this->router = $this->registry->get_utility('I_Router'); + $this->mapper = $this->registry->get_utility('I_Lightbox_Library_Mapper'); + } + + + function set_attr(&$obj, $key, $val, $force=FALSE) + { + if (!isset($obj->$key) OR $force) + $obj->$key = $val; + } + + /** + * Installs a lightbox library + * @param string $name + * @param string $code + * @param array $stylesheet_paths + * @param array $script_paths + * @param array $values + */ + function install_lightbox($name, $title, $code, $stylesheet_paths=array(), $script_paths=array(), $values=array(), $update=FALSE) + { + // Try to find the existing lightbox. If we can't find it, we'll create + $lightbox = $this->mapper->find_by_name($name); + if (!$lightbox) + $lightbox = new stdClass; + + // Set properties + $lightbox->name = $name; + $this->set_attr($lightbox, 'title', $title, TRUE); + $this->set_attr($lightbox, 'code', $code); + $this->set_attr($lightbox, 'values', $values); + + // Overrides styles and scripts if localhost is used + if (isset($lightbox->styles) && strpos($lightbox->styles, 'localhost') !== FALSE) + $this->set_attr($lightbox, 'styles', implode("\n", $stylesheet_paths), TRUE); + else + $this->set_attr($lightbox, 'styles', implode("\n", $stylesheet_paths)); + + if (isset($lightbox->scripts) && strpos($lightbox->scripts, 'localhost') !== FALSE) + $this->set_attr($lightbox, 'scripts', implode("\n", $script_paths), TRUE); + else + $this->set_attr($lightbox, 'scripts', implode("\n", $script_paths)); + + // Save the lightbox + // Note: the validation method will convert absolute urls to relative urls if needed + $this->mapper->save($lightbox); + } + + /** + * Uninstalls an existing lightbox + * @param string $name + */ + function uninstall_lightbox($name) + { + if (($lightbox = $this->mapper->find_by_name($name))) { + $this->mapper->destroy($lightbox); + } + } + + /** + * Installs all of the lightbox provided by this module + */ + function install() + { // Install "None" option $this->install_lightbox( 'none', @@ -84,93 +78,88 @@ class C_Lightbox_Installer array() ); - $this->install_lightbox( - 'lightbox', + $this->install_lightbox( + 'lightbox', 'Lightbox', - "class='ngg_lightbox'", - array('photocrati-lightbox#jquery.lightbox/jquery.lightbox-0.5.css'), - array( - 'photocrati-lightbox#jquery.lightbox/jquery.lightbox-0.5.min.js', - 'photocrati-lightbox#jquery.lightbox/nextgen_lightbox_init.js' - ), - array( - 'nextgen_lightbox_loading_img_url' => - $this->router->get_static_url('photocrati-lightbox#jquery.lightbox/lightbox-ico-loading.gif'), - - 'nextgen_lightbox_close_btn_url' => - $this->router->get_static_url('photocrati-lightbox#jquery.lightbox/lightbox-btn-close.gif'), - - 'nextgen_lightbox_btn_prev_url' => - $this->router->get_static_url('photocrati-lightbox#jquery.lightbox/lightbox-btn-prev.gif'), - - 'nextgen_lightbox_btn_next_url' => - $this->router->get_static_url('photocrati-lightbox#jquery.lightbox/lightbox-btn-next.gif'), - - 'nextgen_lightbox_blank_img_url' => - $this->router->get_static_url('photocrati-lightbox#jquery.lightbox/lightbox-blank.gif') - ) - ); - - // Install Fancybox 1.3.4 - $this->install_lightbox( - 'fancybox', + "class='ngg_lightbox'", + array('photocrati-lightbox#jquery.lightbox/jquery.lightbox-0.5.css'), + array( + 'photocrati-lightbox#jquery.lightbox/jquery.lightbox-0.5.min.js', + 'photocrati-lightbox#jquery.lightbox/nextgen_lightbox_init.js' + ), + array( + 'nextgen_lightbox_loading_img_url' => 'photocrati-lightbox#jquery.lightbox/lightbox-ico-loading.gif', + 'nextgen_lightbox_close_btn_url' => 'photocrati-lightbox#jquery.lightbox/lightbox-btn-close.gif', + 'nextgen_lightbox_btn_prev_url' => 'photocrati-lightbox#jquery.lightbox/lightbox-btn-prev.gif', + 'nextgen_lightbox_btn_next_url' => 'photocrati-lightbox#jquery.lightbox/lightbox-btn-next.gif', + 'nextgen_lightbox_blank_img_url' => 'photocrati-lightbox#jquery.lightbox/lightbox-blank.gif' + ) + ); + + // Install Fancybox 1.3.4 + $this->install_lightbox( + 'fancybox', 'Fancybox', - 'class="ngg-fancybox" rel="%GALLERY_NAME%"', - array('photocrati-lightbox#fancybox/jquery.fancybox-1.3.4.css'), - array( - 'photocrati-lightbox#fancybox/jquery.easing-1.3.pack.js', - 'photocrati-lightbox#fancybox/jquery.fancybox-1.3.4.pack.js', - 'photocrati-lightbox#fancybox/nextgen_fancybox_init.js' - ) - ); - - // Install highslide - $this->install_lightbox( - 'highslide', + 'class="ngg-fancybox" rel="%GALLERY_NAME%"', + array('photocrati-lightbox#fancybox/jquery.fancybox-1.3.4.css'), + array( + 'photocrati-lightbox#fancybox/jquery.easing-1.3.pack.js', + 'photocrati-lightbox#fancybox/jquery.fancybox-1.3.4.pack.js', + 'photocrati-lightbox#fancybox/nextgen_fancybox_init.js' + ) + ); + + // Install highslide + $this->install_lightbox( + 'highslide', 'Highslide', - 'class="highslide" onclick="return hs.expand(this, {slideshowGroup: ' . "'%GALLERY_NAME%'" . '});"', - array('photocrati-lightbox#highslide/highslide.css'), - array('photocrati-lightbox#highslide/highslide-full.packed.js', 'photocrati-lightbox#highslide/nextgen_highslide_init.js'), - array('nextgen_highslide_graphics_dir' => $this->router->get_static_url('photocrati-lightbox#highslide/graphics')) - ); - - // Install Shutter - $this->install_lightbox( - 'shutter', + 'class="highslide" onclick="return hs.expand(this, {slideshowGroup: ' . "'%GALLERY_NAME%'" . '});"', + array('photocrati-lightbox#highslide/highslide.css'), + array('photocrati-lightbox#highslide/highslide-full.packed.js', + 'photocrati-lightbox#highslide/nextgen_highslide_init.js'), + array('nextgen_highslide_graphics_dir' => 'photocrati-lightbox#highslide/graphics') + ); + + // Install Shutter + $this->install_lightbox( + 'shutter', 'Shutter', - 'class="shutterset_%GALLERY_NAME%"', - array('photocrati-lightbox#shutter/shutter.css'), - array('photocrati-lightbox#shutter/shutter.js', 'photocrati-lightbox#shutter/nextgen_shutter.js'), - array( - 'msgLoading' => 'L O A D I N G', - 'msgClose' => 'Click to Close', - ) - ); - - // Install Shutter Reloaded - $this->install_lightbox( - 'shutter2', + 'class="shutterset_%GALLERY_NAME%"', + array('photocrati-lightbox#shutter/shutter.css'), + array('photocrati-lightbox#shutter/shutter.js', + 'photocrati-lightbox#shutter/nextgen_shutter.js'), + array( + 'msgLoading' => 'L O A D I N G', + 'msgClose' => 'Click to Close', + ) + ); + + // Install Shutter Reloaded + $this->install_lightbox( + 'shutter2', 'Shutter 2', - 'class="shutterset_%GALLERY_NAME%"', - array('photocrati-lightbox#shutter_reloaded/shutter.css'), - array('photocrati-lightbox#shutter_reloaded/shutter.js', 'photocrati-lightbox#shutter_reloaded/nextgen_shutter_reloaded.js') - ); - - // Install Thickbox - $this->install_lightbox( - 'thickbox', + 'class="shutterset_%GALLERY_NAME%"', + array('photocrati-lightbox#shutter_reloaded/shutter.css'), + array('photocrati-lightbox#shutter_reloaded/shutter.js', + 'photocrati-lightbox#shutter_reloaded/nextgen_shutter_reloaded.js') + ); + + // Install Thickbox + $this->install_lightbox( + 'thickbox', 'Thickbox', - "class='thickbox' rel='%GALLERY_NAME%'", - array(includes_url('/js/thickbox/thickbox.css')), - array('photocrati-lightbox#thickbox/nextgen_thickbox_init.js', includes_url('/js/thickbox/thickbox.js')) - ); - } - - /** - * Uninstalls all lightboxes - */ - function uninstall($hard = FALSE) - { + "class='thickbox' rel='%GALLERY_NAME%'", + array('wordpress#thickbox'), + array('photocrati-lightbox#thickbox/nextgen_thickbox_init.js', + 'wordpress#thickbox') + ); + } + + /** + * Uninstalls all lightboxes + */ + function uninstall($hard = FALSE) + { $this->mapper->delete()->run_query(); - } + } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_library.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_library.php index e0fabafed7772cfa4ceaa915b9b8c4ae0919505e..f4442441a644cf340e33a10d5031caa133037d6b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_library.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_library.php @@ -11,12 +11,23 @@ */ class C_Lightbox_Library extends C_DataMapper_Model { - function define($mapper, $properties, $context=FALSE) + function define($properties=array(), $mapper=FALSE, $context=FALSE) { parent::define($mapper, $properties, $context); $this->add_mixin('Mixin_Lightbox_Library_Validation'); $this->implement('I_Lightbox_Library'); } + + function initialize($properties=array(), $mapper=FALSE, $context=FALSE) + { + // Get the mapper is not specified + if (!$mapper) { + $mapper = $this->get_registry()->get_utility($this->_mapper_interface); + } + + // Initialize + parent::initialize($mapper, $properties); + } } class Mixin_Lightbox_Library_Validation extends Mixin @@ -26,6 +37,33 @@ class Mixin_Lightbox_Library_Validation extends Mixin $this->object->validates_presence_of('name'); $this->object->validates_uniqueness_of('name'); + // We need to convert some urls + $scripts = array(); + foreach (explode("\n", $this->object->scripts) as $script) { + if ($script) $scripts[] = $this->_convert_url($script); + } + $this->object->scripts = implode("\n", $scripts); + + $styles = array(); + foreach (explode("\n", $this->object->styles) as $style) { + if ($style) $styles[] = $this->_convert_url($style); + } + $this->object->styles = implode("\n", $styles); + return $this->object->is_valid(); } + + function _convert_url($url) + { + // Convert absolute url + if (strpos("http://", $url) === 0 OR strpos("://", $url) === 0 OR strpos("https://", $url) === 0) { + if (strpos("://", $url) === 0) { + $url = str_replace("://", 'http://', $url); + } + $url = str_replace(home_url(), '', $url); + if ($url[0] != '/') $url = '/'.$url; + } + + return $url; + } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_library_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_library_mapper.php index 61d57022cdcf17b6a371f3acf766d43188160ab1..c193b46d7c7ceb02b801a567ca03ebc57d6e4bf7 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_library_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/class.lightbox_library_mapper.php @@ -76,7 +76,7 @@ class Mixin_Lightbox_Library_Mapper */ function set_defaults($entity) { - $this->object->_set_default_value($entity, 'css_stylesheets', ''); + $this->object->_set_default_value($entity, 'styles', ''); $this->object->_set_default_value($entity, 'scripts', ''); $this->object->_set_default_value($entity, 'display_settings', array()); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/module.lightbox.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/module.lightbox.php index 8e856dba957bae306a3a4a501fd192bfffd1847e..e1e4d880dabbdb8e2ff63ac31ce18278b601918f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/module.lightbox.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/module.lightbox.php @@ -7,18 +7,20 @@ } ***/ -define('NEXTGEN_LIGHTBOX_OPTIONS_SLUG', 'ngg_lightbox_options'); -define('NEXTGEN_LIGHTBOX_ADVANCED_OPTIONS_SLUG', 'ngg_lightbox_advanced_options'); +define('NGG_LIGHTBOX_OPTIONS_SLUG', 'ngg_lightbox_options'); +define('NGG_LIGHTBOX_ADVANCED_OPTIONS_SLUG', 'ngg_lightbox_advanced_options'); class M_Lightbox extends C_Base_Module { + static $_registered_lightboxes; + function define() { parent::define( 'photocrati-lightbox', 'Lightbox', - _("Provides integration with JQuery's lightbox plugin"), - '0.4', + "Provides integration with several JavaScript lightbox effect libraries", + '0.12', 'http://leandrovieira.com/projects/jquery/lightbox/', 'Photocrati Media', 'http://www.photocrati.com' @@ -43,7 +45,7 @@ class M_Lightbox extends C_Base_Module { foreach ($this->get_registry()->get_utility('I_Lightbox_Library_Mapper')->find_all() as $lib) { $this->get_registry()->add_adapter('I_Form', 'A_Lightbox_Library_Form', $lib->name); - C_Form_Manager::get_instance()->add_form(NEXTGEN_LIGHTBOX_ADVANCED_OPTIONS_SLUG, $lib->name); + C_Form_Manager::get_instance()->add_form(NGG_LIGHTBOX_ADVANCED_OPTIONS_SLUG, $lib->name); } } @@ -64,6 +66,231 @@ class M_Lightbox extends C_Base_Module // Provides an installer for lightbox libraries $this->get_registry()->add_adapter('I_Installer', 'A_Lightbox_Installer'); } + + /** + * Registers hooks for the WordPress framework + */ + function _register_hooks() + { + add_action('wp_enqueue_scripts', array($this, '_register_resources')); + add_action('wp_footer', array($this, '_enqueue_resources'), 3); + add_action('init', array(&$this, '_register_custom_post_type')); + } + + /** + * Registers the custom post type saved for lightbox libraries + */ + function _register_custom_post_type() + { + register_post_type('lightbox_library', array( + 'label' => 'Lightbox Library', + 'publicly_queryable' => FALSE, + 'exclude_from_search' => TRUE, + )); + } + + /** + * Parses certain paths through get_static_url + * + * @param string $url + * @return string Resulting URL + */ + static function _handle_url($url) + { + $router = C_Component_Registry::get_instance()->get_utility('I_Router'); + if (0 !== strpos($url, '/') + && 0 !== strpos($url, 'wordpress#') + && 0 !== strpos($url, 'http://') + && 0 !== strpos($url, 'https://')) + { + $url = $router->get_static_url($url); + } + elseif (strpos($url, '/') === 0) { + $url = home_url($url); + } + + return $url; + } + + /** + * Registers or enqueues resources for a given lightbox library + * + * @param object $library Lightbox library + */ + static function _register_library_resources($library, $register = TRUE) + { + $i = 0; + foreach (explode("\n", $library->scripts) as $script) { + if (empty($script)) + continue; + + $script = self::_handle_url($script); + + // if _registered_lightboxes exist we should register rather than enqueue + if ($register) + { + // if the module is "wordpress" we leave the rest to Wordpress and only ask that it enqueue + // whatever the name of the resource requested may be. + if (0 === strpos($script, 'wordpress#')) + { + self::$_registered_lightboxes[] = substr($script, 10); + } else { + wp_register_script( + $library->name . '-' . $i, + $script, + array('ngg_common') + ); + self::$_registered_lightboxes[] = $library->name . '-' . $i; + } + } + else { + // same as above, but enqueue now rather than register for later + if (0 === strpos($script, 'wordpress#')) + { + wp_enqueue_script(substr($script, 10)); + } else { + wp_enqueue_script( + $library->name . '-' . $i, + $script, + array('ngg_common') + ); + } + } + + if ($i == 0 AND isset($library->values)) + { + foreach ($library->values as $name => $value) { + if (empty($value)) + continue; + $value = self::_handle_url($value); + self::_add_script_data( + $library->name . '-0', + $name, + $value, + FALSE + ); + } + } + $i += 1; + } + + // in 2.0.41 this field was renamed; use the old attribute as a fallback + if (empty($library->styles) && !empty($library->css_stylesheets)) + $library->styles = $library->css_stylesheets; + + $i = 0; + foreach (explode("\n", $library->styles) as $style) { + if (empty($style)) + continue; + $style = self::_handle_url($style); + if (0 === strpos($style, 'wordpress#')) + { + wp_enqueue_style(substr($style, 10)); + } + else { + wp_enqueue_style( + $library->name . '-' . $i, + $style + ); + } + $i += 1; + } + } + + /** + * Registers our static settings resources so the ATP module can find them later + */ + function _register_resources() + { + $router = $this->get_registry()->get_utility('I_Router'); + $settings = C_NextGen_Settings::get_instance(); + $thumbEffectContext = isset($settings->thumbEffectContext) ? $settings->thumbEffectContext : ''; + + wp_register_script( + 'nextgen_lightbox_context', + $router->get_static_url('photocrati-lightbox#lightbox_context.js') + ); + wp_enqueue_script('nextgen_lightbox_context'); + + if ($thumbEffectContext != null && $thumbEffectContext != 'nextgen_images') { + $mapper = $this->object->get_registry()->get_utility('I_Lightbox_Library_Mapper'); + $library = $mapper->find_by_name($settings->thumbEffect); + + // Make the path to the static resources available for libraries + // Shutter-Reloaded in particular depends on this + $this->_add_script_data( + 'ngg_common', + 'nextgen_lightbox_settings', + array('static_path' => $this->get_registry()->get_utility('I_Fs')->find_static_abspath('', 'photocrati-lightbox'), 'context' => $thumbEffectContext), + TRUE, + true + ); + + self::_register_library_resources($library); + } + } + + function _enqueue_resources() + { + foreach (((array)self::$_registered_lightboxes) as $library) { + wp_enqueue_script($library); + } + } + + /** + * Adds data to the DOM which is then accessible by a script -- borrowed from display type controller class + * @param string $handle + * @param string $object_name + * @param mixed $object_value + * @param bool $define + */ + function _add_script_data($handle, $object_name, $object_value, $define=TRUE, $override=FALSE) + { + $retval = FALSE; + + // wp_localize_script allows you to add data to the DOM, associated + // with a particular script. You can even call wp_localize_script + // multiple times to add multiple objects to the DOM. However, there + // are a few problems with wp_localize_script: + // + // - If you call it with the same object_name more than once, you're + // overwritting the first call. + // - You cannot namespace your objects due to the "var" keyword always + // - being used. + // + // To circumvent the above issues, we're going to use the WP_Scripts + // object to workaround the above issues + global $wp_scripts; + + // Has the script been registered or enqueued yet? + if (isset($wp_scripts->registered[$handle])) { + + // Get the associated data with this script + $script = &$wp_scripts->registered[$handle]; + $data = isset($script->extra['data']) ? $script->extra['data'] : ''; + + // Construct the addition + $addition = $define ? "\nvar {$object_name} = " . json_encode($object_value) . ';' : + "\n{$object_name} = " . json_encode($object_value) . ';'; + + // Add the addition + if ($override) { + $data .= $addition; + $retval = TRUE; + } + else if (strpos($data, $object_name) === FALSE) { + $data .= $addition; + $retval = TRUE; + } + + $script->extra['data'] = $data; + + unset($script); + } + + return $retval; + } + function get_type_list() { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/blank.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/blank.gif old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_close.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_close.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_loading.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_loading.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_nav_left.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_nav_left.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_nav_right.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_nav_right.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_e.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_e.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_n.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_n.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_ne.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_ne.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_nw.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_nw.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_s.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_s.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_se.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_se.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_sw.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_sw.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_w.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_shadow_w.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_title_left.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_title_left.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_title_main.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_title_main.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_title_over.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_title_over.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_title_right.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancy_title_right.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancybox-x.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancybox-x.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancybox-y.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancybox-y.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancybox.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/fancybox.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.easing-1.3.pack.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.easing-1.3.pack.js old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.css old mode 100644 new mode 100755 index bc0f15fd1631c27f675a4fe77c46ad12d9b7d0b6..e59be37cf4f9bd1d20b5d45fd96ef06ea7ca7acc --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.css @@ -1,366 +1,366 @@ -/* - * FancyBox - jQuery Plugin - * Simple and fancy lightbox alternative - * - * Examples and documentation at: http://fancybox.net - * - * Copyright (c) 2008 - 2010 Janis Skarnelis - * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. - * - * Version: 1.3.4 (11/11/2010) - * Requires: jQuery v1.3+ - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - */ - -#fancybox-loading { - position: fixed; - top: 50%; - left: 50%; - width: 40px; - height: 40px; - margin-top: -20px; - margin-left: -20px; - cursor: pointer; - overflow: hidden; - z-index: 1104; - display: none; -} - -#fancybox-loading div { - position: absolute; - top: 0; - left: 0; - width: 40px; - height: 480px; - background-image: url('fancybox.png'); -} - -#fancybox-overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - z-index: 1100; - display: none; -} - -#fancybox-tmp { - padding: 0; - margin: 0; - border: 0; - overflow: auto; - display: none; -} - -#fancybox-wrap { - position: absolute; - top: 0; - left: 0; - padding: 20px; - z-index: 1101; - outline: none; - display: none; -} - -#fancybox-outer { - position: relative; - width: 100%; - height: 100%; - background: #fff; -} - -#fancybox-content { - width: 0; - height: 0; - padding: 0; - outline: none; - position: relative; - overflow: hidden; - z-index: 1102; - border: 0px solid #fff; -} - -#fancybox-hide-sel-frame { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: transparent; - z-index: 1101; -} - -#fancybox-close { - position: absolute; - top: -15px; - right: -15px; - width: 30px; - height: 30px; - background: transparent url('fancybox.png') -40px 0px; - cursor: pointer; - z-index: 1103; - display: none; -} - -#fancybox-error { - color: #444; - font: normal 12px/20px Arial; - padding: 14px; - margin: 0; -} - -#fancybox-img { - width: 100%; - height: 100%; - padding: 0; - margin: 0; - border: none; - outline: none; - line-height: 0; - vertical-align: top; -} - -#fancybox-frame { - width: 100%; - height: 100%; - border: none; - display: block; -} - -#fancybox-left, #fancybox-right { - position: absolute; - bottom: 0px; - height: 100%; - width: 35%; - cursor: pointer; - outline: none; - background: transparent url('blank.gif'); - z-index: 1102; - display: none; -} - -#fancybox-left { - left: 0px; -} - -#fancybox-right { - right: 0px; -} - -#fancybox-left-ico, #fancybox-right-ico { - position: absolute; - top: 50%; - left: -9999px; - width: 30px; - height: 30px; - margin-top: -15px; - cursor: pointer; - z-index: 1102; - display: block; -} - -#fancybox-left-ico { - background-image: url('fancybox.png'); - background-position: -40px -30px; -} - -#fancybox-right-ico { - background-image: url('fancybox.png'); - background-position: -40px -60px; -} - -#fancybox-left:hover, #fancybox-right:hover { - visibility: visible; /* IE6 */ -} - -#fancybox-left:hover span { - left: 20px; -} - -#fancybox-right:hover span { - left: auto; - right: 20px; -} - -.fancybox-bg { - position: absolute; - padding: 0; - margin: 0; - border: 0; - width: 20px; - height: 20px; - z-index: 1001; -} - -#fancybox-bg-n { - top: -20px; - left: 0; - width: 100%; - background-image: url('fancybox-x.png'); -} - -#fancybox-bg-ne { - top: -20px; - right: -20px; - background-image: url('fancybox.png'); - background-position: -40px -162px; -} - -#fancybox-bg-e { - top: 0; - right: -20px; - height: 100%; - background-image: url('fancybox-y.png'); - background-position: -20px 0px; -} - -#fancybox-bg-se { - bottom: -20px; - right: -20px; - background-image: url('fancybox.png'); - background-position: -40px -182px; -} - -#fancybox-bg-s { - bottom: -20px; - left: 0; - width: 100%; - background-image: url('fancybox-x.png'); - background-position: 0px -20px; -} - -#fancybox-bg-sw { - bottom: -20px; - left: -20px; - background-image: url('fancybox.png'); - background-position: -40px -142px; -} - -#fancybox-bg-w { - top: 0; - left: -20px; - height: 100%; - background-image: url('fancybox-y.png'); -} - -#fancybox-bg-nw { - top: -20px; - left: -20px; - background-image: url('fancybox.png'); - background-position: -40px -122px; -} - -#fancybox-title { - font-family: Helvetica; - font-size: 12px; - z-index: 1102; -} - -.fancybox-title-inside { - padding-bottom: 10px; - text-align: center; - color: #333; - background: #fff; - position: relative; -} - -.fancybox-title-outside { - padding-top: 10px; - color: #fff; -} - -.fancybox-title-over { - position: absolute; - bottom: 0; - left: 0; - color: #FFF; - text-align: left; -} - -#fancybox-title-over { - padding: 10px; - background-image: url('fancy_title_over.png'); - display: block; -} - -.fancybox-title-float { - position: absolute; - left: 0; - bottom: -20px; - height: 32px; -} - -#fancybox-title-float-wrap { - border: none; - border-collapse: collapse; - width: auto; -} - -#fancybox-title-float-wrap td { - border: none; - white-space: nowrap; -} - -#fancybox-title-float-left { - padding: 0 0 0 15px; - background: url('fancybox.png') -40px -90px no-repeat; -} - -#fancybox-title-float-main { - color: #FFF; - line-height: 29px; - font-weight: bold; - padding: 0 0 3px 0; - background: url('fancybox-x.png') 0px -40px; -} - -#fancybox-title-float-right { - padding: 0 0 0 15px; - background: url('fancybox.png') -55px -90px no-repeat; -} - -/* IE6 */ - -.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); } - -.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); } -.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); } - -.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; } -.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); } -.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); } -.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); } - -.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame { - height: expression(this.parentNode.clientHeight + "px"); -} - -#fancybox-loading.fancybox-ie6 { - position: absolute; margin-top: 0; - top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'); -} - -#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); } - -/* IE6, IE7, IE8 */ - -.fancybox-ie .fancybox-bg { background: transparent !important; } - -.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); } -.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); } - -/* Note: Prevents issues with "style resets" or themes that apply 'box-sizing: border-box' to everything */ -#fancybox-wrap, #fancybox-content, #fancybox-outer { - box-sizing: content-box; - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; +/* + * FancyBox - jQuery Plugin + * Simple and fancy lightbox alternative + * + * Examples and documentation at: http://fancybox.net + * + * Copyright (c) 2008 - 2010 Janis Skarnelis + * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. + * + * Version: 1.3.4 (11/11/2010) + * Requires: jQuery v1.3+ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +#fancybox-loading { + position: fixed; + top: 50%; + left: 50%; + width: 40px; + height: 40px; + margin-top: -20px; + margin-left: -20px; + cursor: pointer; + overflow: hidden; + z-index: 1104; + display: none; +} + +#fancybox-loading div { + position: absolute; + top: 0; + left: 0; + width: 40px; + height: 480px; + background-image: url('fancybox.png'); +} + +#fancybox-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 1100; + display: none; +} + +#fancybox-tmp { + padding: 0; + margin: 0; + border: 0; + overflow: auto; + display: none; +} + +#fancybox-wrap { + position: absolute; + top: 0; + left: 0; + padding: 20px; + z-index: 1101; + outline: none; + display: none; +} + +#fancybox-outer { + position: relative; + width: 100%; + height: 100%; + background: #fff; +} + +#fancybox-content { + width: 0; + height: 0; + padding: 0; + outline: none; + position: relative; + overflow: hidden; + z-index: 1102; + border: 0px solid #fff; +} + +#fancybox-hide-sel-frame { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: transparent; + z-index: 1101; +} + +#fancybox-close { + position: absolute; + top: -15px; + right: -15px; + width: 30px; + height: 30px; + background: transparent url('fancybox.png') -40px 0px; + cursor: pointer; + z-index: 1103; + display: none; +} + +#fancybox-error { + color: #444; + font: normal 12px/20px Arial; + padding: 14px; + margin: 0; +} + +#fancybox-img { + width: 100%; + height: 100%; + padding: 0; + margin: 0; + border: none; + outline: none; + line-height: 0; + vertical-align: top; +} + +#fancybox-frame { + width: 100%; + height: 100%; + border: none; + display: block; +} + +#fancybox-left, #fancybox-right { + position: absolute; + bottom: 0px; + height: 100%; + width: 35%; + cursor: pointer; + outline: none; + background: transparent url('blank.gif'); + z-index: 1102; + display: none; +} + +#fancybox-left { + left: 0px; +} + +#fancybox-right { + right: 0px; +} + +#fancybox-left-ico, #fancybox-right-ico { + position: absolute; + top: 50%; + left: -9999px; + width: 30px; + height: 30px; + margin-top: -15px; + cursor: pointer; + z-index: 1102; + display: block; +} + +#fancybox-left-ico { + background-image: url('fancybox.png'); + background-position: -40px -30px; +} + +#fancybox-right-ico { + background-image: url('fancybox.png'); + background-position: -40px -60px; +} + +#fancybox-left:hover, #fancybox-right:hover { + visibility: visible; /* IE6 */ +} + +#fancybox-left:hover span { + left: 20px; +} + +#fancybox-right:hover span { + left: auto; + right: 20px; +} + +.fancybox-bg { + position: absolute; + padding: 0; + margin: 0; + border: 0; + width: 20px; + height: 20px; + z-index: 1001; +} + +#fancybox-bg-n { + top: -20px; + left: 0; + width: 100%; + background-image: url('fancybox-x.png'); +} + +#fancybox-bg-ne { + top: -20px; + right: -20px; + background-image: url('fancybox.png'); + background-position: -40px -162px; +} + +#fancybox-bg-e { + top: 0; + right: -20px; + height: 100%; + background-image: url('fancybox-y.png'); + background-position: -20px 0px; +} + +#fancybox-bg-se { + bottom: -20px; + right: -20px; + background-image: url('fancybox.png'); + background-position: -40px -182px; +} + +#fancybox-bg-s { + bottom: -20px; + left: 0; + width: 100%; + background-image: url('fancybox-x.png'); + background-position: 0px -20px; +} + +#fancybox-bg-sw { + bottom: -20px; + left: -20px; + background-image: url('fancybox.png'); + background-position: -40px -142px; +} + +#fancybox-bg-w { + top: 0; + left: -20px; + height: 100%; + background-image: url('fancybox-y.png'); +} + +#fancybox-bg-nw { + top: -20px; + left: -20px; + background-image: url('fancybox.png'); + background-position: -40px -122px; +} + +#fancybox-title { + font-family: Helvetica; + font-size: 12px; + z-index: 1102; +} + +.fancybox-title-inside { + padding-bottom: 10px; + text-align: center; + color: #333; + background: #fff; + position: relative; +} + +.fancybox-title-outside { + padding-top: 10px; + color: #fff; +} + +.fancybox-title-over { + position: absolute; + bottom: 0; + left: 0; + color: #FFF; + text-align: left; +} + +#fancybox-title-over { + padding: 10px; + background-image: url('fancy_title_over.png'); + display: block; +} + +.fancybox-title-float { + position: absolute; + left: 0; + bottom: -20px; + height: 32px; +} + +#fancybox-title-float-wrap { + border: none; + border-collapse: collapse; + width: auto; +} + +#fancybox-title-float-wrap td { + border: none; + white-space: nowrap; +} + +#fancybox-title-float-left { + padding: 0 0 0 15px; + background: url('fancybox.png') -40px -90px no-repeat; +} + +#fancybox-title-float-main { + color: #FFF; + line-height: 29px; + font-weight: bold; + padding: 0 0 3px 0; + background: url('fancybox-x.png') 0px -40px; +} + +#fancybox-title-float-right { + padding: 0 0 0 15px; + background: url('fancybox.png') -55px -90px no-repeat; +} + +/* IE6 */ + +.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; } +.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); } +.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); } + +.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame { + height: expression(this.parentNode.clientHeight + "px"); +} + +#fancybox-loading.fancybox-ie6 { + position: absolute; margin-top: 0; + top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'); +} + +#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); } + +/* IE6, IE7, IE8 */ + +.fancybox-ie .fancybox-bg { background: transparent !important; } + +.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); } +.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); } + +/* Note: Prevents issues with "style resets" or themes that apply 'box-sizing: border-box' to everything */ +#fancybox-wrap, #fancybox-content, #fancybox-outer { + box-sizing: content-box; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.js old mode 100644 new mode 100755 index a8520051dc780846e034c9c5ef7a72ce107e9c6c..be77275376b7083d0df61b1ebe93a101ed52bebf --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.js @@ -1,1156 +1,1156 @@ -/* - * FancyBox - jQuery Plugin - * Simple and fancy lightbox alternative - * - * Examples and documentation at: http://fancybox.net - * - * Copyright (c) 2008 - 2010 Janis Skarnelis - * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. - * - * Version: 1.3.4 (11/11/2010) - * Requires: jQuery v1.3+ - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - */ - -;(function($) { - var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right, - - selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [], - - ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i, - - loadingTimer, loadingFrame = 1, - - titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('<div/>')[0], { prop: 0 }), - - isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, - - /* - * Private methods - */ - - _abort = function() { - loading.hide(); - - imgPreloader.onerror = imgPreloader.onload = null; - - if (ajaxLoader) { - ajaxLoader.abort(); - } - - tmp.empty(); - }, - - _error = function() { - if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) { - loading.hide(); - busy = false; - return; - } - - selectedOpts.titleShow = false; - - selectedOpts.width = 'auto'; - selectedOpts.height = 'auto'; - - tmp.html( '<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>' ); - - _process_inline(); - }, - - _start = function() { - var obj = selectedArray[ selectedIndex ], - href, - type, - title, - str, - emb, - ret; - - _abort(); - - selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox'))); - - ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts); - - if (ret === false) { - busy = false; - return; - } else if (typeof ret == 'object') { - selectedOpts = $.extend(selectedOpts, ret); - } - - title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || ''; - - if (obj.nodeName && !selectedOpts.orig) { - selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj); - } - - if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) { - title = selectedOpts.orig.attr('alt'); - } - - href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null; - - if ((/^(?:javascript)/i).test(href) || href == '#') { - href = null; - } - - if (selectedOpts.type) { - type = selectedOpts.type; - - if (!href) { - href = selectedOpts.content; - } - - } else if (selectedOpts.content) { - type = 'html'; - - } else if (href) { - if (href.match(imgRegExp)) { - type = 'image'; - - } else if (href.match(swfRegExp)) { - type = 'swf'; - - } else if ($(obj).hasClass("iframe")) { - type = 'iframe'; - - } else if (href.indexOf("#") === 0) { - type = 'inline'; - - } else { - type = 'ajax'; - } - } - - if (!type) { - _error(); - return; - } - - if (type == 'inline') { - obj = href.substr(href.indexOf("#")); - type = $(obj).length > 0 ? 'inline' : 'ajax'; - } - - selectedOpts.type = type; - selectedOpts.href = href; - selectedOpts.title = title; - - if (selectedOpts.autoDimensions) { - if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') { - selectedOpts.width = 'auto'; - selectedOpts.height = 'auto'; - } else { - selectedOpts.autoDimensions = false; - } - } - - if (selectedOpts.modal) { - selectedOpts.overlayShow = true; - selectedOpts.hideOnOverlayClick = false; - selectedOpts.hideOnContentClick = false; - selectedOpts.enableEscapeButton = false; - selectedOpts.showCloseButton = false; - } - - selectedOpts.padding = parseInt(selectedOpts.padding, 10); - selectedOpts.margin = parseInt(selectedOpts.margin, 10); - - tmp.css('padding', (selectedOpts.padding + selectedOpts.margin)); - - $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() { - $(this).replaceWith(content.children()); - }); - - switch (type) { - case 'html' : - tmp.html( selectedOpts.content ); - _process_inline(); - break; - - case 'inline' : - if ( $(obj).parent().is('#fancybox-content') === true) { - busy = false; - return; - } - - $('<div class="fancybox-inline-tmp" />') - .hide() - .insertBefore( $(obj) ) - .bind('fancybox-cleanup', function() { - $(this).replaceWith(content.children()); - }).bind('fancybox-cancel', function() { - $(this).replaceWith(tmp.children()); - }); - - $(obj).appendTo(tmp); - - _process_inline(); - break; - - case 'image': - busy = false; - - $.fancybox.showActivity(); - - imgPreloader = new Image(); - - imgPreloader.onerror = function() { - _error(); - }; - - imgPreloader.onload = function() { - busy = true; - - imgPreloader.onerror = imgPreloader.onload = null; - - _process_image(); - }; - - imgPreloader.src = href; - break; - - case 'swf': - selectedOpts.scrolling = 'no'; - - str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>'; - emb = ''; - - $.each(selectedOpts.swf, function(name, val) { - str += '<param name="' + name + '" value="' + val + '"></param>'; - emb += ' ' + name + '="' + val + '"'; - }); - - str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>'; - - tmp.html(str); - - _process_inline(); - break; - - case 'ajax': - busy = false; - - $.fancybox.showActivity(); - - selectedOpts.ajax.win = selectedOpts.ajax.success; - - ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, { - url : href, - data : selectedOpts.ajax.data || {}, - error : function(XMLHttpRequest, textStatus, errorThrown) { - if ( XMLHttpRequest.status > 0 ) { - _error(); - } - }, - success : function(data, textStatus, XMLHttpRequest) { - var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader; - if (o.status == 200) { - if ( typeof selectedOpts.ajax.win == 'function' ) { - ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest); - - if (ret === false) { - loading.hide(); - return; - } else if (typeof ret == 'string' || typeof ret == 'object') { - data = ret; - } - } - - tmp.html( data ); - _process_inline(); - } - } - })); - - break; - - case 'iframe': - _show(); - break; - } - }, - - _process_inline = function() { - var - w = selectedOpts.width, - h = selectedOpts.height; - - if (w.toString().indexOf('%') > -1) { - w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px'; - - } else { - w = w == 'auto' ? 'auto' : w + 'px'; - } - - if (h.toString().indexOf('%') > -1) { - h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px'; - - } else { - h = h == 'auto' ? 'auto' : h + 'px'; - } - - tmp.wrapInner('<div style="width:' + w + ';height:' + h + ';overflow: ' + (selectedOpts.scrolling == 'auto' ? 'auto' : (selectedOpts.scrolling == 'yes' ? 'scroll' : 'hidden')) + ';position:relative;"></div>'); - - selectedOpts.width = tmp.width(); - selectedOpts.height = tmp.height(); - - _show(); - }, - - _process_image = function() { - selectedOpts.width = imgPreloader.width; - selectedOpts.height = imgPreloader.height; - - $("<img />").attr({ - 'id' : 'fancybox-img', - 'src' : imgPreloader.src, - 'alt' : selectedOpts.title - }).appendTo( tmp ); - - _show(); - }, - - _show = function() { - var pos, equal; - - loading.hide(); - - if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { - $.event.trigger('fancybox-cancel'); - - busy = false; - return; - } - - busy = true; - - $(content.add( overlay )).unbind(); - - $(window).unbind("resize.fb scroll.fb"); - $(document).unbind('keydown.fb'); - - if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') { - wrap.css('height', wrap.height()); - } - - currentArray = selectedArray; - currentIndex = selectedIndex; - currentOpts = selectedOpts; - - if (currentOpts.overlayShow) { - overlay.css({ - 'background-color' : currentOpts.overlayColor, - 'opacity' : currentOpts.overlayOpacity, - 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto', - 'height' : $(document).height() - }); - - if (!overlay.is(':visible')) { - if (isIE6) { - $('select:not(#fancybox-tmp select)').filter(function() { - return this.style.visibility !== 'hidden'; - }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() { - this.style.visibility = 'inherit'; - }); - } - - overlay.show(); - } - } else { - overlay.hide(); - } - - final_pos = _get_zoom_to(); - - _process_title(); - - if (wrap.is(":visible")) { - $( close.add( nav_left ).add( nav_right ) ).hide(); - - pos = wrap.position(), - - start_pos = { - top : pos.top, - left : pos.left, - width : wrap.width(), - height : wrap.height() - }; - - equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height); - - content.fadeTo(currentOpts.changeFade, 0.3, function() { - var finish_resizing = function() { - content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish); - }; - - $.event.trigger('fancybox-change'); - - content - .empty() - .removeAttr('filter') - .css({ - 'border-width' : currentOpts.padding, - 'width' : final_pos.width - currentOpts.padding * 2, - 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 - }); - - if (equal) { - finish_resizing(); - - } else { - fx.prop = 0; - - $(fx).animate({prop: 1}, { - duration : currentOpts.changeSpeed, - easing : currentOpts.easingChange, - step : _draw, - complete : finish_resizing - }); - } - }); - - return; - } - - wrap.removeAttr("style"); - - content.css('border-width', currentOpts.padding); - - if (currentOpts.transitionIn == 'elastic') { - start_pos = _get_zoom_from(); - - content.html( tmp.contents() ); - - wrap.show(); - - if (currentOpts.opacity) { - final_pos.opacity = 0; - } - - fx.prop = 0; - - $(fx).animate({prop: 1}, { - duration : currentOpts.speedIn, - easing : currentOpts.easingIn, - step : _draw, - complete : _finish - }); - - return; - } - - if (currentOpts.titlePosition == 'inside' && titleHeight > 0) { - title.show(); - } - - content - .css({ - 'width' : final_pos.width - currentOpts.padding * 2, - 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 - }) - .html( tmp.contents() ); - - wrap - .css(final_pos) - .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish ); - }, - - _format_title = function(title) { - if (title && title.length) { - if (currentOpts.titlePosition == 'float') { - return '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + title + '</td><td id="fancybox-title-float-right"></td></tr></table>'; - } - - return '<div id="fancybox-title-' + currentOpts.titlePosition + '">' + title + '</div>'; - } - - return false; - }, - - _process_title = function() { - titleStr = currentOpts.title || ''; - titleHeight = 0; - - title - .empty() - .removeAttr('style') - .removeClass(); - - if (currentOpts.titleShow === false) { - title.hide(); - return; - } - - titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr); - - if (!titleStr || titleStr === '') { - title.hide(); - return; - } - - title - .addClass('fancybox-title-' + currentOpts.titlePosition) - .html( titleStr ) - .appendTo( 'body' ) - .show(); - - switch (currentOpts.titlePosition) { - case 'inside': - title - .css({ - 'width' : final_pos.width - (currentOpts.padding * 2), - 'marginLeft' : currentOpts.padding, - 'marginRight' : currentOpts.padding - }); - - titleHeight = title.outerHeight(true); - - title.appendTo( outer ); - - final_pos.height += titleHeight; - break; - - case 'over': - title - .css({ - 'marginLeft' : currentOpts.padding, - 'width' : final_pos.width - (currentOpts.padding * 2), - 'bottom' : currentOpts.padding - }) - .appendTo( outer ); - break; - - case 'float': - title - .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1) - .appendTo( wrap ); - break; - - default: - title - .css({ - 'width' : final_pos.width - (currentOpts.padding * 2), - 'paddingLeft' : currentOpts.padding, - 'paddingRight' : currentOpts.padding - }) - .appendTo( wrap ); - break; - } - - title.hide(); - }, - - _set_navigation = function() { - if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) { - $(document).bind('keydown.fb', function(e) { - if (e.keyCode == 27 && currentOpts.enableEscapeButton) { - e.preventDefault(); - $.fancybox.close(); - - } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') { - e.preventDefault(); - $.fancybox[ e.keyCode == 37 ? 'prev' : 'next'](); - } - }); - } - - if (!currentOpts.showNavArrows) { - nav_left.hide(); - nav_right.hide(); - return; - } - - if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) { - nav_left.show(); - } - - if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) { - nav_right.show(); - } - }, - - _finish = function () { - if (!$.support.opacity) { - content.get(0).style.removeAttribute('filter'); - wrap.get(0).style.removeAttribute('filter'); - } - - if (selectedOpts.autoDimensions) { - content.css('height', 'auto'); - } - - wrap.css('height', 'auto'); - - if (titleStr && titleStr.length) { - title.show(); - } - - if (currentOpts.showCloseButton) { - close.show(); - } - - _set_navigation(); - - if (currentOpts.hideOnContentClick) { - content.bind('click', $.fancybox.close); - } - - if (currentOpts.hideOnOverlayClick) { - overlay.bind('click', $.fancybox.close); - } - - $(window).bind("resize.fb", $.fancybox.resize); - - if (currentOpts.centerOnScroll) { - $(window).bind("scroll.fb", $.fancybox.center); - } - - if (currentOpts.type == 'iframe') { - $('<iframe id="fancybox-frame" name="fancybox-frame' + new Date().getTime() + '" frameborder="0" hspace="0" ' + ($.browser.msie ? 'allowtransparency="true""' : '') + ' scrolling="' + selectedOpts.scrolling + '" src="' + currentOpts.href + '"></iframe>').appendTo(content); - } - - wrap.show(); - - busy = false; - - $.fancybox.center(); - - currentOpts.onComplete(currentArray, currentIndex, currentOpts); - - _preload_images(); - }, - - _preload_images = function() { - var href, - objNext; - - if ((currentArray.length -1) > currentIndex) { - href = currentArray[ currentIndex + 1 ].href; - - if (typeof href !== 'undefined' && href.match(imgRegExp)) { - objNext = new Image(); - objNext.src = href; - } - } - - if (currentIndex > 0) { - href = currentArray[ currentIndex - 1 ].href; - - if (typeof href !== 'undefined' && href.match(imgRegExp)) { - objNext = new Image(); - objNext.src = href; - } - } - }, - - _draw = function(pos) { - var dim = { - width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10), - height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10), - - top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10), - left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10) - }; - - if (typeof final_pos.opacity !== 'undefined') { - dim.opacity = pos < 0.5 ? 0.5 : pos; - } - - wrap.css(dim); - - content.css({ - 'width' : dim.width - currentOpts.padding * 2, - 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2 - }); - }, - - _get_viewport = function() { - return [ - $(window).width() - (currentOpts.margin * 2), - $(window).height() - (currentOpts.margin * 2), - $(document).scrollLeft() + currentOpts.margin, - $(document).scrollTop() + currentOpts.margin - ]; - }, - - _get_zoom_to = function () { - var view = _get_viewport(), - to = {}, - resize = currentOpts.autoScale, - double_padding = currentOpts.padding * 2, - ratio; - - if (currentOpts.width.toString().indexOf('%') > -1) { - to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10); - } else { - to.width = currentOpts.width + double_padding; - } - - if (currentOpts.height.toString().indexOf('%') > -1) { - to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10); - } else { - to.height = currentOpts.height + double_padding; - } - - if (resize && (to.width > view[0] || to.height > view[1])) { - if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') { - ratio = (currentOpts.width ) / (currentOpts.height ); - - if ((to.width ) > view[0]) { - to.width = view[0]; - to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10); - } - - if ((to.height) > view[1]) { - to.height = view[1]; - to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10); - } - - } else { - to.width = Math.min(to.width, view[0]); - to.height = Math.min(to.height, view[1]); - } - } - - to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10); - to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10); - - return to; - }, - - _get_obj_pos = function(obj) { - var pos = obj.offset(); - - pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0; - pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0; - - pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0; - pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0; - - pos.width = obj.width(); - pos.height = obj.height(); - - return pos; - }, - - _get_zoom_from = function() { - var orig = selectedOpts.orig ? $(selectedOpts.orig) : false, - from = {}, - pos, - view; - - if (orig && orig.length) { - pos = _get_obj_pos(orig); - - from = { - width : pos.width + (currentOpts.padding * 2), - height : pos.height + (currentOpts.padding * 2), - top : pos.top - currentOpts.padding - 20, - left : pos.left - currentOpts.padding - 20 - }; - - } else { - view = _get_viewport(); - - from = { - width : currentOpts.padding * 2, - height : currentOpts.padding * 2, - top : parseInt(view[3] + view[1] * 0.5, 10), - left : parseInt(view[2] + view[0] * 0.5, 10) - }; - } - - return from; - }, - - _animate_loading = function() { - if (!loading.is(':visible')){ - clearInterval(loadingTimer); - return; - } - - $('div', loading).css('top', (loadingFrame * -40) + 'px'); - - loadingFrame = (loadingFrame + 1) % 12; - }; - - /* - * Public methods - */ - - $.fn.fancybox = function(options) { - if (!$(this).length) { - return this; - } - - $(this) - .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {}))) - .unbind('click.fb') - .bind('click.fb', function(e) { - e.preventDefault(); - - if (busy) { - return; - } - - busy = true; - - $(this).blur(); - - selectedArray = []; - selectedIndex = 0; - - var rel = $(this).attr('rel') || ''; - - if (!rel || rel == '' || rel === 'nofollow') { - selectedArray.push(this); - - } else { - selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]"); - selectedIndex = selectedArray.index( this ); - } - - _start(); - - return; - }); - - return this; - }; - - $.fancybox = function(obj) { - var opts; - - if (busy) { - return; - } - - busy = true; - opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {}; - - selectedArray = []; - selectedIndex = parseInt(opts.index, 10) || 0; - - if ($.isArray(obj)) { - for (var i = 0, j = obj.length; i < j; i++) { - if (typeof obj[i] == 'object') { - $(obj[i]).data('fancybox', $.extend({}, opts, obj[i])); - } else { - obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts)); - } - } - - selectedArray = jQuery.merge(selectedArray, obj); - - } else { - if (typeof obj == 'object') { - $(obj).data('fancybox', $.extend({}, opts, obj)); - } else { - obj = $({}).data('fancybox', $.extend({content : obj}, opts)); - } - - selectedArray.push(obj); - } - - if (selectedIndex > selectedArray.length || selectedIndex < 0) { - selectedIndex = 0; - } - - _start(); - }; - - $.fancybox.showActivity = function() { - clearInterval(loadingTimer); - - loading.show(); - loadingTimer = setInterval(_animate_loading, 66); - }; - - $.fancybox.hideActivity = function() { - loading.hide(); - }; - - $.fancybox.next = function() { - return $.fancybox.pos( currentIndex + 1); - }; - - $.fancybox.prev = function() { - return $.fancybox.pos( currentIndex - 1); - }; - - $.fancybox.pos = function(pos) { - if (busy) { - return; - } - - pos = parseInt(pos); - - selectedArray = currentArray; - - if (pos > -1 && pos < currentArray.length) { - selectedIndex = pos; - _start(); - - } else if (currentOpts.cyclic && currentArray.length > 1) { - selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1; - _start(); - } - - return; - }; - - $.fancybox.cancel = function() { - if (busy) { - return; - } - - busy = true; - - $.event.trigger('fancybox-cancel'); - - _abort(); - - selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts); - - busy = false; - }; - - // Note: within an iframe use - parent.$.fancybox.close(); - $.fancybox.close = function() { - if (busy || wrap.is(':hidden')) { - return; - } - - busy = true; - - if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { - busy = false; - return; - } - - _abort(); - - $(close.add( nav_left ).add( nav_right )).hide(); - - $(content.add( overlay )).unbind(); - - $(window).unbind("resize.fb scroll.fb"); - $(document).unbind('keydown.fb'); - - content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank'); - - if (currentOpts.titlePosition !== 'inside') { - title.empty(); - } - - wrap.stop(); - - function _cleanup() { - overlay.fadeOut('fast'); - - title.empty().hide(); - wrap.hide(); - - $.event.trigger('fancybox-cleanup'); - - content.empty(); - - currentOpts.onClosed(currentArray, currentIndex, currentOpts); - - currentArray = selectedOpts = []; - currentIndex = selectedIndex = 0; - currentOpts = selectedOpts = {}; - - busy = false; - } - - if (currentOpts.transitionOut == 'elastic') { - start_pos = _get_zoom_from(); - - var pos = wrap.position(); - - final_pos = { - top : pos.top , - left : pos.left, - width : wrap.width(), - height : wrap.height() - }; - - if (currentOpts.opacity) { - final_pos.opacity = 1; - } - - title.empty().hide(); - - fx.prop = 1; - - $(fx).animate({ prop: 0 }, { - duration : currentOpts.speedOut, - easing : currentOpts.easingOut, - step : _draw, - complete : _cleanup - }); - - } else { - wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup); - } - }; - - $.fancybox.resize = function() { - if (overlay.is(':visible')) { - overlay.css('height', $(document).height()); - } - - $.fancybox.center(true); - }; - - $.fancybox.center = function() { - var view, align; - - if (busy) { - return; - } - - align = arguments[0] === true ? 1 : 0; - view = _get_viewport(); - - if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) { - return; - } - - wrap - .stop() - .animate({ - 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)), - 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding)) - }, typeof arguments[0] == 'number' ? arguments[0] : 200); - }; - - $.fancybox.init = function() { - if ($("#fancybox-wrap").length) { - return; - } - - $('body').append( - tmp = $('<div id="fancybox-tmp"></div>'), - loading = $('<div id="fancybox-loading"><div></div></div>'), - overlay = $('<div id="fancybox-overlay"></div>'), - wrap = $('<div id="fancybox-wrap"></div>') - ); - - outer = $('<div id="fancybox-outer"></div>') - .append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>') - .appendTo( wrap ); - - outer.append( - content = $('<div id="fancybox-content"></div>'), - close = $('<a id="fancybox-close"></a>'), - title = $('<div id="fancybox-title"></div>'), - - nav_left = $('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'), - nav_right = $('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>') - ); - - close.click($.fancybox.close); - loading.click($.fancybox.cancel); - - nav_left.click(function(e) { - e.preventDefault(); - $.fancybox.prev(); - }); - - nav_right.click(function(e) { - e.preventDefault(); - $.fancybox.next(); - }); - - if ($.fn.mousewheel) { - wrap.bind('mousewheel.fb', function(e, delta) { - if (busy) { - e.preventDefault(); - - } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) { - e.preventDefault(); - $.fancybox[ delta > 0 ? 'prev' : 'next'](); - } - }); - } - - if (!$.support.opacity) { - wrap.addClass('fancybox-ie'); - } - - if (isIE6) { - loading.addClass('fancybox-ie6'); - wrap.addClass('fancybox-ie6'); - - $('<iframe id="fancybox-hide-sel-frame" src="' + (/^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank' ) + '" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(outer); - } - }; - - $.fn.fancybox.defaults = { - padding : 10, - margin : 40, - opacity : false, - modal : false, - cyclic : false, - scrolling : 'auto', // 'auto', 'yes' or 'no' - - width : 560, - height : 340, - - autoScale : true, - autoDimensions : true, - centerOnScroll : false, - - ajax : {}, - swf : { wmode: 'transparent' }, - - hideOnOverlayClick : true, - hideOnContentClick : false, - - overlayShow : true, - overlayOpacity : 0.7, - overlayColor : '#777', - - titleShow : true, - titlePosition : 'float', // 'float', 'outside', 'inside' or 'over' - titleFormat : null, - titleFromAlt : false, - - transitionIn : 'fade', // 'elastic', 'fade' or 'none' - transitionOut : 'fade', // 'elastic', 'fade' or 'none' - - speedIn : 300, - speedOut : 300, - - changeSpeed : 300, - changeFade : 'fast', - - easingIn : 'swing', - easingOut : 'swing', - - showCloseButton : true, - showNavArrows : true, - enableEscapeButton : true, - enableKeyboardNav : true, - - onStart : function(){}, - onCancel : function(){}, - onComplete : function(){}, - onCleanup : function(){}, - onClosed : function(){}, - onError : function(){} - }; - - $(document).ready(function() { - $.fancybox.init(); - }); - +/* + * FancyBox - jQuery Plugin + * Simple and fancy lightbox alternative + * + * Examples and documentation at: http://fancybox.net + * + * Copyright (c) 2008 - 2010 Janis Skarnelis + * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. + * + * Version: 1.3.4 (11/11/2010) + * Requires: jQuery v1.3+ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +;(function($) { + var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right, + + selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [], + + ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i, + + loadingTimer, loadingFrame = 1, + + titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('<div/>')[0], { prop: 0 }), + + isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, + + /* + * Private methods + */ + + _abort = function() { + loading.hide(); + + imgPreloader.onerror = imgPreloader.onload = null; + + if (ajaxLoader) { + ajaxLoader.abort(); + } + + tmp.empty(); + }, + + _error = function() { + if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) { + loading.hide(); + busy = false; + return; + } + + selectedOpts.titleShow = false; + + selectedOpts.width = 'auto'; + selectedOpts.height = 'auto'; + + tmp.html( '<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>' ); + + _process_inline(); + }, + + _start = function() { + var obj = selectedArray[ selectedIndex ], + href, + type, + title, + str, + emb, + ret; + + _abort(); + + selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox'))); + + ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts); + + if (ret === false) { + busy = false; + return; + } else if (typeof ret == 'object') { + selectedOpts = $.extend(selectedOpts, ret); + } + + title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || ''; + + if (obj.nodeName && !selectedOpts.orig) { + selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj); + } + + if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) { + title = selectedOpts.orig.attr('alt'); + } + + href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null; + + if ((/^(?:javascript)/i).test(href) || href == '#') { + href = null; + } + + if (selectedOpts.type) { + type = selectedOpts.type; + + if (!href) { + href = selectedOpts.content; + } + + } else if (selectedOpts.content) { + type = 'html'; + + } else if (href) { + if (href.match(imgRegExp)) { + type = 'image'; + + } else if (href.match(swfRegExp)) { + type = 'swf'; + + } else if ($(obj).hasClass("iframe")) { + type = 'iframe'; + + } else if (href.indexOf("#") === 0) { + type = 'inline'; + + } else { + type = 'ajax'; + } + } + + if (!type) { + _error(); + return; + } + + if (type == 'inline') { + obj = href.substr(href.indexOf("#")); + type = $(obj).length > 0 ? 'inline' : 'ajax'; + } + + selectedOpts.type = type; + selectedOpts.href = href; + selectedOpts.title = title; + + if (selectedOpts.autoDimensions) { + if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') { + selectedOpts.width = 'auto'; + selectedOpts.height = 'auto'; + } else { + selectedOpts.autoDimensions = false; + } + } + + if (selectedOpts.modal) { + selectedOpts.overlayShow = true; + selectedOpts.hideOnOverlayClick = false; + selectedOpts.hideOnContentClick = false; + selectedOpts.enableEscapeButton = false; + selectedOpts.showCloseButton = false; + } + + selectedOpts.padding = parseInt(selectedOpts.padding, 10); + selectedOpts.margin = parseInt(selectedOpts.margin, 10); + + tmp.css('padding', (selectedOpts.padding + selectedOpts.margin)); + + $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() { + $(this).replaceWith(content.children()); + }); + + switch (type) { + case 'html' : + tmp.html( selectedOpts.content ); + _process_inline(); + break; + + case 'inline' : + if ( $(obj).parent().is('#fancybox-content') === true) { + busy = false; + return; + } + + $('<div class="fancybox-inline-tmp" />') + .hide() + .insertBefore( $(obj) ) + .bind('fancybox-cleanup', function() { + $(this).replaceWith(content.children()); + }).bind('fancybox-cancel', function() { + $(this).replaceWith(tmp.children()); + }); + + $(obj).appendTo(tmp); + + _process_inline(); + break; + + case 'image': + busy = false; + + $.fancybox.showActivity(); + + imgPreloader = new Image(); + + imgPreloader.onerror = function() { + _error(); + }; + + imgPreloader.onload = function() { + busy = true; + + imgPreloader.onerror = imgPreloader.onload = null; + + _process_image(); + }; + + imgPreloader.src = href; + break; + + case 'swf': + selectedOpts.scrolling = 'no'; + + str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>'; + emb = ''; + + $.each(selectedOpts.swf, function(name, val) { + str += '<param name="' + name + '" value="' + val + '"></param>'; + emb += ' ' + name + '="' + val + '"'; + }); + + str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>'; + + tmp.html(str); + + _process_inline(); + break; + + case 'ajax': + busy = false; + + $.fancybox.showActivity(); + + selectedOpts.ajax.win = selectedOpts.ajax.success; + + ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, { + url : href, + data : selectedOpts.ajax.data || {}, + error : function(XMLHttpRequest, textStatus, errorThrown) { + if ( XMLHttpRequest.status > 0 ) { + _error(); + } + }, + success : function(data, textStatus, XMLHttpRequest) { + var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader; + if (o.status == 200) { + if ( typeof selectedOpts.ajax.win == 'function' ) { + ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest); + + if (ret === false) { + loading.hide(); + return; + } else if (typeof ret == 'string' || typeof ret == 'object') { + data = ret; + } + } + + tmp.html( data ); + _process_inline(); + } + } + })); + + break; + + case 'iframe': + _show(); + break; + } + }, + + _process_inline = function() { + var + w = selectedOpts.width, + h = selectedOpts.height; + + if (w.toString().indexOf('%') > -1) { + w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px'; + + } else { + w = w == 'auto' ? 'auto' : w + 'px'; + } + + if (h.toString().indexOf('%') > -1) { + h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px'; + + } else { + h = h == 'auto' ? 'auto' : h + 'px'; + } + + tmp.wrapInner('<div style="width:' + w + ';height:' + h + ';overflow: ' + (selectedOpts.scrolling == 'auto' ? 'auto' : (selectedOpts.scrolling == 'yes' ? 'scroll' : 'hidden')) + ';position:relative;"></div>'); + + selectedOpts.width = tmp.width(); + selectedOpts.height = tmp.height(); + + _show(); + }, + + _process_image = function() { + selectedOpts.width = imgPreloader.width; + selectedOpts.height = imgPreloader.height; + + $("<img />").attr({ + 'id' : 'fancybox-img', + 'src' : imgPreloader.src, + 'alt' : selectedOpts.title + }).appendTo( tmp ); + + _show(); + }, + + _show = function() { + var pos, equal; + + loading.hide(); + + if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { + $.event.trigger('fancybox-cancel'); + + busy = false; + return; + } + + busy = true; + + $(content.add( overlay )).unbind(); + + $(window).unbind("resize.fb scroll.fb"); + $(document).unbind('keydown.fb'); + + if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') { + wrap.css('height', wrap.height()); + } + + currentArray = selectedArray; + currentIndex = selectedIndex; + currentOpts = selectedOpts; + + if (currentOpts.overlayShow) { + overlay.css({ + 'background-color' : currentOpts.overlayColor, + 'opacity' : currentOpts.overlayOpacity, + 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto', + 'height' : $(document).height() + }); + + if (!overlay.is(':visible')) { + if (isIE6) { + $('select:not(#fancybox-tmp select)').filter(function() { + return this.style.visibility !== 'hidden'; + }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() { + this.style.visibility = 'inherit'; + }); + } + + overlay.show(); + } + } else { + overlay.hide(); + } + + final_pos = _get_zoom_to(); + + _process_title(); + + if (wrap.is(":visible")) { + $( close.add( nav_left ).add( nav_right ) ).hide(); + + pos = wrap.position(), + + start_pos = { + top : pos.top, + left : pos.left, + width : wrap.width(), + height : wrap.height() + }; + + equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height); + + content.fadeTo(currentOpts.changeFade, 0.3, function() { + var finish_resizing = function() { + content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish); + }; + + $.event.trigger('fancybox-change'); + + content + .empty() + .removeAttr('filter') + .css({ + 'border-width' : currentOpts.padding, + 'width' : final_pos.width - currentOpts.padding * 2, + 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 + }); + + if (equal) { + finish_resizing(); + + } else { + fx.prop = 0; + + $(fx).animate({prop: 1}, { + duration : currentOpts.changeSpeed, + easing : currentOpts.easingChange, + step : _draw, + complete : finish_resizing + }); + } + }); + + return; + } + + wrap.removeAttr("style"); + + content.css('border-width', currentOpts.padding); + + if (currentOpts.transitionIn == 'elastic') { + start_pos = _get_zoom_from(); + + content.html( tmp.contents() ); + + wrap.show(); + + if (currentOpts.opacity) { + final_pos.opacity = 0; + } + + fx.prop = 0; + + $(fx).animate({prop: 1}, { + duration : currentOpts.speedIn, + easing : currentOpts.easingIn, + step : _draw, + complete : _finish + }); + + return; + } + + if (currentOpts.titlePosition == 'inside' && titleHeight > 0) { + title.show(); + } + + content + .css({ + 'width' : final_pos.width - currentOpts.padding * 2, + 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 + }) + .html( tmp.contents() ); + + wrap + .css(final_pos) + .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish ); + }, + + _format_title = function(title) { + if (title && title.length) { + if (currentOpts.titlePosition == 'float') { + return '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + title + '</td><td id="fancybox-title-float-right"></td></tr></table>'; + } + + return '<div id="fancybox-title-' + currentOpts.titlePosition + '">' + title + '</div>'; + } + + return false; + }, + + _process_title = function() { + titleStr = currentOpts.title || ''; + titleHeight = 0; + + title + .empty() + .removeAttr('style') + .removeClass(); + + if (currentOpts.titleShow === false) { + title.hide(); + return; + } + + titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr); + + if (!titleStr || titleStr === '') { + title.hide(); + return; + } + + title + .addClass('fancybox-title-' + currentOpts.titlePosition) + .html( titleStr ) + .appendTo( 'body' ) + .show(); + + switch (currentOpts.titlePosition) { + case 'inside': + title + .css({ + 'width' : final_pos.width - (currentOpts.padding * 2), + 'marginLeft' : currentOpts.padding, + 'marginRight' : currentOpts.padding + }); + + titleHeight = title.outerHeight(true); + + title.appendTo( outer ); + + final_pos.height += titleHeight; + break; + + case 'over': + title + .css({ + 'marginLeft' : currentOpts.padding, + 'width' : final_pos.width - (currentOpts.padding * 2), + 'bottom' : currentOpts.padding + }) + .appendTo( outer ); + break; + + case 'float': + title + .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1) + .appendTo( wrap ); + break; + + default: + title + .css({ + 'width' : final_pos.width - (currentOpts.padding * 2), + 'paddingLeft' : currentOpts.padding, + 'paddingRight' : currentOpts.padding + }) + .appendTo( wrap ); + break; + } + + title.hide(); + }, + + _set_navigation = function() { + if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) { + $(document).bind('keydown.fb', function(e) { + if (e.keyCode == 27 && currentOpts.enableEscapeButton) { + e.preventDefault(); + $.fancybox.close(); + + } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') { + e.preventDefault(); + $.fancybox[ e.keyCode == 37 ? 'prev' : 'next'](); + } + }); + } + + if (!currentOpts.showNavArrows) { + nav_left.hide(); + nav_right.hide(); + return; + } + + if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) { + nav_left.show(); + } + + if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) { + nav_right.show(); + } + }, + + _finish = function () { + if (!$.support.opacity) { + content.get(0).style.removeAttribute('filter'); + wrap.get(0).style.removeAttribute('filter'); + } + + if (selectedOpts.autoDimensions) { + content.css('height', 'auto'); + } + + wrap.css('height', 'auto'); + + if (titleStr && titleStr.length) { + title.show(); + } + + if (currentOpts.showCloseButton) { + close.show(); + } + + _set_navigation(); + + if (currentOpts.hideOnContentClick) { + content.bind('click', $.fancybox.close); + } + + if (currentOpts.hideOnOverlayClick) { + overlay.bind('click', $.fancybox.close); + } + + $(window).bind("resize.fb", $.fancybox.resize); + + if (currentOpts.centerOnScroll) { + $(window).bind("scroll.fb", $.fancybox.center); + } + + if (currentOpts.type == 'iframe') { + $('<iframe id="fancybox-frame" name="fancybox-frame' + new Date().getTime() + '" frameborder="0" hspace="0" ' + ($.browser.msie ? 'allowtransparency="true""' : '') + ' scrolling="' + selectedOpts.scrolling + '" src="' + currentOpts.href + '"></iframe>').appendTo(content); + } + + wrap.show(); + + busy = false; + + $.fancybox.center(); + + currentOpts.onComplete(currentArray, currentIndex, currentOpts); + + _preload_images(); + }, + + _preload_images = function() { + var href, + objNext; + + if ((currentArray.length -1) > currentIndex) { + href = currentArray[ currentIndex + 1 ].href; + + if (typeof href !== 'undefined' && href.match(imgRegExp)) { + objNext = new Image(); + objNext.src = href; + } + } + + if (currentIndex > 0) { + href = currentArray[ currentIndex - 1 ].href; + + if (typeof href !== 'undefined' && href.match(imgRegExp)) { + objNext = new Image(); + objNext.src = href; + } + } + }, + + _draw = function(pos) { + var dim = { + width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10), + height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10), + + top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10), + left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10) + }; + + if (typeof final_pos.opacity !== 'undefined') { + dim.opacity = pos < 0.5 ? 0.5 : pos; + } + + wrap.css(dim); + + content.css({ + 'width' : dim.width - currentOpts.padding * 2, + 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2 + }); + }, + + _get_viewport = function() { + return [ + $(window).width() - (currentOpts.margin * 2), + $(window).height() - (currentOpts.margin * 2), + $(document).scrollLeft() + currentOpts.margin, + $(document).scrollTop() + currentOpts.margin + ]; + }, + + _get_zoom_to = function () { + var view = _get_viewport(), + to = {}, + resize = currentOpts.autoScale, + double_padding = currentOpts.padding * 2, + ratio; + + if (currentOpts.width.toString().indexOf('%') > -1) { + to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10); + } else { + to.width = currentOpts.width + double_padding; + } + + if (currentOpts.height.toString().indexOf('%') > -1) { + to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10); + } else { + to.height = currentOpts.height + double_padding; + } + + if (resize && (to.width > view[0] || to.height > view[1])) { + if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') { + ratio = (currentOpts.width ) / (currentOpts.height ); + + if ((to.width ) > view[0]) { + to.width = view[0]; + to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10); + } + + if ((to.height) > view[1]) { + to.height = view[1]; + to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10); + } + + } else { + to.width = Math.min(to.width, view[0]); + to.height = Math.min(to.height, view[1]); + } + } + + to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10); + to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10); + + return to; + }, + + _get_obj_pos = function(obj) { + var pos = obj.offset(); + + pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0; + pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0; + + pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0; + pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0; + + pos.width = obj.width(); + pos.height = obj.height(); + + return pos; + }, + + _get_zoom_from = function() { + var orig = selectedOpts.orig ? $(selectedOpts.orig) : false, + from = {}, + pos, + view; + + if (orig && orig.length) { + pos = _get_obj_pos(orig); + + from = { + width : pos.width + (currentOpts.padding * 2), + height : pos.height + (currentOpts.padding * 2), + top : pos.top - currentOpts.padding - 20, + left : pos.left - currentOpts.padding - 20 + }; + + } else { + view = _get_viewport(); + + from = { + width : currentOpts.padding * 2, + height : currentOpts.padding * 2, + top : parseInt(view[3] + view[1] * 0.5, 10), + left : parseInt(view[2] + view[0] * 0.5, 10) + }; + } + + return from; + }, + + _animate_loading = function() { + if (!loading.is(':visible')){ + clearInterval(loadingTimer); + return; + } + + $('div', loading).css('top', (loadingFrame * -40) + 'px'); + + loadingFrame = (loadingFrame + 1) % 12; + }; + + /* + * Public methods + */ + + $.fn.fancybox = function(options) { + if (!$(this).length) { + return this; + } + + $(this) + .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {}))) + .unbind('click.fb') + .bind('click.fb', function(e) { + e.preventDefault(); + + if (busy) { + return; + } + + busy = true; + + $(this).blur(); + + selectedArray = []; + selectedIndex = 0; + + var rel = $(this).attr('rel') || ''; + + if (!rel || rel == '' || rel === 'nofollow') { + selectedArray.push(this); + + } else { + selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]"); + selectedIndex = selectedArray.index( this ); + } + + _start(); + + return; + }); + + return this; + }; + + $.fancybox = function(obj) { + var opts; + + if (busy) { + return; + } + + busy = true; + opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {}; + + selectedArray = []; + selectedIndex = parseInt(opts.index, 10) || 0; + + if ($.isArray(obj)) { + for (var i = 0, j = obj.length; i < j; i++) { + if (typeof obj[i] == 'object') { + $(obj[i]).data('fancybox', $.extend({}, opts, obj[i])); + } else { + obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts)); + } + } + + selectedArray = jQuery.merge(selectedArray, obj); + + } else { + if (typeof obj == 'object') { + $(obj).data('fancybox', $.extend({}, opts, obj)); + } else { + obj = $({}).data('fancybox', $.extend({content : obj}, opts)); + } + + selectedArray.push(obj); + } + + if (selectedIndex > selectedArray.length || selectedIndex < 0) { + selectedIndex = 0; + } + + _start(); + }; + + $.fancybox.showActivity = function() { + clearInterval(loadingTimer); + + loading.show(); + loadingTimer = setInterval(_animate_loading, 66); + }; + + $.fancybox.hideActivity = function() { + loading.hide(); + }; + + $.fancybox.next = function() { + return $.fancybox.pos( currentIndex + 1); + }; + + $.fancybox.prev = function() { + return $.fancybox.pos( currentIndex - 1); + }; + + $.fancybox.pos = function(pos) { + if (busy) { + return; + } + + pos = parseInt(pos); + + selectedArray = currentArray; + + if (pos > -1 && pos < currentArray.length) { + selectedIndex = pos; + _start(); + + } else if (currentOpts.cyclic && currentArray.length > 1) { + selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1; + _start(); + } + + return; + }; + + $.fancybox.cancel = function() { + if (busy) { + return; + } + + busy = true; + + $.event.trigger('fancybox-cancel'); + + _abort(); + + selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts); + + busy = false; + }; + + // Note: within an iframe use - parent.$.fancybox.close(); + $.fancybox.close = function() { + if (busy || wrap.is(':hidden')) { + return; + } + + busy = true; + + if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { + busy = false; + return; + } + + _abort(); + + $(close.add( nav_left ).add( nav_right )).hide(); + + $(content.add( overlay )).unbind(); + + $(window).unbind("resize.fb scroll.fb"); + $(document).unbind('keydown.fb'); + + content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank'); + + if (currentOpts.titlePosition !== 'inside') { + title.empty(); + } + + wrap.stop(); + + function _cleanup() { + overlay.fadeOut('fast'); + + title.empty().hide(); + wrap.hide(); + + $.event.trigger('fancybox-cleanup'); + + content.empty(); + + currentOpts.onClosed(currentArray, currentIndex, currentOpts); + + currentArray = selectedOpts = []; + currentIndex = selectedIndex = 0; + currentOpts = selectedOpts = {}; + + busy = false; + } + + if (currentOpts.transitionOut == 'elastic') { + start_pos = _get_zoom_from(); + + var pos = wrap.position(); + + final_pos = { + top : pos.top , + left : pos.left, + width : wrap.width(), + height : wrap.height() + }; + + if (currentOpts.opacity) { + final_pos.opacity = 1; + } + + title.empty().hide(); + + fx.prop = 1; + + $(fx).animate({ prop: 0 }, { + duration : currentOpts.speedOut, + easing : currentOpts.easingOut, + step : _draw, + complete : _cleanup + }); + + } else { + wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup); + } + }; + + $.fancybox.resize = function() { + if (overlay.is(':visible')) { + overlay.css('height', $(document).height()); + } + + $.fancybox.center(true); + }; + + $.fancybox.center = function() { + var view, align; + + if (busy) { + return; + } + + align = arguments[0] === true ? 1 : 0; + view = _get_viewport(); + + if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) { + return; + } + + wrap + .stop() + .animate({ + 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)), + 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding)) + }, typeof arguments[0] == 'number' ? arguments[0] : 200); + }; + + $.fancybox.init = function() { + if ($("#fancybox-wrap").length) { + return; + } + + $('body').append( + tmp = $('<div id="fancybox-tmp"></div>'), + loading = $('<div id="fancybox-loading"><div></div></div>'), + overlay = $('<div id="fancybox-overlay"></div>'), + wrap = $('<div id="fancybox-wrap"></div>') + ); + + outer = $('<div id="fancybox-outer"></div>') + .append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>') + .appendTo( wrap ); + + outer.append( + content = $('<div id="fancybox-content"></div>'), + close = $('<a id="fancybox-close"></a>'), + title = $('<div id="fancybox-title"></div>'), + + nav_left = $('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'), + nav_right = $('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>') + ); + + close.click($.fancybox.close); + loading.click($.fancybox.cancel); + + nav_left.click(function(e) { + e.preventDefault(); + $.fancybox.prev(); + }); + + nav_right.click(function(e) { + e.preventDefault(); + $.fancybox.next(); + }); + + if ($.fn.mousewheel) { + wrap.bind('mousewheel.fb', function(e, delta) { + if (busy) { + e.preventDefault(); + + } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) { + e.preventDefault(); + $.fancybox[ delta > 0 ? 'prev' : 'next'](); + } + }); + } + + if (!$.support.opacity) { + wrap.addClass('fancybox-ie'); + } + + if (isIE6) { + loading.addClass('fancybox-ie6'); + wrap.addClass('fancybox-ie6'); + + $('<iframe id="fancybox-hide-sel-frame" src="' + (/^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank' ) + '" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(outer); + } + }; + + $.fn.fancybox.defaults = { + padding : 10, + margin : 40, + opacity : false, + modal : false, + cyclic : false, + scrolling : 'auto', // 'auto', 'yes' or 'no' + + width : 560, + height : 340, + + autoScale : true, + autoDimensions : true, + centerOnScroll : false, + + ajax : {}, + swf : { wmode: 'transparent' }, + + hideOnOverlayClick : true, + hideOnContentClick : false, + + overlayShow : true, + overlayOpacity : 0.7, + overlayColor : '#777', + + titleShow : true, + titlePosition : 'float', // 'float', 'outside', 'inside' or 'over' + titleFormat : null, + titleFromAlt : false, + + transitionIn : 'fade', // 'elastic', 'fade' or 'none' + transitionOut : 'fade', // 'elastic', 'fade' or 'none' + + speedIn : 300, + speedOut : 300, + + changeSpeed : 300, + changeFade : 'fast', + + easingIn : 'swing', + easingOut : 'swing', + + showCloseButton : true, + showNavArrows : true, + enableEscapeButton : true, + enableKeyboardNav : true, + + onStart : function(){}, + onCancel : function(){}, + onComplete : function(){}, + onCleanup : function(){}, + onClosed : function(){}, + onError : function(){} + }; + + $(document).ready(function() { + $.fancybox.init(); + }); + })(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.pack.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.fancybox-1.3.4.pack.js old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.mousewheel-3.0.4.pack.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/jquery.mousewheel-3.0.4.pack.js old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/nextgen_fancybox_init.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/nextgen_fancybox_init.js index 4dd03fca16009b7f7cda20534352090c5f28f7e7..0b20a12c10fca7338fdc9d2376180841c3b7e0a5 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/nextgen_fancybox_init.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/fancybox/nextgen_fancybox_init.js @@ -1,6 +1,8 @@ jQuery(function($) { var nextgen_fancybox_init = function() { - $(".ngg-fancybox").fancybox({ + var selector = nextgen_lightbox_filter_selector($, $(".ngg-fancybox")); + + selector.fancybox({ titlePosition: 'inside', // Needed for twenty eleven onComplete: function() { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.js index 7f58786ae38b7f9598516afc2a8b461b6c6b3fff..86fe0ea44fb7bad8528ed50318d209f57f50e17c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.js @@ -1,3320 +1,3320 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) - * Config: default +events +unobtrusive +imagemap +slideshow +positioning +transitions +viewport +thumbstrip +inline +ajax +iframe +flash - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ -if (!hs) { var hs = { -// Language strings -lang : { - cssDirection: 'ltr', - loadingText : 'Loading...', - loadingTitle : 'Click to cancel', - focusTitle : 'Click to bring to front', - fullExpandTitle : 'Expand to actual size (f)', - creditsText : 'Powered by <i>Highslide JS</i>', - creditsTitle : 'Go to the Highslide JS homepage', - previousText : 'Previous', - nextText : 'Next', - moveText : 'Move', - closeText : 'Close', - closeTitle : 'Close (esc)', - resizeTitle : 'Resize', - playText : 'Play', - playTitle : 'Play slideshow (spacebar)', - pauseText : 'Pause', - pauseTitle : 'Pause slideshow (spacebar)', - previousTitle : 'Previous (arrow left)', - nextTitle : 'Next (arrow right)', - moveTitle : 'Move', - fullExpandText : '1:1', - number: 'Image %1 of %2', - restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' -}, -// See http://highslide.com/ref for examples of settings -graphicsDir : 'highslide/graphics/', -expandCursor : 'zoomin.cur', // null disables -restoreCursor : 'zoomout.cur', // null disables -expandDuration : 250, // milliseconds -restoreDuration : 250, -marginLeft : 15, -marginRight : 15, -marginTop : 15, -marginBottom : 15, -zIndexCounter : 10001, // adjust to other absolutely positioned elements -loadingOpacity : 0.75, -allowMultipleInstances: true, -numberOfImagesToPreload : 5, -outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only -outlineStartOffset : 3, // ends at 10 -padToMinWidth : false, // pad the popup width to make room for wide caption -fullExpandPosition : 'bottom right', -fullExpandOpacity : 1, -showCredits : true, // you can set this to false if you want -creditsHref : 'http://highslide.com/', -creditsTarget : '_self', -enableKeyListener : true, -openerTagNames : ['a', 'area'], // Add more to allow slideshow indexing -transitions : [], -transitionDuration: 250, -dimmingOpacity: 0, // Lightbox style dimming background -dimmingDuration: 50, // 0 for instant dimming - -allowWidthReduction : false, -allowHeightReduction : true, -preserveContent : true, // Preserve changes made to the content and position of HTML popups. -objectLoadTime : 'before', // Load iframes 'before' or 'after' expansion. -cacheAjax : true, // Cache ajax popups for instant display. Can be overridden for each popup. -anchor : 'auto', // where the image expands from -align : 'auto', // position in the client (overrides anchor) -targetX: null, // the id of a target element -targetY: null, -dragByHeading: true, -minWidth: 200, -minHeight: 200, -allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight -outlineType : 'drop-shadow', // set null to disable outlines -skin : { - controls: - '<div class="highslide-controls"><ul>'+ - '<li class="highslide-previous">'+ - '<a href="#" title="{hs.lang.previousTitle}">'+ - '<span>{hs.lang.previousText}</span></a>'+ - '</li>'+ - '<li class="highslide-play">'+ - '<a href="#" title="{hs.lang.playTitle}">'+ - '<span>{hs.lang.playText}</span></a>'+ - '</li>'+ - '<li class="highslide-pause">'+ - '<a href="#" title="{hs.lang.pauseTitle}">'+ - '<span>{hs.lang.pauseText}</span></a>'+ - '</li>'+ - '<li class="highslide-next">'+ - '<a href="#" title="{hs.lang.nextTitle}">'+ - '<span>{hs.lang.nextText}</span></a>'+ - '</li>'+ - '<li class="highslide-move">'+ - '<a href="#" title="{hs.lang.moveTitle}">'+ - '<span>{hs.lang.moveText}</span></a>'+ - '</li>'+ - '<li class="highslide-full-expand">'+ - '<a href="#" title="{hs.lang.fullExpandTitle}">'+ - '<span>{hs.lang.fullExpandText}</span></a>'+ - '</li>'+ - '<li class="highslide-close">'+ - '<a href="#" title="{hs.lang.closeTitle}" >'+ - '<span>{hs.lang.closeText}</span></a>'+ - '</li>'+ - '</ul></div>' - , - contentWrapper: - '<div class="highslide-header"><ul>'+ - '<li class="highslide-previous">'+ - '<a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)">'+ - '<span>{hs.lang.previousText}</span></a>'+ - '</li>'+ - '<li class="highslide-next">'+ - '<a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)">'+ - '<span>{hs.lang.nextText}</span></a>'+ - '</li>'+ - '<li class="highslide-move">'+ - '<a href="#" title="{hs.lang.moveTitle}" onclick="return false">'+ - '<span>{hs.lang.moveText}</span></a>'+ - '</li>'+ - '<li class="highslide-close">'+ - '<a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)">'+ - '<span>{hs.lang.closeText}</span></a>'+ - '</li>'+ - '</ul></div>'+ - '<div class="highslide-body"></div>'+ - '<div class="highslide-footer"><div>'+ - '<span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span>'+ - '</div></div>' -}, -// END OF YOUR SETTINGS - - -// declare internal properties -preloadTheseImages : [], -continuePreloading: true, -expanders : [], -overrides : [ - 'allowSizeReduction', - 'useBox', - 'anchor', - 'align', - 'targetX', - 'targetY', - 'outlineType', - 'outlineWhileAnimating', - 'captionId', - 'captionText', - 'captionEval', - 'captionOverlay', - 'headingId', - 'headingText', - 'headingEval', - 'headingOverlay', - 'creditsPosition', - 'dragByHeading', - 'autoplay', - 'numberPosition', - 'transitions', - 'dimmingOpacity', - - 'width', - 'height', - - 'contentId', - 'allowWidthReduction', - 'allowHeightReduction', - 'preserveContent', - 'maincontentId', - 'maincontentText', - 'maincontentEval', - 'objectType', - 'cacheAjax', - 'objectWidth', - 'objectHeight', - 'objectLoadTime', - 'swfOptions', - 'wrapperClassName', - 'minWidth', - 'minHeight', - 'maxWidth', - 'maxHeight', - 'pageOrigin', - 'slideshowGroup', - 'easing', - 'easingClose', - 'fadeInOut', - 'src' -], -overlays : [], -idCounter : 0, -oPos : { - x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], - y: ['above', 'top', 'middle', 'bottom', 'below'] -}, -mouse: {}, -headingOverlay: {}, -captionOverlay: {}, -swfOptions: { flashvars: {}, params: {}, attributes: {} }, -timers : [], - -slideshows : [], - -pendingOutlines : {}, -sleeping : [], -preloadTheseAjax : [], -cacheBindings : [], -cachedGets : {}, -clones : {}, -onReady: [], -uaVersion: /Trident\/4\.0/.test(navigator.userAgent) ? 8 : - parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), -ie : (document.all && !window.opera), -//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? -safari : /Safari/.test(navigator.userAgent), -geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), - -$ : function (id) { - if (id) return document.getElementById(id); -}, - -push : function (arr, val) { - arr[arr.length] = val; -}, - -createElement : function (tag, attribs, styles, parent, nopad) { - var el = document.createElement(tag); - if (attribs) hs.extend(el, attribs); - if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); - if (styles) hs.setStyles(el, styles); - if (parent) parent.appendChild(el); - return el; -}, - -extend : function (el, attribs) { - for (var x in attribs) el[x] = attribs[x]; - return el; -}, - -setStyles : function (el, styles) { - for (var x in styles) { - if (hs.ieLt9 && x == 'opacity') { - if (styles[x] > 0.99) el.style.removeAttribute('filter'); - else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; - } - else el.style[x] = styles[x]; - } -}, -animate: function(el, prop, opt) { - var start, - end, - unit; - if (typeof opt != 'object' || opt === null) { - var args = arguments; - opt = { - duration: args[2], - easing: args[3], - complete: args[4] - }; - } - if (typeof opt.duration != 'number') opt.duration = 250; - opt.easing = Math[opt.easing] || Math.easeInQuad; - opt.curAnim = hs.extend({}, prop); - for (var name in prop) { - var e = new hs.fx(el, opt , name ); - - start = parseFloat(hs.css(el, name)) || 0; - end = parseFloat(prop[name]); - unit = name != 'opacity' ? 'px' : ''; - - e.custom( start, end, unit ); - } -}, -css: function(el, prop) { - if (el.style[prop]) { - return el.style[prop]; - } else if (document.defaultView) { - return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); - - } else { - if (prop == 'opacity') prop = 'filter'; - var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; - if (prop == 'filter') - val = val.replace(/alpha\(opacity=([0-9]+)\)/, - function (a, b) { return b / 100 }); - return val === '' ? 1 : val; - } -}, - -getPageSize : function () { - var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' - ? d.documentElement : d.body, - ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); - - var width = ieLt9 ? iebody.clientWidth : - (d.documentElement.clientWidth || self.innerWidth), - height = ieLt9 ? iebody.clientHeight : self.innerHeight; - hs.page = { - width: width, - height: height, - scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, - scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset - }; - return hs.page; -}, - -getPosition : function(el) { - if (/area/i.test(el.tagName)) { - var imgs = document.getElementsByTagName('img'); - for (var i = 0; i < imgs.length; i++) { - var u = imgs[i].useMap; - if (u && u.replace(/^.*?#/, '') == el.parentNode.name) { - el = imgs[i]; - break; - } - } - } - var p = { x: el.offsetLeft, y: el.offsetTop }; - while (el.offsetParent) { - el = el.offsetParent; - p.x += el.offsetLeft; - p.y += el.offsetTop; - if (el != document.body && el != document.documentElement) { - p.x -= el.scrollLeft; - p.y -= el.scrollTop; - } - } - return p; -}, - -expand : function(a, params, custom, type) { - if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); - if (typeof a.getParams == 'function') return params; - if (type == 'html') { - for (var i = 0; i < hs.sleeping.length; i++) { - if (hs.sleeping[i] && hs.sleeping[i].a == a) { - hs.sleeping[i].awake(); - hs.sleeping[i] = null; - return false; - } - } - hs.hasHtmlExpanders = true; - } - try { - new hs.Expander(a, params, custom, type); - return false; - } catch (e) { return true; } -}, - -htmlExpand : function(a, params, custom) { - return hs.expand(a, params, custom, 'html'); -}, - -getSelfRendered : function() { - return hs.createElement('div', { - className: 'highslide-html-content', - innerHTML: hs.replaceLang(hs.skin.contentWrapper) - }); -}, -getElementByClass : function (el, tagName, className) { - var els = el.getElementsByTagName(tagName); - for (var i = 0; i < els.length; i++) { - if ((new RegExp(className)).test(els[i].className)) { - return els[i]; - } - } - return null; -}, -replaceLang : function(s) { - s = s.replace(/\s/g, ' '); - var re = /{hs\.lang\.([^}]+)\}/g, - matches = s.match(re), - lang; - if (matches) for (var i = 0; i < matches.length; i++) { - lang = matches[i].replace(re, "$1"); - if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]); - } - return s; -}, - - -setClickEvents : function () { - var els = document.getElementsByTagName('a'); - for (var i = 0; i < els.length; i++) { - var type = hs.isUnobtrusiveAnchor(els[i]); - if (type && !els[i].hsHasSetClick) { - (function(){ - var t = type; - if (hs.fireEvent(hs, 'onSetClickEvent', { element: els[i], type: t })) { - els[i].onclick =(type == 'image') ?function() { return hs.expand(this) }: - function() { return hs.htmlExpand(this, { objectType: t } );}; - } - })(); - els[i].hsHasSetClick = true; - } - } - hs.getAnchors(); -}, -isUnobtrusiveAnchor: function(el) { - if (el.rel == 'highslide') return 'image'; - else if (el.rel == 'highslide-ajax') return 'ajax'; - else if (el.rel == 'highslide-iframe') return 'iframe'; - else if (el.rel == 'highslide-swf') return 'swf'; -}, - -getCacheBinding : function (a) { - for (var i = 0; i < hs.cacheBindings.length; i++) { - if (hs.cacheBindings[i][0] == a) { - var c = hs.cacheBindings[i][1]; - hs.cacheBindings[i][1] = c.cloneNode(1); - return c; - } - } - return null; -}, - -preloadAjax : function (e) { - var arr = hs.getAnchors(); - for (var i = 0; i < arr.htmls.length; i++) { - var a = arr.htmls[i]; - if (hs.getParam(a, 'objectType') == 'ajax' && hs.getParam(a, 'cacheAjax')) - hs.push(hs.preloadTheseAjax, a); - } - - hs.preloadAjaxElement(0); -}, - -preloadAjaxElement : function (i) { - if (!hs.preloadTheseAjax[i]) return; - var a = hs.preloadTheseAjax[i]; - var cache = hs.getNode(hs.getParam(a, 'contentId')); - if (!cache) cache = hs.getSelfRendered(); - var ajax = new hs.Ajax(a, cache, 1); - ajax.onError = function () { }; - ajax.onLoad = function () { - hs.push(hs.cacheBindings, [a, cache]); - hs.preloadAjaxElement(i + 1); - }; - ajax.run(); -}, - -focusTopmost : function() { - var topZ = 0, - topmostKey = -1, - expanders = hs.expanders, - exp, - zIndex; - for (var i = 0; i < expanders.length; i++) { - exp = expanders[i]; - if (exp) { - zIndex = exp.wrapper.style.zIndex; - if (zIndex && zIndex > topZ) { - topZ = zIndex; - topmostKey = i; - } - } - } - if (topmostKey == -1) hs.focusKey = -1; - else expanders[topmostKey].focus(); -}, - -getParam : function (a, param) { - a.getParams = a.onclick; - var p = a.getParams ? a.getParams() : null; - a.getParams = null; - - return (p && typeof p[param] != 'undefined') ? p[param] : - (typeof hs[param] != 'undefined' ? hs[param] : null); -}, - -getSrc : function (a) { - var src = hs.getParam(a, 'src'); - if (src) return src; - return a.href; -}, - -getNode : function (id) { - var node = hs.$(id), clone = hs.clones[id], a = {}; - if (!node && !clone) return null; - if (!clone) { - clone = node.cloneNode(true); - clone.id = ''; - hs.clones[id] = clone; - return node; - } else { - return clone.cloneNode(true); - } -}, - -discardElement : function(d) { - if (d) hs.garbageBin.appendChild(d); - hs.garbageBin.innerHTML = ''; -}, -dim : function(exp) { - if (!hs.dimmer) { - isNew = true; - hs.dimmer = hs.createElement ('div', { - className: 'highslide-dimming highslide-viewport-size', - owner: '', - onclick: function() { - if (hs.fireEvent(hs, 'onDimmerClick')) - - hs.close(); - } - }, { - visibility: 'visible', - opacity: 0 - }, hs.container, true); - - if (/(Android|iPad|iPhone|iPod)/.test(navigator.userAgent)) { - var body = document.body; - function pixDimmerSize() { - hs.setStyles(hs.dimmer, { - width: body.scrollWidth +'px', - height: body.scrollHeight +'px' - }); - } - pixDimmerSize(); - hs.addEventListener(window, 'resize', pixDimmerSize); - } - } - hs.dimmer.style.display = ''; - - var isNew = hs.dimmer.owner == ''; - hs.dimmer.owner += '|'+ exp.key; - - if (isNew) { - if (hs.geckoMac && hs.dimmingGeckoFix) - hs.setStyles(hs.dimmer, { - background: 'url('+ hs.graphicsDir + 'geckodimmer.png)', - opacity: 1 - }); - else - hs.animate(hs.dimmer, { opacity: exp.dimmingOpacity }, hs.dimmingDuration); - } -}, -undim : function(key) { - if (!hs.dimmer) return; - if (typeof key != 'undefined') hs.dimmer.owner = hs.dimmer.owner.replace('|'+ key, ''); - - if ( - (typeof key != 'undefined' && hs.dimmer.owner != '') - || (hs.upcoming && hs.getParam(hs.upcoming, 'dimmingOpacity')) - ) return; - - if (hs.geckoMac && hs.dimmingGeckoFix) hs.dimmer.style.display = 'none'; - else hs.animate(hs.dimmer, { opacity: 0 }, hs.dimmingDuration, null, function() { - hs.dimmer.style.display = 'none'; - }); -}, -transit : function (adj, exp) { - var last = exp || hs.getExpander(); - exp = last; - if (hs.upcoming) return false; - else hs.last = last; - hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - try { - hs.upcoming = adj; - adj.onclick(); - } catch (e){ - hs.last = hs.upcoming = null; - } - try { - if (!adj || exp.transitions[1] != 'crossfade') - exp.close(); - } catch (e) {} - return false; -}, - -previousOrNext : function (el, op) { - var exp = hs.getExpander(el); - if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); - else return false; -}, - -previous : function (el) { - return hs.previousOrNext(el, -1); -}, - -next : function (el) { - return hs.previousOrNext(el, 1); -}, - -keyHandler : function(e) { - if (!e) e = window.event; - if (!e.target) e.target = e.srcElement; // ie - if (typeof e.target.form != 'undefined') return true; // form element has focus - if (!hs.fireEvent(hs, 'onKeyDown', e)) return true; - var exp = hs.getExpander(); - - var op = null; - switch (e.keyCode) { - case 70: // f - if (exp) exp.doFullExpand(); - return true; - case 32: // Space - op = 2; - break; - case 34: // Page Down - case 39: // Arrow right - case 40: // Arrow down - op = 1; - break; - case 8: // Backspace - case 33: // Page Up - case 37: // Arrow left - case 38: // Arrow up - op = -1; - break; - case 27: // Escape - case 13: // Enter - op = 0; - } - if (op !== null) {if (op != 2)hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - if (!hs.enableKeyListener) return true; - - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - if (exp) { - if (op == 0) { - exp.close(); - } else if (op == 2) { - if (exp.slideshow) exp.slideshow.hitSpace(); - } else { - if (exp.slideshow) exp.slideshow.pause(); - hs.previousOrNext(exp.key, op); - } - return false; - } - } - return true; -}, - - -registerOverlay : function (overlay) { - hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); -}, - - -addSlideshow : function (options) { - var sg = options.slideshowGroup; - if (typeof sg == 'object') { - for (var i = 0; i < sg.length; i++) { - var o = {}; - for (var x in options) o[x] = options[x]; - o.slideshowGroup = sg[i]; - hs.push(hs.slideshows, o); - } - } else { - hs.push(hs.slideshows, options); - } -}, - -getWrapperKey : function (element, expOnly) { - var el, re = /^highslide-wrapper-([0-9]+)$/; - // 1. look in open expanders - el = element; - while (el.parentNode) { - if (el.hsKey !== undefined) return el.hsKey; - if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); - el = el.parentNode; - } - // 2. look in thumbnail - if (!expOnly) { - el = element; - while (el.parentNode) { - if (el.tagName && hs.isHsAnchor(el)) { - for (var key = 0; key < hs.expanders.length; key++) { - var exp = hs.expanders[key]; - if (exp && exp.a == el) return key; - } - } - el = el.parentNode; - } - } - return null; -}, - -getExpander : function (el, expOnly) { - if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; - if (typeof el == 'number') return hs.expanders[el] || null; - if (typeof el == 'string') el = hs.$(el); - return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; -}, - -isHsAnchor : function (a) { - return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); -}, - -reOrder : function () { - for (var i = 0; i < hs.expanders.length; i++) - if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); -}, -fireEvent : function (obj, evt, args) { - return obj && obj[evt] ? (obj[evt](obj, args) !== false) : true; -}, - -mouseClickHandler : function(e) -{ - if (!e) e = window.event; - if (e.button > 1) return true; - if (!e.target) e.target = e.srcElement; - - var el = e.target; - while (el.parentNode - && !(/highslide-(image|move|html|resize)/.test(el.className))) - { - el = el.parentNode; - } - var exp = hs.getExpander(el); - if (exp && (exp.isClosing || !exp.isExpanded)) return true; - - if (exp && e.type == 'mousedown') { - if (e.target.form) return true; - var match = el.className.match(/highslide-(image|move|resize)/); - if (match) { - hs.dragArgs = { - exp: exp , - type: match[1], - left: exp.x.pos, - width: exp.x.size, - top: exp.y.pos, - height: exp.y.size, - clickX: e.clientX, - clickY: e.clientY - }; - - - hs.addEventListener(document, 'mousemove', hs.dragHandler); - if (e.preventDefault) e.preventDefault(); // FF - - if (/highslide-(image|html)-blur/.test(exp.content.className)) { - exp.focus(); - hs.hasFocused = true; - } - return false; - } - else if (/highslide-html/.test(el.className) && hs.focusKey != exp.key) { - exp.focus(); - exp.doShowHide('hidden'); - } - } else if (e.type == 'mouseup') { - - hs.removeEventListener(document, 'mousemove', hs.dragHandler); - - if (hs.dragArgs) { - if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') - hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; - var hasDragged = hs.dragArgs.hasDragged; - - if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { - if (hs.fireEvent(exp, 'onImageClick')) - exp.close(); - } - else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { - hs.dragArgs.exp.doShowHide('hidden'); - } - - if (hs.dragArgs.exp.releaseMask) - hs.dragArgs.exp.releaseMask.style.display = 'none'; - - if (hasDragged) hs.fireEvent(hs.dragArgs.exp, 'onDrop', hs.dragArgs); - hs.hasFocused = false; - hs.dragArgs = null; - - } else if (/highslide-image-blur/.test(el.className)) { - el.style.cursor = hs.styleRestoreCursor; - } - } - return false; -}, - -dragHandler : function(e) -{ - if (!hs.dragArgs) return true; - if (!e) e = window.event; - var a = hs.dragArgs, exp = a.exp; - if (exp.iframe) { - if (!exp.releaseMask) exp.releaseMask = hs.createElement('div', null, - { position: 'absolute', width: exp.x.size+'px', height: exp.y.size+'px', - left: exp.x.cb+'px', top: exp.y.cb+'px', zIndex: 4, background: (hs.ieLt9 ? 'white' : 'none'), - opacity: 0.01 }, - exp.wrapper, true); - if (exp.releaseMask.style.display == 'none') - exp.releaseMask.style.display = ''; - } - - a.dX = e.clientX - a.clickX; - a.dY = e.clientY - a.clickY; - - var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); - if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) - || (distance > (hs.dragSensitivity || 5)); - - if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { - if (!hs.fireEvent(exp, 'onDrag', a)) return false; - - if (a.type == 'resize') exp.resize(a); - else { - exp.moveTo(a.left + a.dX, a.top + a.dY); - if (a.type == 'image') exp.content.style.cursor = 'move'; - } - } - return false; -}, - -wrapperMouseHandler : function (e) { - try { - if (!e) e = window.event; - var over = /mouseover/i.test(e.type); - if (!e.target) e.target = e.srcElement; // ie - if (!e.relatedTarget) e.relatedTarget = - over ? e.fromElement : e.toElement; // ie - var exp = hs.getExpander(e.target); - if (!exp.isExpanded) return; - if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp - || hs.dragArgs) return; - hs.fireEvent(exp, over ? 'onMouseOver' : 'onMouseOut', e); - for (var i = 0; i < exp.overlays.length; i++) (function() { - var o = hs.$('hsId'+ exp.overlays[i]); - if (o && o.hideOnMouseOut) { - if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); - hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); - } - })(); - } catch (e) {} -}, -addEventListener : function (el, event, func) { - if (el == document && event == 'ready') { - hs.push(hs.onReady, func); - } - try { - el.addEventListener(event, func, false); - } catch (e) { - try { - el.detachEvent('on'+ event, func); - el.attachEvent('on'+ event, func); - } catch (e) { - el['on'+ event] = func; - } - } -}, - -removeEventListener : function (el, event, func) { - try { - el.removeEventListener(event, func, false); - } catch (e) { - try { - el.detachEvent('on'+ event, func); - } catch (e) { - el['on'+ event] = null; - } - } -}, - -preloadFullImage : function (i) { - if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { - var img = document.createElement('img'); - img.onload = function() { - img = null; - hs.preloadFullImage(i + 1); - }; - img.src = hs.preloadTheseImages[i]; - } -}, -preloadImages : function (number) { - if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; - - var arr = hs.getAnchors(); - for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { - hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); - } - - // preload outlines - if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); - else - - hs.preloadFullImage(0); - - // preload cursor - if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); -}, - - -init : function () { - if (!hs.container) { - - hs.ieLt7 = hs.ie && hs.uaVersion < 7; - hs.ieLt9 = hs.ie && hs.uaVersion < 9; - - hs.getPageSize(); - hs.ie6SSL = hs.ieLt7 && location.protocol == 'https:'; - for (var x in hs.langDefaults) { - if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; - else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') - hs.lang[x] = hs.langDefaults[x]; - } - - hs.container = hs.createElement('div', { - className: 'highslide-container' - }, { - position: 'absolute', - left: 0, - top: 0, - width: '100%', - zIndex: hs.zIndexCounter, - direction: 'ltr' - }, - document.body, - true - ); - hs.loading = hs.createElement('a', { - className: 'highslide-loading', - title: hs.lang.loadingTitle, - innerHTML: hs.lang.loadingText, - href: 'javascript:;' - }, { - position: 'absolute', - top: '-9999px', - opacity: hs.loadingOpacity, - zIndex: 1 - }, hs.container - ); - hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); - hs.viewport = hs.createElement('div', { - className: 'highslide-viewport highslide-viewport-size' - }, { - visibility: (hs.safari && hs.uaVersion < 525) ? 'visible' : 'hidden' - }, hs.container, 1 - ); - hs.clearing = hs.createElement('div', null, - { clear: 'both', paddingTop: '1px' }, null, true); - - // http://www.robertpenner.com/easing/ - Math.linearTween = function (t, b, c, d) { - return c*t/d + b; - }; - Math.easeInQuad = function (t, b, c, d) { - return c*(t/=d)*t + b; - }; - Math.easeOutQuad = function (t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }; - - hs.hideSelects = hs.ieLt7; - hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' - || (hs.ieLt7 && hs.uaVersion < 5.5)); - hs.fireEvent(this, 'onActivate'); - } -}, -ready : function() { - if (hs.isReady) return; - hs.isReady = true; - for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); -}, - -updateAnchors : function() { - var el, els, all = [], images = [], htmls = [],groups = {}, re; - - for (var i = 0; i < hs.openerTagNames.length; i++) { - els = document.getElementsByTagName(hs.openerTagNames[i]); - for (var j = 0; j < els.length; j++) { - el = els[j]; - re = hs.isHsAnchor(el); - if (re) { - hs.push(all, el); - if (re[0] == 'hs.expand') hs.push(images, el); - else if (re[0] == 'hs.htmlExpand') hs.push(htmls, el); - var g = hs.getParam(el, 'slideshowGroup') || 'none'; - if (!groups[g]) groups[g] = []; - hs.push(groups[g], el); - } - } - } - hs.anchors = { all: all, groups: groups, images: images, htmls: htmls }; - return hs.anchors; - -}, - -getAnchors : function() { - return hs.anchors || hs.updateAnchors(); -}, - - -close : function(el) { - var exp = hs.getExpander(el); - if (exp) exp.close(); - return false; -} -}; // end hs object -hs.fx = function( elem, options, prop ){ - this.options = options; - this.elem = elem; - this.prop = prop; - - if (!options.orig) options.orig = {}; -}; -hs.fx.prototype = { - update: function(){ - (hs.fx.step[this.prop] || hs.fx.step._default)(this); - - if (this.options.step) - this.options.step.call(this.elem, this.now, this); - - }, - custom: function(from, to, unit){ - this.startTime = (new Date()).getTime(); - this.start = from; - this.end = to; - this.unit = unit;// || this.unit || "px"; - this.now = this.start; - this.pos = this.state = 0; - - var self = this; - function t(gotoEnd){ - return self.step(gotoEnd); - } - - t.elem = this.elem; - - if ( t() && hs.timers.push(t) == 1 ) { - hs.timerId = setInterval(function(){ - var timers = hs.timers; - - for ( var i = 0; i < timers.length; i++ ) - if ( !timers[i]() ) - timers.splice(i--, 1); - - if ( !timers.length ) { - clearInterval(hs.timerId); - } - }, 13); - } - }, - step: function(gotoEnd){ - var t = (new Date()).getTime(); - if ( gotoEnd || t >= this.options.duration + this.startTime ) { - this.now = this.end; - this.pos = this.state = 1; - this.update(); - - this.options.curAnim[ this.prop ] = true; - - var done = true; - for ( var i in this.options.curAnim ) - if ( this.options.curAnim[i] !== true ) - done = false; - - if ( done ) { - if (this.options.complete) this.options.complete.call(this.elem); - } - return false; - } else { - var n = t - this.startTime; - this.state = n / this.options.duration; - this.pos = this.options.easing(n, 0, 1, this.options.duration); - this.now = this.start + ((this.end - this.start) * this.pos); - this.update(); - } - return true; - } - -}; - -hs.extend( hs.fx, { - step: { - - opacity: function(fx){ - hs.setStyles(fx.elem, { opacity: fx.now }); - }, - - _default: function(fx){ - try { - if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) - fx.elem.style[ fx.prop ] = fx.now + fx.unit; - else - fx.elem[ fx.prop ] = fx.now; - } catch (e) {} - } - } -}); - -hs.Outline = function (outlineType, onLoad) { - this.onLoad = onLoad; - this.outlineType = outlineType; - var v = hs.uaVersion, tr; - - this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; - if (!outlineType) { - if (onLoad) onLoad(); - return; - } - - hs.init(); - this.table = hs.createElement( - 'table', { - cellSpacing: 0 - }, { - visibility: 'hidden', - position: 'absolute', - borderCollapse: 'collapse', - width: 0 - }, - hs.container, - true - ); - var tbody = hs.createElement('tbody', null, null, this.table, 1); - - this.td = []; - for (var i = 0; i <= 8; i++) { - if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); - this.td[i] = hs.createElement('td', null, null, tr, true); - var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; - hs.setStyles(this.td[i], style); - } - this.td[4].className = outlineType +' highslide-outline'; - - this.preloadGraphic(); -}; - -hs.Outline.prototype = { -preloadGraphic : function () { - var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; - - var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; - this.graphic = hs.createElement('img', null, { position: 'absolute', - top: '-9999px' }, appendTo, true); // for onload trigger - - var pThis = this; - this.graphic.onload = function() { pThis.onGraphicLoad(); }; - - this.graphic.src = src; -}, - -onGraphicLoad : function () { - var o = this.offset = this.graphic.width / 4, - pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], - dim = { height: (2*o) +'px', width: (2*o) +'px' }; - for (var i = 0; i <= 8; i++) { - if (pos[i]) { - if (this.hasAlphaImageLoader) { - var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; - var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); - hs.createElement ('div', null, { - filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", - position: 'absolute', - width: w, - height: this.graphic.height +'px', - left: (pos[i][0]*o)+'px', - top: (pos[i][1]*o)+'px' - }, - div, - true); - } else { - hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); - } - - if (window.opera && (i == 3 || i ==5)) - hs.createElement('div', null, dim, this.td[i], true); - - hs.setStyles (this.td[i], dim); - } - } - this.graphic = null; - if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); - hs.pendingOutlines[this.outlineType] = this; - if (this.onLoad) this.onLoad(); -}, - -setPosition : function (pos, offset, vis, dur, easing) { - var exp = this.exp, - stl = exp.wrapper.style, - offset = offset || 0, - pos = pos || { - x: exp.x.pos + offset, - y: exp.y.pos + offset, - w: exp.x.get('wsize') - 2 * offset, - h: exp.y.get('wsize') - 2 * offset - }; - if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) - ? 'visible' : 'hidden'; - hs.setStyles(this.table, { - left: (pos.x - this.offset) +'px', - top: (pos.y - this.offset) +'px', - width: (pos.w + 2 * this.offset) +'px' - }); - - pos.w -= 2 * this.offset; - pos.h -= 2 * this.offset; - hs.setStyles (this.td[4], { - width: pos.w >= 0 ? pos.w +'px' : 0, - height: pos.h >= 0 ? pos.h +'px' : 0 - }); - if (this.hasAlphaImageLoader) this.td[3].style.height - = this.td[5].style.height = this.td[4].style.height; - -}, - -destroy : function(hide) { - if (hide) this.table.style.visibility = 'hidden'; - else hs.discardElement(this.table); -} -}; - -hs.Dimension = function(exp, dim) { - this.exp = exp; - this.dim = dim; - this.ucwh = dim == 'x' ? 'Width' : 'Height'; - this.wh = this.ucwh.toLowerCase(); - this.uclt = dim == 'x' ? 'Left' : 'Top'; - this.lt = this.uclt.toLowerCase(); - this.ucrb = dim == 'x' ? 'Right' : 'Bottom'; - this.rb = this.ucrb.toLowerCase(); - this.p1 = this.p2 = 0; -}; -hs.Dimension.prototype = { -get : function(key) { - switch (key) { - case 'loadingPos': - return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; - case 'loadingPosXfade': - return this.pos + this.cb+ this.p1 + (this.size - hs.loading['offset'+ this.ucwh]) / 2; - case 'wsize': - return this.size + 2 * this.cb + this.p1 + this.p2; - case 'fitsize': - return this.clientSize - this.marginMin - this.marginMax; - case 'maxsize': - return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; - case 'opos': - return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); - case 'osize': - return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); - case 'imgPad': - return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; - - } -}, -calcBorders: function() { - // correct for borders - this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2; - - this.marginMax = hs['margin'+ this.ucrb]; -}, -calcThumb: function() { - this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : - this.exp.el['offset'+ this.ucwh]; - this.tpos = this.exp.tpos[this.dim]; - this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2; - if (this.tpos == 0 || this.tpos == -1) { - this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; - }; -}, -calcExpanded: function() { - var exp = this.exp; - this.justify = 'auto'; - - // get alignment - if (exp.align == 'center') this.justify = 'center'; - else if (new RegExp(this.lt).test(exp.anchor)) this.justify = null; - else if (new RegExp(this.rb).test(exp.anchor)) this.justify = 'max'; - - - // size and position - this.pos = this.tpos - this.cb + this.tb; - - if (this.maxHeight && this.dim == 'x') - exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); - - this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); - this.minSize = exp.allowSizeReduction ? - Math.min(exp['min'+ this.ucwh], this.full) :this.full; - if (exp.isImage && exp.useBox) { - this.size = exp[this.wh]; - this.imgSize = this.full; - } - if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; - this.target = exp['target'+ this.dim.toUpperCase()]; - this.marginMin = hs['margin'+ this.uclt]; - this.scroll = hs.page['scroll'+ this.uclt]; - this.clientSize = hs.page[this.wh]; -}, -setSize: function(i) { - var exp = this.exp; - if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { - this.imgSize = i; - this.size = Math.max(this.size, this.imgSize); - exp.content.style[this.lt] = this.get('imgPad')+'px'; - } else - this.size = i; - - exp.content.style[this.wh] = i +'px'; - exp.wrapper.style[this.wh] = this.get('wsize') +'px'; - if (exp.outline) exp.outline.setPosition(); - if (exp.releaseMask) exp.releaseMask.style[this.wh] = i +'px'; - if (this.dim == 'y' && exp.iDoc && exp.body.style.height != 'auto') try { - exp.iDoc.body.style.overflow = 'auto'; - } catch (e) {} - if (exp.isHtml) { - var d = exp.scrollerDiv; - if (this.sizeDiff === undefined) - this.sizeDiff = exp.innerContent['offset'+ this.ucwh] - d['offset'+ this.ucwh]; - d.style[this.wh] = (this.size - this.sizeDiff) +'px'; - - if (this.dim == 'x') exp.mediumContent.style.width = 'auto'; - if (exp.body) exp.body.style[this.wh] = 'auto'; - } - if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); - if (this.dim == 'x' && exp.slideshow && exp.isImage) { - if (i == this.full) exp.slideshow.disable('full-expand'); - else exp.slideshow.enable('full-expand'); - } -}, -setPos: function(i) { - this.pos = i; - this.exp.wrapper.style[this.lt] = i +'px'; - - if (this.exp.outline) this.exp.outline.setPosition(); - -} -}; - -hs.Expander = function(a, params, custom, contentType) { - if (document.readyState && hs.ie && !hs.isReady) { - hs.addEventListener(document, 'ready', function() { - new hs.Expander(a, params, custom, contentType); - }); - return; - } - this.a = a; - this.custom = custom; - this.contentType = contentType || 'image'; - this.isHtml = (contentType == 'html'); - this.isImage = !this.isHtml; - - hs.continuePreloading = false; - this.overlays = []; - this.last = hs.last; - hs.last = null; - hs.init(); - var key = this.key = hs.expanders.length; - // override inline parameters - for (var i = 0; i < hs.overrides.length; i++) { - var name = hs.overrides[i]; - this[name] = params && typeof params[name] != 'undefined' ? - params[name] : hs[name]; - } - if (!this.src) this.src = a.href; - - // get thumb - var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; - el = this.thumb = el.getElementsByTagName('img')[0] || el; - this.thumbsUserSetId = el.id || a.id; - if (!hs.fireEvent(this, 'onInit')) return true; - - // check if already open - for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && hs.expanders[i].a == a - && !(this.last && this.transitions[1] == 'crossfade')) { - hs.expanders[i].focus(); - return false; - } - } - - // cancel other - if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { - hs.expanders[i].cancelLoading(); - } - } - hs.expanders[key] = this; - if (!hs.allowMultipleInstances && !hs.upcoming) { - if (hs.expanders[key-1]) hs.expanders[key-1].close(); - if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) - hs.expanders[hs.focusKey].close(); - } - - // initiate metrics - this.el = el; - this.tpos = this.pageOrigin || hs.getPosition(el); - hs.getPageSize(); - var x = this.x = new hs.Dimension(this, 'x'); - x.calcThumb(); - var y = this.y = new hs.Dimension(this, 'y'); - y.calcThumb(); - if (/area/i.test(el.tagName)) this.getImageMapAreaCorrection(el); - this.wrapper = hs.createElement( - 'div', { - id: 'highslide-wrapper-'+ this.key, - className: 'highslide-wrapper '+ this.wrapperClassName - }, { - visibility: 'hidden', - position: 'absolute', - zIndex: hs.zIndexCounter += 2 - }, null, true ); - - this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; - if (this.contentType == 'image' && this.outlineWhileAnimating == 2) - this.outlineWhileAnimating = 0; - - // get the outline - if (!this.outlineType - || (this.last && this.isImage && this.transitions[1] == 'crossfade')) { - this[this.contentType +'Create'](); - - } else if (hs.pendingOutlines[this.outlineType]) { - this.connectOutline(); - this[this.contentType +'Create'](); - - } else { - this.showLoading(); - var exp = this; - new hs.Outline(this.outlineType, - function () { - exp.connectOutline(); - exp[exp.contentType +'Create'](); - } - ); - } - return true; -}; - -hs.Expander.prototype = { -error : function(e) { - if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); - else window.location.href = this.src; -}, - -connectOutline : function() { - var outline = this.outline = hs.pendingOutlines[this.outlineType]; - outline.exp = this; - outline.table.style.zIndex = this.wrapper.style.zIndex - 1; - hs.pendingOutlines[this.outlineType] = null; -}, - -showLoading : function() { - if (this.onLoadStarted || this.loading) return; - - this.loading = hs.loading; - var exp = this; - this.loading.onclick = function() { - exp.cancelLoading(); - }; - - - if (!hs.fireEvent(this, 'onShowLoading')) return; - var exp = this, - l = this.x.get('loadingPos') +'px', - t = this.y.get('loadingPos') +'px'; - if (!tgt && this.last && this.transitions[1] == 'crossfade') - var tgt = this.last; - if (tgt) { - l = tgt.x.get('loadingPosXfade') +'px'; - t = tgt.y.get('loadingPosXfade') +'px'; - this.loading.style.zIndex = hs.zIndexCounter++; - } - setTimeout(function () { - if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} - , 100); -}, - -imageCreate : function() { - var exp = this; - - var img = document.createElement('img'); - this.content = img; - img.onload = function () { - if (hs.expanders[exp.key]) exp.contentLoaded(); - }; - if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; - img.className = 'highslide-image'; - hs.setStyles(img, { - visibility: 'hidden', - display: 'block', - position: 'absolute', - maxWidth: '9999px', - zIndex: 3 - }); - img.title = hs.lang.restoreTitle; - if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); - if (hs.ie && hs.flushImgSize) img.src = null; - img.src = this.src; - - this.showLoading(); -}, - -htmlCreate : function () { - if (!hs.fireEvent(this, 'onBeforeGetContent')) return; - - this.content = hs.getCacheBinding(this.a); - if (!this.content) - this.content = hs.getNode(this.contentId); - if (!this.content) - this.content = hs.getSelfRendered(); - this.getInline(['maincontent']); - if (this.maincontent) { - var body = hs.getElementByClass(this.content, 'div', 'highslide-body'); - if (body) body.appendChild(this.maincontent); - this.maincontent.style.display = 'block'; - } - hs.fireEvent(this, 'onAfterGetContent'); - - var innerContent = this.innerContent = this.content; - - if (/(swf|iframe)/.test(this.objectType)) this.setObjContainerSize(innerContent); - - // the content tree - hs.container.appendChild(this.wrapper); - hs.setStyles( this.wrapper, { - position: 'static', - padding: '0 '+ hs.marginRight +'px 0 '+ hs.marginLeft +'px' - }); - this.content = hs.createElement( - 'div', { - className: 'highslide-html' - }, { - position: 'relative', - zIndex: 3, - height: 0, - overflow: 'hidden' - }, - this.wrapper - ); - this.mediumContent = hs.createElement('div', null, null, this.content, 1); - this.mediumContent.appendChild(innerContent); - - hs.setStyles (innerContent, { - position: 'relative', - display: 'block', - direction: hs.lang.cssDirection || '' - }); - if (this.width) innerContent.style.width = this.width +'px'; - if (this.height) hs.setStyles(innerContent, { - height: this.height +'px', - overflow: 'hidden' - }); - if (innerContent.offsetWidth < this.minWidth) - innerContent.style.width = this.minWidth +'px'; - - - - if (this.objectType == 'ajax' && !hs.getCacheBinding(this.a)) { - this.showLoading(); - var exp = this; - var ajax = new hs.Ajax(this.a, innerContent); - ajax.src = this.src; - ajax.onLoad = function () { if (hs.expanders[exp.key]) exp.contentLoaded(); }; - ajax.onError = function () { location.href = exp.src; }; - ajax.run(); - } - else - - if (this.objectType == 'iframe' && this.objectLoadTime == 'before') { - this.writeExtendedContent(); - } - else - this.contentLoaded(); -}, - -contentLoaded : function() { - try { - if (!this.content) return; - this.content.onload = null; - if (this.onLoadStarted) return; - else this.onLoadStarted = true; - - var x = this.x, y = this.y; - - if (this.loading) { - hs.setStyles(this.loading, { top: '-9999px' }); - this.loading = null; - hs.fireEvent(this, 'onHideLoading'); - } - if (this.isImage) { - x.full = this.content.width; - y.full = this.content.height; - - hs.setStyles(this.content, { - width: x.t +'px', - height: y.t +'px' - }); - this.wrapper.appendChild(this.content); - hs.container.appendChild(this.wrapper); - } else if (this.htmlGetSize) this.htmlGetSize(); - - x.calcBorders(); - y.calcBorders(); - - hs.setStyles (this.wrapper, { - left: (x.tpos + x.tb - x.cb) +'px', - top: (y.tpos + x.tb - y.cb) +'px' - }); - - - this.initSlideshow(); - this.getOverlays(); - - var ratio = x.full / y.full; - x.calcExpanded(); - this.justify(x); - - y.calcExpanded(); - this.justify(y); - if (this.isHtml) this.htmlSizeOperations(); - if (this.overlayBox) this.sizeOverlayBox(0, 1); - - - if (this.allowSizeReduction) { - if (this.isImage) - this.correctRatio(ratio); - else this.fitOverlayBox(); - var ss = this.slideshow; - if (ss && this.last && ss.controls && ss.fixedControls) { - var pos = ss.overlayOptions.position || '', p; - for (var dim in hs.oPos) for (var i = 0; i < 5; i++) { - p = this[dim]; - if (pos.match(hs.oPos[dim][i])) { - p.pos = this.last[dim].pos - + (this.last[dim].p1 - p.p1) - + (this.last[dim].size - p.size) * [0, 0, .5, 1, 1][i]; - if (ss.fixedControls == 'fit') { - if (p.pos + p.size + p.p1 + p.p2 > p.scroll + p.clientSize - p.marginMax) - p.pos = p.scroll + p.clientSize - p.size - p.marginMin - p.marginMax - p.p1 - p.p2; - if (p.pos < p.scroll + p.marginMin) p.pos = p.scroll + p.marginMin; - } - } - } - } - if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { - this.createFullExpand(); - if (this.overlays.length == 1) this.sizeOverlayBox(); - } - } - this.show(); - - } catch (e) { - this.error(e); - } -}, - - -setObjContainerSize : function(parent, auto) { - var c = hs.getElementByClass(parent, 'DIV', 'highslide-body'); - if (/(iframe|swf)/.test(this.objectType)) { - if (this.objectWidth) c.style.width = this.objectWidth +'px'; - if (this.objectHeight) c.style.height = this.objectHeight +'px'; - } -}, - -writeExtendedContent : function () { - if (this.hasExtendedContent) return; - var exp = this; - this.body = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); - if (this.objectType == 'iframe') { - this.showLoading(); - var ruler = hs.clearing.cloneNode(1); - this.body.appendChild(ruler); - this.newWidth = this.innerContent.offsetWidth; - if (!this.objectWidth) this.objectWidth = ruler.offsetWidth; - var hDiff = this.innerContent.offsetHeight - this.body.offsetHeight, - h = this.objectHeight || hs.page.height - hDiff - hs.marginTop - hs.marginBottom, - onload = this.objectLoadTime == 'before' ? - ' onload="if (hs.expanders['+ this.key +']) hs.expanders['+ this.key +'].contentLoaded()" ' : ''; - this.body.innerHTML += '<iframe name="hs'+ (new Date()).getTime() +'" frameborder="0" key="'+ this.key +'" ' - +' style="width:'+ this.objectWidth +'px; height:'+ h +'px" ' - + onload +' src="'+ this.src +'" ></iframe>'; - this.ruler = this.body.getElementsByTagName('div')[0]; - this.iframe = this.body.getElementsByTagName('iframe')[0]; - - if (this.objectLoadTime == 'after') this.correctIframeSize(); - - } - if (this.objectType == 'swf') { - this.body.id = this.body.id || 'hs-flash-id-' + this.key; - var a = this.swfOptions; - if (!a.params) a.params = {}; - if (typeof a.params.wmode == 'undefined') a.params.wmode = 'transparent'; - if (swfobject) swfobject.embedSWF(this.src, this.body.id, this.objectWidth, this.objectHeight, - a.version || '7', a.expressInstallSwfurl, a.flashvars, a.params, a.attributes); - } - this.hasExtendedContent = true; -}, -htmlGetSize : function() { - if (this.iframe && !this.objectHeight) { // loadtime before - this.iframe.style.height = this.body.style.height = this.getIframePageHeight() +'px'; - } - this.innerContent.appendChild(hs.clearing); - if (!this.x.full) this.x.full = this.innerContent.offsetWidth; - this.y.full = this.innerContent.offsetHeight; - this.innerContent.removeChild(hs.clearing); - if (hs.ie && this.newHeight > parseInt(this.innerContent.currentStyle.height)) { // ie css bug - this.newHeight = parseInt(this.innerContent.currentStyle.height); - } - hs.setStyles( this.wrapper, { position: 'absolute', padding: '0'}); - hs.setStyles( this.content, { width: this.x.t +'px', height: this.y.t +'px'}); - -}, - -getIframePageHeight : function() { - var h; - try { - var doc = this.iDoc = this.iframe.contentDocument || this.iframe.contentWindow.document; - var clearing = doc.createElement('div'); - clearing.style.clear = 'both'; - doc.body.appendChild(clearing); - h = clearing.offsetTop; - if (hs.ie) h += parseInt(doc.body.currentStyle.marginTop) - + parseInt(doc.body.currentStyle.marginBottom) - 1; - } catch (e) { // other domain - h = 300; - } - return h; -}, -correctIframeSize : function () { - var wDiff = this.innerContent.offsetWidth - this.ruler.offsetWidth; - hs.discardElement(this.ruler); - if (wDiff < 0) wDiff = 0; - - var hDiff = this.innerContent.offsetHeight - this.iframe.offsetHeight; - if (this.iDoc && !this.objectHeight && !this.height && this.y.size == this.y.full) try { - this.iDoc.body.style.overflow = 'hidden'; - } catch (e) {} - hs.setStyles(this.iframe, { - width: Math.abs(this.x.size - wDiff) +'px', - height: Math.abs(this.y.size - hDiff) +'px' - }); - hs.setStyles(this.body, { - width: this.iframe.style.width, - height: this.iframe.style.height - }); - - this.scrollingContent = this.iframe; - this.scrollerDiv = this.scrollingContent; - -}, -htmlSizeOperations : function () { - - this.setObjContainerSize(this.innerContent); - - - if (this.objectType == 'swf' && this.objectLoadTime == 'before') this.writeExtendedContent(); - - // handle minimum size - if (this.x.size < this.x.full && !this.allowWidthReduction) this.x.size = this.x.full; - if (this.y.size < this.y.full && !this.allowHeightReduction) this.y.size = this.y.full; - this.scrollerDiv = this.innerContent; - hs.setStyles(this.mediumContent, { - position: 'relative', - width: this.x.size +'px' - }); - hs.setStyles(this.innerContent, { - border: 'none', - width: 'auto', - height: 'auto' - }); - var node = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); - if (node && !/(iframe|swf)/.test(this.objectType)) { - var cNode = node; // wrap to get true size - node = hs.createElement(cNode.nodeName, null, {overflow: 'hidden'}, null, true); - cNode.parentNode.insertBefore(node, cNode); - node.appendChild(hs.clearing); // IE6 - node.appendChild(cNode); - - var wDiff = this.innerContent.offsetWidth - node.offsetWidth; - var hDiff = this.innerContent.offsetHeight - node.offsetHeight; - node.removeChild(hs.clearing); - - var kdeBugCorr = hs.safari || navigator.vendor == 'KDE' ? 1 : 0; // KDE repainting bug - hs.setStyles(node, { - width: (this.x.size - wDiff - kdeBugCorr) +'px', - height: (this.y.size - hDiff) +'px', - overflow: 'auto', - position: 'relative' - } - ); - if (kdeBugCorr && cNode.offsetHeight > node.offsetHeight) { - node.style.width = (parseInt(node.style.width) + kdeBugCorr) + 'px'; - } - this.scrollingContent = node; - this.scrollerDiv = this.scrollingContent; - } - if (this.iframe && this.objectLoadTime == 'before') this.correctIframeSize(); - if (!this.scrollingContent && this.y.size < this.mediumContent.offsetHeight) this.scrollerDiv = this.content; - - if (this.scrollerDiv == this.content && !this.allowWidthReduction && !/(iframe|swf)/.test(this.objectType)) { - this.x.size += 17; // room for scrollbars - } - if (this.scrollerDiv && this.scrollerDiv.offsetHeight > this.scrollerDiv.parentNode.offsetHeight) { - setTimeout("try { hs.expanders["+ this.key +"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}", - hs.expandDuration); - } -}, - -getImageMapAreaCorrection : function(area) { - var c = area.coords.split(','); - for (var i = 0; i < c.length; i++) c[i] = parseInt(c[i]); - - if (area.shape.toLowerCase() == 'circle') { - this.x.tpos += c[0] - c[2]; - this.y.tpos += c[1] - c[2]; - this.x.t = this.y.t = 2 * c[2]; - } else { - var maxX, maxY, minX = maxX = c[0], minY = maxY = c[1]; - for (var i = 0; i < c.length; i++) { - if (i % 2 == 0) { - minX = Math.min(minX, c[i]); - maxX = Math.max(maxX, c[i]); - } else { - minY = Math.min(minY, c[i]); - maxY = Math.max(maxY, c[i]); - } - } - this.x.tpos += minX; - this.x.t = maxX - minX; - this.y.tpos += minY; - this.y.t = maxY - minY; - } -}, -justify : function (p, moveOnly) { - var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; - - if (tgt && tgt.match(/ /)) { - tgtArr = tgt.split(' '); - tgt = tgtArr[0]; - } - if (tgt && hs.$(tgt)) { - p.pos = hs.getPosition(hs.$(tgt))[dim]; - if (tgtArr && tgtArr[1] && tgtArr[1].match(/^[-]?[0-9]+px$/)) - p.pos += parseInt(tgtArr[1]); - if (p.size < p.minSize) p.size = p.minSize; - - } else if (p.justify == 'auto' || p.justify == 'center') { - - var hasMovedMin = false; - - var allowReduce = p.exp.allowSizeReduction; - if (p.justify == 'center') - p.pos = Math.round(p.scroll + (p.clientSize + p.marginMin - p.marginMax - p.get('wsize')) / 2); - else - p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2)); - if (p.pos < p.scroll + p.marginMin) { - p.pos = p.scroll + p.marginMin; - hasMovedMin = true; - } - if (!moveOnly && p.size < p.minSize) { - p.size = p.minSize; - allowReduce = false; - } - if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) { - if (!moveOnly && hasMovedMin && allowReduce) { - p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize')); - } else if (p.get('wsize') < p.get('fitsize')) { - p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize'); - } else { // image larger than viewport - p.pos = p.scroll + p.marginMin; - if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); - } - } - - if (!moveOnly && p.size < p.minSize) { - p.size = p.minSize; - allowReduce = false; - } - - - } else if (p.justify == 'max') { - p.pos = Math.floor(p.pos - p.size + p.t); - } - - - if (p.pos < p.marginMin) { - var tmpMin = p.pos; - p.pos = p.marginMin; - - if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); - - } -}, - -correctRatio : function(ratio) { - var x = this.x, - y = this.y, - changed = false, - xSize = Math.min(x.full, x.size), - ySize = Math.min(y.full, y.size), - useBox = (this.useBox || hs.padToMinWidth); - - if (xSize / ySize > ratio) { // width greater - xSize = ySize * ratio; - if (xSize < x.minSize) { // below minWidth - xSize = x.minSize; - ySize = xSize / ratio; - } - changed = true; - - } else if (xSize / ySize < ratio) { // height greater - ySize = xSize / ratio; - changed = true; - } - - if (hs.padToMinWidth && x.full < x.minSize) { - x.imgSize = x.full; - y.size = y.imgSize = y.full; - } else if (this.useBox) { - x.imgSize = xSize; - y.imgSize = ySize; - } else { - x.size = xSize; - y.size = ySize; - } - changed = this.fitOverlayBox(this.useBox ? null : ratio, changed); - if (useBox && y.size < y.imgSize) { - y.imgSize = y.size; - x.imgSize = y.size * ratio; - } - if (changed || useBox) { - x.pos = x.tpos - x.cb + x.tb; - x.minSize = x.size; - this.justify(x, true); - - y.pos = y.tpos - y.cb + y.tb; - y.minSize = y.size; - this.justify(y, true); - if (this.overlayBox) this.sizeOverlayBox(); - } - - -}, -fitOverlayBox : function(ratio, changed) { - var x = this.x, y = this.y; - if (this.overlayBox && (this.isImage || this.allowHeightReduction)) { - while (y.size > this.minHeight && x.size > this.minWidth - && y.get('wsize') > y.get('fitsize')) { - y.size -= 10; - if (ratio) x.size = y.size * ratio; - this.sizeOverlayBox(0, 1); - changed = true; - } - } - return changed; -}, - -reflow : function () { - if (this.scrollerDiv) { - var h = /iframe/i.test(this.scrollerDiv.tagName) ? (this.getIframePageHeight() + 1) +'px' : 'auto'; - if (this.body) this.body.style.height = h; - this.scrollerDiv.style.height = h; - this.y.setSize(this.innerContent.offsetHeight); - } -}, - -show : function () { - var x = this.x, y = this.y; - this.doShowHide('hidden'); - hs.fireEvent(this, 'onBeforeExpand'); - if (this.slideshow && this.slideshow.thumbstrip) this.slideshow.thumbstrip.selectThumb(); - - // Apply size change - this.changeSize( - 1, { - wrapper: { - width : x.get('wsize'), - height : y.get('wsize'), - left: x.pos, - top: y.pos - }, - content: { - left: x.p1 + x.get('imgPad'), - top: y.p1 + y.get('imgPad'), - width:x.imgSize ||x.size, - height:y.imgSize ||y.size - } - }, - hs.expandDuration - ); -}, - -changeSize : function(up, to, dur) { - // transition - var trans = this.transitions, - other = up ? (this.last ? this.last.a : null) : hs.upcoming, - t = (trans[1] && other - && hs.getParam(other, 'transitions')[1] == trans[1]) ? - trans[1] : trans[0]; - - if (this[t] && t != 'expand') { - this[t](up, to); - return; - } - - if (this.outline && !this.outlineWhileAnimating) { - if (up) this.outline.setPosition(); - else this.outline.destroy( - (this.isHtml && this.preserveContent)); - } - - - if (!up) this.destroyOverlays(); - - var exp = this, - x = exp.x, - y = exp.y, - easing = this.easing; - if (!up) easing = this.easingClose || easing; - var after = up ? - function() { - - if (exp.outline) exp.outline.table.style.visibility = "visible"; - setTimeout(function() { - exp.afterExpand(); - }, 50); - } : - function() { - exp.afterClose(); - }; - if (up) hs.setStyles( this.wrapper, { - width: x.t +'px', - height: y.t +'px' - }); - if (up && this.isHtml) { - hs.setStyles(this.wrapper, { - left: (x.tpos - x.cb + x.tb) +'px', - top: (y.tpos - y.cb + y.tb) +'px' - }); - } - if (this.fadeInOut) { - hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); - hs.extend(to.wrapper, { opacity: up }); - } - hs.animate( this.wrapper, to.wrapper, { - duration: dur, - easing: easing, - step: function(val, args) { - if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { - var fac = up ? args.pos : 1 - args.pos; - var pos = { - w: x.t + (x.get('wsize') - x.t) * fac, - h: y.t + (y.get('wsize') - y.t) * fac, - x: x.tpos + (x.pos - x.tpos) * fac, - y: y.tpos + (y.pos - y.tpos) * fac - }; - exp.outline.setPosition(pos, 0, 1); - } - if (exp.isHtml) { - if (args.prop == 'left') - exp.mediumContent.style.left = (x.pos - val) +'px'; - if (args.prop == 'top') - exp.mediumContent.style.top = (y.pos - val) +'px'; - } - } - }); - hs.animate( this.content, to.content, dur, easing, after); - if (up) { - this.wrapper.style.visibility = 'visible'; - this.content.style.visibility = 'visible'; - if (this.isHtml) this.innerContent.style.visibility = 'visible'; - this.a.className += ' highslide-active-anchor'; - } -}, - - - -fade : function(up, to) { - this.outlineWhileAnimating = false; - var exp = this, t = up ? hs.expandDuration : 0; - - if (up) { - hs.animate(this.wrapper, to.wrapper, 0); - hs.setStyles(this.wrapper, { opacity: 0, visibility: 'visible' }); - hs.animate(this.content, to.content, 0); - this.content.style.visibility = 'visible'; - - hs.animate(this.wrapper, { opacity: 1 }, t, null, - function() { exp.afterExpand(); }); - } - - if (this.outline) { - this.outline.table.style.zIndex = this.wrapper.style.zIndex; - var dir = up || -1, - offset = this.outline.offset, - startOff = up ? 3 : offset, - endOff = up? offset : 3; - for (var i = startOff; dir * i <= dir * endOff; i += dir, t += 25) { - (function() { - var o = up ? endOff - i : startOff - i; - setTimeout(function() { - exp.outline.setPosition(0, o, 1); - }, t); - })(); - } - } - - - if (up) {}//setTimeout(function() { exp.afterExpand(); }, t+50); - else { - setTimeout( function() { - if (exp.outline) exp.outline.destroy(exp.preserveContent); - - exp.destroyOverlays(); - - hs.animate( exp.wrapper, { opacity: 0 }, hs.restoreDuration, null, function(){ - exp.afterClose(); - }); - }, t); - } -}, -crossfade : function (up, to, from) { - if (!up) return; - var exp = this, - last = this.last, - x = this.x, - y = this.y, - lastX = last.x, - lastY = last.y, - wrapper = this.wrapper, - content = this.content, - overlayBox = this.overlayBox; - hs.removeEventListener(document, 'mousemove', hs.dragHandler); - - hs.setStyles(content, { - width: (x.imgSize || x.size) +'px', - height: (y.imgSize || y.size) +'px' - }); - if (overlayBox) overlayBox.style.overflow = 'visible'; - this.outline = last.outline; - if (this.outline) this.outline.exp = exp; - last.outline = null; - var fadeBox = hs.createElement('div', { - className: 'highslide-'+ this.contentType - }, { - position: 'absolute', - zIndex: 4, - overflow: 'hidden', - display: 'none' - } - ); - var names = { oldImg: last, newImg: this }; - for (var n in names) { - this[n] = names[n].content.cloneNode(1); - hs.setStyles(this[n], { - position: 'absolute', - border: 0, - visibility: 'visible' - }); - fadeBox.appendChild(this[n]); - } - wrapper.appendChild(fadeBox); - if (this.isHtml) hs.setStyles(this.mediumContent, { - left: 0, - top: 0 - }); - if (overlayBox) { - overlayBox.className = ''; - wrapper.appendChild(overlayBox); - } - fadeBox.style.display = ''; - last.content.style.display = 'none'; - - - if (hs.safari && hs.uaVersion < 525) { - this.wrapper.style.visibility = 'visible'; - } - hs.animate(wrapper, { - width: x.size - }, { - duration: hs.transitionDuration, - step: function(val, args) { - var pos = args.pos, - invPos = 1 - pos; - var prop, - size = {}, - props = ['pos', 'size', 'p1', 'p2']; - for (var n in props) { - prop = props[n]; - size['x'+ prop] = Math.round(invPos * lastX[prop] + pos * x[prop]); - size['y'+ prop] = Math.round(invPos * lastY[prop] + pos * y[prop]); - size.ximgSize = Math.round( - invPos * (lastX.imgSize || lastX.size) + pos * (x.imgSize || x.size)); - size.ximgPad = Math.round(invPos * lastX.get('imgPad') + pos * x.get('imgPad')); - size.yimgSize = Math.round( - invPos * (lastY.imgSize || lastY.size) + pos * (y.imgSize || y.size)); - size.yimgPad = Math.round(invPos * lastY.get('imgPad') + pos * y.get('imgPad')); - } - if (exp.outline) exp.outline.setPosition({ - x: size.xpos, - y: size.ypos, - w: size.xsize + size.xp1 + size.xp2 + 2 * x.cb, - h: size.ysize + size.yp1 + size.yp2 + 2 * y.cb - }); - last.wrapper.style.clip = 'rect(' - + (size.ypos - lastY.pos)+'px, ' - + (size.xsize + size.xp1 + size.xp2 + size.xpos + 2 * lastX.cb - lastX.pos) +'px, ' - + (size.ysize + size.yp1 + size.yp2 + size.ypos + 2 * lastY.cb - lastY.pos) +'px, ' - + (size.xpos - lastX.pos)+'px)'; - - hs.setStyles(content, { - top: (size.yp1 + y.get('imgPad')) +'px', - left: (size.xp1 + x.get('imgPad')) +'px', - marginTop: (y.pos - size.ypos) +'px', - marginLeft: (x.pos - size.xpos) +'px' - }); - hs.setStyles(wrapper, { - top: size.ypos +'px', - left: size.xpos +'px', - width: (size.xp1 + size.xp2 + size.xsize + 2 * x.cb)+ 'px', - height: (size.yp1 + size.yp2 + size.ysize + 2 * y.cb) + 'px' - }); - hs.setStyles(fadeBox, { - width: (size.ximgSize || size.xsize) + 'px', - height: (size.yimgSize || size.ysize) +'px', - left: (size.xp1 + size.ximgPad) +'px', - top: (size.yp1 + size.yimgPad) +'px', - visibility: 'visible' - }); - - hs.setStyles(exp.oldImg, { - top: (lastY.pos - size.ypos + lastY.p1 - size.yp1 + lastY.get('imgPad') - size.yimgPad)+'px', - left: (lastX.pos - size.xpos + lastX.p1 - size.xp1 + lastX.get('imgPad') - size.ximgPad)+'px' - }); - - hs.setStyles(exp.newImg, { - opacity: pos, - top: (y.pos - size.ypos + y.p1 - size.yp1 + y.get('imgPad') - size.yimgPad) +'px', - left: (x.pos - size.xpos + x.p1 - size.xp1 + x.get('imgPad') - size.ximgPad) +'px' - }); - if (overlayBox) hs.setStyles(overlayBox, { - width: size.xsize + 'px', - height: size.ysize +'px', - left: (size.xp1 + x.cb) +'px', - top: (size.yp1 + y.cb) +'px' - }); - }, - complete: function () { - wrapper.style.visibility = content.style.visibility = 'visible'; - content.style.display = 'block'; - hs.discardElement(fadeBox); - exp.afterExpand(); - last.afterClose(); - exp.last = null; - } - - }); -}, -reuseOverlay : function(o, el) { - if (!this.last) return false; - for (var i = 0; i < this.last.overlays.length; i++) { - var oDiv = hs.$('hsId'+ this.last.overlays[i]); - if (oDiv && oDiv.hsId == o.hsId) { - this.genOverlayBox(); - oDiv.reuse = this.key; - hs.push(this.overlays, this.last.overlays[i]); - return true; - } - } - return false; -}, - - -afterExpand : function() { - this.isExpanded = true; - this.focus(); - - if (this.isHtml && this.objectLoadTime == 'after') this.writeExtendedContent(); - if (this.iframe) { - try { - var exp = this, - doc = this.iframe.contentDocument || this.iframe.contentWindow.document; - hs.addEventListener(doc, 'mousedown', function () { - if (hs.focusKey != exp.key) exp.focus(); - }); - } catch(e) {} - if (hs.ie && typeof this.isClosing != 'boolean') // first open - this.iframe.style.width = (this.objectWidth - 1) +'px'; // hasLayout - } - if (this.dimmingOpacity) hs.dim(this); - if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null; - this.prepareNextOutline(); - var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; - this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') - && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); - if (this.overlayBox) this.showOverlays(); - hs.fireEvent(this, 'onAfterExpand'); - -}, - - -prepareNextOutline : function() { - var key = this.key; - var outlineType = this.outlineType; - new hs.Outline(outlineType, - function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); -}, - - -preloadNext : function() { - var next = this.getAdjacentAnchor(1); - if (next && next.onclick.toString().match(/hs\.expand/)) - var img = hs.createElement('img', { src: hs.getSrc(next) }); -}, - - -getAdjacentAnchor : function(op) { - var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; - if (as && !as[current + op] && this.slideshow && this.slideshow.repeat) { - if (op == 1) return as[0]; - else if (op == -1) return as[as.length-1]; - } - return (as && as[current + op]) || null; -}, - -getAnchorIndex : function() { - var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; - if (arr) for (var i = 0; i < arr.length; i++) { - if (arr[i] == this.a) return i; - } - return null; -}, - - -getNumber : function() { - if (this[this.numberPosition]) { - var arr = hs.anchors.groups[this.slideshowGroup || 'none']; - if (arr) { - var s = hs.lang.number.replace('%1', this.getAnchorIndex() + 1).replace('%2', arr.length); - this[this.numberPosition].innerHTML = - '<div class="highslide-number">'+ s +'</div>'+ this[this.numberPosition].innerHTML; - } - } -}, -initSlideshow : function() { - if (!this.last) { - for (var i = 0; i < hs.slideshows.length; i++) { - var ss = hs.slideshows[i], sg = ss.slideshowGroup; - if (typeof sg == 'undefined' || sg === null || sg === this.slideshowGroup) - this.slideshow = new hs.Slideshow(this.key, ss); - } - } else { - this.slideshow = this.last.slideshow; - } - var ss = this.slideshow; - if (!ss) return; - var key = ss.expKey = this.key; - - ss.checkFirstAndLast(); - ss.disable('full-expand'); - if (ss.controls) { - this.createOverlay(hs.extend(ss.overlayOptions || {}, { - overlayId: ss.controls, - hsId: 'controls', - zIndex: 5 - })); - } - if (ss.thumbstrip) ss.thumbstrip.add(this); - if (!this.last && this.autoplay) ss.play(true); - if (ss.autoplay) { - ss.autoplay = setTimeout(function() { - hs.next(key); - }, (ss.interval || 500)); - } -}, - -cancelLoading : function() { - hs.discardElement (this.wrapper); - hs.expanders[this.key] = null; - if (hs.upcoming == this.a) hs.upcoming = null; - hs.undim(this.key); - if (this.loading) hs.loading.style.left = '-9999px'; - hs.fireEvent(this, 'onHideLoading'); -}, - -writeCredits : function () { - if (this.credits) return; - this.credits = hs.createElement('a', { - href: hs.creditsHref, - target: hs.creditsTarget, - className: 'highslide-credits', - innerHTML: hs.lang.creditsText, - title: hs.lang.creditsTitle - }); - this.createOverlay({ - overlayId: this.credits, - position: this.creditsPosition || 'top left', - hsId: 'credits' - }); -}, - -getInline : function(types, addOverlay) { - for (var i = 0; i < types.length; i++) { - var type = types[i], s = null; - if (type == 'caption' && !hs.fireEvent(this, 'onBeforeGetCaption')) return; - else if (type == 'heading' && !hs.fireEvent(this, 'onBeforeGetHeading')) return; - if (!this[type +'Id'] && this.thumbsUserSetId) - this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId; - if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']); - if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { - s = eval(this[type +'Eval']); - } catch (e) {} - if (!this[type] && this[type +'Text']) { - s = this[type +'Text']; - } - if (!this[type] && !s) { - this[type] = hs.getNode(this.a['_'+ type + 'Id']); - if (!this[type]) { - var next = this.a.nextSibling; - while (next && !hs.isHsAnchor(next)) { - if ((new RegExp('highslide-'+ type)).test(next.className || null)) { - if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; - this[type] = hs.getNode(next.id); - break; - } - next = next.nextSibling; - } - } - } - if (!this[type] && !s && this.numberPosition == type) s = '\n'; - - if (!this[type] && s) this[type] = hs.createElement('div', - { className: 'highslide-'+ type, innerHTML: s } ); - - if (addOverlay && this[type]) { - var o = { position: (type == 'heading') ? 'above' : 'below' }; - for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; - o.overlayId = this[type]; - this.createOverlay(o); - } - } -}, - - -// on end move and resize -doShowHide : function(visibility) { - if (hs.hideSelects) this.showHideElements('SELECT', visibility); - if (hs.hideIframes) this.showHideElements('IFRAME', visibility); - if (hs.geckoMac) this.showHideElements('*', visibility); -}, -showHideElements : function (tagName, visibility) { - var els = document.getElementsByTagName(tagName); - var prop = tagName == '*' ? 'overflow' : 'visibility'; - for (var i = 0; i < els.length; i++) { - if (prop == 'visibility' || (document.defaultView.getComputedStyle( - els[i], "").getPropertyValue('overflow') == 'auto' - || els[i].getAttribute('hidden-by') != null)) { - var hiddenBy = els[i].getAttribute('hidden-by'); - if (visibility == 'visible' && hiddenBy) { - hiddenBy = hiddenBy.replace('['+ this.key +']', ''); - els[i].setAttribute('hidden-by', hiddenBy); - if (!hiddenBy) els[i].style[prop] = els[i].origProp; - } else if (visibility == 'hidden') { // hide if behind - var elPos = hs.getPosition(els[i]); - elPos.w = els[i].offsetWidth; - elPos.h = els[i].offsetHeight; - if (!this.dimmingOpacity) { // hide all if dimming - - var clearsX = (elPos.x + elPos.w < this.x.get('opos') - || elPos.x > this.x.get('opos') + this.x.get('osize')); - var clearsY = (elPos.y + elPos.h < this.y.get('opos') - || elPos.y > this.y.get('opos') + this.y.get('osize')); - } - var wrapperKey = hs.getWrapperKey(els[i]); - if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image - if (!hiddenBy) { - els[i].setAttribute('hidden-by', '['+ this.key +']'); - els[i].origProp = els[i].style[prop]; - els[i].style[prop] = 'hidden'; - - } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { - els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); - } - } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) - && wrapperKey != this.key) { // on move - els[i].setAttribute('hidden-by', ''); - els[i].style[prop] = els[i].origProp || ''; - } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { - els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); - } - - } - } - } -}, - -focus : function() { - this.wrapper.style.zIndex = hs.zIndexCounter += 2; - // blur others - for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && i == hs.focusKey) { - var blurExp = hs.expanders[i]; - blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; - if (blurExp.isImage) { - blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; - blurExp.content.title = hs.lang.focusTitle; - } - hs.fireEvent(blurExp, 'onBlur'); - } - } - - // focus this - if (this.outline) this.outline.table.style.zIndex - = this.wrapper.style.zIndex - 1; - this.content.className = 'highslide-'+ this.contentType; - if (this.isImage) { - this.content.title = hs.lang.restoreTitle; - - if (hs.restoreCursor) { - hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; - if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; - this.content.style.cursor = hs.styleRestoreCursor; - } - } - hs.focusKey = this.key; - hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - hs.fireEvent(this, 'onFocus'); -}, -moveTo: function(x, y) { - this.x.setPos(x); - this.y.setPos(y); -}, -resize : function (e) { - var w, h, r = e.width / e.height; - w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); - if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full; - h = this.isHtml ? e.height + e.dY : w / r; - if (h < Math.min(this.minHeight, this.y.full)) { - h = Math.min(this.minHeight, this.y.full); - if (this.isImage) w = h * r; - } - this.resizeTo(w, h); -}, -resizeTo: function(w, h) { - this.y.setSize(h); - this.x.setSize(w); - this.wrapper.style.height = this.y.get('wsize') +'px'; -}, - -close : function() { - if (this.isClosing || !this.isExpanded) return; - if (this.transitions[1] == 'crossfade' && hs.upcoming) { - hs.getExpander(hs.upcoming).cancelLoading(); - hs.upcoming = null; - } - if (!hs.fireEvent(this, 'onBeforeClose')) return; - this.isClosing = true; - if (this.slideshow && !hs.upcoming) this.slideshow.pause(); - - hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - - try { - if (this.isHtml) this.htmlPrepareClose(); - this.content.style.cursor = 'default'; - this.changeSize( - 0, { - wrapper: { - width : this.x.t, - height : this.y.t, - left: this.x.tpos - this.x.cb + this.x.tb, - top: this.y.tpos - this.y.cb + this.y.tb - }, - content: { - left: 0, - top: 0, - width: this.x.t, - height: this.y.t - } - }, hs.restoreDuration - ); - } catch (e) { this.afterClose(); } -}, - -htmlPrepareClose : function() { - if (hs.geckoMac) { // bad redraws - if (!hs.mask) hs.mask = hs.createElement('div', null, - { position: 'absolute' }, hs.container); - hs.setStyles(hs.mask, { width: this.x.size +'px', height: this.y.size +'px', - left: this.x.pos +'px', top: this.y.pos +'px', display: 'block' }); - } - if (this.objectType == 'swf') try { hs.$(this.body.id).StopPlay(); } catch (e) {} - - if (this.objectLoadTime == 'after' && !this.preserveContent) this.destroyObject(); - if (this.scrollerDiv && this.scrollerDiv != this.scrollingContent) - this.scrollerDiv.style.overflow = 'hidden'; -}, - -destroyObject : function () { - if (hs.ie && this.iframe) - try { this.iframe.contentWindow.document.body.innerHTML = ''; } catch (e) {} - if (this.objectType == 'swf') swfobject.removeSWF(this.body.id); - this.body.innerHTML = ''; -}, - -sleep : function() { - if (this.outline) this.outline.table.style.display = 'none'; - this.releaseMask = null; - this.wrapper.style.display = 'none'; - this.isExpanded = false; - hs.push(hs.sleeping, this); -}, - -awake : function() {try { - - hs.expanders[this.key] = this; - - if (!hs.allowMultipleInstances &&hs.focusKey != this.key) { - try { hs.expanders[hs.focusKey].close(); } catch (e){} - } - - var z = hs.zIndexCounter++, stl = { display: '', zIndex: z }; - hs.setStyles (this.wrapper, stl); - this.isClosing = false; - - var o = this.outline || 0; - if (o) { - if (!this.outlineWhileAnimating) stl.visibility = 'hidden'; - hs.setStyles (o.table, stl); - } - if (this.slideshow) { - this.initSlideshow(); - } - - this.show(); -} catch (e) {} - - -}, - -createOverlay : function (o) { - var el = o.overlayId, - relToVP = (o.relativeTo == 'viewport' && !/panel$/.test(o.position)); - if (typeof el == 'string') el = hs.getNode(el); - if (o.html) el = hs.createElement('div', { innerHTML: o.html }); - if (!el || typeof el == 'string') return; - if (!hs.fireEvent(this, 'onCreateOverlay', { overlay: el })) return; - el.style.display = 'block'; - o.hsId = o.hsId || o.overlayId; - if (this.transitions[1] == 'crossfade' && this.reuseOverlay(o, el)) return; - this.genOverlayBox(); - var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto'; - if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; - var overlay = hs.createElement( - 'div', { - id: 'hsId'+ hs.idCounter++, - hsId: o.hsId - }, { - position: 'absolute', - visibility: 'hidden', - width: width, - direction: hs.lang.cssDirection || '', - opacity: 0 - }, - relToVP ? hs.viewport :this.overlayBox, - true - ); - if (relToVP) overlay.hsKey = this.key; - - overlay.appendChild(el); - hs.extend(overlay, { - opacity: 1, - offsetX: 0, - offsetY: 0, - dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 - }); - hs.extend(overlay, o); - - - if (this.gotOverlays) { - this.positionOverlay(overlay); - if (!overlay.hideOnMouseOut || this.mouseIsOver) - hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); - } - hs.push(this.overlays, hs.idCounter - 1); -}, -positionOverlay : function(overlay) { - var p = overlay.position || 'middle center', - relToVP = (overlay.relativeTo == 'viewport'), - offX = overlay.offsetX, - offY = overlay.offsetY; - if (relToVP) { - hs.viewport.style.display = 'block'; - overlay.hsKey = this.key; - if (overlay.offsetWidth > overlay.parentNode.offsetWidth) - overlay.style.width = '100%'; - } else - if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay); - if (/left$/.test(p)) overlay.style.left = offX +'px'; - - if (/center$/.test(p)) hs.setStyles (overlay, { - left: '50%', - marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' - }); - - if (/right$/.test(p)) overlay.style.right = - offX +'px'; - - if (/^leftpanel$/.test(p)) { - hs.setStyles(overlay, { - right: '100%', - marginRight: this.x.cb +'px', - top: - this.y.cb +'px', - bottom: - this.y.cb +'px', - overflow: 'auto' - }); - this.x.p1 = overlay.offsetWidth; - - } else if (/^rightpanel$/.test(p)) { - hs.setStyles(overlay, { - left: '100%', - marginLeft: this.x.cb +'px', - top: - this.y.cb +'px', - bottom: - this.y.cb +'px', - overflow: 'auto' - }); - this.x.p2 = overlay.offsetWidth; - } - var parOff = overlay.parentNode.offsetHeight; - overlay.style.height = 'auto'; - if (relToVP && overlay.offsetHeight > parOff) - overlay.style.height = hs.ieLt7 ? parOff +'px' : '100%'; - - if (/^top/.test(p)) overlay.style.top = offY +'px'; - if (/^middle/.test(p)) hs.setStyles (overlay, { - top: '50%', - marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' - }); - if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px'; - if (/^above$/.test(p)) { - hs.setStyles(overlay, { - left: (- this.x.p1 - this.x.cb) +'px', - right: (- this.x.p2 - this.x.cb) +'px', - bottom: '100%', - marginBottom: this.y.cb +'px', - width: 'auto' - }); - this.y.p1 = overlay.offsetHeight; - - } else if (/^below$/.test(p)) { - hs.setStyles(overlay, { - position: 'relative', - left: (- this.x.p1 - this.x.cb) +'px', - right: (- this.x.p2 - this.x.cb) +'px', - top: '100%', - marginTop: this.y.cb +'px', - width: 'auto' - }); - this.y.p2 = overlay.offsetHeight; - overlay.style.position = 'absolute'; - } -}, - -getOverlays : function() { - this.getInline(['heading', 'caption'], true); - this.getNumber(); - if (this.caption) hs.fireEvent(this, 'onAfterGetCaption'); - if (this.heading) hs.fireEvent(this, 'onAfterGetHeading'); - if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move'; - if (hs.showCredits) this.writeCredits(); - for (var i = 0; i < hs.overlays.length; i++) { - var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; - if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) - || (sg && sg === this.slideshowGroup)) { - if (this.isImage || (this.isHtml && o.useOnHtml)) - this.createOverlay(o); - } - } - var os = []; - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - if (/panel$/.test(o.position)) this.positionOverlay(o); - else hs.push(os, o); - } - for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); - this.gotOverlays = true; -}, -genOverlayBox : function() { - if (!this.overlayBox) this.overlayBox = hs.createElement ( - 'div', { - className: this.wrapperClassName - }, { - position : 'absolute', - width: (this.x.size || (this.useBox ? this.width : null) - || this.x.full) +'px', - height: (this.y.size || this.y.full) +'px', - visibility : 'hidden', - overflow : 'hidden', - zIndex : hs.ie ? 4 : 'auto' - }, - hs.container, - true - ); -}, -sizeOverlayBox : function(doWrapper, doPanels) { - var overlayBox = this.overlayBox, - x = this.x, - y = this.y; - hs.setStyles( overlayBox, { - width: x.size +'px', - height: y.size +'px' - }); - if (doWrapper || doPanels) { - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); - if (o && /^(above|below)$/.test(o.position)) { - if (ie6) { - o.style.width = (overlayBox.offsetWidth + 2 * x.cb - + x.p1 + x.p2) +'px'; - } - y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; - } - if (o && ie6 && /^(left|right)panel$/.test(o.position)) { - o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; - } - } - } - if (doWrapper) { - hs.setStyles(this.content, { - top: y.p1 +'px' - }); - hs.setStyles(overlayBox, { - top: (y.p1 + y.cb) +'px' - }); - } -}, - -showOverlays : function() { - var b = this.overlayBox; - b.className = ''; - hs.setStyles(b, { - top: (this.y.p1 + this.y.cb) +'px', - left: (this.x.p1 + this.x.cb) +'px', - overflow : 'visible' - }); - if (hs.safari) b.style.visibility = 'visible'; - this.wrapper.appendChild (b); - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - o.style.zIndex = o.zIndex || 4; - if (!o.hideOnMouseOut || this.mouseIsOver) { - o.style.visibility = 'visible'; - hs.setStyles(o, { visibility: 'visible', display: '' }); - hs.animate(o, { opacity: o.opacity }, o.dur); - } - } -}, - -destroyOverlays : function() { - if (!this.overlays.length) return; - if (this.slideshow) { - var c = this.slideshow.controls; - if (c && hs.getExpander(c) == this) c.parentNode.removeChild(c); - } - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - if (o && o.parentNode == hs.viewport && hs.getExpander(o) == this) hs.discardElement(o); - } - if (this.isHtml && this.preserveContent) { - this.overlayBox.style.top = '-9999px'; - hs.container.appendChild(this.overlayBox); - } else - hs.discardElement(this.overlayBox); -}, - - - -createFullExpand : function () { - if (this.slideshow && this.slideshow.controls) { - this.slideshow.enable('full-expand'); - return; - } - this.fullExpandLabel = hs.createElement( - 'a', { - href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', - title: hs.lang.fullExpandTitle, - className: 'highslide-full-expand' - } - ); - if (!hs.fireEvent(this, 'onCreateFullExpand')) return; - - this.createOverlay({ - overlayId: this.fullExpandLabel, - position: hs.fullExpandPosition, - hideOnMouseOut: true, - opacity: hs.fullExpandOpacity - }); -}, - -doFullExpand : function () { - try { - if (!hs.fireEvent(this, 'onDoFullExpand')) return; - if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); - - this.focus(); - var xSize = this.x.size, - ySize = this.y.size; - this.resizeTo(this.x.full, this.y.full); - - var xpos = this.x.pos - (this.x.size - xSize) / 2; - if (xpos < hs.marginLeft) xpos = hs.marginLeft; - - var ypos = this.y.pos - (this.y.size - ySize) / 2; - if (ypos < hs.marginTop) ypos = hs.marginTop; - - this.moveTo(xpos, ypos); - this.doShowHide('hidden'); - - } catch (e) { - this.error(e); - } -}, - - -afterClose : function () { - this.a.className = this.a.className.replace('highslide-active-anchor', ''); - - this.doShowHide('visible'); - - if (this.isHtml && this.preserveContent - && this.transitions[1] != 'crossfade') { - this.sleep(); - } else { - if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); - - hs.discardElement(this.wrapper); - } - if (hs.mask) hs.mask.style.display = 'none'; - this.destroyOverlays(); - if (!hs.viewport.childNodes.length) hs.viewport.style.display = 'none'; - - if (this.dimmingOpacity) hs.undim(this.key); - hs.fireEvent(this, 'onAfterClose'); - hs.expanders[this.key] = null; - hs.reOrder(); -} - -}; - - -// hs.Ajax object prototype -hs.Ajax = function (a, content, pre) { - this.a = a; - this.content = content; - this.pre = pre; -}; - -hs.Ajax.prototype = { -run : function () { - var xhr; - if (!this.src) this.src = hs.getSrc(this.a); - if (this.src.match('#')) { - var arr = this.src.split('#'); - this.src = arr[0]; - this.id = arr[1]; - } - if (hs.cachedGets[this.src]) { - this.cachedGet = hs.cachedGets[this.src]; - if (this.id) this.getElementContent(); - else this.loadHTML(); - return; - } - try { xhr = new XMLHttpRequest(); } - catch (e) { - try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } - catch (e) { - try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } - catch (e) { this.onError(); } - } - } - var pThis = this; - xhr.onreadystatechange = function() { - if(pThis.xhr.readyState == 4) { - if (pThis.id) pThis.getElementContent(); - else pThis.loadHTML(); - } - }; - var src = this.src; - this.xhr = xhr; - if (hs.forceAjaxReload) - src = src.replace(/$/, (/\?/.test(src) ? '&' : '?') +'dummy='+ (new Date()).getTime()); - xhr.open('GET', src, true); - xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.send(null); -}, - -getElementContent : function() { - hs.init(); - var attribs = window.opera || hs.ie6SSL ? { src: 'about:blank' } : null; - - this.iframe = hs.createElement('iframe', attribs, - { position: 'absolute', top: '-9999px' }, hs.container); - - this.loadHTML(); -}, - -loadHTML : function() { - var s = this.cachedGet || this.xhr.responseText, - regBody; - if (this.pre) hs.cachedGets[this.src] = s; - if (!hs.ie || hs.uaVersion >= 5.5) { - s = s.replace(new RegExp('<link[^>]*>', 'gi'), '') - .replace(new RegExp('<script[^>]*>.*?</script>', 'gi'), ''); - if (this.iframe) { - var doc = this.iframe.contentDocument; - if (!doc && this.iframe.contentWindow) doc = this.iframe.contentWindow.document; - if (!doc) { // Opera - var pThis = this; - setTimeout(function() { pThis.loadHTML(); }, 25); - return; - } - doc.open(); - doc.write(s); - doc.close(); - try { s = doc.getElementById(this.id).innerHTML; } catch (e) { - try { s = this.iframe.document.getElementById(this.id).innerHTML; } catch (e) {} // opera - } - hs.discardElement(this.iframe); - } else { - regBody = /(<body[^>]*>|<\/body>)/ig; - if (regBody.test(s)) s = s.split(regBody)[hs.ieLt9 ? 1 : 2]; - - } - } - hs.getElementByClass(this.content, 'DIV', 'highslide-body').innerHTML = s; - this.onLoad(); - for (var x in this) this[x] = null; -} -}; - - -hs.Slideshow = function (expKey, options) { - if (hs.dynamicallyUpdateAnchors !== false) hs.updateAnchors(); - this.expKey = expKey; - for (var x in options) this[x] = options[x]; - if (this.useControls) this.getControls(); - if (this.thumbstrip) this.thumbstrip = hs.Thumbstrip(this); -}; -hs.Slideshow.prototype = { -getControls: function() { - this.controls = hs.createElement('div', { innerHTML: hs.replaceLang(hs.skin.controls) }, - null, hs.container); - - var buttons = ['play', 'pause', 'previous', 'next', 'move', 'full-expand', 'close']; - this.btn = {}; - var pThis = this; - for (var i = 0; i < buttons.length; i++) { - this.btn[buttons[i]] = hs.getElementByClass(this.controls, 'li', 'highslide-'+ buttons[i]); - this.enable(buttons[i]); - } - this.btn.pause.style.display = 'none'; - //this.disable('full-expand'); -}, -checkFirstAndLast: function() { - if (this.repeat || !this.controls) return; - var exp = hs.expanders[this.expKey], - cur = exp.getAnchorIndex(), - re = /disabled$/; - if (cur == 0) - this.disable('previous'); - else if (re.test(this.btn.previous.getElementsByTagName('a')[0].className)) - this.enable('previous'); - if (cur + 1 == hs.anchors.groups[exp.slideshowGroup || 'none'].length) { - this.disable('next'); - this.disable('play'); - } else if (re.test(this.btn.next.getElementsByTagName('a')[0].className)) { - this.enable('next'); - this.enable('play'); - } -}, -enable: function(btn) { - if (!this.btn) return; - var sls = this, a = this.btn[btn].getElementsByTagName('a')[0], re = /disabled$/; - a.onclick = function() { - sls[btn](); - return false; - }; - if (re.test(a.className)) a.className = a.className.replace(re, ''); -}, -disable: function(btn) { - if (!this.btn) return; - var a = this.btn[btn].getElementsByTagName('a')[0]; - a.onclick = function() { return false; }; - if (!/disabled$/.test(a.className)) a.className += ' disabled'; -}, -hitSpace: function() { - if (this.autoplay) this.pause(); - else this.play(); -}, -play: function(wait) { - if (this.btn) { - this.btn.play.style.display = 'none'; - this.btn.pause.style.display = ''; - } - - this.autoplay = true; - if (!wait) hs.next(this.expKey); -}, -pause: function() { - if (this.btn) { - this.btn.pause.style.display = 'none'; - this.btn.play.style.display = ''; - } - - clearTimeout(this.autoplay); - this.autoplay = null; -}, -previous: function() { - this.pause(); - hs.previous(this.btn.previous); -}, -next: function() { - this.pause(); - hs.next(this.btn.next); -}, -move: function() {}, -'full-expand': function() { - hs.getExpander().doFullExpand(); -}, -close: function() { - hs.close(this.btn.close); -} -}; -hs.Thumbstrip = function(slideshow) { - function add (exp) { - hs.extend(options || {}, { - overlayId: dom, - hsId: 'thumbstrip', - className: 'highslide-thumbstrip-'+ mode +'-overlay ' + (options.className || '') - }); - if (hs.ieLt7) options.fade = 0; - exp.createOverlay(options); - hs.setStyles(dom.parentNode, { overflow: 'hidden' }); - }; - - function scroll (delta) { - selectThumb(undefined, Math.round(delta * dom[isX ? 'offsetWidth' : 'offsetHeight'] * 0.7)); - }; - - function selectThumb (i, scrollBy) { - if (i === undefined) for (var j = 0; j < group.length; j++) { - if (group[j] == hs.expanders[slideshow.expKey].a) { - i = j; - break; - } - } - if (i === undefined) return; - var as = dom.getElementsByTagName('a'), - active = as[i], - cell = active.parentNode, - left = isX ? 'Left' : 'Top', - right = isX ? 'Right' : 'Bottom', - width = isX ? 'Width' : 'Height', - offsetLeft = 'offset' + left, - offsetWidth = 'offset' + width, - overlayWidth = div.parentNode.parentNode[offsetWidth], - minTblPos = overlayWidth - table[offsetWidth], - curTblPos = parseInt(table.style[isX ? 'left' : 'top']) || 0, - tblPos = curTblPos, - mgnRight = 20; - if (scrollBy !== undefined) { - tblPos = curTblPos - scrollBy; - - if (minTblPos > 0) minTblPos = 0; - if (tblPos > 0) tblPos = 0; - if (tblPos < minTblPos) tblPos = minTblPos; - - - } else { - for (var j = 0; j < as.length; j++) as[j].className = ''; - active.className = 'highslide-active-anchor'; - var activeLeft = i > 0 ? as[i - 1].parentNode[offsetLeft] : cell[offsetLeft], - activeRight = cell[offsetLeft] + cell[offsetWidth] + - (as[i + 1] ? as[i + 1].parentNode[offsetWidth] : 0); - if (activeRight > overlayWidth - curTblPos) tblPos = overlayWidth - activeRight; - else if (activeLeft < -curTblPos) tblPos = -activeLeft; - } - var markerPos = cell[offsetLeft] + (cell[offsetWidth] - marker[offsetWidth]) / 2 + tblPos; - hs.animate(table, isX ? { left: tblPos } : { top: tblPos }, null, 'easeOutQuad'); - hs.animate(marker, isX ? { left: markerPos } : { top: markerPos }, null, 'easeOutQuad'); - scrollUp.style.display = tblPos < 0 ? 'block' : 'none'; - scrollDown.style.display = (tblPos > minTblPos) ? 'block' : 'none'; - - }; - - - // initialize - var group = hs.anchors.groups[hs.expanders[slideshow.expKey].slideshowGroup || 'none'], - options = slideshow.thumbstrip, - mode = options.mode || 'horizontal', - floatMode = (mode == 'float'), - tree = floatMode ? ['div', 'ul', 'li', 'span'] : ['table', 'tbody', 'tr', 'td'], - isX = (mode == 'horizontal'), - dom = hs.createElement('div', { - className: 'highslide-thumbstrip highslide-thumbstrip-'+ mode, - innerHTML: - '<div class="highslide-thumbstrip-inner">'+ - '<'+ tree[0] +'><'+ tree[1] +'></'+ tree[1] +'></'+ tree[0] +'></div>'+ - '<div class="highslide-scroll-up"><div></div></div>'+ - '<div class="highslide-scroll-down"><div></div></div>'+ - '<div class="highslide-marker"><div></div></div>' - }, { - display: 'none' - }, hs.container), - domCh = dom.childNodes, - div = domCh[0], - scrollUp = domCh[1], - scrollDown = domCh[2], - marker = domCh[3], - table = div.firstChild, - tbody = dom.getElementsByTagName(tree[1])[0], - tr; - for (var i = 0; i < group.length; i++) { - if (i == 0 || !isX) tr = hs.createElement(tree[2], null, null, tbody); - (function(){ - var a = group[i], - cell = hs.createElement(tree[3], null, null, tr), - pI = i; - hs.createElement('a', { - href: a.href, - title: a.title, - onclick: function() { - if (/highslide-active-anchor/.test(this.className)) return false; - hs.getExpander(this).focus(); - return hs.transit(a); - }, - innerHTML: hs.stripItemFormatter ? hs.stripItemFormatter(a) : a.innerHTML - }, null, cell); - })(); - } - if (!floatMode) { - scrollUp.onclick = function () { scroll(-1); }; - scrollDown.onclick = function() { scroll(1); }; - hs.addEventListener(tbody, document.onmousewheel !== undefined ? - 'mousewheel' : 'DOMMouseScroll', function(e) { - var delta = 0; - e = e || window.event; - if (e.wheelDelta) { - delta = e.wheelDelta/120; - if (hs.opera) delta = -delta; - } else if (e.detail) { - delta = -e.detail/3; - } - if (delta) scroll(-delta * 0.2); - if (e.preventDefault) e.preventDefault(); - e.returnValue = false; - }); - } - - return { - add: add, - selectThumb: selectThumb - } -}; -hs.langDefaults = hs.lang; -// history -var HsExpander = hs.Expander; -if (hs.ie && window == window.top) { - (function () { - try { - document.documentElement.doScroll('left'); - } catch (e) { - setTimeout(arguments.callee, 50); - return; - } - hs.ready(); - })(); -} -hs.addEventListener(document, 'DOMContentLoaded', hs.ready); -hs.addEventListener(window, 'load', hs.ready); - -// set handlers -hs.addEventListener(document, 'ready', function() { - if (hs.expandCursor || hs.dimmingOpacity) { - var style = hs.createElement('style', { type: 'text/css' }, null, - document.getElementsByTagName('HEAD')[0]), - backCompat = document.compatMode == 'BackCompat'; - - - function addRule(sel, dec) { - if (hs.ie && (hs.uaVersion < 9 || backCompat)) { - var last = document.styleSheets[document.styleSheets.length - 1]; - if (typeof(last.addRule) == "object") last.addRule(sel, dec); - } else { - style.appendChild(document.createTextNode(sel + " {" + dec + "}")); - } - } - function fix(prop) { - return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + - ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; - } - if (hs.expandCursor) addRule ('.highslide img', - 'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); - addRule ('.highslide-viewport-size', - hs.ie && (hs.uaVersion < 7 || backCompat) ? - 'position: absolute; '+ - 'left:'+ fix('scrollLeft') + - 'top:'+ fix('scrollTop') + - 'width:'+ fix('clientWidth') + - 'height:'+ fix('clientHeight') : - 'position: fixed; width: 100%; height: 100%; left: 0; top: 0'); - } -}); -hs.addEventListener(window, 'resize', function() { - hs.getPageSize(); - if (hs.viewport) for (var i = 0; i < hs.viewport.childNodes.length; i++) { - var node = hs.viewport.childNodes[i], - exp = hs.getExpander(node); - exp.positionOverlay(node); - if (node.hsId == 'thumbstrip') exp.slideshow.thumbstrip.selectThumb(); - } -}); -hs.addEventListener(document, 'mousemove', function(e) { - hs.mouse = { x: e.clientX, y: e.clientY }; -}); -hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); -hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); -hs.addEventListener(document, 'ready', hs.setClickEvents); -hs.addEventListener(window, 'load', hs.preloadImages); -hs.addEventListener(window, 'load', hs.preloadAjax); -} +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) + * Config: default +events +unobtrusive +imagemap +slideshow +positioning +transitions +viewport +thumbstrip +inline +ajax +iframe +flash + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ +if (!hs) { var hs = { +// Language strings +lang : { + cssDirection: 'ltr', + loadingText : 'Loading...', + loadingTitle : 'Click to cancel', + focusTitle : 'Click to bring to front', + fullExpandTitle : 'Expand to actual size (f)', + creditsText : 'Powered by <i>Highslide JS</i>', + creditsTitle : 'Go to the Highslide JS homepage', + previousText : 'Previous', + nextText : 'Next', + moveText : 'Move', + closeText : 'Close', + closeTitle : 'Close (esc)', + resizeTitle : 'Resize', + playText : 'Play', + playTitle : 'Play slideshow (spacebar)', + pauseText : 'Pause', + pauseTitle : 'Pause slideshow (spacebar)', + previousTitle : 'Previous (arrow left)', + nextTitle : 'Next (arrow right)', + moveTitle : 'Move', + fullExpandText : '1:1', + number: 'Image %1 of %2', + restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' +}, +// See http://highslide.com/ref for examples of settings +graphicsDir : 'highslide/graphics/', +expandCursor : 'zoomin.cur', // null disables +restoreCursor : 'zoomout.cur', // null disables +expandDuration : 250, // milliseconds +restoreDuration : 250, +marginLeft : 15, +marginRight : 15, +marginTop : 15, +marginBottom : 15, +zIndexCounter : 10001, // adjust to other absolutely positioned elements +loadingOpacity : 0.75, +allowMultipleInstances: true, +numberOfImagesToPreload : 5, +outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only +outlineStartOffset : 3, // ends at 10 +padToMinWidth : false, // pad the popup width to make room for wide caption +fullExpandPosition : 'bottom right', +fullExpandOpacity : 1, +showCredits : true, // you can set this to false if you want +creditsHref : 'http://highslide.com/', +creditsTarget : '_self', +enableKeyListener : true, +openerTagNames : ['a', 'area'], // Add more to allow slideshow indexing +transitions : [], +transitionDuration: 250, +dimmingOpacity: 0, // Lightbox style dimming background +dimmingDuration: 50, // 0 for instant dimming + +allowWidthReduction : false, +allowHeightReduction : true, +preserveContent : true, // Preserve changes made to the content and position of HTML popups. +objectLoadTime : 'before', // Load iframes 'before' or 'after' expansion. +cacheAjax : true, // Cache ajax popups for instant display. Can be overridden for each popup. +anchor : 'auto', // where the image expands from +align : 'auto', // position in the client (overrides anchor) +targetX: null, // the id of a target element +targetY: null, +dragByHeading: true, +minWidth: 200, +minHeight: 200, +allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight +outlineType : 'drop-shadow', // set null to disable outlines +skin : { + controls: + '<div class="highslide-controls"><ul>'+ + '<li class="highslide-previous">'+ + '<a href="#" title="{hs.lang.previousTitle}">'+ + '<span>{hs.lang.previousText}</span></a>'+ + '</li>'+ + '<li class="highslide-play">'+ + '<a href="#" title="{hs.lang.playTitle}">'+ + '<span>{hs.lang.playText}</span></a>'+ + '</li>'+ + '<li class="highslide-pause">'+ + '<a href="#" title="{hs.lang.pauseTitle}">'+ + '<span>{hs.lang.pauseText}</span></a>'+ + '</li>'+ + '<li class="highslide-next">'+ + '<a href="#" title="{hs.lang.nextTitle}">'+ + '<span>{hs.lang.nextText}</span></a>'+ + '</li>'+ + '<li class="highslide-move">'+ + '<a href="#" title="{hs.lang.moveTitle}">'+ + '<span>{hs.lang.moveText}</span></a>'+ + '</li>'+ + '<li class="highslide-full-expand">'+ + '<a href="#" title="{hs.lang.fullExpandTitle}">'+ + '<span>{hs.lang.fullExpandText}</span></a>'+ + '</li>'+ + '<li class="highslide-close">'+ + '<a href="#" title="{hs.lang.closeTitle}" >'+ + '<span>{hs.lang.closeText}</span></a>'+ + '</li>'+ + '</ul></div>' + , + contentWrapper: + '<div class="highslide-header"><ul>'+ + '<li class="highslide-previous">'+ + '<a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)">'+ + '<span>{hs.lang.previousText}</span></a>'+ + '</li>'+ + '<li class="highslide-next">'+ + '<a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)">'+ + '<span>{hs.lang.nextText}</span></a>'+ + '</li>'+ + '<li class="highslide-move">'+ + '<a href="#" title="{hs.lang.moveTitle}" onclick="return false">'+ + '<span>{hs.lang.moveText}</span></a>'+ + '</li>'+ + '<li class="highslide-close">'+ + '<a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)">'+ + '<span>{hs.lang.closeText}</span></a>'+ + '</li>'+ + '</ul></div>'+ + '<div class="highslide-body"></div>'+ + '<div class="highslide-footer"><div>'+ + '<span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span>'+ + '</div></div>' +}, +// END OF YOUR SETTINGS + + +// declare internal properties +preloadTheseImages : [], +continuePreloading: true, +expanders : [], +overrides : [ + 'allowSizeReduction', + 'useBox', + 'anchor', + 'align', + 'targetX', + 'targetY', + 'outlineType', + 'outlineWhileAnimating', + 'captionId', + 'captionText', + 'captionEval', + 'captionOverlay', + 'headingId', + 'headingText', + 'headingEval', + 'headingOverlay', + 'creditsPosition', + 'dragByHeading', + 'autoplay', + 'numberPosition', + 'transitions', + 'dimmingOpacity', + + 'width', + 'height', + + 'contentId', + 'allowWidthReduction', + 'allowHeightReduction', + 'preserveContent', + 'maincontentId', + 'maincontentText', + 'maincontentEval', + 'objectType', + 'cacheAjax', + 'objectWidth', + 'objectHeight', + 'objectLoadTime', + 'swfOptions', + 'wrapperClassName', + 'minWidth', + 'minHeight', + 'maxWidth', + 'maxHeight', + 'pageOrigin', + 'slideshowGroup', + 'easing', + 'easingClose', + 'fadeInOut', + 'src' +], +overlays : [], +idCounter : 0, +oPos : { + x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], + y: ['above', 'top', 'middle', 'bottom', 'below'] +}, +mouse: {}, +headingOverlay: {}, +captionOverlay: {}, +swfOptions: { flashvars: {}, params: {}, attributes: {} }, +timers : [], + +slideshows : [], + +pendingOutlines : {}, +sleeping : [], +preloadTheseAjax : [], +cacheBindings : [], +cachedGets : {}, +clones : {}, +onReady: [], +uaVersion: /Trident\/4\.0/.test(navigator.userAgent) ? 8 : + parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), +ie : (document.all && !window.opera), +//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? +safari : /Safari/.test(navigator.userAgent), +geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), + +$ : function (id) { + if (id) return document.getElementById(id); +}, + +push : function (arr, val) { + arr[arr.length] = val; +}, + +createElement : function (tag, attribs, styles, parent, nopad) { + var el = document.createElement(tag); + if (attribs) hs.extend(el, attribs); + if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); + if (styles) hs.setStyles(el, styles); + if (parent) parent.appendChild(el); + return el; +}, + +extend : function (el, attribs) { + for (var x in attribs) el[x] = attribs[x]; + return el; +}, + +setStyles : function (el, styles) { + for (var x in styles) { + if (hs.ieLt9 && x == 'opacity') { + if (styles[x] > 0.99) el.style.removeAttribute('filter'); + else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; + } + else el.style[x] = styles[x]; + } +}, +animate: function(el, prop, opt) { + var start, + end, + unit; + if (typeof opt != 'object' || opt === null) { + var args = arguments; + opt = { + duration: args[2], + easing: args[3], + complete: args[4] + }; + } + if (typeof opt.duration != 'number') opt.duration = 250; + opt.easing = Math[opt.easing] || Math.easeInQuad; + opt.curAnim = hs.extend({}, prop); + for (var name in prop) { + var e = new hs.fx(el, opt , name ); + + start = parseFloat(hs.css(el, name)) || 0; + end = parseFloat(prop[name]); + unit = name != 'opacity' ? 'px' : ''; + + e.custom( start, end, unit ); + } +}, +css: function(el, prop) { + if (el.style[prop]) { + return el.style[prop]; + } else if (document.defaultView) { + return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); + + } else { + if (prop == 'opacity') prop = 'filter'; + var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; + if (prop == 'filter') + val = val.replace(/alpha\(opacity=([0-9]+)\)/, + function (a, b) { return b / 100 }); + return val === '' ? 1 : val; + } +}, + +getPageSize : function () { + var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' + ? d.documentElement : d.body, + ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); + + var width = ieLt9 ? iebody.clientWidth : + (d.documentElement.clientWidth || self.innerWidth), + height = ieLt9 ? iebody.clientHeight : self.innerHeight; + hs.page = { + width: width, + height: height, + scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, + scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset + }; + return hs.page; +}, + +getPosition : function(el) { + if (/area/i.test(el.tagName)) { + var imgs = document.getElementsByTagName('img'); + for (var i = 0; i < imgs.length; i++) { + var u = imgs[i].useMap; + if (u && u.replace(/^.*?#/, '') == el.parentNode.name) { + el = imgs[i]; + break; + } + } + } + var p = { x: el.offsetLeft, y: el.offsetTop }; + while (el.offsetParent) { + el = el.offsetParent; + p.x += el.offsetLeft; + p.y += el.offsetTop; + if (el != document.body && el != document.documentElement) { + p.x -= el.scrollLeft; + p.y -= el.scrollTop; + } + } + return p; +}, + +expand : function(a, params, custom, type) { + if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); + if (typeof a.getParams == 'function') return params; + if (type == 'html') { + for (var i = 0; i < hs.sleeping.length; i++) { + if (hs.sleeping[i] && hs.sleeping[i].a == a) { + hs.sleeping[i].awake(); + hs.sleeping[i] = null; + return false; + } + } + hs.hasHtmlExpanders = true; + } + try { + new hs.Expander(a, params, custom, type); + return false; + } catch (e) { return true; } +}, + +htmlExpand : function(a, params, custom) { + return hs.expand(a, params, custom, 'html'); +}, + +getSelfRendered : function() { + return hs.createElement('div', { + className: 'highslide-html-content', + innerHTML: hs.replaceLang(hs.skin.contentWrapper) + }); +}, +getElementByClass : function (el, tagName, className) { + var els = el.getElementsByTagName(tagName); + for (var i = 0; i < els.length; i++) { + if ((new RegExp(className)).test(els[i].className)) { + return els[i]; + } + } + return null; +}, +replaceLang : function(s) { + s = s.replace(/\s/g, ' '); + var re = /{hs\.lang\.([^}]+)\}/g, + matches = s.match(re), + lang; + if (matches) for (var i = 0; i < matches.length; i++) { + lang = matches[i].replace(re, "$1"); + if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]); + } + return s; +}, + + +setClickEvents : function () { + var els = document.getElementsByTagName('a'); + for (var i = 0; i < els.length; i++) { + var type = hs.isUnobtrusiveAnchor(els[i]); + if (type && !els[i].hsHasSetClick) { + (function(){ + var t = type; + if (hs.fireEvent(hs, 'onSetClickEvent', { element: els[i], type: t })) { + els[i].onclick =(type == 'image') ?function() { return hs.expand(this) }: + function() { return hs.htmlExpand(this, { objectType: t } );}; + } + })(); + els[i].hsHasSetClick = true; + } + } + hs.getAnchors(); +}, +isUnobtrusiveAnchor: function(el) { + if (el.rel == 'highslide') return 'image'; + else if (el.rel == 'highslide-ajax') return 'ajax'; + else if (el.rel == 'highslide-iframe') return 'iframe'; + else if (el.rel == 'highslide-swf') return 'swf'; +}, + +getCacheBinding : function (a) { + for (var i = 0; i < hs.cacheBindings.length; i++) { + if (hs.cacheBindings[i][0] == a) { + var c = hs.cacheBindings[i][1]; + hs.cacheBindings[i][1] = c.cloneNode(1); + return c; + } + } + return null; +}, + +preloadAjax : function (e) { + var arr = hs.getAnchors(); + for (var i = 0; i < arr.htmls.length; i++) { + var a = arr.htmls[i]; + if (hs.getParam(a, 'objectType') == 'ajax' && hs.getParam(a, 'cacheAjax')) + hs.push(hs.preloadTheseAjax, a); + } + + hs.preloadAjaxElement(0); +}, + +preloadAjaxElement : function (i) { + if (!hs.preloadTheseAjax[i]) return; + var a = hs.preloadTheseAjax[i]; + var cache = hs.getNode(hs.getParam(a, 'contentId')); + if (!cache) cache = hs.getSelfRendered(); + var ajax = new hs.Ajax(a, cache, 1); + ajax.onError = function () { }; + ajax.onLoad = function () { + hs.push(hs.cacheBindings, [a, cache]); + hs.preloadAjaxElement(i + 1); + }; + ajax.run(); +}, + +focusTopmost : function() { + var topZ = 0, + topmostKey = -1, + expanders = hs.expanders, + exp, + zIndex; + for (var i = 0; i < expanders.length; i++) { + exp = expanders[i]; + if (exp) { + zIndex = exp.wrapper.style.zIndex; + if (zIndex && zIndex > topZ) { + topZ = zIndex; + topmostKey = i; + } + } + } + if (topmostKey == -1) hs.focusKey = -1; + else expanders[topmostKey].focus(); +}, + +getParam : function (a, param) { + a.getParams = a.onclick; + var p = a.getParams ? a.getParams() : null; + a.getParams = null; + + return (p && typeof p[param] != 'undefined') ? p[param] : + (typeof hs[param] != 'undefined' ? hs[param] : null); +}, + +getSrc : function (a) { + var src = hs.getParam(a, 'src'); + if (src) return src; + return a.href; +}, + +getNode : function (id) { + var node = hs.$(id), clone = hs.clones[id], a = {}; + if (!node && !clone) return null; + if (!clone) { + clone = node.cloneNode(true); + clone.id = ''; + hs.clones[id] = clone; + return node; + } else { + return clone.cloneNode(true); + } +}, + +discardElement : function(d) { + if (d) hs.garbageBin.appendChild(d); + hs.garbageBin.innerHTML = ''; +}, +dim : function(exp) { + if (!hs.dimmer) { + isNew = true; + hs.dimmer = hs.createElement ('div', { + className: 'highslide-dimming highslide-viewport-size', + owner: '', + onclick: function() { + if (hs.fireEvent(hs, 'onDimmerClick')) + + hs.close(); + } + }, { + visibility: 'visible', + opacity: 0 + }, hs.container, true); + + if (/(Android|iPad|iPhone|iPod)/.test(navigator.userAgent)) { + var body = document.body; + function pixDimmerSize() { + hs.setStyles(hs.dimmer, { + width: body.scrollWidth +'px', + height: body.scrollHeight +'px' + }); + } + pixDimmerSize(); + hs.addEventListener(window, 'resize', pixDimmerSize); + } + } + hs.dimmer.style.display = ''; + + var isNew = hs.dimmer.owner == ''; + hs.dimmer.owner += '|'+ exp.key; + + if (isNew) { + if (hs.geckoMac && hs.dimmingGeckoFix) + hs.setStyles(hs.dimmer, { + background: 'url('+ hs.graphicsDir + 'geckodimmer.png)', + opacity: 1 + }); + else + hs.animate(hs.dimmer, { opacity: exp.dimmingOpacity }, hs.dimmingDuration); + } +}, +undim : function(key) { + if (!hs.dimmer) return; + if (typeof key != 'undefined') hs.dimmer.owner = hs.dimmer.owner.replace('|'+ key, ''); + + if ( + (typeof key != 'undefined' && hs.dimmer.owner != '') + || (hs.upcoming && hs.getParam(hs.upcoming, 'dimmingOpacity')) + ) return; + + if (hs.geckoMac && hs.dimmingGeckoFix) hs.dimmer.style.display = 'none'; + else hs.animate(hs.dimmer, { opacity: 0 }, hs.dimmingDuration, null, function() { + hs.dimmer.style.display = 'none'; + }); +}, +transit : function (adj, exp) { + var last = exp || hs.getExpander(); + exp = last; + if (hs.upcoming) return false; + else hs.last = last; + hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + try { + hs.upcoming = adj; + adj.onclick(); + } catch (e){ + hs.last = hs.upcoming = null; + } + try { + if (!adj || exp.transitions[1] != 'crossfade') + exp.close(); + } catch (e) {} + return false; +}, + +previousOrNext : function (el, op) { + var exp = hs.getExpander(el); + if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); + else return false; +}, + +previous : function (el) { + return hs.previousOrNext(el, -1); +}, + +next : function (el) { + return hs.previousOrNext(el, 1); +}, + +keyHandler : function(e) { + if (!e) e = window.event; + if (!e.target) e.target = e.srcElement; // ie + if (typeof e.target.form != 'undefined') return true; // form element has focus + if (!hs.fireEvent(hs, 'onKeyDown', e)) return true; + var exp = hs.getExpander(); + + var op = null; + switch (e.keyCode) { + case 70: // f + if (exp) exp.doFullExpand(); + return true; + case 32: // Space + op = 2; + break; + case 34: // Page Down + case 39: // Arrow right + case 40: // Arrow down + op = 1; + break; + case 8: // Backspace + case 33: // Page Up + case 37: // Arrow left + case 38: // Arrow up + op = -1; + break; + case 27: // Escape + case 13: // Enter + op = 0; + } + if (op !== null) {if (op != 2)hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + if (!hs.enableKeyListener) return true; + + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + if (exp) { + if (op == 0) { + exp.close(); + } else if (op == 2) { + if (exp.slideshow) exp.slideshow.hitSpace(); + } else { + if (exp.slideshow) exp.slideshow.pause(); + hs.previousOrNext(exp.key, op); + } + return false; + } + } + return true; +}, + + +registerOverlay : function (overlay) { + hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); +}, + + +addSlideshow : function (options) { + var sg = options.slideshowGroup; + if (typeof sg == 'object') { + for (var i = 0; i < sg.length; i++) { + var o = {}; + for (var x in options) o[x] = options[x]; + o.slideshowGroup = sg[i]; + hs.push(hs.slideshows, o); + } + } else { + hs.push(hs.slideshows, options); + } +}, + +getWrapperKey : function (element, expOnly) { + var el, re = /^highslide-wrapper-([0-9]+)$/; + // 1. look in open expanders + el = element; + while (el.parentNode) { + if (el.hsKey !== undefined) return el.hsKey; + if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); + el = el.parentNode; + } + // 2. look in thumbnail + if (!expOnly) { + el = element; + while (el.parentNode) { + if (el.tagName && hs.isHsAnchor(el)) { + for (var key = 0; key < hs.expanders.length; key++) { + var exp = hs.expanders[key]; + if (exp && exp.a == el) return key; + } + } + el = el.parentNode; + } + } + return null; +}, + +getExpander : function (el, expOnly) { + if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; + if (typeof el == 'number') return hs.expanders[el] || null; + if (typeof el == 'string') el = hs.$(el); + return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; +}, + +isHsAnchor : function (a) { + return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); +}, + +reOrder : function () { + for (var i = 0; i < hs.expanders.length; i++) + if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); +}, +fireEvent : function (obj, evt, args) { + return obj && obj[evt] ? (obj[evt](obj, args) !== false) : true; +}, + +mouseClickHandler : function(e) +{ + if (!e) e = window.event; + if (e.button > 1) return true; + if (!e.target) e.target = e.srcElement; + + var el = e.target; + while (el.parentNode + && !(/highslide-(image|move|html|resize)/.test(el.className))) + { + el = el.parentNode; + } + var exp = hs.getExpander(el); + if (exp && (exp.isClosing || !exp.isExpanded)) return true; + + if (exp && e.type == 'mousedown') { + if (e.target.form) return true; + var match = el.className.match(/highslide-(image|move|resize)/); + if (match) { + hs.dragArgs = { + exp: exp , + type: match[1], + left: exp.x.pos, + width: exp.x.size, + top: exp.y.pos, + height: exp.y.size, + clickX: e.clientX, + clickY: e.clientY + }; + + + hs.addEventListener(document, 'mousemove', hs.dragHandler); + if (e.preventDefault) e.preventDefault(); // FF + + if (/highslide-(image|html)-blur/.test(exp.content.className)) { + exp.focus(); + hs.hasFocused = true; + } + return false; + } + else if (/highslide-html/.test(el.className) && hs.focusKey != exp.key) { + exp.focus(); + exp.doShowHide('hidden'); + } + } else if (e.type == 'mouseup') { + + hs.removeEventListener(document, 'mousemove', hs.dragHandler); + + if (hs.dragArgs) { + if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') + hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; + var hasDragged = hs.dragArgs.hasDragged; + + if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { + if (hs.fireEvent(exp, 'onImageClick')) + exp.close(); + } + else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { + hs.dragArgs.exp.doShowHide('hidden'); + } + + if (hs.dragArgs.exp.releaseMask) + hs.dragArgs.exp.releaseMask.style.display = 'none'; + + if (hasDragged) hs.fireEvent(hs.dragArgs.exp, 'onDrop', hs.dragArgs); + hs.hasFocused = false; + hs.dragArgs = null; + + } else if (/highslide-image-blur/.test(el.className)) { + el.style.cursor = hs.styleRestoreCursor; + } + } + return false; +}, + +dragHandler : function(e) +{ + if (!hs.dragArgs) return true; + if (!e) e = window.event; + var a = hs.dragArgs, exp = a.exp; + if (exp.iframe) { + if (!exp.releaseMask) exp.releaseMask = hs.createElement('div', null, + { position: 'absolute', width: exp.x.size+'px', height: exp.y.size+'px', + left: exp.x.cb+'px', top: exp.y.cb+'px', zIndex: 4, background: (hs.ieLt9 ? 'white' : 'none'), + opacity: 0.01 }, + exp.wrapper, true); + if (exp.releaseMask.style.display == 'none') + exp.releaseMask.style.display = ''; + } + + a.dX = e.clientX - a.clickX; + a.dY = e.clientY - a.clickY; + + var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); + if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) + || (distance > (hs.dragSensitivity || 5)); + + if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { + if (!hs.fireEvent(exp, 'onDrag', a)) return false; + + if (a.type == 'resize') exp.resize(a); + else { + exp.moveTo(a.left + a.dX, a.top + a.dY); + if (a.type == 'image') exp.content.style.cursor = 'move'; + } + } + return false; +}, + +wrapperMouseHandler : function (e) { + try { + if (!e) e = window.event; + var over = /mouseover/i.test(e.type); + if (!e.target) e.target = e.srcElement; // ie + if (!e.relatedTarget) e.relatedTarget = + over ? e.fromElement : e.toElement; // ie + var exp = hs.getExpander(e.target); + if (!exp.isExpanded) return; + if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp + || hs.dragArgs) return; + hs.fireEvent(exp, over ? 'onMouseOver' : 'onMouseOut', e); + for (var i = 0; i < exp.overlays.length; i++) (function() { + var o = hs.$('hsId'+ exp.overlays[i]); + if (o && o.hideOnMouseOut) { + if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); + hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); + } + })(); + } catch (e) {} +}, +addEventListener : function (el, event, func) { + if (el == document && event == 'ready') { + hs.push(hs.onReady, func); + } + try { + el.addEventListener(event, func, false); + } catch (e) { + try { + el.detachEvent('on'+ event, func); + el.attachEvent('on'+ event, func); + } catch (e) { + el['on'+ event] = func; + } + } +}, + +removeEventListener : function (el, event, func) { + try { + el.removeEventListener(event, func, false); + } catch (e) { + try { + el.detachEvent('on'+ event, func); + } catch (e) { + el['on'+ event] = null; + } + } +}, + +preloadFullImage : function (i) { + if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { + var img = document.createElement('img'); + img.onload = function() { + img = null; + hs.preloadFullImage(i + 1); + }; + img.src = hs.preloadTheseImages[i]; + } +}, +preloadImages : function (number) { + if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; + + var arr = hs.getAnchors(); + for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { + hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); + } + + // preload outlines + if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); + else + + hs.preloadFullImage(0); + + // preload cursor + if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); +}, + + +init : function () { + if (!hs.container) { + + hs.ieLt7 = hs.ie && hs.uaVersion < 7; + hs.ieLt9 = hs.ie && hs.uaVersion < 9; + + hs.getPageSize(); + hs.ie6SSL = hs.ieLt7 && location.protocol == 'https:'; + for (var x in hs.langDefaults) { + if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; + else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') + hs.lang[x] = hs.langDefaults[x]; + } + + hs.container = hs.createElement('div', { + className: 'highslide-container' + }, { + position: 'absolute', + left: 0, + top: 0, + width: '100%', + zIndex: hs.zIndexCounter, + direction: 'ltr' + }, + document.body, + true + ); + hs.loading = hs.createElement('a', { + className: 'highslide-loading', + title: hs.lang.loadingTitle, + innerHTML: hs.lang.loadingText, + href: 'javascript:;' + }, { + position: 'absolute', + top: '-9999px', + opacity: hs.loadingOpacity, + zIndex: 1 + }, hs.container + ); + hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); + hs.viewport = hs.createElement('div', { + className: 'highslide-viewport highslide-viewport-size' + }, { + visibility: (hs.safari && hs.uaVersion < 525) ? 'visible' : 'hidden' + }, hs.container, 1 + ); + hs.clearing = hs.createElement('div', null, + { clear: 'both', paddingTop: '1px' }, null, true); + + // http://www.robertpenner.com/easing/ + Math.linearTween = function (t, b, c, d) { + return c*t/d + b; + }; + Math.easeInQuad = function (t, b, c, d) { + return c*(t/=d)*t + b; + }; + Math.easeOutQuad = function (t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }; + + hs.hideSelects = hs.ieLt7; + hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' + || (hs.ieLt7 && hs.uaVersion < 5.5)); + hs.fireEvent(this, 'onActivate'); + } +}, +ready : function() { + if (hs.isReady) return; + hs.isReady = true; + for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); +}, + +updateAnchors : function() { + var el, els, all = [], images = [], htmls = [],groups = {}, re; + + for (var i = 0; i < hs.openerTagNames.length; i++) { + els = document.getElementsByTagName(hs.openerTagNames[i]); + for (var j = 0; j < els.length; j++) { + el = els[j]; + re = hs.isHsAnchor(el); + if (re) { + hs.push(all, el); + if (re[0] == 'hs.expand') hs.push(images, el); + else if (re[0] == 'hs.htmlExpand') hs.push(htmls, el); + var g = hs.getParam(el, 'slideshowGroup') || 'none'; + if (!groups[g]) groups[g] = []; + hs.push(groups[g], el); + } + } + } + hs.anchors = { all: all, groups: groups, images: images, htmls: htmls }; + return hs.anchors; + +}, + +getAnchors : function() { + return hs.anchors || hs.updateAnchors(); +}, + + +close : function(el) { + var exp = hs.getExpander(el); + if (exp) exp.close(); + return false; +} +}; // end hs object +hs.fx = function( elem, options, prop ){ + this.options = options; + this.elem = elem; + this.prop = prop; + + if (!options.orig) options.orig = {}; +}; +hs.fx.prototype = { + update: function(){ + (hs.fx.step[this.prop] || hs.fx.step._default)(this); + + if (this.options.step) + this.options.step.call(this.elem, this.now, this); + + }, + custom: function(from, to, unit){ + this.startTime = (new Date()).getTime(); + this.start = from; + this.end = to; + this.unit = unit;// || this.unit || "px"; + this.now = this.start; + this.pos = this.state = 0; + + var self = this; + function t(gotoEnd){ + return self.step(gotoEnd); + } + + t.elem = this.elem; + + if ( t() && hs.timers.push(t) == 1 ) { + hs.timerId = setInterval(function(){ + var timers = hs.timers; + + for ( var i = 0; i < timers.length; i++ ) + if ( !timers[i]() ) + timers.splice(i--, 1); + + if ( !timers.length ) { + clearInterval(hs.timerId); + } + }, 13); + } + }, + step: function(gotoEnd){ + var t = (new Date()).getTime(); + if ( gotoEnd || t >= this.options.duration + this.startTime ) { + this.now = this.end; + this.pos = this.state = 1; + this.update(); + + this.options.curAnim[ this.prop ] = true; + + var done = true; + for ( var i in this.options.curAnim ) + if ( this.options.curAnim[i] !== true ) + done = false; + + if ( done ) { + if (this.options.complete) this.options.complete.call(this.elem); + } + return false; + } else { + var n = t - this.startTime; + this.state = n / this.options.duration; + this.pos = this.options.easing(n, 0, 1, this.options.duration); + this.now = this.start + ((this.end - this.start) * this.pos); + this.update(); + } + return true; + } + +}; + +hs.extend( hs.fx, { + step: { + + opacity: function(fx){ + hs.setStyles(fx.elem, { opacity: fx.now }); + }, + + _default: function(fx){ + try { + if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) + fx.elem.style[ fx.prop ] = fx.now + fx.unit; + else + fx.elem[ fx.prop ] = fx.now; + } catch (e) {} + } + } +}); + +hs.Outline = function (outlineType, onLoad) { + this.onLoad = onLoad; + this.outlineType = outlineType; + var v = hs.uaVersion, tr; + + this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; + if (!outlineType) { + if (onLoad) onLoad(); + return; + } + + hs.init(); + this.table = hs.createElement( + 'table', { + cellSpacing: 0 + }, { + visibility: 'hidden', + position: 'absolute', + borderCollapse: 'collapse', + width: 0 + }, + hs.container, + true + ); + var tbody = hs.createElement('tbody', null, null, this.table, 1); + + this.td = []; + for (var i = 0; i <= 8; i++) { + if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); + this.td[i] = hs.createElement('td', null, null, tr, true); + var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; + hs.setStyles(this.td[i], style); + } + this.td[4].className = outlineType +' highslide-outline'; + + this.preloadGraphic(); +}; + +hs.Outline.prototype = { +preloadGraphic : function () { + var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; + + var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; + this.graphic = hs.createElement('img', null, { position: 'absolute', + top: '-9999px' }, appendTo, true); // for onload trigger + + var pThis = this; + this.graphic.onload = function() { pThis.onGraphicLoad(); }; + + this.graphic.src = src; +}, + +onGraphicLoad : function () { + var o = this.offset = this.graphic.width / 4, + pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], + dim = { height: (2*o) +'px', width: (2*o) +'px' }; + for (var i = 0; i <= 8; i++) { + if (pos[i]) { + if (this.hasAlphaImageLoader) { + var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; + var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); + hs.createElement ('div', null, { + filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", + position: 'absolute', + width: w, + height: this.graphic.height +'px', + left: (pos[i][0]*o)+'px', + top: (pos[i][1]*o)+'px' + }, + div, + true); + } else { + hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); + } + + if (window.opera && (i == 3 || i ==5)) + hs.createElement('div', null, dim, this.td[i], true); + + hs.setStyles (this.td[i], dim); + } + } + this.graphic = null; + if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); + hs.pendingOutlines[this.outlineType] = this; + if (this.onLoad) this.onLoad(); +}, + +setPosition : function (pos, offset, vis, dur, easing) { + var exp = this.exp, + stl = exp.wrapper.style, + offset = offset || 0, + pos = pos || { + x: exp.x.pos + offset, + y: exp.y.pos + offset, + w: exp.x.get('wsize') - 2 * offset, + h: exp.y.get('wsize') - 2 * offset + }; + if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) + ? 'visible' : 'hidden'; + hs.setStyles(this.table, { + left: (pos.x - this.offset) +'px', + top: (pos.y - this.offset) +'px', + width: (pos.w + 2 * this.offset) +'px' + }); + + pos.w -= 2 * this.offset; + pos.h -= 2 * this.offset; + hs.setStyles (this.td[4], { + width: pos.w >= 0 ? pos.w +'px' : 0, + height: pos.h >= 0 ? pos.h +'px' : 0 + }); + if (this.hasAlphaImageLoader) this.td[3].style.height + = this.td[5].style.height = this.td[4].style.height; + +}, + +destroy : function(hide) { + if (hide) this.table.style.visibility = 'hidden'; + else hs.discardElement(this.table); +} +}; + +hs.Dimension = function(exp, dim) { + this.exp = exp; + this.dim = dim; + this.ucwh = dim == 'x' ? 'Width' : 'Height'; + this.wh = this.ucwh.toLowerCase(); + this.uclt = dim == 'x' ? 'Left' : 'Top'; + this.lt = this.uclt.toLowerCase(); + this.ucrb = dim == 'x' ? 'Right' : 'Bottom'; + this.rb = this.ucrb.toLowerCase(); + this.p1 = this.p2 = 0; +}; +hs.Dimension.prototype = { +get : function(key) { + switch (key) { + case 'loadingPos': + return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; + case 'loadingPosXfade': + return this.pos + this.cb+ this.p1 + (this.size - hs.loading['offset'+ this.ucwh]) / 2; + case 'wsize': + return this.size + 2 * this.cb + this.p1 + this.p2; + case 'fitsize': + return this.clientSize - this.marginMin - this.marginMax; + case 'maxsize': + return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; + case 'opos': + return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); + case 'osize': + return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); + case 'imgPad': + return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; + + } +}, +calcBorders: function() { + // correct for borders + this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2; + + this.marginMax = hs['margin'+ this.ucrb]; +}, +calcThumb: function() { + this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : + this.exp.el['offset'+ this.ucwh]; + this.tpos = this.exp.tpos[this.dim]; + this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2; + if (this.tpos == 0 || this.tpos == -1) { + this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; + }; +}, +calcExpanded: function() { + var exp = this.exp; + this.justify = 'auto'; + + // get alignment + if (exp.align == 'center') this.justify = 'center'; + else if (new RegExp(this.lt).test(exp.anchor)) this.justify = null; + else if (new RegExp(this.rb).test(exp.anchor)) this.justify = 'max'; + + + // size and position + this.pos = this.tpos - this.cb + this.tb; + + if (this.maxHeight && this.dim == 'x') + exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); + + this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); + this.minSize = exp.allowSizeReduction ? + Math.min(exp['min'+ this.ucwh], this.full) :this.full; + if (exp.isImage && exp.useBox) { + this.size = exp[this.wh]; + this.imgSize = this.full; + } + if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; + this.target = exp['target'+ this.dim.toUpperCase()]; + this.marginMin = hs['margin'+ this.uclt]; + this.scroll = hs.page['scroll'+ this.uclt]; + this.clientSize = hs.page[this.wh]; +}, +setSize: function(i) { + var exp = this.exp; + if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { + this.imgSize = i; + this.size = Math.max(this.size, this.imgSize); + exp.content.style[this.lt] = this.get('imgPad')+'px'; + } else + this.size = i; + + exp.content.style[this.wh] = i +'px'; + exp.wrapper.style[this.wh] = this.get('wsize') +'px'; + if (exp.outline) exp.outline.setPosition(); + if (exp.releaseMask) exp.releaseMask.style[this.wh] = i +'px'; + if (this.dim == 'y' && exp.iDoc && exp.body.style.height != 'auto') try { + exp.iDoc.body.style.overflow = 'auto'; + } catch (e) {} + if (exp.isHtml) { + var d = exp.scrollerDiv; + if (this.sizeDiff === undefined) + this.sizeDiff = exp.innerContent['offset'+ this.ucwh] - d['offset'+ this.ucwh]; + d.style[this.wh] = (this.size - this.sizeDiff) +'px'; + + if (this.dim == 'x') exp.mediumContent.style.width = 'auto'; + if (exp.body) exp.body.style[this.wh] = 'auto'; + } + if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); + if (this.dim == 'x' && exp.slideshow && exp.isImage) { + if (i == this.full) exp.slideshow.disable('full-expand'); + else exp.slideshow.enable('full-expand'); + } +}, +setPos: function(i) { + this.pos = i; + this.exp.wrapper.style[this.lt] = i +'px'; + + if (this.exp.outline) this.exp.outline.setPosition(); + +} +}; + +hs.Expander = function(a, params, custom, contentType) { + if (document.readyState && hs.ie && !hs.isReady) { + hs.addEventListener(document, 'ready', function() { + new hs.Expander(a, params, custom, contentType); + }); + return; + } + this.a = a; + this.custom = custom; + this.contentType = contentType || 'image'; + this.isHtml = (contentType == 'html'); + this.isImage = !this.isHtml; + + hs.continuePreloading = false; + this.overlays = []; + this.last = hs.last; + hs.last = null; + hs.init(); + var key = this.key = hs.expanders.length; + // override inline parameters + for (var i = 0; i < hs.overrides.length; i++) { + var name = hs.overrides[i]; + this[name] = params && typeof params[name] != 'undefined' ? + params[name] : hs[name]; + } + if (!this.src) this.src = a.href; + + // get thumb + var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; + el = this.thumb = el.getElementsByTagName('img')[0] || el; + this.thumbsUserSetId = el.id || a.id; + if (!hs.fireEvent(this, 'onInit')) return true; + + // check if already open + for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && hs.expanders[i].a == a + && !(this.last && this.transitions[1] == 'crossfade')) { + hs.expanders[i].focus(); + return false; + } + } + + // cancel other + if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { + hs.expanders[i].cancelLoading(); + } + } + hs.expanders[key] = this; + if (!hs.allowMultipleInstances && !hs.upcoming) { + if (hs.expanders[key-1]) hs.expanders[key-1].close(); + if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) + hs.expanders[hs.focusKey].close(); + } + + // initiate metrics + this.el = el; + this.tpos = this.pageOrigin || hs.getPosition(el); + hs.getPageSize(); + var x = this.x = new hs.Dimension(this, 'x'); + x.calcThumb(); + var y = this.y = new hs.Dimension(this, 'y'); + y.calcThumb(); + if (/area/i.test(el.tagName)) this.getImageMapAreaCorrection(el); + this.wrapper = hs.createElement( + 'div', { + id: 'highslide-wrapper-'+ this.key, + className: 'highslide-wrapper '+ this.wrapperClassName + }, { + visibility: 'hidden', + position: 'absolute', + zIndex: hs.zIndexCounter += 2 + }, null, true ); + + this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; + if (this.contentType == 'image' && this.outlineWhileAnimating == 2) + this.outlineWhileAnimating = 0; + + // get the outline + if (!this.outlineType + || (this.last && this.isImage && this.transitions[1] == 'crossfade')) { + this[this.contentType +'Create'](); + + } else if (hs.pendingOutlines[this.outlineType]) { + this.connectOutline(); + this[this.contentType +'Create'](); + + } else { + this.showLoading(); + var exp = this; + new hs.Outline(this.outlineType, + function () { + exp.connectOutline(); + exp[exp.contentType +'Create'](); + } + ); + } + return true; +}; + +hs.Expander.prototype = { +error : function(e) { + if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); + else window.location.href = this.src; +}, + +connectOutline : function() { + var outline = this.outline = hs.pendingOutlines[this.outlineType]; + outline.exp = this; + outline.table.style.zIndex = this.wrapper.style.zIndex - 1; + hs.pendingOutlines[this.outlineType] = null; +}, + +showLoading : function() { + if (this.onLoadStarted || this.loading) return; + + this.loading = hs.loading; + var exp = this; + this.loading.onclick = function() { + exp.cancelLoading(); + }; + + + if (!hs.fireEvent(this, 'onShowLoading')) return; + var exp = this, + l = this.x.get('loadingPos') +'px', + t = this.y.get('loadingPos') +'px'; + if (!tgt && this.last && this.transitions[1] == 'crossfade') + var tgt = this.last; + if (tgt) { + l = tgt.x.get('loadingPosXfade') +'px'; + t = tgt.y.get('loadingPosXfade') +'px'; + this.loading.style.zIndex = hs.zIndexCounter++; + } + setTimeout(function () { + if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} + , 100); +}, + +imageCreate : function() { + var exp = this; + + var img = document.createElement('img'); + this.content = img; + img.onload = function () { + if (hs.expanders[exp.key]) exp.contentLoaded(); + }; + if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; + img.className = 'highslide-image'; + hs.setStyles(img, { + visibility: 'hidden', + display: 'block', + position: 'absolute', + maxWidth: '9999px', + zIndex: 3 + }); + img.title = hs.lang.restoreTitle; + if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); + if (hs.ie && hs.flushImgSize) img.src = null; + img.src = this.src; + + this.showLoading(); +}, + +htmlCreate : function () { + if (!hs.fireEvent(this, 'onBeforeGetContent')) return; + + this.content = hs.getCacheBinding(this.a); + if (!this.content) + this.content = hs.getNode(this.contentId); + if (!this.content) + this.content = hs.getSelfRendered(); + this.getInline(['maincontent']); + if (this.maincontent) { + var body = hs.getElementByClass(this.content, 'div', 'highslide-body'); + if (body) body.appendChild(this.maincontent); + this.maincontent.style.display = 'block'; + } + hs.fireEvent(this, 'onAfterGetContent'); + + var innerContent = this.innerContent = this.content; + + if (/(swf|iframe)/.test(this.objectType)) this.setObjContainerSize(innerContent); + + // the content tree + hs.container.appendChild(this.wrapper); + hs.setStyles( this.wrapper, { + position: 'static', + padding: '0 '+ hs.marginRight +'px 0 '+ hs.marginLeft +'px' + }); + this.content = hs.createElement( + 'div', { + className: 'highslide-html' + }, { + position: 'relative', + zIndex: 3, + height: 0, + overflow: 'hidden' + }, + this.wrapper + ); + this.mediumContent = hs.createElement('div', null, null, this.content, 1); + this.mediumContent.appendChild(innerContent); + + hs.setStyles (innerContent, { + position: 'relative', + display: 'block', + direction: hs.lang.cssDirection || '' + }); + if (this.width) innerContent.style.width = this.width +'px'; + if (this.height) hs.setStyles(innerContent, { + height: this.height +'px', + overflow: 'hidden' + }); + if (innerContent.offsetWidth < this.minWidth) + innerContent.style.width = this.minWidth +'px'; + + + + if (this.objectType == 'ajax' && !hs.getCacheBinding(this.a)) { + this.showLoading(); + var exp = this; + var ajax = new hs.Ajax(this.a, innerContent); + ajax.src = this.src; + ajax.onLoad = function () { if (hs.expanders[exp.key]) exp.contentLoaded(); }; + ajax.onError = function () { location.href = exp.src; }; + ajax.run(); + } + else + + if (this.objectType == 'iframe' && this.objectLoadTime == 'before') { + this.writeExtendedContent(); + } + else + this.contentLoaded(); +}, + +contentLoaded : function() { + try { + if (!this.content) return; + this.content.onload = null; + if (this.onLoadStarted) return; + else this.onLoadStarted = true; + + var x = this.x, y = this.y; + + if (this.loading) { + hs.setStyles(this.loading, { top: '-9999px' }); + this.loading = null; + hs.fireEvent(this, 'onHideLoading'); + } + if (this.isImage) { + x.full = this.content.width; + y.full = this.content.height; + + hs.setStyles(this.content, { + width: x.t +'px', + height: y.t +'px' + }); + this.wrapper.appendChild(this.content); + hs.container.appendChild(this.wrapper); + } else if (this.htmlGetSize) this.htmlGetSize(); + + x.calcBorders(); + y.calcBorders(); + + hs.setStyles (this.wrapper, { + left: (x.tpos + x.tb - x.cb) +'px', + top: (y.tpos + x.tb - y.cb) +'px' + }); + + + this.initSlideshow(); + this.getOverlays(); + + var ratio = x.full / y.full; + x.calcExpanded(); + this.justify(x); + + y.calcExpanded(); + this.justify(y); + if (this.isHtml) this.htmlSizeOperations(); + if (this.overlayBox) this.sizeOverlayBox(0, 1); + + + if (this.allowSizeReduction) { + if (this.isImage) + this.correctRatio(ratio); + else this.fitOverlayBox(); + var ss = this.slideshow; + if (ss && this.last && ss.controls && ss.fixedControls) { + var pos = ss.overlayOptions.position || '', p; + for (var dim in hs.oPos) for (var i = 0; i < 5; i++) { + p = this[dim]; + if (pos.match(hs.oPos[dim][i])) { + p.pos = this.last[dim].pos + + (this.last[dim].p1 - p.p1) + + (this.last[dim].size - p.size) * [0, 0, .5, 1, 1][i]; + if (ss.fixedControls == 'fit') { + if (p.pos + p.size + p.p1 + p.p2 > p.scroll + p.clientSize - p.marginMax) + p.pos = p.scroll + p.clientSize - p.size - p.marginMin - p.marginMax - p.p1 - p.p2; + if (p.pos < p.scroll + p.marginMin) p.pos = p.scroll + p.marginMin; + } + } + } + } + if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { + this.createFullExpand(); + if (this.overlays.length == 1) this.sizeOverlayBox(); + } + } + this.show(); + + } catch (e) { + this.error(e); + } +}, + + +setObjContainerSize : function(parent, auto) { + var c = hs.getElementByClass(parent, 'DIV', 'highslide-body'); + if (/(iframe|swf)/.test(this.objectType)) { + if (this.objectWidth) c.style.width = this.objectWidth +'px'; + if (this.objectHeight) c.style.height = this.objectHeight +'px'; + } +}, + +writeExtendedContent : function () { + if (this.hasExtendedContent) return; + var exp = this; + this.body = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); + if (this.objectType == 'iframe') { + this.showLoading(); + var ruler = hs.clearing.cloneNode(1); + this.body.appendChild(ruler); + this.newWidth = this.innerContent.offsetWidth; + if (!this.objectWidth) this.objectWidth = ruler.offsetWidth; + var hDiff = this.innerContent.offsetHeight - this.body.offsetHeight, + h = this.objectHeight || hs.page.height - hDiff - hs.marginTop - hs.marginBottom, + onload = this.objectLoadTime == 'before' ? + ' onload="if (hs.expanders['+ this.key +']) hs.expanders['+ this.key +'].contentLoaded()" ' : ''; + this.body.innerHTML += '<iframe name="hs'+ (new Date()).getTime() +'" frameborder="0" key="'+ this.key +'" ' + +' style="width:'+ this.objectWidth +'px; height:'+ h +'px" ' + + onload +' src="'+ this.src +'" ></iframe>'; + this.ruler = this.body.getElementsByTagName('div')[0]; + this.iframe = this.body.getElementsByTagName('iframe')[0]; + + if (this.objectLoadTime == 'after') this.correctIframeSize(); + + } + if (this.objectType == 'swf') { + this.body.id = this.body.id || 'hs-flash-id-' + this.key; + var a = this.swfOptions; + if (!a.params) a.params = {}; + if (typeof a.params.wmode == 'undefined') a.params.wmode = 'transparent'; + if (swfobject) swfobject.embedSWF(this.src, this.body.id, this.objectWidth, this.objectHeight, + a.version || '7', a.expressInstallSwfurl, a.flashvars, a.params, a.attributes); + } + this.hasExtendedContent = true; +}, +htmlGetSize : function() { + if (this.iframe && !this.objectHeight) { // loadtime before + this.iframe.style.height = this.body.style.height = this.getIframePageHeight() +'px'; + } + this.innerContent.appendChild(hs.clearing); + if (!this.x.full) this.x.full = this.innerContent.offsetWidth; + this.y.full = this.innerContent.offsetHeight; + this.innerContent.removeChild(hs.clearing); + if (hs.ie && this.newHeight > parseInt(this.innerContent.currentStyle.height)) { // ie css bug + this.newHeight = parseInt(this.innerContent.currentStyle.height); + } + hs.setStyles( this.wrapper, { position: 'absolute', padding: '0'}); + hs.setStyles( this.content, { width: this.x.t +'px', height: this.y.t +'px'}); + +}, + +getIframePageHeight : function() { + var h; + try { + var doc = this.iDoc = this.iframe.contentDocument || this.iframe.contentWindow.document; + var clearing = doc.createElement('div'); + clearing.style.clear = 'both'; + doc.body.appendChild(clearing); + h = clearing.offsetTop; + if (hs.ie) h += parseInt(doc.body.currentStyle.marginTop) + + parseInt(doc.body.currentStyle.marginBottom) - 1; + } catch (e) { // other domain + h = 300; + } + return h; +}, +correctIframeSize : function () { + var wDiff = this.innerContent.offsetWidth - this.ruler.offsetWidth; + hs.discardElement(this.ruler); + if (wDiff < 0) wDiff = 0; + + var hDiff = this.innerContent.offsetHeight - this.iframe.offsetHeight; + if (this.iDoc && !this.objectHeight && !this.height && this.y.size == this.y.full) try { + this.iDoc.body.style.overflow = 'hidden'; + } catch (e) {} + hs.setStyles(this.iframe, { + width: Math.abs(this.x.size - wDiff) +'px', + height: Math.abs(this.y.size - hDiff) +'px' + }); + hs.setStyles(this.body, { + width: this.iframe.style.width, + height: this.iframe.style.height + }); + + this.scrollingContent = this.iframe; + this.scrollerDiv = this.scrollingContent; + +}, +htmlSizeOperations : function () { + + this.setObjContainerSize(this.innerContent); + + + if (this.objectType == 'swf' && this.objectLoadTime == 'before') this.writeExtendedContent(); + + // handle minimum size + if (this.x.size < this.x.full && !this.allowWidthReduction) this.x.size = this.x.full; + if (this.y.size < this.y.full && !this.allowHeightReduction) this.y.size = this.y.full; + this.scrollerDiv = this.innerContent; + hs.setStyles(this.mediumContent, { + position: 'relative', + width: this.x.size +'px' + }); + hs.setStyles(this.innerContent, { + border: 'none', + width: 'auto', + height: 'auto' + }); + var node = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); + if (node && !/(iframe|swf)/.test(this.objectType)) { + var cNode = node; // wrap to get true size + node = hs.createElement(cNode.nodeName, null, {overflow: 'hidden'}, null, true); + cNode.parentNode.insertBefore(node, cNode); + node.appendChild(hs.clearing); // IE6 + node.appendChild(cNode); + + var wDiff = this.innerContent.offsetWidth - node.offsetWidth; + var hDiff = this.innerContent.offsetHeight - node.offsetHeight; + node.removeChild(hs.clearing); + + var kdeBugCorr = hs.safari || navigator.vendor == 'KDE' ? 1 : 0; // KDE repainting bug + hs.setStyles(node, { + width: (this.x.size - wDiff - kdeBugCorr) +'px', + height: (this.y.size - hDiff) +'px', + overflow: 'auto', + position: 'relative' + } + ); + if (kdeBugCorr && cNode.offsetHeight > node.offsetHeight) { + node.style.width = (parseInt(node.style.width) + kdeBugCorr) + 'px'; + } + this.scrollingContent = node; + this.scrollerDiv = this.scrollingContent; + } + if (this.iframe && this.objectLoadTime == 'before') this.correctIframeSize(); + if (!this.scrollingContent && this.y.size < this.mediumContent.offsetHeight) this.scrollerDiv = this.content; + + if (this.scrollerDiv == this.content && !this.allowWidthReduction && !/(iframe|swf)/.test(this.objectType)) { + this.x.size += 17; // room for scrollbars + } + if (this.scrollerDiv && this.scrollerDiv.offsetHeight > this.scrollerDiv.parentNode.offsetHeight) { + setTimeout("try { hs.expanders["+ this.key +"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}", + hs.expandDuration); + } +}, + +getImageMapAreaCorrection : function(area) { + var c = area.coords.split(','); + for (var i = 0; i < c.length; i++) c[i] = parseInt(c[i]); + + if (area.shape.toLowerCase() == 'circle') { + this.x.tpos += c[0] - c[2]; + this.y.tpos += c[1] - c[2]; + this.x.t = this.y.t = 2 * c[2]; + } else { + var maxX, maxY, minX = maxX = c[0], minY = maxY = c[1]; + for (var i = 0; i < c.length; i++) { + if (i % 2 == 0) { + minX = Math.min(minX, c[i]); + maxX = Math.max(maxX, c[i]); + } else { + minY = Math.min(minY, c[i]); + maxY = Math.max(maxY, c[i]); + } + } + this.x.tpos += minX; + this.x.t = maxX - minX; + this.y.tpos += minY; + this.y.t = maxY - minY; + } +}, +justify : function (p, moveOnly) { + var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; + + if (tgt && tgt.match(/ /)) { + tgtArr = tgt.split(' '); + tgt = tgtArr[0]; + } + if (tgt && hs.$(tgt)) { + p.pos = hs.getPosition(hs.$(tgt))[dim]; + if (tgtArr && tgtArr[1] && tgtArr[1].match(/^[-]?[0-9]+px$/)) + p.pos += parseInt(tgtArr[1]); + if (p.size < p.minSize) p.size = p.minSize; + + } else if (p.justify == 'auto' || p.justify == 'center') { + + var hasMovedMin = false; + + var allowReduce = p.exp.allowSizeReduction; + if (p.justify == 'center') + p.pos = Math.round(p.scroll + (p.clientSize + p.marginMin - p.marginMax - p.get('wsize')) / 2); + else + p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2)); + if (p.pos < p.scroll + p.marginMin) { + p.pos = p.scroll + p.marginMin; + hasMovedMin = true; + } + if (!moveOnly && p.size < p.minSize) { + p.size = p.minSize; + allowReduce = false; + } + if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) { + if (!moveOnly && hasMovedMin && allowReduce) { + p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize')); + } else if (p.get('wsize') < p.get('fitsize')) { + p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize'); + } else { // image larger than viewport + p.pos = p.scroll + p.marginMin; + if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); + } + } + + if (!moveOnly && p.size < p.minSize) { + p.size = p.minSize; + allowReduce = false; + } + + + } else if (p.justify == 'max') { + p.pos = Math.floor(p.pos - p.size + p.t); + } + + + if (p.pos < p.marginMin) { + var tmpMin = p.pos; + p.pos = p.marginMin; + + if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); + + } +}, + +correctRatio : function(ratio) { + var x = this.x, + y = this.y, + changed = false, + xSize = Math.min(x.full, x.size), + ySize = Math.min(y.full, y.size), + useBox = (this.useBox || hs.padToMinWidth); + + if (xSize / ySize > ratio) { // width greater + xSize = ySize * ratio; + if (xSize < x.minSize) { // below minWidth + xSize = x.minSize; + ySize = xSize / ratio; + } + changed = true; + + } else if (xSize / ySize < ratio) { // height greater + ySize = xSize / ratio; + changed = true; + } + + if (hs.padToMinWidth && x.full < x.minSize) { + x.imgSize = x.full; + y.size = y.imgSize = y.full; + } else if (this.useBox) { + x.imgSize = xSize; + y.imgSize = ySize; + } else { + x.size = xSize; + y.size = ySize; + } + changed = this.fitOverlayBox(this.useBox ? null : ratio, changed); + if (useBox && y.size < y.imgSize) { + y.imgSize = y.size; + x.imgSize = y.size * ratio; + } + if (changed || useBox) { + x.pos = x.tpos - x.cb + x.tb; + x.minSize = x.size; + this.justify(x, true); + + y.pos = y.tpos - y.cb + y.tb; + y.minSize = y.size; + this.justify(y, true); + if (this.overlayBox) this.sizeOverlayBox(); + } + + +}, +fitOverlayBox : function(ratio, changed) { + var x = this.x, y = this.y; + if (this.overlayBox && (this.isImage || this.allowHeightReduction)) { + while (y.size > this.minHeight && x.size > this.minWidth + && y.get('wsize') > y.get('fitsize')) { + y.size -= 10; + if (ratio) x.size = y.size * ratio; + this.sizeOverlayBox(0, 1); + changed = true; + } + } + return changed; +}, + +reflow : function () { + if (this.scrollerDiv) { + var h = /iframe/i.test(this.scrollerDiv.tagName) ? (this.getIframePageHeight() + 1) +'px' : 'auto'; + if (this.body) this.body.style.height = h; + this.scrollerDiv.style.height = h; + this.y.setSize(this.innerContent.offsetHeight); + } +}, + +show : function () { + var x = this.x, y = this.y; + this.doShowHide('hidden'); + hs.fireEvent(this, 'onBeforeExpand'); + if (this.slideshow && this.slideshow.thumbstrip) this.slideshow.thumbstrip.selectThumb(); + + // Apply size change + this.changeSize( + 1, { + wrapper: { + width : x.get('wsize'), + height : y.get('wsize'), + left: x.pos, + top: y.pos + }, + content: { + left: x.p1 + x.get('imgPad'), + top: y.p1 + y.get('imgPad'), + width:x.imgSize ||x.size, + height:y.imgSize ||y.size + } + }, + hs.expandDuration + ); +}, + +changeSize : function(up, to, dur) { + // transition + var trans = this.transitions, + other = up ? (this.last ? this.last.a : null) : hs.upcoming, + t = (trans[1] && other + && hs.getParam(other, 'transitions')[1] == trans[1]) ? + trans[1] : trans[0]; + + if (this[t] && t != 'expand') { + this[t](up, to); + return; + } + + if (this.outline && !this.outlineWhileAnimating) { + if (up) this.outline.setPosition(); + else this.outline.destroy( + (this.isHtml && this.preserveContent)); + } + + + if (!up) this.destroyOverlays(); + + var exp = this, + x = exp.x, + y = exp.y, + easing = this.easing; + if (!up) easing = this.easingClose || easing; + var after = up ? + function() { + + if (exp.outline) exp.outline.table.style.visibility = "visible"; + setTimeout(function() { + exp.afterExpand(); + }, 50); + } : + function() { + exp.afterClose(); + }; + if (up) hs.setStyles( this.wrapper, { + width: x.t +'px', + height: y.t +'px' + }); + if (up && this.isHtml) { + hs.setStyles(this.wrapper, { + left: (x.tpos - x.cb + x.tb) +'px', + top: (y.tpos - y.cb + y.tb) +'px' + }); + } + if (this.fadeInOut) { + hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); + hs.extend(to.wrapper, { opacity: up }); + } + hs.animate( this.wrapper, to.wrapper, { + duration: dur, + easing: easing, + step: function(val, args) { + if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { + var fac = up ? args.pos : 1 - args.pos; + var pos = { + w: x.t + (x.get('wsize') - x.t) * fac, + h: y.t + (y.get('wsize') - y.t) * fac, + x: x.tpos + (x.pos - x.tpos) * fac, + y: y.tpos + (y.pos - y.tpos) * fac + }; + exp.outline.setPosition(pos, 0, 1); + } + if (exp.isHtml) { + if (args.prop == 'left') + exp.mediumContent.style.left = (x.pos - val) +'px'; + if (args.prop == 'top') + exp.mediumContent.style.top = (y.pos - val) +'px'; + } + } + }); + hs.animate( this.content, to.content, dur, easing, after); + if (up) { + this.wrapper.style.visibility = 'visible'; + this.content.style.visibility = 'visible'; + if (this.isHtml) this.innerContent.style.visibility = 'visible'; + this.a.className += ' highslide-active-anchor'; + } +}, + + + +fade : function(up, to) { + this.outlineWhileAnimating = false; + var exp = this, t = up ? hs.expandDuration : 0; + + if (up) { + hs.animate(this.wrapper, to.wrapper, 0); + hs.setStyles(this.wrapper, { opacity: 0, visibility: 'visible' }); + hs.animate(this.content, to.content, 0); + this.content.style.visibility = 'visible'; + + hs.animate(this.wrapper, { opacity: 1 }, t, null, + function() { exp.afterExpand(); }); + } + + if (this.outline) { + this.outline.table.style.zIndex = this.wrapper.style.zIndex; + var dir = up || -1, + offset = this.outline.offset, + startOff = up ? 3 : offset, + endOff = up? offset : 3; + for (var i = startOff; dir * i <= dir * endOff; i += dir, t += 25) { + (function() { + var o = up ? endOff - i : startOff - i; + setTimeout(function() { + exp.outline.setPosition(0, o, 1); + }, t); + })(); + } + } + + + if (up) {}//setTimeout(function() { exp.afterExpand(); }, t+50); + else { + setTimeout( function() { + if (exp.outline) exp.outline.destroy(exp.preserveContent); + + exp.destroyOverlays(); + + hs.animate( exp.wrapper, { opacity: 0 }, hs.restoreDuration, null, function(){ + exp.afterClose(); + }); + }, t); + } +}, +crossfade : function (up, to, from) { + if (!up) return; + var exp = this, + last = this.last, + x = this.x, + y = this.y, + lastX = last.x, + lastY = last.y, + wrapper = this.wrapper, + content = this.content, + overlayBox = this.overlayBox; + hs.removeEventListener(document, 'mousemove', hs.dragHandler); + + hs.setStyles(content, { + width: (x.imgSize || x.size) +'px', + height: (y.imgSize || y.size) +'px' + }); + if (overlayBox) overlayBox.style.overflow = 'visible'; + this.outline = last.outline; + if (this.outline) this.outline.exp = exp; + last.outline = null; + var fadeBox = hs.createElement('div', { + className: 'highslide-'+ this.contentType + }, { + position: 'absolute', + zIndex: 4, + overflow: 'hidden', + display: 'none' + } + ); + var names = { oldImg: last, newImg: this }; + for (var n in names) { + this[n] = names[n].content.cloneNode(1); + hs.setStyles(this[n], { + position: 'absolute', + border: 0, + visibility: 'visible' + }); + fadeBox.appendChild(this[n]); + } + wrapper.appendChild(fadeBox); + if (this.isHtml) hs.setStyles(this.mediumContent, { + left: 0, + top: 0 + }); + if (overlayBox) { + overlayBox.className = ''; + wrapper.appendChild(overlayBox); + } + fadeBox.style.display = ''; + last.content.style.display = 'none'; + + + if (hs.safari && hs.uaVersion < 525) { + this.wrapper.style.visibility = 'visible'; + } + hs.animate(wrapper, { + width: x.size + }, { + duration: hs.transitionDuration, + step: function(val, args) { + var pos = args.pos, + invPos = 1 - pos; + var prop, + size = {}, + props = ['pos', 'size', 'p1', 'p2']; + for (var n in props) { + prop = props[n]; + size['x'+ prop] = Math.round(invPos * lastX[prop] + pos * x[prop]); + size['y'+ prop] = Math.round(invPos * lastY[prop] + pos * y[prop]); + size.ximgSize = Math.round( + invPos * (lastX.imgSize || lastX.size) + pos * (x.imgSize || x.size)); + size.ximgPad = Math.round(invPos * lastX.get('imgPad') + pos * x.get('imgPad')); + size.yimgSize = Math.round( + invPos * (lastY.imgSize || lastY.size) + pos * (y.imgSize || y.size)); + size.yimgPad = Math.round(invPos * lastY.get('imgPad') + pos * y.get('imgPad')); + } + if (exp.outline) exp.outline.setPosition({ + x: size.xpos, + y: size.ypos, + w: size.xsize + size.xp1 + size.xp2 + 2 * x.cb, + h: size.ysize + size.yp1 + size.yp2 + 2 * y.cb + }); + last.wrapper.style.clip = 'rect(' + + (size.ypos - lastY.pos)+'px, ' + + (size.xsize + size.xp1 + size.xp2 + size.xpos + 2 * lastX.cb - lastX.pos) +'px, ' + + (size.ysize + size.yp1 + size.yp2 + size.ypos + 2 * lastY.cb - lastY.pos) +'px, ' + + (size.xpos - lastX.pos)+'px)'; + + hs.setStyles(content, { + top: (size.yp1 + y.get('imgPad')) +'px', + left: (size.xp1 + x.get('imgPad')) +'px', + marginTop: (y.pos - size.ypos) +'px', + marginLeft: (x.pos - size.xpos) +'px' + }); + hs.setStyles(wrapper, { + top: size.ypos +'px', + left: size.xpos +'px', + width: (size.xp1 + size.xp2 + size.xsize + 2 * x.cb)+ 'px', + height: (size.yp1 + size.yp2 + size.ysize + 2 * y.cb) + 'px' + }); + hs.setStyles(fadeBox, { + width: (size.ximgSize || size.xsize) + 'px', + height: (size.yimgSize || size.ysize) +'px', + left: (size.xp1 + size.ximgPad) +'px', + top: (size.yp1 + size.yimgPad) +'px', + visibility: 'visible' + }); + + hs.setStyles(exp.oldImg, { + top: (lastY.pos - size.ypos + lastY.p1 - size.yp1 + lastY.get('imgPad') - size.yimgPad)+'px', + left: (lastX.pos - size.xpos + lastX.p1 - size.xp1 + lastX.get('imgPad') - size.ximgPad)+'px' + }); + + hs.setStyles(exp.newImg, { + opacity: pos, + top: (y.pos - size.ypos + y.p1 - size.yp1 + y.get('imgPad') - size.yimgPad) +'px', + left: (x.pos - size.xpos + x.p1 - size.xp1 + x.get('imgPad') - size.ximgPad) +'px' + }); + if (overlayBox) hs.setStyles(overlayBox, { + width: size.xsize + 'px', + height: size.ysize +'px', + left: (size.xp1 + x.cb) +'px', + top: (size.yp1 + y.cb) +'px' + }); + }, + complete: function () { + wrapper.style.visibility = content.style.visibility = 'visible'; + content.style.display = 'block'; + hs.discardElement(fadeBox); + exp.afterExpand(); + last.afterClose(); + exp.last = null; + } + + }); +}, +reuseOverlay : function(o, el) { + if (!this.last) return false; + for (var i = 0; i < this.last.overlays.length; i++) { + var oDiv = hs.$('hsId'+ this.last.overlays[i]); + if (oDiv && oDiv.hsId == o.hsId) { + this.genOverlayBox(); + oDiv.reuse = this.key; + hs.push(this.overlays, this.last.overlays[i]); + return true; + } + } + return false; +}, + + +afterExpand : function() { + this.isExpanded = true; + this.focus(); + + if (this.isHtml && this.objectLoadTime == 'after') this.writeExtendedContent(); + if (this.iframe) { + try { + var exp = this, + doc = this.iframe.contentDocument || this.iframe.contentWindow.document; + hs.addEventListener(doc, 'mousedown', function () { + if (hs.focusKey != exp.key) exp.focus(); + }); + } catch(e) {} + if (hs.ie && typeof this.isClosing != 'boolean') // first open + this.iframe.style.width = (this.objectWidth - 1) +'px'; // hasLayout + } + if (this.dimmingOpacity) hs.dim(this); + if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null; + this.prepareNextOutline(); + var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; + this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') + && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); + if (this.overlayBox) this.showOverlays(); + hs.fireEvent(this, 'onAfterExpand'); + +}, + + +prepareNextOutline : function() { + var key = this.key; + var outlineType = this.outlineType; + new hs.Outline(outlineType, + function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); +}, + + +preloadNext : function() { + var next = this.getAdjacentAnchor(1); + if (next && next.onclick.toString().match(/hs\.expand/)) + var img = hs.createElement('img', { src: hs.getSrc(next) }); +}, + + +getAdjacentAnchor : function(op) { + var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; + if (as && !as[current + op] && this.slideshow && this.slideshow.repeat) { + if (op == 1) return as[0]; + else if (op == -1) return as[as.length-1]; + } + return (as && as[current + op]) || null; +}, + +getAnchorIndex : function() { + var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; + if (arr) for (var i = 0; i < arr.length; i++) { + if (arr[i] == this.a) return i; + } + return null; +}, + + +getNumber : function() { + if (this[this.numberPosition]) { + var arr = hs.anchors.groups[this.slideshowGroup || 'none']; + if (arr) { + var s = hs.lang.number.replace('%1', this.getAnchorIndex() + 1).replace('%2', arr.length); + this[this.numberPosition].innerHTML = + '<div class="highslide-number">'+ s +'</div>'+ this[this.numberPosition].innerHTML; + } + } +}, +initSlideshow : function() { + if (!this.last) { + for (var i = 0; i < hs.slideshows.length; i++) { + var ss = hs.slideshows[i], sg = ss.slideshowGroup; + if (typeof sg == 'undefined' || sg === null || sg === this.slideshowGroup) + this.slideshow = new hs.Slideshow(this.key, ss); + } + } else { + this.slideshow = this.last.slideshow; + } + var ss = this.slideshow; + if (!ss) return; + var key = ss.expKey = this.key; + + ss.checkFirstAndLast(); + ss.disable('full-expand'); + if (ss.controls) { + this.createOverlay(hs.extend(ss.overlayOptions || {}, { + overlayId: ss.controls, + hsId: 'controls', + zIndex: 5 + })); + } + if (ss.thumbstrip) ss.thumbstrip.add(this); + if (!this.last && this.autoplay) ss.play(true); + if (ss.autoplay) { + ss.autoplay = setTimeout(function() { + hs.next(key); + }, (ss.interval || 500)); + } +}, + +cancelLoading : function() { + hs.discardElement (this.wrapper); + hs.expanders[this.key] = null; + if (hs.upcoming == this.a) hs.upcoming = null; + hs.undim(this.key); + if (this.loading) hs.loading.style.left = '-9999px'; + hs.fireEvent(this, 'onHideLoading'); +}, + +writeCredits : function () { + if (this.credits) return; + this.credits = hs.createElement('a', { + href: hs.creditsHref, + target: hs.creditsTarget, + className: 'highslide-credits', + innerHTML: hs.lang.creditsText, + title: hs.lang.creditsTitle + }); + this.createOverlay({ + overlayId: this.credits, + position: this.creditsPosition || 'top left', + hsId: 'credits' + }); +}, + +getInline : function(types, addOverlay) { + for (var i = 0; i < types.length; i++) { + var type = types[i], s = null; + if (type == 'caption' && !hs.fireEvent(this, 'onBeforeGetCaption')) return; + else if (type == 'heading' && !hs.fireEvent(this, 'onBeforeGetHeading')) return; + if (!this[type +'Id'] && this.thumbsUserSetId) + this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId; + if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']); + if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { + s = eval(this[type +'Eval']); + } catch (e) {} + if (!this[type] && this[type +'Text']) { + s = this[type +'Text']; + } + if (!this[type] && !s) { + this[type] = hs.getNode(this.a['_'+ type + 'Id']); + if (!this[type]) { + var next = this.a.nextSibling; + while (next && !hs.isHsAnchor(next)) { + if ((new RegExp('highslide-'+ type)).test(next.className || null)) { + if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; + this[type] = hs.getNode(next.id); + break; + } + next = next.nextSibling; + } + } + } + if (!this[type] && !s && this.numberPosition == type) s = '\n'; + + if (!this[type] && s) this[type] = hs.createElement('div', + { className: 'highslide-'+ type, innerHTML: s } ); + + if (addOverlay && this[type]) { + var o = { position: (type == 'heading') ? 'above' : 'below' }; + for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; + o.overlayId = this[type]; + this.createOverlay(o); + } + } +}, + + +// on end move and resize +doShowHide : function(visibility) { + if (hs.hideSelects) this.showHideElements('SELECT', visibility); + if (hs.hideIframes) this.showHideElements('IFRAME', visibility); + if (hs.geckoMac) this.showHideElements('*', visibility); +}, +showHideElements : function (tagName, visibility) { + var els = document.getElementsByTagName(tagName); + var prop = tagName == '*' ? 'overflow' : 'visibility'; + for (var i = 0; i < els.length; i++) { + if (prop == 'visibility' || (document.defaultView.getComputedStyle( + els[i], "").getPropertyValue('overflow') == 'auto' + || els[i].getAttribute('hidden-by') != null)) { + var hiddenBy = els[i].getAttribute('hidden-by'); + if (visibility == 'visible' && hiddenBy) { + hiddenBy = hiddenBy.replace('['+ this.key +']', ''); + els[i].setAttribute('hidden-by', hiddenBy); + if (!hiddenBy) els[i].style[prop] = els[i].origProp; + } else if (visibility == 'hidden') { // hide if behind + var elPos = hs.getPosition(els[i]); + elPos.w = els[i].offsetWidth; + elPos.h = els[i].offsetHeight; + if (!this.dimmingOpacity) { // hide all if dimming + + var clearsX = (elPos.x + elPos.w < this.x.get('opos') + || elPos.x > this.x.get('opos') + this.x.get('osize')); + var clearsY = (elPos.y + elPos.h < this.y.get('opos') + || elPos.y > this.y.get('opos') + this.y.get('osize')); + } + var wrapperKey = hs.getWrapperKey(els[i]); + if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image + if (!hiddenBy) { + els[i].setAttribute('hidden-by', '['+ this.key +']'); + els[i].origProp = els[i].style[prop]; + els[i].style[prop] = 'hidden'; + + } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { + els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); + } + } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) + && wrapperKey != this.key) { // on move + els[i].setAttribute('hidden-by', ''); + els[i].style[prop] = els[i].origProp || ''; + } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { + els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); + } + + } + } + } +}, + +focus : function() { + this.wrapper.style.zIndex = hs.zIndexCounter += 2; + // blur others + for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && i == hs.focusKey) { + var blurExp = hs.expanders[i]; + blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; + if (blurExp.isImage) { + blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; + blurExp.content.title = hs.lang.focusTitle; + } + hs.fireEvent(blurExp, 'onBlur'); + } + } + + // focus this + if (this.outline) this.outline.table.style.zIndex + = this.wrapper.style.zIndex - 1; + this.content.className = 'highslide-'+ this.contentType; + if (this.isImage) { + this.content.title = hs.lang.restoreTitle; + + if (hs.restoreCursor) { + hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; + if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; + this.content.style.cursor = hs.styleRestoreCursor; + } + } + hs.focusKey = this.key; + hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + hs.fireEvent(this, 'onFocus'); +}, +moveTo: function(x, y) { + this.x.setPos(x); + this.y.setPos(y); +}, +resize : function (e) { + var w, h, r = e.width / e.height; + w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); + if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full; + h = this.isHtml ? e.height + e.dY : w / r; + if (h < Math.min(this.minHeight, this.y.full)) { + h = Math.min(this.minHeight, this.y.full); + if (this.isImage) w = h * r; + } + this.resizeTo(w, h); +}, +resizeTo: function(w, h) { + this.y.setSize(h); + this.x.setSize(w); + this.wrapper.style.height = this.y.get('wsize') +'px'; +}, + +close : function() { + if (this.isClosing || !this.isExpanded) return; + if (this.transitions[1] == 'crossfade' && hs.upcoming) { + hs.getExpander(hs.upcoming).cancelLoading(); + hs.upcoming = null; + } + if (!hs.fireEvent(this, 'onBeforeClose')) return; + this.isClosing = true; + if (this.slideshow && !hs.upcoming) this.slideshow.pause(); + + hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + + try { + if (this.isHtml) this.htmlPrepareClose(); + this.content.style.cursor = 'default'; + this.changeSize( + 0, { + wrapper: { + width : this.x.t, + height : this.y.t, + left: this.x.tpos - this.x.cb + this.x.tb, + top: this.y.tpos - this.y.cb + this.y.tb + }, + content: { + left: 0, + top: 0, + width: this.x.t, + height: this.y.t + } + }, hs.restoreDuration + ); + } catch (e) { this.afterClose(); } +}, + +htmlPrepareClose : function() { + if (hs.geckoMac) { // bad redraws + if (!hs.mask) hs.mask = hs.createElement('div', null, + { position: 'absolute' }, hs.container); + hs.setStyles(hs.mask, { width: this.x.size +'px', height: this.y.size +'px', + left: this.x.pos +'px', top: this.y.pos +'px', display: 'block' }); + } + if (this.objectType == 'swf') try { hs.$(this.body.id).StopPlay(); } catch (e) {} + + if (this.objectLoadTime == 'after' && !this.preserveContent) this.destroyObject(); + if (this.scrollerDiv && this.scrollerDiv != this.scrollingContent) + this.scrollerDiv.style.overflow = 'hidden'; +}, + +destroyObject : function () { + if (hs.ie && this.iframe) + try { this.iframe.contentWindow.document.body.innerHTML = ''; } catch (e) {} + if (this.objectType == 'swf') swfobject.removeSWF(this.body.id); + this.body.innerHTML = ''; +}, + +sleep : function() { + if (this.outline) this.outline.table.style.display = 'none'; + this.releaseMask = null; + this.wrapper.style.display = 'none'; + this.isExpanded = false; + hs.push(hs.sleeping, this); +}, + +awake : function() {try { + + hs.expanders[this.key] = this; + + if (!hs.allowMultipleInstances &&hs.focusKey != this.key) { + try { hs.expanders[hs.focusKey].close(); } catch (e){} + } + + var z = hs.zIndexCounter++, stl = { display: '', zIndex: z }; + hs.setStyles (this.wrapper, stl); + this.isClosing = false; + + var o = this.outline || 0; + if (o) { + if (!this.outlineWhileAnimating) stl.visibility = 'hidden'; + hs.setStyles (o.table, stl); + } + if (this.slideshow) { + this.initSlideshow(); + } + + this.show(); +} catch (e) {} + + +}, + +createOverlay : function (o) { + var el = o.overlayId, + relToVP = (o.relativeTo == 'viewport' && !/panel$/.test(o.position)); + if (typeof el == 'string') el = hs.getNode(el); + if (o.html) el = hs.createElement('div', { innerHTML: o.html }); + if (!el || typeof el == 'string') return; + if (!hs.fireEvent(this, 'onCreateOverlay', { overlay: el })) return; + el.style.display = 'block'; + o.hsId = o.hsId || o.overlayId; + if (this.transitions[1] == 'crossfade' && this.reuseOverlay(o, el)) return; + this.genOverlayBox(); + var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto'; + if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; + var overlay = hs.createElement( + 'div', { + id: 'hsId'+ hs.idCounter++, + hsId: o.hsId + }, { + position: 'absolute', + visibility: 'hidden', + width: width, + direction: hs.lang.cssDirection || '', + opacity: 0 + }, + relToVP ? hs.viewport :this.overlayBox, + true + ); + if (relToVP) overlay.hsKey = this.key; + + overlay.appendChild(el); + hs.extend(overlay, { + opacity: 1, + offsetX: 0, + offsetY: 0, + dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 + }); + hs.extend(overlay, o); + + + if (this.gotOverlays) { + this.positionOverlay(overlay); + if (!overlay.hideOnMouseOut || this.mouseIsOver) + hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); + } + hs.push(this.overlays, hs.idCounter - 1); +}, +positionOverlay : function(overlay) { + var p = overlay.position || 'middle center', + relToVP = (overlay.relativeTo == 'viewport'), + offX = overlay.offsetX, + offY = overlay.offsetY; + if (relToVP) { + hs.viewport.style.display = 'block'; + overlay.hsKey = this.key; + if (overlay.offsetWidth > overlay.parentNode.offsetWidth) + overlay.style.width = '100%'; + } else + if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay); + if (/left$/.test(p)) overlay.style.left = offX +'px'; + + if (/center$/.test(p)) hs.setStyles (overlay, { + left: '50%', + marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' + }); + + if (/right$/.test(p)) overlay.style.right = - offX +'px'; + + if (/^leftpanel$/.test(p)) { + hs.setStyles(overlay, { + right: '100%', + marginRight: this.x.cb +'px', + top: - this.y.cb +'px', + bottom: - this.y.cb +'px', + overflow: 'auto' + }); + this.x.p1 = overlay.offsetWidth; + + } else if (/^rightpanel$/.test(p)) { + hs.setStyles(overlay, { + left: '100%', + marginLeft: this.x.cb +'px', + top: - this.y.cb +'px', + bottom: - this.y.cb +'px', + overflow: 'auto' + }); + this.x.p2 = overlay.offsetWidth; + } + var parOff = overlay.parentNode.offsetHeight; + overlay.style.height = 'auto'; + if (relToVP && overlay.offsetHeight > parOff) + overlay.style.height = hs.ieLt7 ? parOff +'px' : '100%'; + + if (/^top/.test(p)) overlay.style.top = offY +'px'; + if (/^middle/.test(p)) hs.setStyles (overlay, { + top: '50%', + marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' + }); + if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px'; + if (/^above$/.test(p)) { + hs.setStyles(overlay, { + left: (- this.x.p1 - this.x.cb) +'px', + right: (- this.x.p2 - this.x.cb) +'px', + bottom: '100%', + marginBottom: this.y.cb +'px', + width: 'auto' + }); + this.y.p1 = overlay.offsetHeight; + + } else if (/^below$/.test(p)) { + hs.setStyles(overlay, { + position: 'relative', + left: (- this.x.p1 - this.x.cb) +'px', + right: (- this.x.p2 - this.x.cb) +'px', + top: '100%', + marginTop: this.y.cb +'px', + width: 'auto' + }); + this.y.p2 = overlay.offsetHeight; + overlay.style.position = 'absolute'; + } +}, + +getOverlays : function() { + this.getInline(['heading', 'caption'], true); + this.getNumber(); + if (this.caption) hs.fireEvent(this, 'onAfterGetCaption'); + if (this.heading) hs.fireEvent(this, 'onAfterGetHeading'); + if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move'; + if (hs.showCredits) this.writeCredits(); + for (var i = 0; i < hs.overlays.length; i++) { + var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; + if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) + || (sg && sg === this.slideshowGroup)) { + if (this.isImage || (this.isHtml && o.useOnHtml)) + this.createOverlay(o); + } + } + var os = []; + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + if (/panel$/.test(o.position)) this.positionOverlay(o); + else hs.push(os, o); + } + for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); + this.gotOverlays = true; +}, +genOverlayBox : function() { + if (!this.overlayBox) this.overlayBox = hs.createElement ( + 'div', { + className: this.wrapperClassName + }, { + position : 'absolute', + width: (this.x.size || (this.useBox ? this.width : null) + || this.x.full) +'px', + height: (this.y.size || this.y.full) +'px', + visibility : 'hidden', + overflow : 'hidden', + zIndex : hs.ie ? 4 : 'auto' + }, + hs.container, + true + ); +}, +sizeOverlayBox : function(doWrapper, doPanels) { + var overlayBox = this.overlayBox, + x = this.x, + y = this.y; + hs.setStyles( overlayBox, { + width: x.size +'px', + height: y.size +'px' + }); + if (doWrapper || doPanels) { + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); + if (o && /^(above|below)$/.test(o.position)) { + if (ie6) { + o.style.width = (overlayBox.offsetWidth + 2 * x.cb + + x.p1 + x.p2) +'px'; + } + y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; + } + if (o && ie6 && /^(left|right)panel$/.test(o.position)) { + o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; + } + } + } + if (doWrapper) { + hs.setStyles(this.content, { + top: y.p1 +'px' + }); + hs.setStyles(overlayBox, { + top: (y.p1 + y.cb) +'px' + }); + } +}, + +showOverlays : function() { + var b = this.overlayBox; + b.className = ''; + hs.setStyles(b, { + top: (this.y.p1 + this.y.cb) +'px', + left: (this.x.p1 + this.x.cb) +'px', + overflow : 'visible' + }); + if (hs.safari) b.style.visibility = 'visible'; + this.wrapper.appendChild (b); + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + o.style.zIndex = o.zIndex || 4; + if (!o.hideOnMouseOut || this.mouseIsOver) { + o.style.visibility = 'visible'; + hs.setStyles(o, { visibility: 'visible', display: '' }); + hs.animate(o, { opacity: o.opacity }, o.dur); + } + } +}, + +destroyOverlays : function() { + if (!this.overlays.length) return; + if (this.slideshow) { + var c = this.slideshow.controls; + if (c && hs.getExpander(c) == this) c.parentNode.removeChild(c); + } + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + if (o && o.parentNode == hs.viewport && hs.getExpander(o) == this) hs.discardElement(o); + } + if (this.isHtml && this.preserveContent) { + this.overlayBox.style.top = '-9999px'; + hs.container.appendChild(this.overlayBox); + } else + hs.discardElement(this.overlayBox); +}, + + + +createFullExpand : function () { + if (this.slideshow && this.slideshow.controls) { + this.slideshow.enable('full-expand'); + return; + } + this.fullExpandLabel = hs.createElement( + 'a', { + href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', + title: hs.lang.fullExpandTitle, + className: 'highslide-full-expand' + } + ); + if (!hs.fireEvent(this, 'onCreateFullExpand')) return; + + this.createOverlay({ + overlayId: this.fullExpandLabel, + position: hs.fullExpandPosition, + hideOnMouseOut: true, + opacity: hs.fullExpandOpacity + }); +}, + +doFullExpand : function () { + try { + if (!hs.fireEvent(this, 'onDoFullExpand')) return; + if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); + + this.focus(); + var xSize = this.x.size, + ySize = this.y.size; + this.resizeTo(this.x.full, this.y.full); + + var xpos = this.x.pos - (this.x.size - xSize) / 2; + if (xpos < hs.marginLeft) xpos = hs.marginLeft; + + var ypos = this.y.pos - (this.y.size - ySize) / 2; + if (ypos < hs.marginTop) ypos = hs.marginTop; + + this.moveTo(xpos, ypos); + this.doShowHide('hidden'); + + } catch (e) { + this.error(e); + } +}, + + +afterClose : function () { + this.a.className = this.a.className.replace('highslide-active-anchor', ''); + + this.doShowHide('visible'); + + if (this.isHtml && this.preserveContent + && this.transitions[1] != 'crossfade') { + this.sleep(); + } else { + if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); + + hs.discardElement(this.wrapper); + } + if (hs.mask) hs.mask.style.display = 'none'; + this.destroyOverlays(); + if (!hs.viewport.childNodes.length) hs.viewport.style.display = 'none'; + + if (this.dimmingOpacity) hs.undim(this.key); + hs.fireEvent(this, 'onAfterClose'); + hs.expanders[this.key] = null; + hs.reOrder(); +} + +}; + + +// hs.Ajax object prototype +hs.Ajax = function (a, content, pre) { + this.a = a; + this.content = content; + this.pre = pre; +}; + +hs.Ajax.prototype = { +run : function () { + var xhr; + if (!this.src) this.src = hs.getSrc(this.a); + if (this.src.match('#')) { + var arr = this.src.split('#'); + this.src = arr[0]; + this.id = arr[1]; + } + if (hs.cachedGets[this.src]) { + this.cachedGet = hs.cachedGets[this.src]; + if (this.id) this.getElementContent(); + else this.loadHTML(); + return; + } + try { xhr = new XMLHttpRequest(); } + catch (e) { + try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } + catch (e) { + try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } + catch (e) { this.onError(); } + } + } + var pThis = this; + xhr.onreadystatechange = function() { + if(pThis.xhr.readyState == 4) { + if (pThis.id) pThis.getElementContent(); + else pThis.loadHTML(); + } + }; + var src = this.src; + this.xhr = xhr; + if (hs.forceAjaxReload) + src = src.replace(/$/, (/\?/.test(src) ? '&' : '?') +'dummy='+ (new Date()).getTime()); + xhr.open('GET', src, true); + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.send(null); +}, + +getElementContent : function() { + hs.init(); + var attribs = window.opera || hs.ie6SSL ? { src: 'about:blank' } : null; + + this.iframe = hs.createElement('iframe', attribs, + { position: 'absolute', top: '-9999px' }, hs.container); + + this.loadHTML(); +}, + +loadHTML : function() { + var s = this.cachedGet || this.xhr.responseText, + regBody; + if (this.pre) hs.cachedGets[this.src] = s; + if (!hs.ie || hs.uaVersion >= 5.5) { + s = s.replace(new RegExp('<link[^>]*>', 'gi'), '') + .replace(new RegExp('<script[^>]*>.*?</script>', 'gi'), ''); + if (this.iframe) { + var doc = this.iframe.contentDocument; + if (!doc && this.iframe.contentWindow) doc = this.iframe.contentWindow.document; + if (!doc) { // Opera + var pThis = this; + setTimeout(function() { pThis.loadHTML(); }, 25); + return; + } + doc.open(); + doc.write(s); + doc.close(); + try { s = doc.getElementById(this.id).innerHTML; } catch (e) { + try { s = this.iframe.document.getElementById(this.id).innerHTML; } catch (e) {} // opera + } + hs.discardElement(this.iframe); + } else { + regBody = /(<body[^>]*>|<\/body>)/ig; + if (regBody.test(s)) s = s.split(regBody)[hs.ieLt9 ? 1 : 2]; + + } + } + hs.getElementByClass(this.content, 'DIV', 'highslide-body').innerHTML = s; + this.onLoad(); + for (var x in this) this[x] = null; +} +}; + + +hs.Slideshow = function (expKey, options) { + if (hs.dynamicallyUpdateAnchors !== false) hs.updateAnchors(); + this.expKey = expKey; + for (var x in options) this[x] = options[x]; + if (this.useControls) this.getControls(); + if (this.thumbstrip) this.thumbstrip = hs.Thumbstrip(this); +}; +hs.Slideshow.prototype = { +getControls: function() { + this.controls = hs.createElement('div', { innerHTML: hs.replaceLang(hs.skin.controls) }, + null, hs.container); + + var buttons = ['play', 'pause', 'previous', 'next', 'move', 'full-expand', 'close']; + this.btn = {}; + var pThis = this; + for (var i = 0; i < buttons.length; i++) { + this.btn[buttons[i]] = hs.getElementByClass(this.controls, 'li', 'highslide-'+ buttons[i]); + this.enable(buttons[i]); + } + this.btn.pause.style.display = 'none'; + //this.disable('full-expand'); +}, +checkFirstAndLast: function() { + if (this.repeat || !this.controls) return; + var exp = hs.expanders[this.expKey], + cur = exp.getAnchorIndex(), + re = /disabled$/; + if (cur == 0) + this.disable('previous'); + else if (re.test(this.btn.previous.getElementsByTagName('a')[0].className)) + this.enable('previous'); + if (cur + 1 == hs.anchors.groups[exp.slideshowGroup || 'none'].length) { + this.disable('next'); + this.disable('play'); + } else if (re.test(this.btn.next.getElementsByTagName('a')[0].className)) { + this.enable('next'); + this.enable('play'); + } +}, +enable: function(btn) { + if (!this.btn) return; + var sls = this, a = this.btn[btn].getElementsByTagName('a')[0], re = /disabled$/; + a.onclick = function() { + sls[btn](); + return false; + }; + if (re.test(a.className)) a.className = a.className.replace(re, ''); +}, +disable: function(btn) { + if (!this.btn) return; + var a = this.btn[btn].getElementsByTagName('a')[0]; + a.onclick = function() { return false; }; + if (!/disabled$/.test(a.className)) a.className += ' disabled'; +}, +hitSpace: function() { + if (this.autoplay) this.pause(); + else this.play(); +}, +play: function(wait) { + if (this.btn) { + this.btn.play.style.display = 'none'; + this.btn.pause.style.display = ''; + } + + this.autoplay = true; + if (!wait) hs.next(this.expKey); +}, +pause: function() { + if (this.btn) { + this.btn.pause.style.display = 'none'; + this.btn.play.style.display = ''; + } + + clearTimeout(this.autoplay); + this.autoplay = null; +}, +previous: function() { + this.pause(); + hs.previous(this.btn.previous); +}, +next: function() { + this.pause(); + hs.next(this.btn.next); +}, +move: function() {}, +'full-expand': function() { + hs.getExpander().doFullExpand(); +}, +close: function() { + hs.close(this.btn.close); +} +}; +hs.Thumbstrip = function(slideshow) { + function add (exp) { + hs.extend(options || {}, { + overlayId: dom, + hsId: 'thumbstrip', + className: 'highslide-thumbstrip-'+ mode +'-overlay ' + (options.className || '') + }); + if (hs.ieLt7) options.fade = 0; + exp.createOverlay(options); + hs.setStyles(dom.parentNode, { overflow: 'hidden' }); + }; + + function scroll (delta) { + selectThumb(undefined, Math.round(delta * dom[isX ? 'offsetWidth' : 'offsetHeight'] * 0.7)); + }; + + function selectThumb (i, scrollBy) { + if (i === undefined) for (var j = 0; j < group.length; j++) { + if (group[j] == hs.expanders[slideshow.expKey].a) { + i = j; + break; + } + } + if (i === undefined) return; + var as = dom.getElementsByTagName('a'), + active = as[i], + cell = active.parentNode, + left = isX ? 'Left' : 'Top', + right = isX ? 'Right' : 'Bottom', + width = isX ? 'Width' : 'Height', + offsetLeft = 'offset' + left, + offsetWidth = 'offset' + width, + overlayWidth = div.parentNode.parentNode[offsetWidth], + minTblPos = overlayWidth - table[offsetWidth], + curTblPos = parseInt(table.style[isX ? 'left' : 'top']) || 0, + tblPos = curTblPos, + mgnRight = 20; + if (scrollBy !== undefined) { + tblPos = curTblPos - scrollBy; + + if (minTblPos > 0) minTblPos = 0; + if (tblPos > 0) tblPos = 0; + if (tblPos < minTblPos) tblPos = minTblPos; + + + } else { + for (var j = 0; j < as.length; j++) as[j].className = ''; + active.className = 'highslide-active-anchor'; + var activeLeft = i > 0 ? as[i - 1].parentNode[offsetLeft] : cell[offsetLeft], + activeRight = cell[offsetLeft] + cell[offsetWidth] + + (as[i + 1] ? as[i + 1].parentNode[offsetWidth] : 0); + if (activeRight > overlayWidth - curTblPos) tblPos = overlayWidth - activeRight; + else if (activeLeft < -curTblPos) tblPos = -activeLeft; + } + var markerPos = cell[offsetLeft] + (cell[offsetWidth] - marker[offsetWidth]) / 2 + tblPos; + hs.animate(table, isX ? { left: tblPos } : { top: tblPos }, null, 'easeOutQuad'); + hs.animate(marker, isX ? { left: markerPos } : { top: markerPos }, null, 'easeOutQuad'); + scrollUp.style.display = tblPos < 0 ? 'block' : 'none'; + scrollDown.style.display = (tblPos > minTblPos) ? 'block' : 'none'; + + }; + + + // initialize + var group = hs.anchors.groups[hs.expanders[slideshow.expKey].slideshowGroup || 'none'], + options = slideshow.thumbstrip, + mode = options.mode || 'horizontal', + floatMode = (mode == 'float'), + tree = floatMode ? ['div', 'ul', 'li', 'span'] : ['table', 'tbody', 'tr', 'td'], + isX = (mode == 'horizontal'), + dom = hs.createElement('div', { + className: 'highslide-thumbstrip highslide-thumbstrip-'+ mode, + innerHTML: + '<div class="highslide-thumbstrip-inner">'+ + '<'+ tree[0] +'><'+ tree[1] +'></'+ tree[1] +'></'+ tree[0] +'></div>'+ + '<div class="highslide-scroll-up"><div></div></div>'+ + '<div class="highslide-scroll-down"><div></div></div>'+ + '<div class="highslide-marker"><div></div></div>' + }, { + display: 'none' + }, hs.container), + domCh = dom.childNodes, + div = domCh[0], + scrollUp = domCh[1], + scrollDown = domCh[2], + marker = domCh[3], + table = div.firstChild, + tbody = dom.getElementsByTagName(tree[1])[0], + tr; + for (var i = 0; i < group.length; i++) { + if (i == 0 || !isX) tr = hs.createElement(tree[2], null, null, tbody); + (function(){ + var a = group[i], + cell = hs.createElement(tree[3], null, null, tr), + pI = i; + hs.createElement('a', { + href: a.href, + title: a.title, + onclick: function() { + if (/highslide-active-anchor/.test(this.className)) return false; + hs.getExpander(this).focus(); + return hs.transit(a); + }, + innerHTML: hs.stripItemFormatter ? hs.stripItemFormatter(a) : a.innerHTML + }, null, cell); + })(); + } + if (!floatMode) { + scrollUp.onclick = function () { scroll(-1); }; + scrollDown.onclick = function() { scroll(1); }; + hs.addEventListener(tbody, document.onmousewheel !== undefined ? + 'mousewheel' : 'DOMMouseScroll', function(e) { + var delta = 0; + e = e || window.event; + if (e.wheelDelta) { + delta = e.wheelDelta/120; + if (hs.opera) delta = -delta; + } else if (e.detail) { + delta = -e.detail/3; + } + if (delta) scroll(-delta * 0.2); + if (e.preventDefault) e.preventDefault(); + e.returnValue = false; + }); + } + + return { + add: add, + selectThumb: selectThumb + } +}; +hs.langDefaults = hs.lang; +// history +var HsExpander = hs.Expander; +if (hs.ie && window == window.top) { + (function () { + try { + document.documentElement.doScroll('left'); + } catch (e) { + setTimeout(arguments.callee, 50); + return; + } + hs.ready(); + })(); +} +hs.addEventListener(document, 'DOMContentLoaded', hs.ready); +hs.addEventListener(window, 'load', hs.ready); + +// set handlers +hs.addEventListener(document, 'ready', function() { + if (hs.expandCursor || hs.dimmingOpacity) { + var style = hs.createElement('style', { type: 'text/css' }, null, + document.getElementsByTagName('HEAD')[0]), + backCompat = document.compatMode == 'BackCompat'; + + + function addRule(sel, dec) { + if (hs.ie && (hs.uaVersion < 9 || backCompat)) { + var last = document.styleSheets[document.styleSheets.length - 1]; + if (typeof(last.addRule) == "object") last.addRule(sel, dec); + } else { + style.appendChild(document.createTextNode(sel + " {" + dec + "}")); + } + } + function fix(prop) { + return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + + ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; + } + if (hs.expandCursor) addRule ('.highslide img', + 'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); + addRule ('.highslide-viewport-size', + hs.ie && (hs.uaVersion < 7 || backCompat) ? + 'position: absolute; '+ + 'left:'+ fix('scrollLeft') + + 'top:'+ fix('scrollTop') + + 'width:'+ fix('clientWidth') + + 'height:'+ fix('clientHeight') : + 'position: fixed; width: 100%; height: 100%; left: 0; top: 0'); + } +}); +hs.addEventListener(window, 'resize', function() { + hs.getPageSize(); + if (hs.viewport) for (var i = 0; i < hs.viewport.childNodes.length; i++) { + var node = hs.viewport.childNodes[i], + exp = hs.getExpander(node); + exp.positionOverlay(node); + if (node.hsId == 'thumbstrip') exp.slideshow.thumbstrip.selectThumb(); + } +}); +hs.addEventListener(document, 'mousemove', function(e) { + hs.mouse = { x: e.clientX, y: e.clientY }; +}); +hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); +hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); +hs.addEventListener(document, 'ready', hs.setClickEvents); +hs.addEventListener(window, 'load', hs.preloadImages); +hs.addEventListener(window, 'load', hs.preloadAjax); +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.min.js index 8674ad9b2fa9b67a83ea7849fa9940d69619230f..e4f6f2ec57c4f211db05782ddd7ace7db8731c15 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.min.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.min.js @@ -1,9 +1,9 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) - * Config: default +events +unobtrusive +imagemap +slideshow +positioning +transitions +viewport +thumbstrip +inline +ajax +iframe +flash - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ -if(!hs){var hs={lang:{cssDirection:"ltr",loadingText:"Loading...",loadingTitle:"Click to cancel",focusTitle:"Click to bring to front",fullExpandTitle:"Expand to actual size (f)",creditsText:"Powered by <i>Highslide JS</i>",creditsTitle:"Go to the Highslide JS homepage",previousText:"Previous",nextText:"Next",moveText:"Move",closeText:"Close",closeTitle:"Close (esc)",resizeTitle:"Resize",playText:"Play",playTitle:"Play slideshow (spacebar)",pauseText:"Pause",pauseTitle:"Pause slideshow (spacebar)",previousTitle:"Previous (arrow left)",nextTitle:"Next (arrow right)",moveTitle:"Move",fullExpandText:"1:1",number:"Image %1 of %2",restoreTitle:"Click to close image, click and drag to move. Use arrow keys for next and previous."},graphicsDir:"highslide/graphics/",expandCursor:"zoomin.cur",restoreCursor:"zoomout.cur",expandDuration:250,restoreDuration:250,marginLeft:15,marginRight:15,marginTop:15,marginBottom:15,zIndexCounter:10001,loadingOpacity:0.75,allowMultipleInstances:true,numberOfImagesToPreload:5,outlineWhileAnimating:2,outlineStartOffset:3,padToMinWidth:false,fullExpandPosition:"bottom right",fullExpandOpacity:1,showCredits:true,creditsHref:"http://highslide.com/",creditsTarget:"_self",enableKeyListener:true,openerTagNames:["a","area"],transitions:[],transitionDuration:250,dimmingOpacity:0,dimmingDuration:50,allowWidthReduction:false,allowHeightReduction:true,preserveContent:true,objectLoadTime:"before",cacheAjax:true,anchor:"auto",align:"auto",targetX:null,targetY:null,dragByHeading:true,minWidth:200,minHeight:200,allowSizeReduction:true,outlineType:"drop-shadow",skin:{controls:'<div class="highslide-controls"><ul><li class="highslide-previous"><a href="#" title="{hs.lang.previousTitle}"><span>{hs.lang.previousText}</span></a></li><li class="highslide-play"><a href="#" title="{hs.lang.playTitle}"><span>{hs.lang.playText}</span></a></li><li class="highslide-pause"><a href="#" title="{hs.lang.pauseTitle}"><span>{hs.lang.pauseText}</span></a></li><li class="highslide-next"><a href="#" title="{hs.lang.nextTitle}"><span>{hs.lang.nextText}</span></a></li><li class="highslide-move"><a href="#" title="{hs.lang.moveTitle}"><span>{hs.lang.moveText}</span></a></li><li class="highslide-full-expand"><a href="#" title="{hs.lang.fullExpandTitle}"><span>{hs.lang.fullExpandText}</span></a></li><li class="highslide-close"><a href="#" title="{hs.lang.closeTitle}" ><span>{hs.lang.closeText}</span></a></li></ul></div>',contentWrapper:'<div class="highslide-header"><ul><li class="highslide-previous"><a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)"><span>{hs.lang.previousText}</span></a></li><li class="highslide-next"><a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)"><span>{hs.lang.nextText}</span></a></li><li class="highslide-move"><a href="#" title="{hs.lang.moveTitle}" onclick="return false"><span>{hs.lang.moveText}</span></a></li><li class="highslide-close"><a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)"><span>{hs.lang.closeText}</span></a></li></ul></div><div class="highslide-body"></div><div class="highslide-footer"><div><span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span></div></div>'},preloadTheseImages:[],continuePreloading:true,expanders:[],overrides:["allowSizeReduction","useBox","anchor","align","targetX","targetY","outlineType","outlineWhileAnimating","captionId","captionText","captionEval","captionOverlay","headingId","headingText","headingEval","headingOverlay","creditsPosition","dragByHeading","autoplay","numberPosition","transitions","dimmingOpacity","width","height","contentId","allowWidthReduction","allowHeightReduction","preserveContent","maincontentId","maincontentText","maincontentEval","objectType","cacheAjax","objectWidth","objectHeight","objectLoadTime","swfOptions","wrapperClassName","minWidth","minHeight","maxWidth","maxHeight","pageOrigin","slideshowGroup","easing","easingClose","fadeInOut","src"],overlays:[],idCounter:0,oPos:{x:["leftpanel","left","center","right","rightpanel"],y:["above","top","middle","bottom","below"]},mouse:{},headingOverlay:{},captionOverlay:{},swfOptions:{flashvars:{},params:{},attributes:{}},timers:[],slideshows:[],pendingOutlines:{},sleeping:[],preloadTheseAjax:[],cacheBindings:[],cachedGets:{},clones:{},onReady:[],uaVersion:/Trident\/4\.0/.test(navigator.userAgent)?8:parseFloat((navigator.userAgent.toLowerCase().match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1]),ie:(document.all&&!window.opera),safari:/Safari/.test(navigator.userAgent),geckoMac:/Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent),$:function(a){if(a){return document.getElementById(a)}},push:function(a,b){a[a.length]=b},createElement:function(a,f,e,d,c){var b=document.createElement(a);if(f){hs.extend(b,f)}if(c){hs.setStyles(b,{padding:0,border:"none",margin:0})}if(e){hs.setStyles(b,e)}if(d){d.appendChild(b)}return b},extend:function(b,c){for(var a in c){b[a]=c[a]}return b},setStyles:function(b,c){for(var a in c){if(hs.ieLt9&&a=="opacity"){if(c[a]>0.99){b.style.removeAttribute("filter")}else{b.style.filter="alpha(opacity="+(c[a]*100)+")"}}else{b.style[a]=c[a]}}},animate:function(f,a,d){var c,g,j;if(typeof d!="object"||d===null){var i=arguments;d={duration:i[2],easing:i[3],complete:i[4]}}if(typeof d.duration!="number"){d.duration=250}d.easing=Math[d.easing]||Math.easeInQuad;d.curAnim=hs.extend({},a);for(var b in a){var h=new hs.fx(f,d,b);c=parseFloat(hs.css(f,b))||0;g=parseFloat(a[b]);j=b!="opacity"?"px":"";h.custom(c,g,j)}},css:function(a,c){if(a.style[c]){return a.style[c]}else{if(document.defaultView){return document.defaultView.getComputedStyle(a,null).getPropertyValue(c)}else{if(c=="opacity"){c="filter"}var b=a.currentStyle[c.replace(/\-(\w)/g,function(e,d){return d.toUpperCase()})];if(c=="filter"){b=b.replace(/alpha\(opacity=([0-9]+)\)/,function(e,d){return d/100})}return b===""?1:b}}},getPageSize:function(){var f=document,b=window,e=f.compatMode&&f.compatMode!="BackCompat"?f.documentElement:f.body,g=hs.ie&&(hs.uaVersion<9||typeof pageXOffset=="undefined");var c=g?e.clientWidth:(f.documentElement.clientWidth||self.innerWidth),a=g?e.clientHeight:self.innerHeight;hs.page={width:c,height:a,scrollLeft:g?e.scrollLeft:pageXOffset,scrollTop:g?e.scrollTop:pageYOffset};return hs.page},getPosition:function(c){if(/area/i.test(c.tagName)){var e=document.getElementsByTagName("img");for(var b=0;b<e.length;b++){var a=e[b].useMap;if(a&&a.replace(/^.*?#/,"")==c.parentNode.name){c=e[b];break}}}var d={x:c.offsetLeft,y:c.offsetTop};while(c.offsetParent){c=c.offsetParent;d.x+=c.offsetLeft;d.y+=c.offsetTop;if(c!=document.body&&c!=document.documentElement){d.x-=c.scrollLeft;d.y-=c.scrollTop}}return d},expand:function(b,h,f,d){if(!b){b=hs.createElement("a",null,{display:"none"},hs.container)}if(typeof b.getParams=="function"){return h}if(d=="html"){for(var c=0;c<hs.sleeping.length;c++){if(hs.sleeping[c]&&hs.sleeping[c].a==b){hs.sleeping[c].awake();hs.sleeping[c]=null;return false}}hs.hasHtmlExpanders=true}try{new hs.Expander(b,h,f,d);return false}catch(g){return true}},htmlExpand:function(b,d,c){return hs.expand(b,d,c,"html")},getSelfRendered:function(){return hs.createElement("div",{className:"highslide-html-content",innerHTML:hs.replaceLang(hs.skin.contentWrapper)})},getElementByClass:function(e,c,d){var b=e.getElementsByTagName(c);for(var a=0;a<b.length;a++){if((new RegExp(d)).test(b[a].className)){return b[a]}}return null},replaceLang:function(c){c=c.replace(/\s/g," ");var b=/{hs\.lang\.([^}]+)\}/g,d=c.match(b),e;if(d){for(var a=0;a<d.length;a++){e=d[a].replace(b,"$1");if(typeof hs.lang[e]!="undefined"){c=c.replace(d[a],hs.lang[e])}}}return c},setClickEvents:function(){var b=document.getElementsByTagName("a");for(var a=0;a<b.length;a++){var c=hs.isUnobtrusiveAnchor(b[a]);if(c&&!b[a].hsHasSetClick){(function(){var d=c;if(hs.fireEvent(hs,"onSetClickEvent",{element:b[a],type:d})){b[a].onclick=(c=="image")?function(){return hs.expand(this)}:function(){return hs.htmlExpand(this,{objectType:d})}}})();b[a].hsHasSetClick=true}}hs.getAnchors()},isUnobtrusiveAnchor:function(a){if(a.rel=="highslide"){return"image"}else{if(a.rel=="highslide-ajax"){return"ajax"}else{if(a.rel=="highslide-iframe"){return"iframe"}else{if(a.rel=="highslide-swf"){return"swf"}}}}},getCacheBinding:function(b){for(var d=0;d<hs.cacheBindings.length;d++){if(hs.cacheBindings[d][0]==b){var e=hs.cacheBindings[d][1];hs.cacheBindings[d][1]=e.cloneNode(1);return e}}return null},preloadAjax:function(f){var b=hs.getAnchors();for(var d=0;d<b.htmls.length;d++){var c=b.htmls[d];if(hs.getParam(c,"objectType")=="ajax"&&hs.getParam(c,"cacheAjax")){hs.push(hs.preloadTheseAjax,c)}}hs.preloadAjaxElement(0)},preloadAjaxElement:function(d){if(!hs.preloadTheseAjax[d]){return}var b=hs.preloadTheseAjax[d];var c=hs.getNode(hs.getParam(b,"contentId"));if(!c){c=hs.getSelfRendered()}var e=new hs.Ajax(b,c,1);e.onError=function(){};e.onLoad=function(){hs.push(hs.cacheBindings,[b,c]);hs.preloadAjaxElement(d+1)};e.run()},focusTopmost:function(){var c=0,b=-1,a=hs.expanders,e,f;for(var d=0;d<a.length;d++){e=a[d];if(e){f=e.wrapper.style.zIndex;if(f&&f>c){c=f;b=d}}}if(b==-1){hs.focusKey=-1}else{a[b].focus()}},getParam:function(b,d){b.getParams=b.onclick;var c=b.getParams?b.getParams():null;b.getParams=null;return(c&&typeof c[d]!="undefined")?c[d]:(typeof hs[d]!="undefined"?hs[d]:null)},getSrc:function(b){var c=hs.getParam(b,"src");if(c){return c}return b.href},getNode:function(e){var c=hs.$(e),d=hs.clones[e],b={};if(!c&&!d){return null}if(!d){d=c.cloneNode(true);d.id="";hs.clones[e]=d;return c}else{return d.cloneNode(true)}},discardElement:function(a){if(a){hs.garbageBin.appendChild(a)}hs.garbageBin.innerHTML=""},dim:function(d){if(!hs.dimmer){a=true;hs.dimmer=hs.createElement("div",{className:"highslide-dimming highslide-viewport-size",owner:"",onclick:function(){if(hs.fireEvent(hs,"onDimmerClick")){hs.close()}}},{visibility:"visible",opacity:0},hs.container,true);if(/(Android|iPad|iPhone|iPod)/.test(navigator.userAgent)){var b=document.body;function c(){hs.setStyles(hs.dimmer,{width:b.scrollWidth+"px",height:b.scrollHeight+"px"})}c();hs.addEventListener(window,"resize",c)}}hs.dimmer.style.display="";var a=hs.dimmer.owner=="";hs.dimmer.owner+="|"+d.key;if(a){if(hs.geckoMac&&hs.dimmingGeckoFix){hs.setStyles(hs.dimmer,{background:"url("+hs.graphicsDir+"geckodimmer.png)",opacity:1})}else{hs.animate(hs.dimmer,{opacity:d.dimmingOpacity},hs.dimmingDuration)}}},undim:function(a){if(!hs.dimmer){return}if(typeof a!="undefined"){hs.dimmer.owner=hs.dimmer.owner.replace("|"+a,"")}if((typeof a!="undefined"&&hs.dimmer.owner!="")||(hs.upcoming&&hs.getParam(hs.upcoming,"dimmingOpacity"))){return}if(hs.geckoMac&&hs.dimmingGeckoFix){hs.dimmer.style.display="none"}else{hs.animate(hs.dimmer,{opacity:0},hs.dimmingDuration,null,function(){hs.dimmer.style.display="none"})}},transit:function(a,d){var b=d||hs.getExpander();d=b;if(hs.upcoming){return false}else{hs.last=b}hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{hs.upcoming=a;a.onclick()}catch(c){hs.last=hs.upcoming=null}try{if(!a||d.transitions[1]!="crossfade"){d.close()}}catch(c){}return false},previousOrNext:function(a,c){var b=hs.getExpander(a);if(b){return hs.transit(b.getAdjacentAnchor(c),b)}else{return false}},previous:function(a){return hs.previousOrNext(a,-1)},next:function(a){return hs.previousOrNext(a,1)},keyHandler:function(a){if(!a){a=window.event}if(!a.target){a.target=a.srcElement}if(typeof a.target.form!="undefined"){return true}if(!hs.fireEvent(hs,"onKeyDown",a)){return true}var b=hs.getExpander();var c=null;switch(a.keyCode){case 70:if(b){b.doFullExpand()}return true;case 32:c=2;break;case 34:case 39:case 40:c=1;break;case 8:case 33:case 37:case 38:c=-1;break;case 27:case 13:c=0}if(c!==null){if(c!=2){hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler)}if(!hs.enableKeyListener){return true}if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}if(b){if(c==0){b.close()}else{if(c==2){if(b.slideshow){b.slideshow.hitSpace()}}else{if(b.slideshow){b.slideshow.pause()}hs.previousOrNext(b.key,c)}}return false}}return true},registerOverlay:function(a){hs.push(hs.overlays,hs.extend(a,{hsId:"hsId"+hs.idCounter++}))},addSlideshow:function(b){var d=b.slideshowGroup;if(typeof d=="object"){for(var c=0;c<d.length;c++){var e={};for(var a in b){e[a]=b[a]}e.slideshowGroup=d[c];hs.push(hs.slideshows,e)}}else{hs.push(hs.slideshows,b)}},getWrapperKey:function(c,b){var e,d=/^highslide-wrapper-([0-9]+)$/;e=c;while(e.parentNode){if(e.hsKey!==undefined){return e.hsKey}if(e.id&&d.test(e.id)){return e.id.replace(d,"$1")}e=e.parentNode}if(!b){e=c;while(e.parentNode){if(e.tagName&&hs.isHsAnchor(e)){for(var a=0;a<hs.expanders.length;a++){var f=hs.expanders[a];if(f&&f.a==e){return a}}}e=e.parentNode}}return null},getExpander:function(b,a){if(typeof b=="undefined"){return hs.expanders[hs.focusKey]||null}if(typeof b=="number"){return hs.expanders[b]||null}if(typeof b=="string"){b=hs.$(b)}return hs.expanders[hs.getWrapperKey(b,a)]||null},isHsAnchor:function(b){return(b.onclick&&b.onclick.toString().replace(/\s/g," ").match(/hs.(htmlE|e)xpand/))},reOrder:function(){for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&hs.expanders[a].isExpanded){hs.focusTopmost()}}},fireEvent:function(c,a,b){return c&&c[a]?(c[a](c,b)!==false):true},mouseClickHandler:function(d){if(!d){d=window.event}if(d.button>1){return true}if(!d.target){d.target=d.srcElement}var b=d.target;while(b.parentNode&&!(/highslide-(image|move|html|resize)/.test(b.className))){b=b.parentNode}var f=hs.getExpander(b);if(f&&(f.isClosing||!f.isExpanded)){return true}if(f&&d.type=="mousedown"){if(d.target.form){return true}var a=b.className.match(/highslide-(image|move|resize)/);if(a){hs.dragArgs={exp:f,type:a[1],left:f.x.pos,width:f.x.size,top:f.y.pos,height:f.y.size,clickX:d.clientX,clickY:d.clientY};hs.addEventListener(document,"mousemove",hs.dragHandler);if(d.preventDefault){d.preventDefault()}if(/highslide-(image|html)-blur/.test(f.content.className)){f.focus();hs.hasFocused=true}return false}else{if(/highslide-html/.test(b.className)&&hs.focusKey!=f.key){f.focus();f.doShowHide("hidden")}}}else{if(d.type=="mouseup"){hs.removeEventListener(document,"mousemove",hs.dragHandler);if(hs.dragArgs){if(hs.styleRestoreCursor&&hs.dragArgs.type=="image"){hs.dragArgs.exp.content.style.cursor=hs.styleRestoreCursor}var c=hs.dragArgs.hasDragged;if(!c&&!hs.hasFocused&&!/(move|resize)/.test(hs.dragArgs.type)){if(hs.fireEvent(f,"onImageClick")){f.close()}}else{if(c||(!c&&hs.hasHtmlExpanders)){hs.dragArgs.exp.doShowHide("hidden")}}if(hs.dragArgs.exp.releaseMask){hs.dragArgs.exp.releaseMask.style.display="none"}if(c){hs.fireEvent(hs.dragArgs.exp,"onDrop",hs.dragArgs)}hs.hasFocused=false;hs.dragArgs=null}else{if(/highslide-image-blur/.test(b.className)){b.style.cursor=hs.styleRestoreCursor}}}}return false},dragHandler:function(c){if(!hs.dragArgs){return true}if(!c){c=window.event}var b=hs.dragArgs,d=b.exp;if(d.iframe){if(!d.releaseMask){d.releaseMask=hs.createElement("div",null,{position:"absolute",width:d.x.size+"px",height:d.y.size+"px",left:d.x.cb+"px",top:d.y.cb+"px",zIndex:4,background:(hs.ieLt9?"white":"none"),opacity:0.01},d.wrapper,true)}if(d.releaseMask.style.display=="none"){d.releaseMask.style.display=""}}b.dX=c.clientX-b.clickX;b.dY=c.clientY-b.clickY;var f=Math.sqrt(Math.pow(b.dX,2)+Math.pow(b.dY,2));if(!b.hasDragged){b.hasDragged=(b.type!="image"&&f>0)||(f>(hs.dragSensitivity||5))}if(b.hasDragged&&c.clientX>5&&c.clientY>5){if(!hs.fireEvent(d,"onDrag",b)){return false}if(b.type=="resize"){d.resize(b)}else{d.moveTo(b.left+b.dX,b.top+b.dY);if(b.type=="image"){d.content.style.cursor="move"}}}return false},wrapperMouseHandler:function(c){try{if(!c){c=window.event}var b=/mouseover/i.test(c.type);if(!c.target){c.target=c.srcElement}if(!c.relatedTarget){c.relatedTarget=b?c.fromElement:c.toElement}var d=hs.getExpander(c.target);if(!d.isExpanded){return}if(!d||!c.relatedTarget||hs.getExpander(c.relatedTarget,true)==d||hs.dragArgs){return}hs.fireEvent(d,b?"onMouseOver":"onMouseOut",c);for(var a=0;a<d.overlays.length;a++){(function(){var e=hs.$("hsId"+d.overlays[a]);if(e&&e.hideOnMouseOut){if(b){hs.setStyles(e,{visibility:"visible",display:""})}hs.animate(e,{opacity:b?e.opacity:0},e.dur)}})()}}catch(c){}},addEventListener:function(a,c,b){if(a==document&&c=="ready"){hs.push(hs.onReady,b)}try{a.addEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b);a.attachEvent("on"+c,b)}catch(d){a["on"+c]=b}}},removeEventListener:function(a,c,b){try{a.removeEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b)}catch(d){a["on"+c]=null}}},preloadFullImage:function(b){if(hs.continuePreloading&&hs.preloadTheseImages[b]&&hs.preloadTheseImages[b]!="undefined"){var a=document.createElement("img");a.onload=function(){a=null;hs.preloadFullImage(b+1)};a.src=hs.preloadTheseImages[b]}},preloadImages:function(c){if(c&&typeof c!="object"){hs.numberOfImagesToPreload=c}var a=hs.getAnchors();for(var b=0;b<a.images.length&&b<hs.numberOfImagesToPreload;b++){hs.push(hs.preloadTheseImages,hs.getSrc(a.images[b]))}if(hs.outlineType){new hs.Outline(hs.outlineType,function(){hs.preloadFullImage(0)})}else{hs.preloadFullImage(0)}if(hs.restoreCursor){var d=hs.createElement("img",{src:hs.graphicsDir+hs.restoreCursor})}},init:function(){if(!hs.container){hs.ieLt7=hs.ie&&hs.uaVersion<7;hs.ieLt9=hs.ie&&hs.uaVersion<9;hs.getPageSize();hs.ie6SSL=hs.ieLt7&&location.protocol=="https:";for(var a in hs.langDefaults){if(typeof hs[a]!="undefined"){hs.lang[a]=hs[a]}else{if(typeof hs.lang[a]=="undefined"&&typeof hs.langDefaults[a]!="undefined"){hs.lang[a]=hs.langDefaults[a]}}}hs.container=hs.createElement("div",{className:"highslide-container"},{position:"absolute",left:0,top:0,width:"100%",zIndex:hs.zIndexCounter,direction:"ltr"},document.body,true);hs.loading=hs.createElement("a",{className:"highslide-loading",title:hs.lang.loadingTitle,innerHTML:hs.lang.loadingText,href:"javascript:;"},{position:"absolute",top:"-9999px",opacity:hs.loadingOpacity,zIndex:1},hs.container);hs.garbageBin=hs.createElement("div",null,{display:"none"},hs.container);hs.viewport=hs.createElement("div",{className:"highslide-viewport highslide-viewport-size"},{visibility:(hs.safari&&hs.uaVersion<525)?"visible":"hidden"},hs.container,1);hs.clearing=hs.createElement("div",null,{clear:"both",paddingTop:"1px"},null,true);Math.linearTween=function(f,e,h,g){return h*f/g+e};Math.easeInQuad=function(f,e,h,g){return h*(f/=g)*f+e};Math.easeOutQuad=function(f,e,h,g){return -h*(f/=g)*(f-2)+e};hs.hideSelects=hs.ieLt7;hs.hideIframes=((window.opera&&hs.uaVersion<9)||navigator.vendor=="KDE"||(hs.ieLt7&&hs.uaVersion<5.5));hs.fireEvent(this,"onActivate")}},ready:function(){if(hs.isReady){return}hs.isReady=true;for(var a=0;a<hs.onReady.length;a++){hs.onReady[a]()}},updateAnchors:function(){var a,d,l=[],h=[],k=[],b={},m;for(var e=0;e<hs.openerTagNames.length;e++){d=document.getElementsByTagName(hs.openerTagNames[e]);for(var c=0;c<d.length;c++){a=d[c];m=hs.isHsAnchor(a);if(m){hs.push(l,a);if(m[0]=="hs.expand"){hs.push(h,a)}else{if(m[0]=="hs.htmlExpand"){hs.push(k,a)}}var f=hs.getParam(a,"slideshowGroup")||"none";if(!b[f]){b[f]=[]}hs.push(b[f],a)}}}hs.anchors={all:l,groups:b,images:h,htmls:k};return hs.anchors},getAnchors:function(){return hs.anchors||hs.updateAnchors()},close:function(a){var b=hs.getExpander(a);if(b){b.close()}return false}};hs.fx=function(b,a,c){this.options=a;this.elem=b;this.prop=c;if(!a.orig){a.orig={}}};hs.fx.prototype={update:function(){(hs.fx.step[this.prop]||hs.fx.step._default)(this);if(this.options.step){this.options.step.call(this.elem,this.now,this)}},custom:function(e,d,c){this.startTime=(new Date()).getTime();this.start=e;this.end=d;this.unit=c;this.now=this.start;this.pos=this.state=0;var a=this;function b(f){return a.step(f)}b.elem=this.elem;if(b()&&hs.timers.push(b)==1){hs.timerId=setInterval(function(){var g=hs.timers;for(var f=0;f<g.length;f++){if(!g[f]()){g.splice(f--,1)}}if(!g.length){clearInterval(hs.timerId)}},13)}},step:function(d){var c=(new Date()).getTime();if(d||c>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var a=true;for(var b in this.options.curAnim){if(this.options.curAnim[b]!==true){a=false}}if(a){if(this.options.complete){this.options.complete.call(this.elem)}}return false}else{var e=c-this.startTime;this.state=e/this.options.duration;this.pos=this.options.easing(e,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};hs.extend(hs.fx,{step:{opacity:function(a){hs.setStyles(a.elem,{opacity:a.now})},_default:function(a){try{if(a.elem.style&&a.elem.style[a.prop]!=null){a.elem.style[a.prop]=a.now+a.unit}else{a.elem[a.prop]=a.now}}catch(b){}}}});hs.Outline=function(g,e){this.onLoad=e;this.outlineType=g;var a=hs.uaVersion,f;this.hasAlphaImageLoader=hs.ie&&hs.uaVersion<7;if(!g){if(e){e()}return}hs.init();this.table=hs.createElement("table",{cellSpacing:0},{visibility:"hidden",position:"absolute",borderCollapse:"collapse",width:0},hs.container,true);var b=hs.createElement("tbody",null,null,this.table,1);this.td=[];for(var c=0;c<=8;c++){if(c%3==0){f=hs.createElement("tr",null,{height:"auto"},b,true)}this.td[c]=hs.createElement("td",null,null,f,true);var d=c!=4?{lineHeight:0,fontSize:0}:{position:"relative"};hs.setStyles(this.td[c],d)}this.td[4].className=g+" highslide-outline";this.preloadGraphic()};hs.Outline.prototype={preloadGraphic:function(){var b=hs.graphicsDir+(hs.outlinesDir||"outlines/")+this.outlineType+".png";var a=hs.safari&&hs.uaVersion<525?hs.container:null;this.graphic=hs.createElement("img",null,{position:"absolute",top:"-9999px"},a,true);var c=this;this.graphic.onload=function(){c.onGraphicLoad()};this.graphic.src=b},onGraphicLoad:function(){var d=this.offset=this.graphic.width/4,f=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],c={height:(2*d)+"px",width:(2*d)+"px"};for(var b=0;b<=8;b++){if(f[b]){if(this.hasAlphaImageLoader){var a=(b==1||b==7)?"100%":this.graphic.width+"px";var e=hs.createElement("div",null,{width:"100%",height:"100%",position:"relative",overflow:"hidden"},this.td[b],true);hs.createElement("div",null,{filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+this.graphic.src+"')",position:"absolute",width:a,height:this.graphic.height+"px",left:(f[b][0]*d)+"px",top:(f[b][1]*d)+"px"},e,true)}else{hs.setStyles(this.td[b],{background:"url("+this.graphic.src+") "+(f[b][0]*d)+"px "+(f[b][1]*d)+"px"})}if(window.opera&&(b==3||b==5)){hs.createElement("div",null,c,this.td[b],true)}hs.setStyles(this.td[b],c)}}this.graphic=null;if(hs.pendingOutlines[this.outlineType]){hs.pendingOutlines[this.outlineType].destroy()}hs.pendingOutlines[this.outlineType]=this;if(this.onLoad){this.onLoad()}},setPosition:function(g,e,c,b,f){var d=this.exp,a=d.wrapper.style,e=e||0,g=g||{x:d.x.pos+e,y:d.y.pos+e,w:d.x.get("wsize")-2*e,h:d.y.get("wsize")-2*e};if(c){this.table.style.visibility=(g.h>=4*this.offset)?"visible":"hidden"}hs.setStyles(this.table,{left:(g.x-this.offset)+"px",top:(g.y-this.offset)+"px",width:(g.w+2*this.offset)+"px"});g.w-=2*this.offset;g.h-=2*this.offset;hs.setStyles(this.td[4],{width:g.w>=0?g.w+"px":0,height:g.h>=0?g.h+"px":0});if(this.hasAlphaImageLoader){this.td[3].style.height=this.td[5].style.height=this.td[4].style.height}},destroy:function(a){if(a){this.table.style.visibility="hidden"}else{hs.discardElement(this.table)}}};hs.Dimension=function(b,a){this.exp=b;this.dim=a;this.ucwh=a=="x"?"Width":"Height";this.wh=this.ucwh.toLowerCase();this.uclt=a=="x"?"Left":"Top";this.lt=this.uclt.toLowerCase();this.ucrb=a=="x"?"Right":"Bottom";this.rb=this.ucrb.toLowerCase();this.p1=this.p2=0};hs.Dimension.prototype={get:function(a){switch(a){case"loadingPos":return this.tpos+this.tb+(this.t-hs.loading["offset"+this.ucwh])/2;case"loadingPosXfade":return this.pos+this.cb+this.p1+(this.size-hs.loading["offset"+this.ucwh])/2;case"wsize":return this.size+2*this.cb+this.p1+this.p2;case"fitsize":return this.clientSize-this.marginMin-this.marginMax;case"maxsize":return this.get("fitsize")-2*this.cb-this.p1-this.p2;case"opos":return this.pos-(this.exp.outline?this.exp.outline.offset:0);case"osize":return this.get("wsize")+(this.exp.outline?2*this.exp.outline.offset:0);case"imgPad":return this.imgSize?Math.round((this.size-this.imgSize)/2):0}},calcBorders:function(){this.cb=(this.exp.content["offset"+this.ucwh]-this.t)/2;this.marginMax=hs["margin"+this.ucrb]},calcThumb:function(){this.t=this.exp.el[this.wh]?parseInt(this.exp.el[this.wh]):this.exp.el["offset"+this.ucwh];this.tpos=this.exp.tpos[this.dim];this.tb=(this.exp.el["offset"+this.ucwh]-this.t)/2;if(this.tpos==0||this.tpos==-1){this.tpos=(hs.page[this.wh]/2)+hs.page["scroll"+this.uclt]}},calcExpanded:function(){var a=this.exp;this.justify="auto";if(a.align=="center"){this.justify="center"}else{if(new RegExp(this.lt).test(a.anchor)){this.justify=null}else{if(new RegExp(this.rb).test(a.anchor)){this.justify="max"}}}this.pos=this.tpos-this.cb+this.tb;if(this.maxHeight&&this.dim=="x"){a.maxWidth=Math.min(a.maxWidth||this.full,a.maxHeight*this.full/a.y.full)}this.size=Math.min(this.full,a["max"+this.ucwh]||this.full);this.minSize=a.allowSizeReduction?Math.min(a["min"+this.ucwh],this.full):this.full;if(a.isImage&&a.useBox){this.size=a[this.wh];this.imgSize=this.full}if(this.dim=="x"&&hs.padToMinWidth){this.minSize=a.minWidth}this.target=a["target"+this.dim.toUpperCase()];this.marginMin=hs["margin"+this.uclt];this.scroll=hs.page["scroll"+this.uclt];this.clientSize=hs.page[this.wh]},setSize:function(a){var f=this.exp;if(f.isImage&&(f.useBox||hs.padToMinWidth)){this.imgSize=a;this.size=Math.max(this.size,this.imgSize);f.content.style[this.lt]=this.get("imgPad")+"px"}else{this.size=a}f.content.style[this.wh]=a+"px";f.wrapper.style[this.wh]=this.get("wsize")+"px";if(f.outline){f.outline.setPosition()}if(f.releaseMask){f.releaseMask.style[this.wh]=a+"px"}if(this.dim=="y"&&f.iDoc&&f.body.style.height!="auto"){try{f.iDoc.body.style.overflow="auto"}catch(b){}}if(f.isHtml){var c=f.scrollerDiv;if(this.sizeDiff===undefined){this.sizeDiff=f.innerContent["offset"+this.ucwh]-c["offset"+this.ucwh]}c.style[this.wh]=(this.size-this.sizeDiff)+"px";if(this.dim=="x"){f.mediumContent.style.width="auto"}if(f.body){f.body.style[this.wh]="auto"}}if(this.dim=="x"&&f.overlayBox){f.sizeOverlayBox(true)}if(this.dim=="x"&&f.slideshow&&f.isImage){if(a==this.full){f.slideshow.disable("full-expand")}else{f.slideshow.enable("full-expand")}}},setPos:function(a){this.pos=a;this.exp.wrapper.style[this.lt]=a+"px";if(this.exp.outline){this.exp.outline.setPosition()}}};hs.Expander=function(k,f,b,l){if(document.readyState&&hs.ie&&!hs.isReady){hs.addEventListener(document,"ready",function(){new hs.Expander(k,f,b,l)});return}this.a=k;this.custom=b;this.contentType=l||"image";this.isHtml=(l=="html");this.isImage=!this.isHtml;hs.continuePreloading=false;this.overlays=[];this.last=hs.last;hs.last=null;hs.init();var m=this.key=hs.expanders.length;for(var g=0;g<hs.overrides.length;g++){var c=hs.overrides[g];this[c]=f&&typeof f[c]!="undefined"?f[c]:hs[c]}if(!this.src){this.src=k.href}var d=(f&&f.thumbnailId)?hs.$(f.thumbnailId):k;d=this.thumb=d.getElementsByTagName("img")[0]||d;this.thumbsUserSetId=d.id||k.id;if(!hs.fireEvent(this,"onInit")){return true}for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].a==k&&!(this.last&&this.transitions[1]=="crossfade")){hs.expanders[g].focus();return false}}if(!hs.allowSimultaneousLoading){for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].thumb!=d&&!hs.expanders[g].onLoadStarted){hs.expanders[g].cancelLoading()}}}hs.expanders[m]=this;if(!hs.allowMultipleInstances&&!hs.upcoming){if(hs.expanders[m-1]){hs.expanders[m-1].close()}if(typeof hs.focusKey!="undefined"&&hs.expanders[hs.focusKey]){hs.expanders[hs.focusKey].close()}}this.el=d;this.tpos=this.pageOrigin||hs.getPosition(d);hs.getPageSize();var j=this.x=new hs.Dimension(this,"x");j.calcThumb();var h=this.y=new hs.Dimension(this,"y");h.calcThumb();if(/area/i.test(d.tagName)){this.getImageMapAreaCorrection(d)}this.wrapper=hs.createElement("div",{id:"highslide-wrapper-"+this.key,className:"highslide-wrapper "+this.wrapperClassName},{visibility:"hidden",position:"absolute",zIndex:hs.zIndexCounter+=2},null,true);this.wrapper.onmouseover=this.wrapper.onmouseout=hs.wrapperMouseHandler;if(this.contentType=="image"&&this.outlineWhileAnimating==2){this.outlineWhileAnimating=0}if(!this.outlineType||(this.last&&this.isImage&&this.transitions[1]=="crossfade")){this[this.contentType+"Create"]()}else{if(hs.pendingOutlines[this.outlineType]){this.connectOutline();this[this.contentType+"Create"]()}else{this.showLoading();var e=this;new hs.Outline(this.outlineType,function(){e.connectOutline();e[e.contentType+"Create"]()})}}return true};hs.Expander.prototype={error:function(a){if(hs.debug){alert("Line "+a.lineNumber+": "+a.message)}else{window.location.href=this.src}},connectOutline:function(){var a=this.outline=hs.pendingOutlines[this.outlineType];a.exp=this;a.table.style.zIndex=this.wrapper.style.zIndex-1;hs.pendingOutlines[this.outlineType]=null},showLoading:function(){if(this.onLoadStarted||this.loading){return}this.loading=hs.loading;var c=this;this.loading.onclick=function(){c.cancelLoading()};if(!hs.fireEvent(this,"onShowLoading")){return}var c=this,a=this.x.get("loadingPos")+"px",b=this.y.get("loadingPos")+"px";if(!d&&this.last&&this.transitions[1]=="crossfade"){var d=this.last}if(d){a=d.x.get("loadingPosXfade")+"px";b=d.y.get("loadingPosXfade")+"px";this.loading.style.zIndex=hs.zIndexCounter++}setTimeout(function(){if(c.loading){hs.setStyles(c.loading,{left:a,top:b,zIndex:hs.zIndexCounter++})}},100)},imageCreate:function(){var b=this;var a=document.createElement("img");this.content=a;a.onload=function(){if(hs.expanders[b.key]){b.contentLoaded()}};if(hs.blockRightClick){a.oncontextmenu=function(){return false}}a.className="highslide-image";hs.setStyles(a,{visibility:"hidden",display:"block",position:"absolute",maxWidth:"9999px",zIndex:3});a.title=hs.lang.restoreTitle;if(hs.safari&&hs.uaVersion<525){hs.container.appendChild(a)}if(hs.ie&&hs.flushImgSize){a.src=null}a.src=this.src;this.showLoading()},htmlCreate:function(){if(!hs.fireEvent(this,"onBeforeGetContent")){return}this.content=hs.getCacheBinding(this.a);if(!this.content){this.content=hs.getNode(this.contentId)}if(!this.content){this.content=hs.getSelfRendered()}this.getInline(["maincontent"]);if(this.maincontent){var a=hs.getElementByClass(this.content,"div","highslide-body");if(a){a.appendChild(this.maincontent)}this.maincontent.style.display="block"}hs.fireEvent(this,"onAfterGetContent");var d=this.innerContent=this.content;if(/(swf|iframe)/.test(this.objectType)){this.setObjContainerSize(d)}hs.container.appendChild(this.wrapper);hs.setStyles(this.wrapper,{position:"static",padding:"0 "+hs.marginRight+"px 0 "+hs.marginLeft+"px"});this.content=hs.createElement("div",{className:"highslide-html"},{position:"relative",zIndex:3,height:0,overflow:"hidden"},this.wrapper);this.mediumContent=hs.createElement("div",null,null,this.content,1);this.mediumContent.appendChild(d);hs.setStyles(d,{position:"relative",display:"block",direction:hs.lang.cssDirection||""});if(this.width){d.style.width=this.width+"px"}if(this.height){hs.setStyles(d,{height:this.height+"px",overflow:"hidden"})}if(d.offsetWidth<this.minWidth){d.style.width=this.minWidth+"px"}if(this.objectType=="ajax"&&!hs.getCacheBinding(this.a)){this.showLoading();var c=this;var b=new hs.Ajax(this.a,d);b.src=this.src;b.onLoad=function(){if(hs.expanders[c.key]){c.contentLoaded()}};b.onError=function(){location.href=c.src};b.run()}else{if(this.objectType=="iframe"&&this.objectLoadTime=="before"){this.writeExtendedContent()}else{this.contentLoaded()}}},contentLoaded:function(){try{if(!this.content){return}this.content.onload=null;if(this.onLoadStarted){return}else{this.onLoadStarted=true}var j=this.x,g=this.y;if(this.loading){hs.setStyles(this.loading,{top:"-9999px"});this.loading=null;hs.fireEvent(this,"onHideLoading")}if(this.isImage){j.full=this.content.width;g.full=this.content.height;hs.setStyles(this.content,{width:j.t+"px",height:g.t+"px"});this.wrapper.appendChild(this.content);hs.container.appendChild(this.wrapper)}else{if(this.htmlGetSize){this.htmlGetSize()}}j.calcBorders();g.calcBorders();hs.setStyles(this.wrapper,{left:(j.tpos+j.tb-j.cb)+"px",top:(g.tpos+j.tb-g.cb)+"px"});this.initSlideshow();this.getOverlays();var f=j.full/g.full;j.calcExpanded();this.justify(j);g.calcExpanded();this.justify(g);if(this.isHtml){this.htmlSizeOperations()}if(this.overlayBox){this.sizeOverlayBox(0,1)}if(this.allowSizeReduction){if(this.isImage){this.correctRatio(f)}else{this.fitOverlayBox()}var k=this.slideshow;if(k&&this.last&&k.controls&&k.fixedControls){var h=k.overlayOptions.position||"",a;for(var c in hs.oPos){for(var b=0;b<5;b++){a=this[c];if(h.match(hs.oPos[c][b])){a.pos=this.last[c].pos+(this.last[c].p1-a.p1)+(this.last[c].size-a.size)*[0,0,0.5,1,1][b];if(k.fixedControls=="fit"){if(a.pos+a.size+a.p1+a.p2>a.scroll+a.clientSize-a.marginMax){a.pos=a.scroll+a.clientSize-a.size-a.marginMin-a.marginMax-a.p1-a.p2}if(a.pos<a.scroll+a.marginMin){a.pos=a.scroll+a.marginMin}}}}}}if(this.isImage&&this.x.full>(this.x.imgSize||this.x.size)){this.createFullExpand();if(this.overlays.length==1){this.sizeOverlayBox()}}}this.show()}catch(d){this.error(d)}},setObjContainerSize:function(a,d){var b=hs.getElementByClass(a,"DIV","highslide-body");if(/(iframe|swf)/.test(this.objectType)){if(this.objectWidth){b.style.width=this.objectWidth+"px"}if(this.objectHeight){b.style.height=this.objectHeight+"px"}}},writeExtendedContent:function(){if(this.hasExtendedContent){return}var f=this;this.body=hs.getElementByClass(this.innerContent,"DIV","highslide-body");if(this.objectType=="iframe"){this.showLoading();var g=hs.clearing.cloneNode(1);this.body.appendChild(g);this.newWidth=this.innerContent.offsetWidth;if(!this.objectWidth){this.objectWidth=g.offsetWidth}var c=this.innerContent.offsetHeight-this.body.offsetHeight,d=this.objectHeight||hs.page.height-c-hs.marginTop-hs.marginBottom,e=this.objectLoadTime=="before"?' onload="if (hs.expanders['+this.key+"]) hs.expanders["+this.key+'].contentLoaded()" ':"";this.body.innerHTML+='<iframe name="hs'+(new Date()).getTime()+'" frameborder="0" key="'+this.key+'" style="width:'+this.objectWidth+"px; height:"+d+'px" '+e+' src="'+this.src+'" ></iframe>';this.ruler=this.body.getElementsByTagName("div")[0];this.iframe=this.body.getElementsByTagName("iframe")[0];if(this.objectLoadTime=="after"){this.correctIframeSize()}}if(this.objectType=="swf"){this.body.id=this.body.id||"hs-flash-id-"+this.key;var b=this.swfOptions;if(!b.params){b.params={}}if(typeof b.params.wmode=="undefined"){b.params.wmode="transparent"}if(swfobject){swfobject.embedSWF(this.src,this.body.id,this.objectWidth,this.objectHeight,b.version||"7",b.expressInstallSwfurl,b.flashvars,b.params,b.attributes)}}this.hasExtendedContent=true},htmlGetSize:function(){if(this.iframe&&!this.objectHeight){this.iframe.style.height=this.body.style.height=this.getIframePageHeight()+"px"}this.innerContent.appendChild(hs.clearing);if(!this.x.full){this.x.full=this.innerContent.offsetWidth}this.y.full=this.innerContent.offsetHeight;this.innerContent.removeChild(hs.clearing);if(hs.ie&&this.newHeight>parseInt(this.innerContent.currentStyle.height)){this.newHeight=parseInt(this.innerContent.currentStyle.height)}hs.setStyles(this.wrapper,{position:"absolute",padding:"0"});hs.setStyles(this.content,{width:this.x.t+"px",height:this.y.t+"px"})},getIframePageHeight:function(){var a;try{var d=this.iDoc=this.iframe.contentDocument||this.iframe.contentWindow.document;var b=d.createElement("div");b.style.clear="both";d.body.appendChild(b);a=b.offsetTop;if(hs.ie){a+=parseInt(d.body.currentStyle.marginTop)+parseInt(d.body.currentStyle.marginBottom)-1}}catch(c){a=300}return a},correctIframeSize:function(){var b=this.innerContent.offsetWidth-this.ruler.offsetWidth;hs.discardElement(this.ruler);if(b<0){b=0}var a=this.innerContent.offsetHeight-this.iframe.offsetHeight;if(this.iDoc&&!this.objectHeight&&!this.height&&this.y.size==this.y.full){try{this.iDoc.body.style.overflow="hidden"}catch(c){}}hs.setStyles(this.iframe,{width:Math.abs(this.x.size-b)+"px",height:Math.abs(this.y.size-a)+"px"});hs.setStyles(this.body,{width:this.iframe.style.width,height:this.iframe.style.height});this.scrollingContent=this.iframe;this.scrollerDiv=this.scrollingContent},htmlSizeOperations:function(){this.setObjContainerSize(this.innerContent);if(this.objectType=="swf"&&this.objectLoadTime=="before"){this.writeExtendedContent()}if(this.x.size<this.x.full&&!this.allowWidthReduction){this.x.size=this.x.full}if(this.y.size<this.y.full&&!this.allowHeightReduction){this.y.size=this.y.full}this.scrollerDiv=this.innerContent;hs.setStyles(this.mediumContent,{position:"relative",width:this.x.size+"px"});hs.setStyles(this.innerContent,{border:"none",width:"auto",height:"auto"});var e=hs.getElementByClass(this.innerContent,"DIV","highslide-body");if(e&&!/(iframe|swf)/.test(this.objectType)){var b=e;e=hs.createElement(b.nodeName,null,{overflow:"hidden"},null,true);b.parentNode.insertBefore(e,b);e.appendChild(hs.clearing);e.appendChild(b);var c=this.innerContent.offsetWidth-e.offsetWidth;var a=this.innerContent.offsetHeight-e.offsetHeight;e.removeChild(hs.clearing);var d=hs.safari||navigator.vendor=="KDE"?1:0;hs.setStyles(e,{width:(this.x.size-c-d)+"px",height:(this.y.size-a)+"px",overflow:"auto",position:"relative"});if(d&&b.offsetHeight>e.offsetHeight){e.style.width=(parseInt(e.style.width)+d)+"px"}this.scrollingContent=e;this.scrollerDiv=this.scrollingContent}if(this.iframe&&this.objectLoadTime=="before"){this.correctIframeSize()}if(!this.scrollingContent&&this.y.size<this.mediumContent.offsetHeight){this.scrollerDiv=this.content}if(this.scrollerDiv==this.content&&!this.allowWidthReduction&&!/(iframe|swf)/.test(this.objectType)){this.x.size+=17}if(this.scrollerDiv&&this.scrollerDiv.offsetHeight>this.scrollerDiv.parentNode.offsetHeight){setTimeout("try { hs.expanders["+this.key+"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}",hs.expandDuration)}},getImageMapAreaCorrection:function(d){var h=d.coords.split(",");for(var b=0;b<h.length;b++){h[b]=parseInt(h[b])}if(d.shape.toLowerCase()=="circle"){this.x.tpos+=h[0]-h[2];this.y.tpos+=h[1]-h[2];this.x.t=this.y.t=2*h[2]}else{var f,e,a=f=h[0],g=e=h[1];for(var b=0;b<h.length;b++){if(b%2==0){a=Math.min(a,h[b]);f=Math.max(f,h[b])}else{g=Math.min(g,h[b]);e=Math.max(e,h[b])}}this.x.tpos+=a;this.x.t=f-a;this.y.tpos+=g;this.y.t=e-g}},justify:function(f,b){var g,h=f.target,e=f==this.x?"x":"y";if(h&&h.match(/ /)){g=h.split(" ");h=g[0]}if(h&&hs.$(h)){f.pos=hs.getPosition(hs.$(h))[e];if(g&&g[1]&&g[1].match(/^[-]?[0-9]+px$/)){f.pos+=parseInt(g[1])}if(f.size<f.minSize){f.size=f.minSize}}else{if(f.justify=="auto"||f.justify=="center"){var d=false;var a=f.exp.allowSizeReduction;if(f.justify=="center"){f.pos=Math.round(f.scroll+(f.clientSize+f.marginMin-f.marginMax-f.get("wsize"))/2)}else{f.pos=Math.round(f.pos-((f.get("wsize")-f.t)/2))}if(f.pos<f.scroll+f.marginMin){f.pos=f.scroll+f.marginMin;d=true}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}if(f.pos+f.get("wsize")>f.scroll+f.clientSize-f.marginMax){if(!b&&d&&a){f.size=Math.min(f.size,f.get(e=="y"?"fitsize":"maxsize"))}else{if(f.get("wsize")<f.get("fitsize")){f.pos=f.scroll+f.clientSize-f.marginMax-f.get("wsize")}else{f.pos=f.scroll+f.marginMin;if(!b&&a){f.size=f.get(e=="y"?"fitsize":"maxsize")}}}}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}}else{if(f.justify=="max"){f.pos=Math.floor(f.pos-f.size+f.t)}}}if(f.pos<f.marginMin){var c=f.pos;f.pos=f.marginMin;if(a&&!b){f.size=f.size-(f.pos-c)}}},correctRatio:function(c){var a=this.x,g=this.y,e=false,d=Math.min(a.full,a.size),b=Math.min(g.full,g.size),f=(this.useBox||hs.padToMinWidth);if(d/b>c){d=b*c;if(d<a.minSize){d=a.minSize;b=d/c}e=true}else{if(d/b<c){b=d/c;e=true}}if(hs.padToMinWidth&&a.full<a.minSize){a.imgSize=a.full;g.size=g.imgSize=g.full}else{if(this.useBox){a.imgSize=d;g.imgSize=b}else{a.size=d;g.size=b}}e=this.fitOverlayBox(this.useBox?null:c,e);if(f&&g.size<g.imgSize){g.imgSize=g.size;a.imgSize=g.size*c}if(e||f){a.pos=a.tpos-a.cb+a.tb;a.minSize=a.size;this.justify(a,true);g.pos=g.tpos-g.cb+g.tb;g.minSize=g.size;this.justify(g,true);if(this.overlayBox){this.sizeOverlayBox()}}},fitOverlayBox:function(b,c){var a=this.x,d=this.y;if(this.overlayBox&&(this.isImage||this.allowHeightReduction)){while(d.size>this.minHeight&&a.size>this.minWidth&&d.get("wsize")>d.get("fitsize")){d.size-=10;if(b){a.size=d.size*b}this.sizeOverlayBox(0,1);c=true}}return c},reflow:function(){if(this.scrollerDiv){var a=/iframe/i.test(this.scrollerDiv.tagName)?(this.getIframePageHeight()+1)+"px":"auto";if(this.body){this.body.style.height=a}this.scrollerDiv.style.height=a;this.y.setSize(this.innerContent.offsetHeight)}},show:function(){var a=this.x,b=this.y;this.doShowHide("hidden");hs.fireEvent(this,"onBeforeExpand");if(this.slideshow&&this.slideshow.thumbstrip){this.slideshow.thumbstrip.selectThumb()}this.changeSize(1,{wrapper:{width:a.get("wsize"),height:b.get("wsize"),left:a.pos,top:b.pos},content:{left:a.p1+a.get("imgPad"),top:b.p1+b.get("imgPad"),width:a.imgSize||a.size,height:b.imgSize||b.size}},hs.expandDuration)},changeSize:function(d,i,b){var k=this.transitions,e=d?(this.last?this.last.a:null):hs.upcoming,j=(k[1]&&e&&hs.getParam(e,"transitions")[1]==k[1])?k[1]:k[0];if(this[j]&&j!="expand"){this[j](d,i);return}if(this.outline&&!this.outlineWhileAnimating){if(d){this.outline.setPosition()}else{this.outline.destroy((this.isHtml&&this.preserveContent))}}if(!d){this.destroyOverlays()}var c=this,h=c.x,g=c.y,f=this.easing;if(!d){f=this.easingClose||f}var a=d?function(){if(c.outline){c.outline.table.style.visibility="visible"}setTimeout(function(){c.afterExpand()},50)}:function(){c.afterClose()};if(d){hs.setStyles(this.wrapper,{width:h.t+"px",height:g.t+"px"})}if(d&&this.isHtml){hs.setStyles(this.wrapper,{left:(h.tpos-h.cb+h.tb)+"px",top:(g.tpos-g.cb+g.tb)+"px"})}if(this.fadeInOut){hs.setStyles(this.wrapper,{opacity:d?0:1});hs.extend(i.wrapper,{opacity:d})}hs.animate(this.wrapper,i.wrapper,{duration:b,easing:f,step:function(n,l){if(c.outline&&c.outlineWhileAnimating&&l.prop=="top"){var m=d?l.pos:1-l.pos;var o={w:h.t+(h.get("wsize")-h.t)*m,h:g.t+(g.get("wsize")-g.t)*m,x:h.tpos+(h.pos-h.tpos)*m,y:g.tpos+(g.pos-g.tpos)*m};c.outline.setPosition(o,0,1)}if(c.isHtml){if(l.prop=="left"){c.mediumContent.style.left=(h.pos-n)+"px"}if(l.prop=="top"){c.mediumContent.style.top=(g.pos-n)+"px"}}}});hs.animate(this.content,i.content,b,f,a);if(d){this.wrapper.style.visibility="visible";this.content.style.visibility="visible";if(this.isHtml){this.innerContent.style.visibility="visible"}this.a.className+=" highslide-active-anchor"}},fade:function(f,h){this.outlineWhileAnimating=false;var c=this,j=f?hs.expandDuration:0;if(f){hs.animate(this.wrapper,h.wrapper,0);hs.setStyles(this.wrapper,{opacity:0,visibility:"visible"});hs.animate(this.content,h.content,0);this.content.style.visibility="visible";hs.animate(this.wrapper,{opacity:1},j,null,function(){c.afterExpand()})}if(this.outline){this.outline.table.style.zIndex=this.wrapper.style.zIndex;var b=f||-1,d=this.outline.offset,a=f?3:d,g=f?d:3;for(var e=a;b*e<=b*g;e+=b,j+=25){(function(){var i=f?g-e:a-e;setTimeout(function(){c.outline.setPosition(0,i,1)},j)})()}}if(f){}else{setTimeout(function(){if(c.outline){c.outline.destroy(c.preserveContent)}c.destroyOverlays();hs.animate(c.wrapper,{opacity:0},hs.restoreDuration,null,function(){c.afterClose()})},j)}},crossfade:function(g,m,o){if(!g){return}var f=this,p=this.last,l=this.x,k=this.y,d=p.x,b=p.y,a=this.wrapper,i=this.content,c=this.overlayBox;hs.removeEventListener(document,"mousemove",hs.dragHandler);hs.setStyles(i,{width:(l.imgSize||l.size)+"px",height:(k.imgSize||k.size)+"px"});if(c){c.style.overflow="visible"}this.outline=p.outline;if(this.outline){this.outline.exp=f}p.outline=null;var h=hs.createElement("div",{className:"highslide-"+this.contentType},{position:"absolute",zIndex:4,overflow:"hidden",display:"none"});var j={oldImg:p,newImg:this};for(var e in j){this[e]=j[e].content.cloneNode(1);hs.setStyles(this[e],{position:"absolute",border:0,visibility:"visible"});h.appendChild(this[e])}a.appendChild(h);if(this.isHtml){hs.setStyles(this.mediumContent,{left:0,top:0})}if(c){c.className="";a.appendChild(c)}h.style.display="";p.content.style.display="none";if(hs.safari&&hs.uaVersion<525){this.wrapper.style.visibility="visible"}hs.animate(a,{width:l.size},{duration:hs.transitionDuration,step:function(u,r){var x=r.pos,q=1-x;var w,s={},t=["pos","size","p1","p2"];for(var v in t){w=t[v];s["x"+w]=Math.round(q*d[w]+x*l[w]);s["y"+w]=Math.round(q*b[w]+x*k[w]);s.ximgSize=Math.round(q*(d.imgSize||d.size)+x*(l.imgSize||l.size));s.ximgPad=Math.round(q*d.get("imgPad")+x*l.get("imgPad"));s.yimgSize=Math.round(q*(b.imgSize||b.size)+x*(k.imgSize||k.size));s.yimgPad=Math.round(q*b.get("imgPad")+x*k.get("imgPad"))}if(f.outline){f.outline.setPosition({x:s.xpos,y:s.ypos,w:s.xsize+s.xp1+s.xp2+2*l.cb,h:s.ysize+s.yp1+s.yp2+2*k.cb})}p.wrapper.style.clip="rect("+(s.ypos-b.pos)+"px, "+(s.xsize+s.xp1+s.xp2+s.xpos+2*d.cb-d.pos)+"px, "+(s.ysize+s.yp1+s.yp2+s.ypos+2*b.cb-b.pos)+"px, "+(s.xpos-d.pos)+"px)";hs.setStyles(i,{top:(s.yp1+k.get("imgPad"))+"px",left:(s.xp1+l.get("imgPad"))+"px",marginTop:(k.pos-s.ypos)+"px",marginLeft:(l.pos-s.xpos)+"px"});hs.setStyles(a,{top:s.ypos+"px",left:s.xpos+"px",width:(s.xp1+s.xp2+s.xsize+2*l.cb)+"px",height:(s.yp1+s.yp2+s.ysize+2*k.cb)+"px"});hs.setStyles(h,{width:(s.ximgSize||s.xsize)+"px",height:(s.yimgSize||s.ysize)+"px",left:(s.xp1+s.ximgPad)+"px",top:(s.yp1+s.yimgPad)+"px",visibility:"visible"});hs.setStyles(f.oldImg,{top:(b.pos-s.ypos+b.p1-s.yp1+b.get("imgPad")-s.yimgPad)+"px",left:(d.pos-s.xpos+d.p1-s.xp1+d.get("imgPad")-s.ximgPad)+"px"});hs.setStyles(f.newImg,{opacity:x,top:(k.pos-s.ypos+k.p1-s.yp1+k.get("imgPad")-s.yimgPad)+"px",left:(l.pos-s.xpos+l.p1-s.xp1+l.get("imgPad")-s.ximgPad)+"px"});if(c){hs.setStyles(c,{width:s.xsize+"px",height:s.ysize+"px",left:(s.xp1+l.cb)+"px",top:(s.yp1+k.cb)+"px"})}},complete:function(){a.style.visibility=i.style.visibility="visible";i.style.display="block";hs.discardElement(h);f.afterExpand();p.afterClose();f.last=null}})},reuseOverlay:function(d,c){if(!this.last){return false}for(var b=0;b<this.last.overlays.length;b++){var a=hs.$("hsId"+this.last.overlays[b]);if(a&&a.hsId==d.hsId){this.genOverlayBox();a.reuse=this.key;hs.push(this.overlays,this.last.overlays[b]);return true}}return false},afterExpand:function(){this.isExpanded=true;this.focus();if(this.isHtml&&this.objectLoadTime=="after"){this.writeExtendedContent()}if(this.iframe){try{var g=this,f=this.iframe.contentDocument||this.iframe.contentWindow.document;hs.addEventListener(f,"mousedown",function(){if(hs.focusKey!=g.key){g.focus()}})}catch(d){}if(hs.ie&&typeof this.isClosing!="boolean"){this.iframe.style.width=(this.objectWidth-1)+"px"}}if(this.dimmingOpacity){hs.dim(this)}if(hs.upcoming&&hs.upcoming==this.a){hs.upcoming=null}this.prepareNextOutline();var c=hs.page,b=hs.mouse.x+c.scrollLeft,a=hs.mouse.y+c.scrollTop;this.mouseIsOver=this.x.pos<b&&b<this.x.pos+this.x.get("wsize")&&this.y.pos<a&&a<this.y.pos+this.y.get("wsize");if(this.overlayBox){this.showOverlays()}hs.fireEvent(this,"onAfterExpand")},prepareNextOutline:function(){var a=this.key;var b=this.outlineType;new hs.Outline(b,function(){try{hs.expanders[a].preloadNext()}catch(c){}})},preloadNext:function(){var b=this.getAdjacentAnchor(1);if(b&&b.onclick.toString().match(/hs\.expand/)){var a=hs.createElement("img",{src:hs.getSrc(b)})}},getAdjacentAnchor:function(c){var b=this.getAnchorIndex(),a=hs.anchors.groups[this.slideshowGroup||"none"];if(a&&!a[b+c]&&this.slideshow&&this.slideshow.repeat){if(c==1){return a[0]}else{if(c==-1){return a[a.length-1]}}}return(a&&a[b+c])||null},getAnchorIndex:function(){var a=hs.getAnchors().groups[this.slideshowGroup||"none"];if(a){for(var b=0;b<a.length;b++){if(a[b]==this.a){return b}}}return null},getNumber:function(){if(this[this.numberPosition]){var a=hs.anchors.groups[this.slideshowGroup||"none"];if(a){var b=hs.lang.number.replace("%1",this.getAnchorIndex()+1).replace("%2",a.length);this[this.numberPosition].innerHTML='<div class="highslide-number">'+b+"</div>"+this[this.numberPosition].innerHTML}}},initSlideshow:function(){if(!this.last){for(var c=0;c<hs.slideshows.length;c++){var b=hs.slideshows[c],d=b.slideshowGroup;if(typeof d=="undefined"||d===null||d===this.slideshowGroup){this.slideshow=new hs.Slideshow(this.key,b)}}}else{this.slideshow=this.last.slideshow}var b=this.slideshow;if(!b){return}var a=b.expKey=this.key;b.checkFirstAndLast();b.disable("full-expand");if(b.controls){this.createOverlay(hs.extend(b.overlayOptions||{},{overlayId:b.controls,hsId:"controls",zIndex:5}))}if(b.thumbstrip){b.thumbstrip.add(this)}if(!this.last&&this.autoplay){b.play(true)}if(b.autoplay){b.autoplay=setTimeout(function(){hs.next(a)},(b.interval||500))}},cancelLoading:function(){hs.discardElement(this.wrapper);hs.expanders[this.key]=null;if(hs.upcoming==this.a){hs.upcoming=null}hs.undim(this.key);if(this.loading){hs.loading.style.left="-9999px"}hs.fireEvent(this,"onHideLoading")},writeCredits:function(){if(this.credits){return}this.credits=hs.createElement("a",{href:hs.creditsHref,target:hs.creditsTarget,className:"highslide-credits",innerHTML:hs.lang.creditsText,title:hs.lang.creditsTitle});this.createOverlay({overlayId:this.credits,position:this.creditsPosition||"top left",hsId:"credits"})},getInline:function(types,addOverlay){for(var i=0;i<types.length;i++){var type=types[i],s=null;if(type=="caption"&&!hs.fireEvent(this,"onBeforeGetCaption")){return}else{if(type=="heading"&&!hs.fireEvent(this,"onBeforeGetHeading")){return}}if(!this[type+"Id"]&&this.thumbsUserSetId){this[type+"Id"]=type+"-for-"+this.thumbsUserSetId}if(this[type+"Id"]){this[type]=hs.getNode(this[type+"Id"])}if(!this[type]&&!this[type+"Text"]&&this[type+"Eval"]){try{s=eval(this[type+"Eval"])}catch(e){}}if(!this[type]&&this[type+"Text"]){s=this[type+"Text"]}if(!this[type]&&!s){this[type]=hs.getNode(this.a["_"+type+"Id"]);if(!this[type]){var next=this.a.nextSibling;while(next&&!hs.isHsAnchor(next)){if((new RegExp("highslide-"+type)).test(next.className||null)){if(!next.id){this.a["_"+type+"Id"]=next.id="hsId"+hs.idCounter++}this[type]=hs.getNode(next.id);break}next=next.nextSibling}}}if(!this[type]&&!s&&this.numberPosition==type){s="\n"}if(!this[type]&&s){this[type]=hs.createElement("div",{className:"highslide-"+type,innerHTML:s})}if(addOverlay&&this[type]){var o={position:(type=="heading")?"above":"below"};for(var x in this[type+"Overlay"]){o[x]=this[type+"Overlay"][x]}o.overlayId=this[type];this.createOverlay(o)}}},doShowHide:function(a){if(hs.hideSelects){this.showHideElements("SELECT",a)}if(hs.hideIframes){this.showHideElements("IFRAME",a)}if(hs.geckoMac){this.showHideElements("*",a)}},showHideElements:function(c,b){var e=document.getElementsByTagName(c);var a=c=="*"?"overflow":"visibility";for(var f=0;f<e.length;f++){if(a=="visibility"||(document.defaultView.getComputedStyle(e[f],"").getPropertyValue("overflow")=="auto"||e[f].getAttribute("hidden-by")!=null)){var h=e[f].getAttribute("hidden-by");if(b=="visible"&&h){h=h.replace("["+this.key+"]","");e[f].setAttribute("hidden-by",h);if(!h){e[f].style[a]=e[f].origProp}}else{if(b=="hidden"){var k=hs.getPosition(e[f]);k.w=e[f].offsetWidth;k.h=e[f].offsetHeight;if(!this.dimmingOpacity){var j=(k.x+k.w<this.x.get("opos")||k.x>this.x.get("opos")+this.x.get("osize"));var g=(k.y+k.h<this.y.get("opos")||k.y>this.y.get("opos")+this.y.get("osize"))}var d=hs.getWrapperKey(e[f]);if(!j&&!g&&d!=this.key){if(!h){e[f].setAttribute("hidden-by","["+this.key+"]");e[f].origProp=e[f].style[a];e[f].style[a]="hidden"}else{if(h.indexOf("["+this.key+"]")==-1){e[f].setAttribute("hidden-by",h+"["+this.key+"]")}}}else{if((h=="["+this.key+"]"||hs.focusKey==d)&&d!=this.key){e[f].setAttribute("hidden-by","");e[f].style[a]=e[f].origProp||""}else{if(h&&h.indexOf("["+this.key+"]")>-1){e[f].setAttribute("hidden-by",h.replace("["+this.key+"]",""))}}}}}}}},focus:function(){this.wrapper.style.zIndex=hs.zIndexCounter+=2;for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&a==hs.focusKey){var b=hs.expanders[a];b.content.className+=" highslide-"+b.contentType+"-blur";if(b.isImage){b.content.style.cursor=hs.ieLt7?"hand":"pointer";b.content.title=hs.lang.focusTitle}hs.fireEvent(b,"onBlur")}}if(this.outline){this.outline.table.style.zIndex=this.wrapper.style.zIndex-1}this.content.className="highslide-"+this.contentType;if(this.isImage){this.content.title=hs.lang.restoreTitle;if(hs.restoreCursor){hs.styleRestoreCursor=window.opera?"pointer":"url("+hs.graphicsDir+hs.restoreCursor+"), pointer";if(hs.ieLt7&&hs.uaVersion<6){hs.styleRestoreCursor="hand"}this.content.style.cursor=hs.styleRestoreCursor}}hs.focusKey=this.key;hs.addEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);hs.fireEvent(this,"onFocus")},moveTo:function(a,b){this.x.setPos(a);this.y.setPos(b)},resize:function(d){var a,b,c=d.width/d.height;a=Math.max(d.width+d.dX,Math.min(this.minWidth,this.x.full));if(this.isImage&&Math.abs(a-this.x.full)<12){a=this.x.full}b=this.isHtml?d.height+d.dY:a/c;if(b<Math.min(this.minHeight,this.y.full)){b=Math.min(this.minHeight,this.y.full);if(this.isImage){a=b*c}}this.resizeTo(a,b)},resizeTo:function(a,b){this.y.setSize(b);this.x.setSize(a);this.wrapper.style.height=this.y.get("wsize")+"px"},close:function(){if(this.isClosing||!this.isExpanded){return}if(this.transitions[1]=="crossfade"&&hs.upcoming){hs.getExpander(hs.upcoming).cancelLoading();hs.upcoming=null}if(!hs.fireEvent(this,"onBeforeClose")){return}this.isClosing=true;if(this.slideshow&&!hs.upcoming){this.slideshow.pause()}hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{if(this.isHtml){this.htmlPrepareClose()}this.content.style.cursor="default";this.changeSize(0,{wrapper:{width:this.x.t,height:this.y.t,left:this.x.tpos-this.x.cb+this.x.tb,top:this.y.tpos-this.y.cb+this.y.tb},content:{left:0,top:0,width:this.x.t,height:this.y.t}},hs.restoreDuration)}catch(a){this.afterClose()}},htmlPrepareClose:function(){if(hs.geckoMac){if(!hs.mask){hs.mask=hs.createElement("div",null,{position:"absolute"},hs.container)}hs.setStyles(hs.mask,{width:this.x.size+"px",height:this.y.size+"px",left:this.x.pos+"px",top:this.y.pos+"px",display:"block"})}if(this.objectType=="swf"){try{hs.$(this.body.id).StopPlay()}catch(a){}}if(this.objectLoadTime=="after"&&!this.preserveContent){this.destroyObject()}if(this.scrollerDiv&&this.scrollerDiv!=this.scrollingContent){this.scrollerDiv.style.overflow="hidden"}},destroyObject:function(){if(hs.ie&&this.iframe){try{this.iframe.contentWindow.document.body.innerHTML=""}catch(a){}}if(this.objectType=="swf"){swfobject.removeSWF(this.body.id)}this.body.innerHTML=""},sleep:function(){if(this.outline){this.outline.table.style.display="none"}this.releaseMask=null;this.wrapper.style.display="none";this.isExpanded=false;hs.push(hs.sleeping,this)},awake:function(){try{hs.expanders[this.key]=this;if(!hs.allowMultipleInstances&&hs.focusKey!=this.key){try{hs.expanders[hs.focusKey].close()}catch(b){}}var d=hs.zIndexCounter++,a={display:"",zIndex:d};hs.setStyles(this.wrapper,a);this.isClosing=false;var c=this.outline||0;if(c){if(!this.outlineWhileAnimating){a.visibility="hidden"}hs.setStyles(c.table,a)}if(this.slideshow){this.initSlideshow()}this.show()}catch(b){}},createOverlay:function(e){var d=e.overlayId,a=(e.relativeTo=="viewport"&&!/panel$/.test(e.position));if(typeof d=="string"){d=hs.getNode(d)}if(e.html){d=hs.createElement("div",{innerHTML:e.html})}if(!d||typeof d=="string"){return}if(!hs.fireEvent(this,"onCreateOverlay",{overlay:d})){return}d.style.display="block";e.hsId=e.hsId||e.overlayId;if(this.transitions[1]=="crossfade"&&this.reuseOverlay(e,d)){return}this.genOverlayBox();var c=e.width&&/^[0-9]+(px|%)$/.test(e.width)?e.width:"auto";if(/^(left|right)panel$/.test(e.position)&&!/^[0-9]+px$/.test(e.width)){c="200px"}var b=hs.createElement("div",{id:"hsId"+hs.idCounter++,hsId:e.hsId},{position:"absolute",visibility:"hidden",width:c,direction:hs.lang.cssDirection||"",opacity:0},a?hs.viewport:this.overlayBox,true);if(a){b.hsKey=this.key}b.appendChild(d);hs.extend(b,{opacity:1,offsetX:0,offsetY:0,dur:(e.fade===0||e.fade===false||(e.fade==2&&hs.ie))?0:250});hs.extend(b,e);if(this.gotOverlays){this.positionOverlay(b);if(!b.hideOnMouseOut||this.mouseIsOver){hs.animate(b,{opacity:b.opacity},b.dur)}}hs.push(this.overlays,hs.idCounter-1)},positionOverlay:function(e){var f=e.position||"middle center",c=(e.relativeTo=="viewport"),b=e.offsetX,a=e.offsetY;if(c){hs.viewport.style.display="block";e.hsKey=this.key;if(e.offsetWidth>e.parentNode.offsetWidth){e.style.width="100%"}}else{if(e.parentNode!=this.overlayBox){this.overlayBox.appendChild(e)}}if(/left$/.test(f)){e.style.left=b+"px"}if(/center$/.test(f)){hs.setStyles(e,{left:"50%",marginLeft:(b-Math.round(e.offsetWidth/2))+"px"})}if(/right$/.test(f)){e.style.right=-b+"px"}if(/^leftpanel$/.test(f)){hs.setStyles(e,{right:"100%",marginRight:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p1=e.offsetWidth}else{if(/^rightpanel$/.test(f)){hs.setStyles(e,{left:"100%",marginLeft:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p2=e.offsetWidth}}var d=e.parentNode.offsetHeight;e.style.height="auto";if(c&&e.offsetHeight>d){e.style.height=hs.ieLt7?d+"px":"100%"}if(/^top/.test(f)){e.style.top=a+"px"}if(/^middle/.test(f)){hs.setStyles(e,{top:"50%",marginTop:(a-Math.round(e.offsetHeight/2))+"px"})}if(/^bottom/.test(f)){e.style.bottom=-a+"px"}if(/^above$/.test(f)){hs.setStyles(e,{left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",bottom:"100%",marginBottom:this.y.cb+"px",width:"auto"});this.y.p1=e.offsetHeight}else{if(/^below$/.test(f)){hs.setStyles(e,{position:"relative",left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",top:"100%",marginTop:this.y.cb+"px",width:"auto"});this.y.p2=e.offsetHeight;e.style.position="absolute"}}},getOverlays:function(){this.getInline(["heading","caption"],true);this.getNumber();if(this.caption){hs.fireEvent(this,"onAfterGetCaption")}if(this.heading){hs.fireEvent(this,"onAfterGetHeading")}if(this.heading&&this.dragByHeading){this.heading.className+=" highslide-move"}if(hs.showCredits){this.writeCredits()}for(var a=0;a<hs.overlays.length;a++){var d=hs.overlays[a],e=d.thumbnailId,b=d.slideshowGroup;if((!e&&!b)||(e&&e==this.thumbsUserSetId)||(b&&b===this.slideshowGroup)){if(this.isImage||(this.isHtml&&d.useOnHtml)){this.createOverlay(d)}}}var c=[];for(var a=0;a<this.overlays.length;a++){var d=hs.$("hsId"+this.overlays[a]);if(/panel$/.test(d.position)){this.positionOverlay(d)}else{hs.push(c,d)}}for(var a=0;a<c.length;a++){this.positionOverlay(c[a])}this.gotOverlays=true},genOverlayBox:function(){if(!this.overlayBox){this.overlayBox=hs.createElement("div",{className:this.wrapperClassName},{position:"absolute",width:(this.x.size||(this.useBox?this.width:null)||this.x.full)+"px",height:(this.y.size||this.y.full)+"px",visibility:"hidden",overflow:"hidden",zIndex:hs.ie?4:"auto"},hs.container,true)}},sizeOverlayBox:function(f,d){var c=this.overlayBox,a=this.x,h=this.y;hs.setStyles(c,{width:a.size+"px",height:h.size+"px"});if(f||d){for(var e=0;e<this.overlays.length;e++){var g=hs.$("hsId"+this.overlays[e]);var b=(hs.ieLt7||document.compatMode=="BackCompat");if(g&&/^(above|below)$/.test(g.position)){if(b){g.style.width=(c.offsetWidth+2*a.cb+a.p1+a.p2)+"px"}h[g.position=="above"?"p1":"p2"]=g.offsetHeight}if(g&&b&&/^(left|right)panel$/.test(g.position)){g.style.height=(c.offsetHeight+2*h.cb)+"px"}}}if(f){hs.setStyles(this.content,{top:h.p1+"px"});hs.setStyles(c,{top:(h.p1+h.cb)+"px"})}},showOverlays:function(){var a=this.overlayBox;a.className="";hs.setStyles(a,{top:(this.y.p1+this.y.cb)+"px",left:(this.x.p1+this.x.cb)+"px",overflow:"visible"});if(hs.safari){a.style.visibility="visible"}this.wrapper.appendChild(a);for(var c=0;c<this.overlays.length;c++){var d=hs.$("hsId"+this.overlays[c]);d.style.zIndex=d.zIndex||4;if(!d.hideOnMouseOut||this.mouseIsOver){d.style.visibility="visible";hs.setStyles(d,{visibility:"visible",display:""});hs.animate(d,{opacity:d.opacity},d.dur)}}},destroyOverlays:function(){if(!this.overlays.length){return}if(this.slideshow){var d=this.slideshow.controls;if(d&&hs.getExpander(d)==this){d.parentNode.removeChild(d)}}for(var a=0;a<this.overlays.length;a++){var b=hs.$("hsId"+this.overlays[a]);if(b&&b.parentNode==hs.viewport&&hs.getExpander(b)==this){hs.discardElement(b)}}if(this.isHtml&&this.preserveContent){this.overlayBox.style.top="-9999px";hs.container.appendChild(this.overlayBox)}else{hs.discardElement(this.overlayBox)}},createFullExpand:function(){if(this.slideshow&&this.slideshow.controls){this.slideshow.enable("full-expand");return}this.fullExpandLabel=hs.createElement("a",{href:"javascript:hs.expanders["+this.key+"].doFullExpand();",title:hs.lang.fullExpandTitle,className:"highslide-full-expand"});if(!hs.fireEvent(this,"onCreateFullExpand")){return}this.createOverlay({overlayId:this.fullExpandLabel,position:hs.fullExpandPosition,hideOnMouseOut:true,opacity:hs.fullExpandOpacity})},doFullExpand:function(){try{if(!hs.fireEvent(this,"onDoFullExpand")){return}if(this.fullExpandLabel){hs.discardElement(this.fullExpandLabel)}this.focus();var c=this.x.size,a=this.y.size;this.resizeTo(this.x.full,this.y.full);var b=this.x.pos-(this.x.size-c)/2;if(b<hs.marginLeft){b=hs.marginLeft}var f=this.y.pos-(this.y.size-a)/2;if(f<hs.marginTop){f=hs.marginTop}this.moveTo(b,f);this.doShowHide("hidden")}catch(d){this.error(d)}},afterClose:function(){this.a.className=this.a.className.replace("highslide-active-anchor","");this.doShowHide("visible");if(this.isHtml&&this.preserveContent&&this.transitions[1]!="crossfade"){this.sleep()}else{if(this.outline&&this.outlineWhileAnimating){this.outline.destroy()}hs.discardElement(this.wrapper)}if(hs.mask){hs.mask.style.display="none"}this.destroyOverlays();if(!hs.viewport.childNodes.length){hs.viewport.style.display="none"}if(this.dimmingOpacity){hs.undim(this.key)}hs.fireEvent(this,"onAfterClose");hs.expanders[this.key]=null;hs.reOrder()}};hs.Ajax=function(b,c,d){this.a=b;this.content=c;this.pre=d};hs.Ajax.prototype={run:function(){var d;if(!this.src){this.src=hs.getSrc(this.a)}if(this.src.match("#")){var a=this.src.split("#");this.src=a[0];this.id=a[1]}if(hs.cachedGets[this.src]){this.cachedGet=hs.cachedGets[this.src];if(this.id){this.getElementContent()}else{this.loadHTML()}return}try{d=new XMLHttpRequest()}catch(b){try{d=new ActiveXObject("Msxml2.XMLHTTP")}catch(b){try{d=new ActiveXObject("Microsoft.XMLHTTP")}catch(b){this.onError()}}}var f=this;d.onreadystatechange=function(){if(f.xhr.readyState==4){if(f.id){f.getElementContent()}else{f.loadHTML()}}};var c=this.src;this.xhr=d;if(hs.forceAjaxReload){c=c.replace(/$/,(/\?/.test(c)?"&":"?")+"dummy="+(new Date()).getTime())}d.open("GET",c,true);d.setRequestHeader("X-Requested-With","XMLHttpRequest");d.setRequestHeader("Content-Type","application/x-www-form-urlencoded");d.send(null)},getElementContent:function(){hs.init();var a=window.opera||hs.ie6SSL?{src:"about:blank"}:null;this.iframe=hs.createElement("iframe",a,{position:"absolute",top:"-9999px"},hs.container);this.loadHTML()},loadHTML:function(){var c=this.cachedGet||this.xhr.responseText,b;if(this.pre){hs.cachedGets[this.src]=c}if(!hs.ie||hs.uaVersion>=5.5){c=c.replace(new RegExp("<link[^>]*>","gi"),"").replace(new RegExp("<script[^>]*>.*?<\/script>","gi"),"");if(this.iframe){var f=this.iframe.contentDocument;if(!f&&this.iframe.contentWindow){f=this.iframe.contentWindow.document}if(!f){var g=this;setTimeout(function(){g.loadHTML()},25);return}f.open();f.write(c);f.close();try{c=f.getElementById(this.id).innerHTML}catch(d){try{c=this.iframe.document.getElementById(this.id).innerHTML}catch(d){}}hs.discardElement(this.iframe)}else{b=/(<body[^>]*>|<\/body>)/ig;if(b.test(c)){c=c.split(b)[hs.ieLt9?1:2]}}}hs.getElementByClass(this.content,"DIV","highslide-body").innerHTML=c;this.onLoad();for(var a in this){this[a]=null}}};hs.Slideshow=function(c,b){if(hs.dynamicallyUpdateAnchors!==false){hs.updateAnchors()}this.expKey=c;for(var a in b){this[a]=b[a]}if(this.useControls){this.getControls()}if(this.thumbstrip){this.thumbstrip=hs.Thumbstrip(this)}};hs.Slideshow.prototype={getControls:function(){this.controls=hs.createElement("div",{innerHTML:hs.replaceLang(hs.skin.controls)},null,hs.container);var b=["play","pause","previous","next","move","full-expand","close"];this.btn={};var c=this;for(var a=0;a<b.length;a++){this.btn[b[a]]=hs.getElementByClass(this.controls,"li","highslide-"+b[a]);this.enable(b[a])}this.btn.pause.style.display="none"},checkFirstAndLast:function(){if(this.repeat||!this.controls){return}var c=hs.expanders[this.expKey],b=c.getAnchorIndex(),a=/disabled$/;if(b==0){this.disable("previous")}else{if(a.test(this.btn.previous.getElementsByTagName("a")[0].className)){this.enable("previous")}}if(b+1==hs.anchors.groups[c.slideshowGroup||"none"].length){this.disable("next");this.disable("play")}else{if(a.test(this.btn.next.getElementsByTagName("a")[0].className)){this.enable("next");this.enable("play")}}},enable:function(d){if(!this.btn){return}var c=this,b=this.btn[d].getElementsByTagName("a")[0],e=/disabled$/;b.onclick=function(){c[d]();return false};if(e.test(b.className)){b.className=b.className.replace(e,"")}},disable:function(c){if(!this.btn){return}var b=this.btn[c].getElementsByTagName("a")[0];b.onclick=function(){return false};if(!/disabled$/.test(b.className)){b.className+=" disabled"}},hitSpace:function(){if(this.autoplay){this.pause()}else{this.play()}},play:function(a){if(this.btn){this.btn.play.style.display="none";this.btn.pause.style.display=""}this.autoplay=true;if(!a){hs.next(this.expKey)}},pause:function(){if(this.btn){this.btn.pause.style.display="none";this.btn.play.style.display=""}clearTimeout(this.autoplay);this.autoplay=null},previous:function(){this.pause();hs.previous(this.btn.previous)},next:function(){this.pause();hs.next(this.btn.next)},move:function(){},"full-expand":function(){hs.getExpander().doFullExpand()},close:function(){hs.close(this.btn.close)}};hs.Thumbstrip=function(k){function p(i){hs.extend(f||{},{overlayId:r,hsId:"thumbstrip",className:"highslide-thumbstrip-"+m+"-overlay "+(f.className||"")});if(hs.ieLt7){f.fade=0}i.createOverlay(f);hs.setStyles(r.parentNode,{overflow:"hidden"})}function c(i){d(undefined,Math.round(i*r[h?"offsetWidth":"offsetHeight"]*0.7))}function d(L,M){if(L===undefined){for(var K=0;K<j.length;K++){if(j[K]==hs.expanders[k.expKey].a){L=K;break}}}if(L===undefined){return}var G=r.getElementsByTagName("a"),z=G[L],w=z.parentNode,y=h?"Left":"Top",N=h?"Right":"Bottom",I=h?"Width":"Height",B="offset"+y,H="offset"+I,x=n.parentNode.parentNode[H],F=x-s[H],v=parseInt(s.style[h?"left":"top"])||0,C=v,D=20;if(M!==undefined){C=v-M;if(F>0){F=0}if(C>0){C=0}if(C<F){C=F}}else{for(var K=0;K<G.length;K++){G[K].className=""}z.className="highslide-active-anchor";var J=L>0?G[L-1].parentNode[B]:w[B],A=w[B]+w[H]+(G[L+1]?G[L+1].parentNode[H]:0);if(A>x-v){C=x-A}else{if(J<-v){C=-J}}}var E=w[B]+(w[H]-g[H])/2+C;hs.animate(s,h?{left:C}:{top:C},null,"easeOutQuad");hs.animate(g,h?{left:E}:{top:E},null,"easeOutQuad");l.style.display=C<0?"block":"none";t.style.display=(C>F)?"block":"none"}var j=hs.anchors.groups[hs.expanders[k.expKey].slideshowGroup||"none"],f=k.thumbstrip,m=f.mode||"horizontal",u=(m=="float"),o=u?["div","ul","li","span"]:["table","tbody","tr","td"],h=(m=="horizontal"),r=hs.createElement("div",{className:"highslide-thumbstrip highslide-thumbstrip-"+m,innerHTML:'<div class="highslide-thumbstrip-inner"><'+o[0]+"><"+o[1]+"></"+o[1]+"></"+o[0]+'></div><div class="highslide-scroll-up"><div></div></div><div class="highslide-scroll-down"><div></div></div><div class="highslide-marker"><div></div></div>'},{display:"none"},hs.container),e=r.childNodes,n=e[0],l=e[1],t=e[2],g=e[3],s=n.firstChild,a=r.getElementsByTagName(o[1])[0],b;for(var q=0;q<j.length;q++){if(q==0||!h){b=hs.createElement(o[2],null,null,a)}(function(){var v=j[q],i=hs.createElement(o[3],null,null,b),w=q;hs.createElement("a",{href:v.href,title:v.title,onclick:function(){if(/highslide-active-anchor/.test(this.className)){return false}hs.getExpander(this).focus();return hs.transit(v)},innerHTML:hs.stripItemFormatter?hs.stripItemFormatter(v):v.innerHTML},null,i)})()}if(!u){l.onclick=function(){c(-1)};t.onclick=function(){c(1)};hs.addEventListener(a,document.onmousewheel!==undefined?"mousewheel":"DOMMouseScroll",function(i){var v=0;i=i||window.event;if(i.wheelDelta){v=i.wheelDelta/120;if(hs.opera){v=-v}}else{if(i.detail){v=-i.detail/3}}if(v){c(-v*0.2)}if(i.preventDefault){i.preventDefault()}i.returnValue=false})}return{add:p,selectThumb:d}};hs.langDefaults=hs.lang;var HsExpander=hs.Expander;if(hs.ie&&window==window.top){(function(){try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,50);return}hs.ready()})()}hs.addEventListener(document,"DOMContentLoaded",hs.ready);hs.addEventListener(window,"load",hs.ready);hs.addEventListener(document,"ready",function(){if(hs.expandCursor||hs.dimmingOpacity){var d=hs.createElement("style",{type:"text/css"},null,document.getElementsByTagName("HEAD")[0]),c=document.compatMode=="BackCompat";function b(f,g){if(hs.ie&&(hs.uaVersion<9||c)){var e=document.styleSheets[document.styleSheets.length-1];if(typeof(e.addRule)=="object"){e.addRule(f,g)}}else{d.appendChild(document.createTextNode(f+" {"+g+"}"))}}function a(e){return"expression( ( ( ignoreMe = document.documentElement."+e+" ? document.documentElement."+e+" : document.body."+e+" ) ) + 'px' );"}if(hs.expandCursor){b(".highslide img","cursor: url("+hs.graphicsDir+hs.expandCursor+"), pointer !important;")}b(".highslide-viewport-size",hs.ie&&(hs.uaVersion<7||c)?"position: absolute; left:"+a("scrollLeft")+"top:"+a("scrollTop")+"width:"+a("clientWidth")+"height:"+a("clientHeight"):"position: fixed; width: 100%; height: 100%; left: 0; top: 0")}});hs.addEventListener(window,"resize",function(){hs.getPageSize();if(hs.viewport){for(var a=0;a<hs.viewport.childNodes.length;a++){var b=hs.viewport.childNodes[a],c=hs.getExpander(b);c.positionOverlay(b);if(b.hsId=="thumbstrip"){c.slideshow.thumbstrip.selectThumb()}}}});hs.addEventListener(document,"mousemove",function(a){hs.mouse={x:a.clientX,y:a.clientY}});hs.addEventListener(document,"mousedown",hs.mouseClickHandler);hs.addEventListener(document,"mouseup",hs.mouseClickHandler);hs.addEventListener(document,"ready",hs.setClickEvents);hs.addEventListener(window,"load",hs.preloadImages);hs.addEventListener(window,"load",hs.preloadAjax)}; +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) + * Config: default +events +unobtrusive +imagemap +slideshow +positioning +transitions +viewport +thumbstrip +inline +ajax +iframe +flash + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ +if(!hs){var hs={lang:{cssDirection:"ltr",loadingText:"Loading...",loadingTitle:"Click to cancel",focusTitle:"Click to bring to front",fullExpandTitle:"Expand to actual size (f)",creditsText:"Powered by <i>Highslide JS</i>",creditsTitle:"Go to the Highslide JS homepage",previousText:"Previous",nextText:"Next",moveText:"Move",closeText:"Close",closeTitle:"Close (esc)",resizeTitle:"Resize",playText:"Play",playTitle:"Play slideshow (spacebar)",pauseText:"Pause",pauseTitle:"Pause slideshow (spacebar)",previousTitle:"Previous (arrow left)",nextTitle:"Next (arrow right)",moveTitle:"Move",fullExpandText:"1:1",number:"Image %1 of %2",restoreTitle:"Click to close image, click and drag to move. Use arrow keys for next and previous."},graphicsDir:"highslide/graphics/",expandCursor:"zoomin.cur",restoreCursor:"zoomout.cur",expandDuration:250,restoreDuration:250,marginLeft:15,marginRight:15,marginTop:15,marginBottom:15,zIndexCounter:10001,loadingOpacity:0.75,allowMultipleInstances:true,numberOfImagesToPreload:5,outlineWhileAnimating:2,outlineStartOffset:3,padToMinWidth:false,fullExpandPosition:"bottom right",fullExpandOpacity:1,showCredits:true,creditsHref:"http://highslide.com/",creditsTarget:"_self",enableKeyListener:true,openerTagNames:["a","area"],transitions:[],transitionDuration:250,dimmingOpacity:0,dimmingDuration:50,allowWidthReduction:false,allowHeightReduction:true,preserveContent:true,objectLoadTime:"before",cacheAjax:true,anchor:"auto",align:"auto",targetX:null,targetY:null,dragByHeading:true,minWidth:200,minHeight:200,allowSizeReduction:true,outlineType:"drop-shadow",skin:{controls:'<div class="highslide-controls"><ul><li class="highslide-previous"><a href="#" title="{hs.lang.previousTitle}"><span>{hs.lang.previousText}</span></a></li><li class="highslide-play"><a href="#" title="{hs.lang.playTitle}"><span>{hs.lang.playText}</span></a></li><li class="highslide-pause"><a href="#" title="{hs.lang.pauseTitle}"><span>{hs.lang.pauseText}</span></a></li><li class="highslide-next"><a href="#" title="{hs.lang.nextTitle}"><span>{hs.lang.nextText}</span></a></li><li class="highslide-move"><a href="#" title="{hs.lang.moveTitle}"><span>{hs.lang.moveText}</span></a></li><li class="highslide-full-expand"><a href="#" title="{hs.lang.fullExpandTitle}"><span>{hs.lang.fullExpandText}</span></a></li><li class="highslide-close"><a href="#" title="{hs.lang.closeTitle}" ><span>{hs.lang.closeText}</span></a></li></ul></div>',contentWrapper:'<div class="highslide-header"><ul><li class="highslide-previous"><a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)"><span>{hs.lang.previousText}</span></a></li><li class="highslide-next"><a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)"><span>{hs.lang.nextText}</span></a></li><li class="highslide-move"><a href="#" title="{hs.lang.moveTitle}" onclick="return false"><span>{hs.lang.moveText}</span></a></li><li class="highslide-close"><a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)"><span>{hs.lang.closeText}</span></a></li></ul></div><div class="highslide-body"></div><div class="highslide-footer"><div><span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span></div></div>'},preloadTheseImages:[],continuePreloading:true,expanders:[],overrides:["allowSizeReduction","useBox","anchor","align","targetX","targetY","outlineType","outlineWhileAnimating","captionId","captionText","captionEval","captionOverlay","headingId","headingText","headingEval","headingOverlay","creditsPosition","dragByHeading","autoplay","numberPosition","transitions","dimmingOpacity","width","height","contentId","allowWidthReduction","allowHeightReduction","preserveContent","maincontentId","maincontentText","maincontentEval","objectType","cacheAjax","objectWidth","objectHeight","objectLoadTime","swfOptions","wrapperClassName","minWidth","minHeight","maxWidth","maxHeight","pageOrigin","slideshowGroup","easing","easingClose","fadeInOut","src"],overlays:[],idCounter:0,oPos:{x:["leftpanel","left","center","right","rightpanel"],y:["above","top","middle","bottom","below"]},mouse:{},headingOverlay:{},captionOverlay:{},swfOptions:{flashvars:{},params:{},attributes:{}},timers:[],slideshows:[],pendingOutlines:{},sleeping:[],preloadTheseAjax:[],cacheBindings:[],cachedGets:{},clones:{},onReady:[],uaVersion:/Trident\/4\.0/.test(navigator.userAgent)?8:parseFloat((navigator.userAgent.toLowerCase().match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1]),ie:(document.all&&!window.opera),safari:/Safari/.test(navigator.userAgent),geckoMac:/Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent),$:function(a){if(a){return document.getElementById(a)}},push:function(a,b){a[a.length]=b},createElement:function(a,f,e,d,c){var b=document.createElement(a);if(f){hs.extend(b,f)}if(c){hs.setStyles(b,{padding:0,border:"none",margin:0})}if(e){hs.setStyles(b,e)}if(d){d.appendChild(b)}return b},extend:function(b,c){for(var a in c){b[a]=c[a]}return b},setStyles:function(b,c){for(var a in c){if(hs.ieLt9&&a=="opacity"){if(c[a]>0.99){b.style.removeAttribute("filter")}else{b.style.filter="alpha(opacity="+(c[a]*100)+")"}}else{b.style[a]=c[a]}}},animate:function(f,a,d){var c,g,j;if(typeof d!="object"||d===null){var i=arguments;d={duration:i[2],easing:i[3],complete:i[4]}}if(typeof d.duration!="number"){d.duration=250}d.easing=Math[d.easing]||Math.easeInQuad;d.curAnim=hs.extend({},a);for(var b in a){var h=new hs.fx(f,d,b);c=parseFloat(hs.css(f,b))||0;g=parseFloat(a[b]);j=b!="opacity"?"px":"";h.custom(c,g,j)}},css:function(a,c){if(a.style[c]){return a.style[c]}else{if(document.defaultView){return document.defaultView.getComputedStyle(a,null).getPropertyValue(c)}else{if(c=="opacity"){c="filter"}var b=a.currentStyle[c.replace(/\-(\w)/g,function(e,d){return d.toUpperCase()})];if(c=="filter"){b=b.replace(/alpha\(opacity=([0-9]+)\)/,function(e,d){return d/100})}return b===""?1:b}}},getPageSize:function(){var f=document,b=window,e=f.compatMode&&f.compatMode!="BackCompat"?f.documentElement:f.body,g=hs.ie&&(hs.uaVersion<9||typeof pageXOffset=="undefined");var c=g?e.clientWidth:(f.documentElement.clientWidth||self.innerWidth),a=g?e.clientHeight:self.innerHeight;hs.page={width:c,height:a,scrollLeft:g?e.scrollLeft:pageXOffset,scrollTop:g?e.scrollTop:pageYOffset};return hs.page},getPosition:function(c){if(/area/i.test(c.tagName)){var e=document.getElementsByTagName("img");for(var b=0;b<e.length;b++){var a=e[b].useMap;if(a&&a.replace(/^.*?#/,"")==c.parentNode.name){c=e[b];break}}}var d={x:c.offsetLeft,y:c.offsetTop};while(c.offsetParent){c=c.offsetParent;d.x+=c.offsetLeft;d.y+=c.offsetTop;if(c!=document.body&&c!=document.documentElement){d.x-=c.scrollLeft;d.y-=c.scrollTop}}return d},expand:function(b,h,f,d){if(!b){b=hs.createElement("a",null,{display:"none"},hs.container)}if(typeof b.getParams=="function"){return h}if(d=="html"){for(var c=0;c<hs.sleeping.length;c++){if(hs.sleeping[c]&&hs.sleeping[c].a==b){hs.sleeping[c].awake();hs.sleeping[c]=null;return false}}hs.hasHtmlExpanders=true}try{new hs.Expander(b,h,f,d);return false}catch(g){return true}},htmlExpand:function(b,d,c){return hs.expand(b,d,c,"html")},getSelfRendered:function(){return hs.createElement("div",{className:"highslide-html-content",innerHTML:hs.replaceLang(hs.skin.contentWrapper)})},getElementByClass:function(e,c,d){var b=e.getElementsByTagName(c);for(var a=0;a<b.length;a++){if((new RegExp(d)).test(b[a].className)){return b[a]}}return null},replaceLang:function(c){c=c.replace(/\s/g," ");var b=/{hs\.lang\.([^}]+)\}/g,d=c.match(b),e;if(d){for(var a=0;a<d.length;a++){e=d[a].replace(b,"$1");if(typeof hs.lang[e]!="undefined"){c=c.replace(d[a],hs.lang[e])}}}return c},setClickEvents:function(){var b=document.getElementsByTagName("a");for(var a=0;a<b.length;a++){var c=hs.isUnobtrusiveAnchor(b[a]);if(c&&!b[a].hsHasSetClick){(function(){var d=c;if(hs.fireEvent(hs,"onSetClickEvent",{element:b[a],type:d})){b[a].onclick=(c=="image")?function(){return hs.expand(this)}:function(){return hs.htmlExpand(this,{objectType:d})}}})();b[a].hsHasSetClick=true}}hs.getAnchors()},isUnobtrusiveAnchor:function(a){if(a.rel=="highslide"){return"image"}else{if(a.rel=="highslide-ajax"){return"ajax"}else{if(a.rel=="highslide-iframe"){return"iframe"}else{if(a.rel=="highslide-swf"){return"swf"}}}}},getCacheBinding:function(b){for(var d=0;d<hs.cacheBindings.length;d++){if(hs.cacheBindings[d][0]==b){var e=hs.cacheBindings[d][1];hs.cacheBindings[d][1]=e.cloneNode(1);return e}}return null},preloadAjax:function(f){var b=hs.getAnchors();for(var d=0;d<b.htmls.length;d++){var c=b.htmls[d];if(hs.getParam(c,"objectType")=="ajax"&&hs.getParam(c,"cacheAjax")){hs.push(hs.preloadTheseAjax,c)}}hs.preloadAjaxElement(0)},preloadAjaxElement:function(d){if(!hs.preloadTheseAjax[d]){return}var b=hs.preloadTheseAjax[d];var c=hs.getNode(hs.getParam(b,"contentId"));if(!c){c=hs.getSelfRendered()}var e=new hs.Ajax(b,c,1);e.onError=function(){};e.onLoad=function(){hs.push(hs.cacheBindings,[b,c]);hs.preloadAjaxElement(d+1)};e.run()},focusTopmost:function(){var c=0,b=-1,a=hs.expanders,e,f;for(var d=0;d<a.length;d++){e=a[d];if(e){f=e.wrapper.style.zIndex;if(f&&f>c){c=f;b=d}}}if(b==-1){hs.focusKey=-1}else{a[b].focus()}},getParam:function(b,d){b.getParams=b.onclick;var c=b.getParams?b.getParams():null;b.getParams=null;return(c&&typeof c[d]!="undefined")?c[d]:(typeof hs[d]!="undefined"?hs[d]:null)},getSrc:function(b){var c=hs.getParam(b,"src");if(c){return c}return b.href},getNode:function(e){var c=hs.$(e),d=hs.clones[e],b={};if(!c&&!d){return null}if(!d){d=c.cloneNode(true);d.id="";hs.clones[e]=d;return c}else{return d.cloneNode(true)}},discardElement:function(a){if(a){hs.garbageBin.appendChild(a)}hs.garbageBin.innerHTML=""},dim:function(d){if(!hs.dimmer){a=true;hs.dimmer=hs.createElement("div",{className:"highslide-dimming highslide-viewport-size",owner:"",onclick:function(){if(hs.fireEvent(hs,"onDimmerClick")){hs.close()}}},{visibility:"visible",opacity:0},hs.container,true);if(/(Android|iPad|iPhone|iPod)/.test(navigator.userAgent)){var b=document.body;function c(){hs.setStyles(hs.dimmer,{width:b.scrollWidth+"px",height:b.scrollHeight+"px"})}c();hs.addEventListener(window,"resize",c)}}hs.dimmer.style.display="";var a=hs.dimmer.owner=="";hs.dimmer.owner+="|"+d.key;if(a){if(hs.geckoMac&&hs.dimmingGeckoFix){hs.setStyles(hs.dimmer,{background:"url("+hs.graphicsDir+"geckodimmer.png)",opacity:1})}else{hs.animate(hs.dimmer,{opacity:d.dimmingOpacity},hs.dimmingDuration)}}},undim:function(a){if(!hs.dimmer){return}if(typeof a!="undefined"){hs.dimmer.owner=hs.dimmer.owner.replace("|"+a,"")}if((typeof a!="undefined"&&hs.dimmer.owner!="")||(hs.upcoming&&hs.getParam(hs.upcoming,"dimmingOpacity"))){return}if(hs.geckoMac&&hs.dimmingGeckoFix){hs.dimmer.style.display="none"}else{hs.animate(hs.dimmer,{opacity:0},hs.dimmingDuration,null,function(){hs.dimmer.style.display="none"})}},transit:function(a,d){var b=d||hs.getExpander();d=b;if(hs.upcoming){return false}else{hs.last=b}hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{hs.upcoming=a;a.onclick()}catch(c){hs.last=hs.upcoming=null}try{if(!a||d.transitions[1]!="crossfade"){d.close()}}catch(c){}return false},previousOrNext:function(a,c){var b=hs.getExpander(a);if(b){return hs.transit(b.getAdjacentAnchor(c),b)}else{return false}},previous:function(a){return hs.previousOrNext(a,-1)},next:function(a){return hs.previousOrNext(a,1)},keyHandler:function(a){if(!a){a=window.event}if(!a.target){a.target=a.srcElement}if(typeof a.target.form!="undefined"){return true}if(!hs.fireEvent(hs,"onKeyDown",a)){return true}var b=hs.getExpander();var c=null;switch(a.keyCode){case 70:if(b){b.doFullExpand()}return true;case 32:c=2;break;case 34:case 39:case 40:c=1;break;case 8:case 33:case 37:case 38:c=-1;break;case 27:case 13:c=0}if(c!==null){if(c!=2){hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler)}if(!hs.enableKeyListener){return true}if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}if(b){if(c==0){b.close()}else{if(c==2){if(b.slideshow){b.slideshow.hitSpace()}}else{if(b.slideshow){b.slideshow.pause()}hs.previousOrNext(b.key,c)}}return false}}return true},registerOverlay:function(a){hs.push(hs.overlays,hs.extend(a,{hsId:"hsId"+hs.idCounter++}))},addSlideshow:function(b){var d=b.slideshowGroup;if(typeof d=="object"){for(var c=0;c<d.length;c++){var e={};for(var a in b){e[a]=b[a]}e.slideshowGroup=d[c];hs.push(hs.slideshows,e)}}else{hs.push(hs.slideshows,b)}},getWrapperKey:function(c,b){var e,d=/^highslide-wrapper-([0-9]+)$/;e=c;while(e.parentNode){if(e.hsKey!==undefined){return e.hsKey}if(e.id&&d.test(e.id)){return e.id.replace(d,"$1")}e=e.parentNode}if(!b){e=c;while(e.parentNode){if(e.tagName&&hs.isHsAnchor(e)){for(var a=0;a<hs.expanders.length;a++){var f=hs.expanders[a];if(f&&f.a==e){return a}}}e=e.parentNode}}return null},getExpander:function(b,a){if(typeof b=="undefined"){return hs.expanders[hs.focusKey]||null}if(typeof b=="number"){return hs.expanders[b]||null}if(typeof b=="string"){b=hs.$(b)}return hs.expanders[hs.getWrapperKey(b,a)]||null},isHsAnchor:function(b){return(b.onclick&&b.onclick.toString().replace(/\s/g," ").match(/hs.(htmlE|e)xpand/))},reOrder:function(){for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&hs.expanders[a].isExpanded){hs.focusTopmost()}}},fireEvent:function(c,a,b){return c&&c[a]?(c[a](c,b)!==false):true},mouseClickHandler:function(d){if(!d){d=window.event}if(d.button>1){return true}if(!d.target){d.target=d.srcElement}var b=d.target;while(b.parentNode&&!(/highslide-(image|move|html|resize)/.test(b.className))){b=b.parentNode}var f=hs.getExpander(b);if(f&&(f.isClosing||!f.isExpanded)){return true}if(f&&d.type=="mousedown"){if(d.target.form){return true}var a=b.className.match(/highslide-(image|move|resize)/);if(a){hs.dragArgs={exp:f,type:a[1],left:f.x.pos,width:f.x.size,top:f.y.pos,height:f.y.size,clickX:d.clientX,clickY:d.clientY};hs.addEventListener(document,"mousemove",hs.dragHandler);if(d.preventDefault){d.preventDefault()}if(/highslide-(image|html)-blur/.test(f.content.className)){f.focus();hs.hasFocused=true}return false}else{if(/highslide-html/.test(b.className)&&hs.focusKey!=f.key){f.focus();f.doShowHide("hidden")}}}else{if(d.type=="mouseup"){hs.removeEventListener(document,"mousemove",hs.dragHandler);if(hs.dragArgs){if(hs.styleRestoreCursor&&hs.dragArgs.type=="image"){hs.dragArgs.exp.content.style.cursor=hs.styleRestoreCursor}var c=hs.dragArgs.hasDragged;if(!c&&!hs.hasFocused&&!/(move|resize)/.test(hs.dragArgs.type)){if(hs.fireEvent(f,"onImageClick")){f.close()}}else{if(c||(!c&&hs.hasHtmlExpanders)){hs.dragArgs.exp.doShowHide("hidden")}}if(hs.dragArgs.exp.releaseMask){hs.dragArgs.exp.releaseMask.style.display="none"}if(c){hs.fireEvent(hs.dragArgs.exp,"onDrop",hs.dragArgs)}hs.hasFocused=false;hs.dragArgs=null}else{if(/highslide-image-blur/.test(b.className)){b.style.cursor=hs.styleRestoreCursor}}}}return false},dragHandler:function(c){if(!hs.dragArgs){return true}if(!c){c=window.event}var b=hs.dragArgs,d=b.exp;if(d.iframe){if(!d.releaseMask){d.releaseMask=hs.createElement("div",null,{position:"absolute",width:d.x.size+"px",height:d.y.size+"px",left:d.x.cb+"px",top:d.y.cb+"px",zIndex:4,background:(hs.ieLt9?"white":"none"),opacity:0.01},d.wrapper,true)}if(d.releaseMask.style.display=="none"){d.releaseMask.style.display=""}}b.dX=c.clientX-b.clickX;b.dY=c.clientY-b.clickY;var f=Math.sqrt(Math.pow(b.dX,2)+Math.pow(b.dY,2));if(!b.hasDragged){b.hasDragged=(b.type!="image"&&f>0)||(f>(hs.dragSensitivity||5))}if(b.hasDragged&&c.clientX>5&&c.clientY>5){if(!hs.fireEvent(d,"onDrag",b)){return false}if(b.type=="resize"){d.resize(b)}else{d.moveTo(b.left+b.dX,b.top+b.dY);if(b.type=="image"){d.content.style.cursor="move"}}}return false},wrapperMouseHandler:function(c){try{if(!c){c=window.event}var b=/mouseover/i.test(c.type);if(!c.target){c.target=c.srcElement}if(!c.relatedTarget){c.relatedTarget=b?c.fromElement:c.toElement}var d=hs.getExpander(c.target);if(!d.isExpanded){return}if(!d||!c.relatedTarget||hs.getExpander(c.relatedTarget,true)==d||hs.dragArgs){return}hs.fireEvent(d,b?"onMouseOver":"onMouseOut",c);for(var a=0;a<d.overlays.length;a++){(function(){var e=hs.$("hsId"+d.overlays[a]);if(e&&e.hideOnMouseOut){if(b){hs.setStyles(e,{visibility:"visible",display:""})}hs.animate(e,{opacity:b?e.opacity:0},e.dur)}})()}}catch(c){}},addEventListener:function(a,c,b){if(a==document&&c=="ready"){hs.push(hs.onReady,b)}try{a.addEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b);a.attachEvent("on"+c,b)}catch(d){a["on"+c]=b}}},removeEventListener:function(a,c,b){try{a.removeEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b)}catch(d){a["on"+c]=null}}},preloadFullImage:function(b){if(hs.continuePreloading&&hs.preloadTheseImages[b]&&hs.preloadTheseImages[b]!="undefined"){var a=document.createElement("img");a.onload=function(){a=null;hs.preloadFullImage(b+1)};a.src=hs.preloadTheseImages[b]}},preloadImages:function(c){if(c&&typeof c!="object"){hs.numberOfImagesToPreload=c}var a=hs.getAnchors();for(var b=0;b<a.images.length&&b<hs.numberOfImagesToPreload;b++){hs.push(hs.preloadTheseImages,hs.getSrc(a.images[b]))}if(hs.outlineType){new hs.Outline(hs.outlineType,function(){hs.preloadFullImage(0)})}else{hs.preloadFullImage(0)}if(hs.restoreCursor){var d=hs.createElement("img",{src:hs.graphicsDir+hs.restoreCursor})}},init:function(){if(!hs.container){hs.ieLt7=hs.ie&&hs.uaVersion<7;hs.ieLt9=hs.ie&&hs.uaVersion<9;hs.getPageSize();hs.ie6SSL=hs.ieLt7&&location.protocol=="https:";for(var a in hs.langDefaults){if(typeof hs[a]!="undefined"){hs.lang[a]=hs[a]}else{if(typeof hs.lang[a]=="undefined"&&typeof hs.langDefaults[a]!="undefined"){hs.lang[a]=hs.langDefaults[a]}}}hs.container=hs.createElement("div",{className:"highslide-container"},{position:"absolute",left:0,top:0,width:"100%",zIndex:hs.zIndexCounter,direction:"ltr"},document.body,true);hs.loading=hs.createElement("a",{className:"highslide-loading",title:hs.lang.loadingTitle,innerHTML:hs.lang.loadingText,href:"javascript:;"},{position:"absolute",top:"-9999px",opacity:hs.loadingOpacity,zIndex:1},hs.container);hs.garbageBin=hs.createElement("div",null,{display:"none"},hs.container);hs.viewport=hs.createElement("div",{className:"highslide-viewport highslide-viewport-size"},{visibility:(hs.safari&&hs.uaVersion<525)?"visible":"hidden"},hs.container,1);hs.clearing=hs.createElement("div",null,{clear:"both",paddingTop:"1px"},null,true);Math.linearTween=function(f,e,h,g){return h*f/g+e};Math.easeInQuad=function(f,e,h,g){return h*(f/=g)*f+e};Math.easeOutQuad=function(f,e,h,g){return -h*(f/=g)*(f-2)+e};hs.hideSelects=hs.ieLt7;hs.hideIframes=((window.opera&&hs.uaVersion<9)||navigator.vendor=="KDE"||(hs.ieLt7&&hs.uaVersion<5.5));hs.fireEvent(this,"onActivate")}},ready:function(){if(hs.isReady){return}hs.isReady=true;for(var a=0;a<hs.onReady.length;a++){hs.onReady[a]()}},updateAnchors:function(){var a,d,l=[],h=[],k=[],b={},m;for(var e=0;e<hs.openerTagNames.length;e++){d=document.getElementsByTagName(hs.openerTagNames[e]);for(var c=0;c<d.length;c++){a=d[c];m=hs.isHsAnchor(a);if(m){hs.push(l,a);if(m[0]=="hs.expand"){hs.push(h,a)}else{if(m[0]=="hs.htmlExpand"){hs.push(k,a)}}var f=hs.getParam(a,"slideshowGroup")||"none";if(!b[f]){b[f]=[]}hs.push(b[f],a)}}}hs.anchors={all:l,groups:b,images:h,htmls:k};return hs.anchors},getAnchors:function(){return hs.anchors||hs.updateAnchors()},close:function(a){var b=hs.getExpander(a);if(b){b.close()}return false}};hs.fx=function(b,a,c){this.options=a;this.elem=b;this.prop=c;if(!a.orig){a.orig={}}};hs.fx.prototype={update:function(){(hs.fx.step[this.prop]||hs.fx.step._default)(this);if(this.options.step){this.options.step.call(this.elem,this.now,this)}},custom:function(e,d,c){this.startTime=(new Date()).getTime();this.start=e;this.end=d;this.unit=c;this.now=this.start;this.pos=this.state=0;var a=this;function b(f){return a.step(f)}b.elem=this.elem;if(b()&&hs.timers.push(b)==1){hs.timerId=setInterval(function(){var g=hs.timers;for(var f=0;f<g.length;f++){if(!g[f]()){g.splice(f--,1)}}if(!g.length){clearInterval(hs.timerId)}},13)}},step:function(d){var c=(new Date()).getTime();if(d||c>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var a=true;for(var b in this.options.curAnim){if(this.options.curAnim[b]!==true){a=false}}if(a){if(this.options.complete){this.options.complete.call(this.elem)}}return false}else{var e=c-this.startTime;this.state=e/this.options.duration;this.pos=this.options.easing(e,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};hs.extend(hs.fx,{step:{opacity:function(a){hs.setStyles(a.elem,{opacity:a.now})},_default:function(a){try{if(a.elem.style&&a.elem.style[a.prop]!=null){a.elem.style[a.prop]=a.now+a.unit}else{a.elem[a.prop]=a.now}}catch(b){}}}});hs.Outline=function(g,e){this.onLoad=e;this.outlineType=g;var a=hs.uaVersion,f;this.hasAlphaImageLoader=hs.ie&&hs.uaVersion<7;if(!g){if(e){e()}return}hs.init();this.table=hs.createElement("table",{cellSpacing:0},{visibility:"hidden",position:"absolute",borderCollapse:"collapse",width:0},hs.container,true);var b=hs.createElement("tbody",null,null,this.table,1);this.td=[];for(var c=0;c<=8;c++){if(c%3==0){f=hs.createElement("tr",null,{height:"auto"},b,true)}this.td[c]=hs.createElement("td",null,null,f,true);var d=c!=4?{lineHeight:0,fontSize:0}:{position:"relative"};hs.setStyles(this.td[c],d)}this.td[4].className=g+" highslide-outline";this.preloadGraphic()};hs.Outline.prototype={preloadGraphic:function(){var b=hs.graphicsDir+(hs.outlinesDir||"outlines/")+this.outlineType+".png";var a=hs.safari&&hs.uaVersion<525?hs.container:null;this.graphic=hs.createElement("img",null,{position:"absolute",top:"-9999px"},a,true);var c=this;this.graphic.onload=function(){c.onGraphicLoad()};this.graphic.src=b},onGraphicLoad:function(){var d=this.offset=this.graphic.width/4,f=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],c={height:(2*d)+"px",width:(2*d)+"px"};for(var b=0;b<=8;b++){if(f[b]){if(this.hasAlphaImageLoader){var a=(b==1||b==7)?"100%":this.graphic.width+"px";var e=hs.createElement("div",null,{width:"100%",height:"100%",position:"relative",overflow:"hidden"},this.td[b],true);hs.createElement("div",null,{filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+this.graphic.src+"')",position:"absolute",width:a,height:this.graphic.height+"px",left:(f[b][0]*d)+"px",top:(f[b][1]*d)+"px"},e,true)}else{hs.setStyles(this.td[b],{background:"url("+this.graphic.src+") "+(f[b][0]*d)+"px "+(f[b][1]*d)+"px"})}if(window.opera&&(b==3||b==5)){hs.createElement("div",null,c,this.td[b],true)}hs.setStyles(this.td[b],c)}}this.graphic=null;if(hs.pendingOutlines[this.outlineType]){hs.pendingOutlines[this.outlineType].destroy()}hs.pendingOutlines[this.outlineType]=this;if(this.onLoad){this.onLoad()}},setPosition:function(g,e,c,b,f){var d=this.exp,a=d.wrapper.style,e=e||0,g=g||{x:d.x.pos+e,y:d.y.pos+e,w:d.x.get("wsize")-2*e,h:d.y.get("wsize")-2*e};if(c){this.table.style.visibility=(g.h>=4*this.offset)?"visible":"hidden"}hs.setStyles(this.table,{left:(g.x-this.offset)+"px",top:(g.y-this.offset)+"px",width:(g.w+2*this.offset)+"px"});g.w-=2*this.offset;g.h-=2*this.offset;hs.setStyles(this.td[4],{width:g.w>=0?g.w+"px":0,height:g.h>=0?g.h+"px":0});if(this.hasAlphaImageLoader){this.td[3].style.height=this.td[5].style.height=this.td[4].style.height}},destroy:function(a){if(a){this.table.style.visibility="hidden"}else{hs.discardElement(this.table)}}};hs.Dimension=function(b,a){this.exp=b;this.dim=a;this.ucwh=a=="x"?"Width":"Height";this.wh=this.ucwh.toLowerCase();this.uclt=a=="x"?"Left":"Top";this.lt=this.uclt.toLowerCase();this.ucrb=a=="x"?"Right":"Bottom";this.rb=this.ucrb.toLowerCase();this.p1=this.p2=0};hs.Dimension.prototype={get:function(a){switch(a){case"loadingPos":return this.tpos+this.tb+(this.t-hs.loading["offset"+this.ucwh])/2;case"loadingPosXfade":return this.pos+this.cb+this.p1+(this.size-hs.loading["offset"+this.ucwh])/2;case"wsize":return this.size+2*this.cb+this.p1+this.p2;case"fitsize":return this.clientSize-this.marginMin-this.marginMax;case"maxsize":return this.get("fitsize")-2*this.cb-this.p1-this.p2;case"opos":return this.pos-(this.exp.outline?this.exp.outline.offset:0);case"osize":return this.get("wsize")+(this.exp.outline?2*this.exp.outline.offset:0);case"imgPad":return this.imgSize?Math.round((this.size-this.imgSize)/2):0}},calcBorders:function(){this.cb=(this.exp.content["offset"+this.ucwh]-this.t)/2;this.marginMax=hs["margin"+this.ucrb]},calcThumb:function(){this.t=this.exp.el[this.wh]?parseInt(this.exp.el[this.wh]):this.exp.el["offset"+this.ucwh];this.tpos=this.exp.tpos[this.dim];this.tb=(this.exp.el["offset"+this.ucwh]-this.t)/2;if(this.tpos==0||this.tpos==-1){this.tpos=(hs.page[this.wh]/2)+hs.page["scroll"+this.uclt]}},calcExpanded:function(){var a=this.exp;this.justify="auto";if(a.align=="center"){this.justify="center"}else{if(new RegExp(this.lt).test(a.anchor)){this.justify=null}else{if(new RegExp(this.rb).test(a.anchor)){this.justify="max"}}}this.pos=this.tpos-this.cb+this.tb;if(this.maxHeight&&this.dim=="x"){a.maxWidth=Math.min(a.maxWidth||this.full,a.maxHeight*this.full/a.y.full)}this.size=Math.min(this.full,a["max"+this.ucwh]||this.full);this.minSize=a.allowSizeReduction?Math.min(a["min"+this.ucwh],this.full):this.full;if(a.isImage&&a.useBox){this.size=a[this.wh];this.imgSize=this.full}if(this.dim=="x"&&hs.padToMinWidth){this.minSize=a.minWidth}this.target=a["target"+this.dim.toUpperCase()];this.marginMin=hs["margin"+this.uclt];this.scroll=hs.page["scroll"+this.uclt];this.clientSize=hs.page[this.wh]},setSize:function(a){var f=this.exp;if(f.isImage&&(f.useBox||hs.padToMinWidth)){this.imgSize=a;this.size=Math.max(this.size,this.imgSize);f.content.style[this.lt]=this.get("imgPad")+"px"}else{this.size=a}f.content.style[this.wh]=a+"px";f.wrapper.style[this.wh]=this.get("wsize")+"px";if(f.outline){f.outline.setPosition()}if(f.releaseMask){f.releaseMask.style[this.wh]=a+"px"}if(this.dim=="y"&&f.iDoc&&f.body.style.height!="auto"){try{f.iDoc.body.style.overflow="auto"}catch(b){}}if(f.isHtml){var c=f.scrollerDiv;if(this.sizeDiff===undefined){this.sizeDiff=f.innerContent["offset"+this.ucwh]-c["offset"+this.ucwh]}c.style[this.wh]=(this.size-this.sizeDiff)+"px";if(this.dim=="x"){f.mediumContent.style.width="auto"}if(f.body){f.body.style[this.wh]="auto"}}if(this.dim=="x"&&f.overlayBox){f.sizeOverlayBox(true)}if(this.dim=="x"&&f.slideshow&&f.isImage){if(a==this.full){f.slideshow.disable("full-expand")}else{f.slideshow.enable("full-expand")}}},setPos:function(a){this.pos=a;this.exp.wrapper.style[this.lt]=a+"px";if(this.exp.outline){this.exp.outline.setPosition()}}};hs.Expander=function(k,f,b,l){if(document.readyState&&hs.ie&&!hs.isReady){hs.addEventListener(document,"ready",function(){new hs.Expander(k,f,b,l)});return}this.a=k;this.custom=b;this.contentType=l||"image";this.isHtml=(l=="html");this.isImage=!this.isHtml;hs.continuePreloading=false;this.overlays=[];this.last=hs.last;hs.last=null;hs.init();var m=this.key=hs.expanders.length;for(var g=0;g<hs.overrides.length;g++){var c=hs.overrides[g];this[c]=f&&typeof f[c]!="undefined"?f[c]:hs[c]}if(!this.src){this.src=k.href}var d=(f&&f.thumbnailId)?hs.$(f.thumbnailId):k;d=this.thumb=d.getElementsByTagName("img")[0]||d;this.thumbsUserSetId=d.id||k.id;if(!hs.fireEvent(this,"onInit")){return true}for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].a==k&&!(this.last&&this.transitions[1]=="crossfade")){hs.expanders[g].focus();return false}}if(!hs.allowSimultaneousLoading){for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].thumb!=d&&!hs.expanders[g].onLoadStarted){hs.expanders[g].cancelLoading()}}}hs.expanders[m]=this;if(!hs.allowMultipleInstances&&!hs.upcoming){if(hs.expanders[m-1]){hs.expanders[m-1].close()}if(typeof hs.focusKey!="undefined"&&hs.expanders[hs.focusKey]){hs.expanders[hs.focusKey].close()}}this.el=d;this.tpos=this.pageOrigin||hs.getPosition(d);hs.getPageSize();var j=this.x=new hs.Dimension(this,"x");j.calcThumb();var h=this.y=new hs.Dimension(this,"y");h.calcThumb();if(/area/i.test(d.tagName)){this.getImageMapAreaCorrection(d)}this.wrapper=hs.createElement("div",{id:"highslide-wrapper-"+this.key,className:"highslide-wrapper "+this.wrapperClassName},{visibility:"hidden",position:"absolute",zIndex:hs.zIndexCounter+=2},null,true);this.wrapper.onmouseover=this.wrapper.onmouseout=hs.wrapperMouseHandler;if(this.contentType=="image"&&this.outlineWhileAnimating==2){this.outlineWhileAnimating=0}if(!this.outlineType||(this.last&&this.isImage&&this.transitions[1]=="crossfade")){this[this.contentType+"Create"]()}else{if(hs.pendingOutlines[this.outlineType]){this.connectOutline();this[this.contentType+"Create"]()}else{this.showLoading();var e=this;new hs.Outline(this.outlineType,function(){e.connectOutline();e[e.contentType+"Create"]()})}}return true};hs.Expander.prototype={error:function(a){if(hs.debug){alert("Line "+a.lineNumber+": "+a.message)}else{window.location.href=this.src}},connectOutline:function(){var a=this.outline=hs.pendingOutlines[this.outlineType];a.exp=this;a.table.style.zIndex=this.wrapper.style.zIndex-1;hs.pendingOutlines[this.outlineType]=null},showLoading:function(){if(this.onLoadStarted||this.loading){return}this.loading=hs.loading;var c=this;this.loading.onclick=function(){c.cancelLoading()};if(!hs.fireEvent(this,"onShowLoading")){return}var c=this,a=this.x.get("loadingPos")+"px",b=this.y.get("loadingPos")+"px";if(!d&&this.last&&this.transitions[1]=="crossfade"){var d=this.last}if(d){a=d.x.get("loadingPosXfade")+"px";b=d.y.get("loadingPosXfade")+"px";this.loading.style.zIndex=hs.zIndexCounter++}setTimeout(function(){if(c.loading){hs.setStyles(c.loading,{left:a,top:b,zIndex:hs.zIndexCounter++})}},100)},imageCreate:function(){var b=this;var a=document.createElement("img");this.content=a;a.onload=function(){if(hs.expanders[b.key]){b.contentLoaded()}};if(hs.blockRightClick){a.oncontextmenu=function(){return false}}a.className="highslide-image";hs.setStyles(a,{visibility:"hidden",display:"block",position:"absolute",maxWidth:"9999px",zIndex:3});a.title=hs.lang.restoreTitle;if(hs.safari&&hs.uaVersion<525){hs.container.appendChild(a)}if(hs.ie&&hs.flushImgSize){a.src=null}a.src=this.src;this.showLoading()},htmlCreate:function(){if(!hs.fireEvent(this,"onBeforeGetContent")){return}this.content=hs.getCacheBinding(this.a);if(!this.content){this.content=hs.getNode(this.contentId)}if(!this.content){this.content=hs.getSelfRendered()}this.getInline(["maincontent"]);if(this.maincontent){var a=hs.getElementByClass(this.content,"div","highslide-body");if(a){a.appendChild(this.maincontent)}this.maincontent.style.display="block"}hs.fireEvent(this,"onAfterGetContent");var d=this.innerContent=this.content;if(/(swf|iframe)/.test(this.objectType)){this.setObjContainerSize(d)}hs.container.appendChild(this.wrapper);hs.setStyles(this.wrapper,{position:"static",padding:"0 "+hs.marginRight+"px 0 "+hs.marginLeft+"px"});this.content=hs.createElement("div",{className:"highslide-html"},{position:"relative",zIndex:3,height:0,overflow:"hidden"},this.wrapper);this.mediumContent=hs.createElement("div",null,null,this.content,1);this.mediumContent.appendChild(d);hs.setStyles(d,{position:"relative",display:"block",direction:hs.lang.cssDirection||""});if(this.width){d.style.width=this.width+"px"}if(this.height){hs.setStyles(d,{height:this.height+"px",overflow:"hidden"})}if(d.offsetWidth<this.minWidth){d.style.width=this.minWidth+"px"}if(this.objectType=="ajax"&&!hs.getCacheBinding(this.a)){this.showLoading();var c=this;var b=new hs.Ajax(this.a,d);b.src=this.src;b.onLoad=function(){if(hs.expanders[c.key]){c.contentLoaded()}};b.onError=function(){location.href=c.src};b.run()}else{if(this.objectType=="iframe"&&this.objectLoadTime=="before"){this.writeExtendedContent()}else{this.contentLoaded()}}},contentLoaded:function(){try{if(!this.content){return}this.content.onload=null;if(this.onLoadStarted){return}else{this.onLoadStarted=true}var j=this.x,g=this.y;if(this.loading){hs.setStyles(this.loading,{top:"-9999px"});this.loading=null;hs.fireEvent(this,"onHideLoading")}if(this.isImage){j.full=this.content.width;g.full=this.content.height;hs.setStyles(this.content,{width:j.t+"px",height:g.t+"px"});this.wrapper.appendChild(this.content);hs.container.appendChild(this.wrapper)}else{if(this.htmlGetSize){this.htmlGetSize()}}j.calcBorders();g.calcBorders();hs.setStyles(this.wrapper,{left:(j.tpos+j.tb-j.cb)+"px",top:(g.tpos+j.tb-g.cb)+"px"});this.initSlideshow();this.getOverlays();var f=j.full/g.full;j.calcExpanded();this.justify(j);g.calcExpanded();this.justify(g);if(this.isHtml){this.htmlSizeOperations()}if(this.overlayBox){this.sizeOverlayBox(0,1)}if(this.allowSizeReduction){if(this.isImage){this.correctRatio(f)}else{this.fitOverlayBox()}var k=this.slideshow;if(k&&this.last&&k.controls&&k.fixedControls){var h=k.overlayOptions.position||"",a;for(var c in hs.oPos){for(var b=0;b<5;b++){a=this[c];if(h.match(hs.oPos[c][b])){a.pos=this.last[c].pos+(this.last[c].p1-a.p1)+(this.last[c].size-a.size)*[0,0,0.5,1,1][b];if(k.fixedControls=="fit"){if(a.pos+a.size+a.p1+a.p2>a.scroll+a.clientSize-a.marginMax){a.pos=a.scroll+a.clientSize-a.size-a.marginMin-a.marginMax-a.p1-a.p2}if(a.pos<a.scroll+a.marginMin){a.pos=a.scroll+a.marginMin}}}}}}if(this.isImage&&this.x.full>(this.x.imgSize||this.x.size)){this.createFullExpand();if(this.overlays.length==1){this.sizeOverlayBox()}}}this.show()}catch(d){this.error(d)}},setObjContainerSize:function(a,d){var b=hs.getElementByClass(a,"DIV","highslide-body");if(/(iframe|swf)/.test(this.objectType)){if(this.objectWidth){b.style.width=this.objectWidth+"px"}if(this.objectHeight){b.style.height=this.objectHeight+"px"}}},writeExtendedContent:function(){if(this.hasExtendedContent){return}var f=this;this.body=hs.getElementByClass(this.innerContent,"DIV","highslide-body");if(this.objectType=="iframe"){this.showLoading();var g=hs.clearing.cloneNode(1);this.body.appendChild(g);this.newWidth=this.innerContent.offsetWidth;if(!this.objectWidth){this.objectWidth=g.offsetWidth}var c=this.innerContent.offsetHeight-this.body.offsetHeight,d=this.objectHeight||hs.page.height-c-hs.marginTop-hs.marginBottom,e=this.objectLoadTime=="before"?' onload="if (hs.expanders['+this.key+"]) hs.expanders["+this.key+'].contentLoaded()" ':"";this.body.innerHTML+='<iframe name="hs'+(new Date()).getTime()+'" frameborder="0" key="'+this.key+'" style="width:'+this.objectWidth+"px; height:"+d+'px" '+e+' src="'+this.src+'" ></iframe>';this.ruler=this.body.getElementsByTagName("div")[0];this.iframe=this.body.getElementsByTagName("iframe")[0];if(this.objectLoadTime=="after"){this.correctIframeSize()}}if(this.objectType=="swf"){this.body.id=this.body.id||"hs-flash-id-"+this.key;var b=this.swfOptions;if(!b.params){b.params={}}if(typeof b.params.wmode=="undefined"){b.params.wmode="transparent"}if(swfobject){swfobject.embedSWF(this.src,this.body.id,this.objectWidth,this.objectHeight,b.version||"7",b.expressInstallSwfurl,b.flashvars,b.params,b.attributes)}}this.hasExtendedContent=true},htmlGetSize:function(){if(this.iframe&&!this.objectHeight){this.iframe.style.height=this.body.style.height=this.getIframePageHeight()+"px"}this.innerContent.appendChild(hs.clearing);if(!this.x.full){this.x.full=this.innerContent.offsetWidth}this.y.full=this.innerContent.offsetHeight;this.innerContent.removeChild(hs.clearing);if(hs.ie&&this.newHeight>parseInt(this.innerContent.currentStyle.height)){this.newHeight=parseInt(this.innerContent.currentStyle.height)}hs.setStyles(this.wrapper,{position:"absolute",padding:"0"});hs.setStyles(this.content,{width:this.x.t+"px",height:this.y.t+"px"})},getIframePageHeight:function(){var a;try{var d=this.iDoc=this.iframe.contentDocument||this.iframe.contentWindow.document;var b=d.createElement("div");b.style.clear="both";d.body.appendChild(b);a=b.offsetTop;if(hs.ie){a+=parseInt(d.body.currentStyle.marginTop)+parseInt(d.body.currentStyle.marginBottom)-1}}catch(c){a=300}return a},correctIframeSize:function(){var b=this.innerContent.offsetWidth-this.ruler.offsetWidth;hs.discardElement(this.ruler);if(b<0){b=0}var a=this.innerContent.offsetHeight-this.iframe.offsetHeight;if(this.iDoc&&!this.objectHeight&&!this.height&&this.y.size==this.y.full){try{this.iDoc.body.style.overflow="hidden"}catch(c){}}hs.setStyles(this.iframe,{width:Math.abs(this.x.size-b)+"px",height:Math.abs(this.y.size-a)+"px"});hs.setStyles(this.body,{width:this.iframe.style.width,height:this.iframe.style.height});this.scrollingContent=this.iframe;this.scrollerDiv=this.scrollingContent},htmlSizeOperations:function(){this.setObjContainerSize(this.innerContent);if(this.objectType=="swf"&&this.objectLoadTime=="before"){this.writeExtendedContent()}if(this.x.size<this.x.full&&!this.allowWidthReduction){this.x.size=this.x.full}if(this.y.size<this.y.full&&!this.allowHeightReduction){this.y.size=this.y.full}this.scrollerDiv=this.innerContent;hs.setStyles(this.mediumContent,{position:"relative",width:this.x.size+"px"});hs.setStyles(this.innerContent,{border:"none",width:"auto",height:"auto"});var e=hs.getElementByClass(this.innerContent,"DIV","highslide-body");if(e&&!/(iframe|swf)/.test(this.objectType)){var b=e;e=hs.createElement(b.nodeName,null,{overflow:"hidden"},null,true);b.parentNode.insertBefore(e,b);e.appendChild(hs.clearing);e.appendChild(b);var c=this.innerContent.offsetWidth-e.offsetWidth;var a=this.innerContent.offsetHeight-e.offsetHeight;e.removeChild(hs.clearing);var d=hs.safari||navigator.vendor=="KDE"?1:0;hs.setStyles(e,{width:(this.x.size-c-d)+"px",height:(this.y.size-a)+"px",overflow:"auto",position:"relative"});if(d&&b.offsetHeight>e.offsetHeight){e.style.width=(parseInt(e.style.width)+d)+"px"}this.scrollingContent=e;this.scrollerDiv=this.scrollingContent}if(this.iframe&&this.objectLoadTime=="before"){this.correctIframeSize()}if(!this.scrollingContent&&this.y.size<this.mediumContent.offsetHeight){this.scrollerDiv=this.content}if(this.scrollerDiv==this.content&&!this.allowWidthReduction&&!/(iframe|swf)/.test(this.objectType)){this.x.size+=17}if(this.scrollerDiv&&this.scrollerDiv.offsetHeight>this.scrollerDiv.parentNode.offsetHeight){setTimeout("try { hs.expanders["+this.key+"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}",hs.expandDuration)}},getImageMapAreaCorrection:function(d){var h=d.coords.split(",");for(var b=0;b<h.length;b++){h[b]=parseInt(h[b])}if(d.shape.toLowerCase()=="circle"){this.x.tpos+=h[0]-h[2];this.y.tpos+=h[1]-h[2];this.x.t=this.y.t=2*h[2]}else{var f,e,a=f=h[0],g=e=h[1];for(var b=0;b<h.length;b++){if(b%2==0){a=Math.min(a,h[b]);f=Math.max(f,h[b])}else{g=Math.min(g,h[b]);e=Math.max(e,h[b])}}this.x.tpos+=a;this.x.t=f-a;this.y.tpos+=g;this.y.t=e-g}},justify:function(f,b){var g,h=f.target,e=f==this.x?"x":"y";if(h&&h.match(/ /)){g=h.split(" ");h=g[0]}if(h&&hs.$(h)){f.pos=hs.getPosition(hs.$(h))[e];if(g&&g[1]&&g[1].match(/^[-]?[0-9]+px$/)){f.pos+=parseInt(g[1])}if(f.size<f.minSize){f.size=f.minSize}}else{if(f.justify=="auto"||f.justify=="center"){var d=false;var a=f.exp.allowSizeReduction;if(f.justify=="center"){f.pos=Math.round(f.scroll+(f.clientSize+f.marginMin-f.marginMax-f.get("wsize"))/2)}else{f.pos=Math.round(f.pos-((f.get("wsize")-f.t)/2))}if(f.pos<f.scroll+f.marginMin){f.pos=f.scroll+f.marginMin;d=true}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}if(f.pos+f.get("wsize")>f.scroll+f.clientSize-f.marginMax){if(!b&&d&&a){f.size=Math.min(f.size,f.get(e=="y"?"fitsize":"maxsize"))}else{if(f.get("wsize")<f.get("fitsize")){f.pos=f.scroll+f.clientSize-f.marginMax-f.get("wsize")}else{f.pos=f.scroll+f.marginMin;if(!b&&a){f.size=f.get(e=="y"?"fitsize":"maxsize")}}}}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}}else{if(f.justify=="max"){f.pos=Math.floor(f.pos-f.size+f.t)}}}if(f.pos<f.marginMin){var c=f.pos;f.pos=f.marginMin;if(a&&!b){f.size=f.size-(f.pos-c)}}},correctRatio:function(c){var a=this.x,g=this.y,e=false,d=Math.min(a.full,a.size),b=Math.min(g.full,g.size),f=(this.useBox||hs.padToMinWidth);if(d/b>c){d=b*c;if(d<a.minSize){d=a.minSize;b=d/c}e=true}else{if(d/b<c){b=d/c;e=true}}if(hs.padToMinWidth&&a.full<a.minSize){a.imgSize=a.full;g.size=g.imgSize=g.full}else{if(this.useBox){a.imgSize=d;g.imgSize=b}else{a.size=d;g.size=b}}e=this.fitOverlayBox(this.useBox?null:c,e);if(f&&g.size<g.imgSize){g.imgSize=g.size;a.imgSize=g.size*c}if(e||f){a.pos=a.tpos-a.cb+a.tb;a.minSize=a.size;this.justify(a,true);g.pos=g.tpos-g.cb+g.tb;g.minSize=g.size;this.justify(g,true);if(this.overlayBox){this.sizeOverlayBox()}}},fitOverlayBox:function(b,c){var a=this.x,d=this.y;if(this.overlayBox&&(this.isImage||this.allowHeightReduction)){while(d.size>this.minHeight&&a.size>this.minWidth&&d.get("wsize")>d.get("fitsize")){d.size-=10;if(b){a.size=d.size*b}this.sizeOverlayBox(0,1);c=true}}return c},reflow:function(){if(this.scrollerDiv){var a=/iframe/i.test(this.scrollerDiv.tagName)?(this.getIframePageHeight()+1)+"px":"auto";if(this.body){this.body.style.height=a}this.scrollerDiv.style.height=a;this.y.setSize(this.innerContent.offsetHeight)}},show:function(){var a=this.x,b=this.y;this.doShowHide("hidden");hs.fireEvent(this,"onBeforeExpand");if(this.slideshow&&this.slideshow.thumbstrip){this.slideshow.thumbstrip.selectThumb()}this.changeSize(1,{wrapper:{width:a.get("wsize"),height:b.get("wsize"),left:a.pos,top:b.pos},content:{left:a.p1+a.get("imgPad"),top:b.p1+b.get("imgPad"),width:a.imgSize||a.size,height:b.imgSize||b.size}},hs.expandDuration)},changeSize:function(d,i,b){var k=this.transitions,e=d?(this.last?this.last.a:null):hs.upcoming,j=(k[1]&&e&&hs.getParam(e,"transitions")[1]==k[1])?k[1]:k[0];if(this[j]&&j!="expand"){this[j](d,i);return}if(this.outline&&!this.outlineWhileAnimating){if(d){this.outline.setPosition()}else{this.outline.destroy((this.isHtml&&this.preserveContent))}}if(!d){this.destroyOverlays()}var c=this,h=c.x,g=c.y,f=this.easing;if(!d){f=this.easingClose||f}var a=d?function(){if(c.outline){c.outline.table.style.visibility="visible"}setTimeout(function(){c.afterExpand()},50)}:function(){c.afterClose()};if(d){hs.setStyles(this.wrapper,{width:h.t+"px",height:g.t+"px"})}if(d&&this.isHtml){hs.setStyles(this.wrapper,{left:(h.tpos-h.cb+h.tb)+"px",top:(g.tpos-g.cb+g.tb)+"px"})}if(this.fadeInOut){hs.setStyles(this.wrapper,{opacity:d?0:1});hs.extend(i.wrapper,{opacity:d})}hs.animate(this.wrapper,i.wrapper,{duration:b,easing:f,step:function(n,l){if(c.outline&&c.outlineWhileAnimating&&l.prop=="top"){var m=d?l.pos:1-l.pos;var o={w:h.t+(h.get("wsize")-h.t)*m,h:g.t+(g.get("wsize")-g.t)*m,x:h.tpos+(h.pos-h.tpos)*m,y:g.tpos+(g.pos-g.tpos)*m};c.outline.setPosition(o,0,1)}if(c.isHtml){if(l.prop=="left"){c.mediumContent.style.left=(h.pos-n)+"px"}if(l.prop=="top"){c.mediumContent.style.top=(g.pos-n)+"px"}}}});hs.animate(this.content,i.content,b,f,a);if(d){this.wrapper.style.visibility="visible";this.content.style.visibility="visible";if(this.isHtml){this.innerContent.style.visibility="visible"}this.a.className+=" highslide-active-anchor"}},fade:function(f,h){this.outlineWhileAnimating=false;var c=this,j=f?hs.expandDuration:0;if(f){hs.animate(this.wrapper,h.wrapper,0);hs.setStyles(this.wrapper,{opacity:0,visibility:"visible"});hs.animate(this.content,h.content,0);this.content.style.visibility="visible";hs.animate(this.wrapper,{opacity:1},j,null,function(){c.afterExpand()})}if(this.outline){this.outline.table.style.zIndex=this.wrapper.style.zIndex;var b=f||-1,d=this.outline.offset,a=f?3:d,g=f?d:3;for(var e=a;b*e<=b*g;e+=b,j+=25){(function(){var i=f?g-e:a-e;setTimeout(function(){c.outline.setPosition(0,i,1)},j)})()}}if(f){}else{setTimeout(function(){if(c.outline){c.outline.destroy(c.preserveContent)}c.destroyOverlays();hs.animate(c.wrapper,{opacity:0},hs.restoreDuration,null,function(){c.afterClose()})},j)}},crossfade:function(g,m,o){if(!g){return}var f=this,p=this.last,l=this.x,k=this.y,d=p.x,b=p.y,a=this.wrapper,i=this.content,c=this.overlayBox;hs.removeEventListener(document,"mousemove",hs.dragHandler);hs.setStyles(i,{width:(l.imgSize||l.size)+"px",height:(k.imgSize||k.size)+"px"});if(c){c.style.overflow="visible"}this.outline=p.outline;if(this.outline){this.outline.exp=f}p.outline=null;var h=hs.createElement("div",{className:"highslide-"+this.contentType},{position:"absolute",zIndex:4,overflow:"hidden",display:"none"});var j={oldImg:p,newImg:this};for(var e in j){this[e]=j[e].content.cloneNode(1);hs.setStyles(this[e],{position:"absolute",border:0,visibility:"visible"});h.appendChild(this[e])}a.appendChild(h);if(this.isHtml){hs.setStyles(this.mediumContent,{left:0,top:0})}if(c){c.className="";a.appendChild(c)}h.style.display="";p.content.style.display="none";if(hs.safari&&hs.uaVersion<525){this.wrapper.style.visibility="visible"}hs.animate(a,{width:l.size},{duration:hs.transitionDuration,step:function(u,r){var x=r.pos,q=1-x;var w,s={},t=["pos","size","p1","p2"];for(var v in t){w=t[v];s["x"+w]=Math.round(q*d[w]+x*l[w]);s["y"+w]=Math.round(q*b[w]+x*k[w]);s.ximgSize=Math.round(q*(d.imgSize||d.size)+x*(l.imgSize||l.size));s.ximgPad=Math.round(q*d.get("imgPad")+x*l.get("imgPad"));s.yimgSize=Math.round(q*(b.imgSize||b.size)+x*(k.imgSize||k.size));s.yimgPad=Math.round(q*b.get("imgPad")+x*k.get("imgPad"))}if(f.outline){f.outline.setPosition({x:s.xpos,y:s.ypos,w:s.xsize+s.xp1+s.xp2+2*l.cb,h:s.ysize+s.yp1+s.yp2+2*k.cb})}p.wrapper.style.clip="rect("+(s.ypos-b.pos)+"px, "+(s.xsize+s.xp1+s.xp2+s.xpos+2*d.cb-d.pos)+"px, "+(s.ysize+s.yp1+s.yp2+s.ypos+2*b.cb-b.pos)+"px, "+(s.xpos-d.pos)+"px)";hs.setStyles(i,{top:(s.yp1+k.get("imgPad"))+"px",left:(s.xp1+l.get("imgPad"))+"px",marginTop:(k.pos-s.ypos)+"px",marginLeft:(l.pos-s.xpos)+"px"});hs.setStyles(a,{top:s.ypos+"px",left:s.xpos+"px",width:(s.xp1+s.xp2+s.xsize+2*l.cb)+"px",height:(s.yp1+s.yp2+s.ysize+2*k.cb)+"px"});hs.setStyles(h,{width:(s.ximgSize||s.xsize)+"px",height:(s.yimgSize||s.ysize)+"px",left:(s.xp1+s.ximgPad)+"px",top:(s.yp1+s.yimgPad)+"px",visibility:"visible"});hs.setStyles(f.oldImg,{top:(b.pos-s.ypos+b.p1-s.yp1+b.get("imgPad")-s.yimgPad)+"px",left:(d.pos-s.xpos+d.p1-s.xp1+d.get("imgPad")-s.ximgPad)+"px"});hs.setStyles(f.newImg,{opacity:x,top:(k.pos-s.ypos+k.p1-s.yp1+k.get("imgPad")-s.yimgPad)+"px",left:(l.pos-s.xpos+l.p1-s.xp1+l.get("imgPad")-s.ximgPad)+"px"});if(c){hs.setStyles(c,{width:s.xsize+"px",height:s.ysize+"px",left:(s.xp1+l.cb)+"px",top:(s.yp1+k.cb)+"px"})}},complete:function(){a.style.visibility=i.style.visibility="visible";i.style.display="block";hs.discardElement(h);f.afterExpand();p.afterClose();f.last=null}})},reuseOverlay:function(d,c){if(!this.last){return false}for(var b=0;b<this.last.overlays.length;b++){var a=hs.$("hsId"+this.last.overlays[b]);if(a&&a.hsId==d.hsId){this.genOverlayBox();a.reuse=this.key;hs.push(this.overlays,this.last.overlays[b]);return true}}return false},afterExpand:function(){this.isExpanded=true;this.focus();if(this.isHtml&&this.objectLoadTime=="after"){this.writeExtendedContent()}if(this.iframe){try{var g=this,f=this.iframe.contentDocument||this.iframe.contentWindow.document;hs.addEventListener(f,"mousedown",function(){if(hs.focusKey!=g.key){g.focus()}})}catch(d){}if(hs.ie&&typeof this.isClosing!="boolean"){this.iframe.style.width=(this.objectWidth-1)+"px"}}if(this.dimmingOpacity){hs.dim(this)}if(hs.upcoming&&hs.upcoming==this.a){hs.upcoming=null}this.prepareNextOutline();var c=hs.page,b=hs.mouse.x+c.scrollLeft,a=hs.mouse.y+c.scrollTop;this.mouseIsOver=this.x.pos<b&&b<this.x.pos+this.x.get("wsize")&&this.y.pos<a&&a<this.y.pos+this.y.get("wsize");if(this.overlayBox){this.showOverlays()}hs.fireEvent(this,"onAfterExpand")},prepareNextOutline:function(){var a=this.key;var b=this.outlineType;new hs.Outline(b,function(){try{hs.expanders[a].preloadNext()}catch(c){}})},preloadNext:function(){var b=this.getAdjacentAnchor(1);if(b&&b.onclick.toString().match(/hs\.expand/)){var a=hs.createElement("img",{src:hs.getSrc(b)})}},getAdjacentAnchor:function(c){var b=this.getAnchorIndex(),a=hs.anchors.groups[this.slideshowGroup||"none"];if(a&&!a[b+c]&&this.slideshow&&this.slideshow.repeat){if(c==1){return a[0]}else{if(c==-1){return a[a.length-1]}}}return(a&&a[b+c])||null},getAnchorIndex:function(){var a=hs.getAnchors().groups[this.slideshowGroup||"none"];if(a){for(var b=0;b<a.length;b++){if(a[b]==this.a){return b}}}return null},getNumber:function(){if(this[this.numberPosition]){var a=hs.anchors.groups[this.slideshowGroup||"none"];if(a){var b=hs.lang.number.replace("%1",this.getAnchorIndex()+1).replace("%2",a.length);this[this.numberPosition].innerHTML='<div class="highslide-number">'+b+"</div>"+this[this.numberPosition].innerHTML}}},initSlideshow:function(){if(!this.last){for(var c=0;c<hs.slideshows.length;c++){var b=hs.slideshows[c],d=b.slideshowGroup;if(typeof d=="undefined"||d===null||d===this.slideshowGroup){this.slideshow=new hs.Slideshow(this.key,b)}}}else{this.slideshow=this.last.slideshow}var b=this.slideshow;if(!b){return}var a=b.expKey=this.key;b.checkFirstAndLast();b.disable("full-expand");if(b.controls){this.createOverlay(hs.extend(b.overlayOptions||{},{overlayId:b.controls,hsId:"controls",zIndex:5}))}if(b.thumbstrip){b.thumbstrip.add(this)}if(!this.last&&this.autoplay){b.play(true)}if(b.autoplay){b.autoplay=setTimeout(function(){hs.next(a)},(b.interval||500))}},cancelLoading:function(){hs.discardElement(this.wrapper);hs.expanders[this.key]=null;if(hs.upcoming==this.a){hs.upcoming=null}hs.undim(this.key);if(this.loading){hs.loading.style.left="-9999px"}hs.fireEvent(this,"onHideLoading")},writeCredits:function(){if(this.credits){return}this.credits=hs.createElement("a",{href:hs.creditsHref,target:hs.creditsTarget,className:"highslide-credits",innerHTML:hs.lang.creditsText,title:hs.lang.creditsTitle});this.createOverlay({overlayId:this.credits,position:this.creditsPosition||"top left",hsId:"credits"})},getInline:function(types,addOverlay){for(var i=0;i<types.length;i++){var type=types[i],s=null;if(type=="caption"&&!hs.fireEvent(this,"onBeforeGetCaption")){return}else{if(type=="heading"&&!hs.fireEvent(this,"onBeforeGetHeading")){return}}if(!this[type+"Id"]&&this.thumbsUserSetId){this[type+"Id"]=type+"-for-"+this.thumbsUserSetId}if(this[type+"Id"]){this[type]=hs.getNode(this[type+"Id"])}if(!this[type]&&!this[type+"Text"]&&this[type+"Eval"]){try{s=eval(this[type+"Eval"])}catch(e){}}if(!this[type]&&this[type+"Text"]){s=this[type+"Text"]}if(!this[type]&&!s){this[type]=hs.getNode(this.a["_"+type+"Id"]);if(!this[type]){var next=this.a.nextSibling;while(next&&!hs.isHsAnchor(next)){if((new RegExp("highslide-"+type)).test(next.className||null)){if(!next.id){this.a["_"+type+"Id"]=next.id="hsId"+hs.idCounter++}this[type]=hs.getNode(next.id);break}next=next.nextSibling}}}if(!this[type]&&!s&&this.numberPosition==type){s="\n"}if(!this[type]&&s){this[type]=hs.createElement("div",{className:"highslide-"+type,innerHTML:s})}if(addOverlay&&this[type]){var o={position:(type=="heading")?"above":"below"};for(var x in this[type+"Overlay"]){o[x]=this[type+"Overlay"][x]}o.overlayId=this[type];this.createOverlay(o)}}},doShowHide:function(a){if(hs.hideSelects){this.showHideElements("SELECT",a)}if(hs.hideIframes){this.showHideElements("IFRAME",a)}if(hs.geckoMac){this.showHideElements("*",a)}},showHideElements:function(c,b){var e=document.getElementsByTagName(c);var a=c=="*"?"overflow":"visibility";for(var f=0;f<e.length;f++){if(a=="visibility"||(document.defaultView.getComputedStyle(e[f],"").getPropertyValue("overflow")=="auto"||e[f].getAttribute("hidden-by")!=null)){var h=e[f].getAttribute("hidden-by");if(b=="visible"&&h){h=h.replace("["+this.key+"]","");e[f].setAttribute("hidden-by",h);if(!h){e[f].style[a]=e[f].origProp}}else{if(b=="hidden"){var k=hs.getPosition(e[f]);k.w=e[f].offsetWidth;k.h=e[f].offsetHeight;if(!this.dimmingOpacity){var j=(k.x+k.w<this.x.get("opos")||k.x>this.x.get("opos")+this.x.get("osize"));var g=(k.y+k.h<this.y.get("opos")||k.y>this.y.get("opos")+this.y.get("osize"))}var d=hs.getWrapperKey(e[f]);if(!j&&!g&&d!=this.key){if(!h){e[f].setAttribute("hidden-by","["+this.key+"]");e[f].origProp=e[f].style[a];e[f].style[a]="hidden"}else{if(h.indexOf("["+this.key+"]")==-1){e[f].setAttribute("hidden-by",h+"["+this.key+"]")}}}else{if((h=="["+this.key+"]"||hs.focusKey==d)&&d!=this.key){e[f].setAttribute("hidden-by","");e[f].style[a]=e[f].origProp||""}else{if(h&&h.indexOf("["+this.key+"]")>-1){e[f].setAttribute("hidden-by",h.replace("["+this.key+"]",""))}}}}}}}},focus:function(){this.wrapper.style.zIndex=hs.zIndexCounter+=2;for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&a==hs.focusKey){var b=hs.expanders[a];b.content.className+=" highslide-"+b.contentType+"-blur";if(b.isImage){b.content.style.cursor=hs.ieLt7?"hand":"pointer";b.content.title=hs.lang.focusTitle}hs.fireEvent(b,"onBlur")}}if(this.outline){this.outline.table.style.zIndex=this.wrapper.style.zIndex-1}this.content.className="highslide-"+this.contentType;if(this.isImage){this.content.title=hs.lang.restoreTitle;if(hs.restoreCursor){hs.styleRestoreCursor=window.opera?"pointer":"url("+hs.graphicsDir+hs.restoreCursor+"), pointer";if(hs.ieLt7&&hs.uaVersion<6){hs.styleRestoreCursor="hand"}this.content.style.cursor=hs.styleRestoreCursor}}hs.focusKey=this.key;hs.addEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);hs.fireEvent(this,"onFocus")},moveTo:function(a,b){this.x.setPos(a);this.y.setPos(b)},resize:function(d){var a,b,c=d.width/d.height;a=Math.max(d.width+d.dX,Math.min(this.minWidth,this.x.full));if(this.isImage&&Math.abs(a-this.x.full)<12){a=this.x.full}b=this.isHtml?d.height+d.dY:a/c;if(b<Math.min(this.minHeight,this.y.full)){b=Math.min(this.minHeight,this.y.full);if(this.isImage){a=b*c}}this.resizeTo(a,b)},resizeTo:function(a,b){this.y.setSize(b);this.x.setSize(a);this.wrapper.style.height=this.y.get("wsize")+"px"},close:function(){if(this.isClosing||!this.isExpanded){return}if(this.transitions[1]=="crossfade"&&hs.upcoming){hs.getExpander(hs.upcoming).cancelLoading();hs.upcoming=null}if(!hs.fireEvent(this,"onBeforeClose")){return}this.isClosing=true;if(this.slideshow&&!hs.upcoming){this.slideshow.pause()}hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{if(this.isHtml){this.htmlPrepareClose()}this.content.style.cursor="default";this.changeSize(0,{wrapper:{width:this.x.t,height:this.y.t,left:this.x.tpos-this.x.cb+this.x.tb,top:this.y.tpos-this.y.cb+this.y.tb},content:{left:0,top:0,width:this.x.t,height:this.y.t}},hs.restoreDuration)}catch(a){this.afterClose()}},htmlPrepareClose:function(){if(hs.geckoMac){if(!hs.mask){hs.mask=hs.createElement("div",null,{position:"absolute"},hs.container)}hs.setStyles(hs.mask,{width:this.x.size+"px",height:this.y.size+"px",left:this.x.pos+"px",top:this.y.pos+"px",display:"block"})}if(this.objectType=="swf"){try{hs.$(this.body.id).StopPlay()}catch(a){}}if(this.objectLoadTime=="after"&&!this.preserveContent){this.destroyObject()}if(this.scrollerDiv&&this.scrollerDiv!=this.scrollingContent){this.scrollerDiv.style.overflow="hidden"}},destroyObject:function(){if(hs.ie&&this.iframe){try{this.iframe.contentWindow.document.body.innerHTML=""}catch(a){}}if(this.objectType=="swf"){swfobject.removeSWF(this.body.id)}this.body.innerHTML=""},sleep:function(){if(this.outline){this.outline.table.style.display="none"}this.releaseMask=null;this.wrapper.style.display="none";this.isExpanded=false;hs.push(hs.sleeping,this)},awake:function(){try{hs.expanders[this.key]=this;if(!hs.allowMultipleInstances&&hs.focusKey!=this.key){try{hs.expanders[hs.focusKey].close()}catch(b){}}var d=hs.zIndexCounter++,a={display:"",zIndex:d};hs.setStyles(this.wrapper,a);this.isClosing=false;var c=this.outline||0;if(c){if(!this.outlineWhileAnimating){a.visibility="hidden"}hs.setStyles(c.table,a)}if(this.slideshow){this.initSlideshow()}this.show()}catch(b){}},createOverlay:function(e){var d=e.overlayId,a=(e.relativeTo=="viewport"&&!/panel$/.test(e.position));if(typeof d=="string"){d=hs.getNode(d)}if(e.html){d=hs.createElement("div",{innerHTML:e.html})}if(!d||typeof d=="string"){return}if(!hs.fireEvent(this,"onCreateOverlay",{overlay:d})){return}d.style.display="block";e.hsId=e.hsId||e.overlayId;if(this.transitions[1]=="crossfade"&&this.reuseOverlay(e,d)){return}this.genOverlayBox();var c=e.width&&/^[0-9]+(px|%)$/.test(e.width)?e.width:"auto";if(/^(left|right)panel$/.test(e.position)&&!/^[0-9]+px$/.test(e.width)){c="200px"}var b=hs.createElement("div",{id:"hsId"+hs.idCounter++,hsId:e.hsId},{position:"absolute",visibility:"hidden",width:c,direction:hs.lang.cssDirection||"",opacity:0},a?hs.viewport:this.overlayBox,true);if(a){b.hsKey=this.key}b.appendChild(d);hs.extend(b,{opacity:1,offsetX:0,offsetY:0,dur:(e.fade===0||e.fade===false||(e.fade==2&&hs.ie))?0:250});hs.extend(b,e);if(this.gotOverlays){this.positionOverlay(b);if(!b.hideOnMouseOut||this.mouseIsOver){hs.animate(b,{opacity:b.opacity},b.dur)}}hs.push(this.overlays,hs.idCounter-1)},positionOverlay:function(e){var f=e.position||"middle center",c=(e.relativeTo=="viewport"),b=e.offsetX,a=e.offsetY;if(c){hs.viewport.style.display="block";e.hsKey=this.key;if(e.offsetWidth>e.parentNode.offsetWidth){e.style.width="100%"}}else{if(e.parentNode!=this.overlayBox){this.overlayBox.appendChild(e)}}if(/left$/.test(f)){e.style.left=b+"px"}if(/center$/.test(f)){hs.setStyles(e,{left:"50%",marginLeft:(b-Math.round(e.offsetWidth/2))+"px"})}if(/right$/.test(f)){e.style.right=-b+"px"}if(/^leftpanel$/.test(f)){hs.setStyles(e,{right:"100%",marginRight:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p1=e.offsetWidth}else{if(/^rightpanel$/.test(f)){hs.setStyles(e,{left:"100%",marginLeft:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p2=e.offsetWidth}}var d=e.parentNode.offsetHeight;e.style.height="auto";if(c&&e.offsetHeight>d){e.style.height=hs.ieLt7?d+"px":"100%"}if(/^top/.test(f)){e.style.top=a+"px"}if(/^middle/.test(f)){hs.setStyles(e,{top:"50%",marginTop:(a-Math.round(e.offsetHeight/2))+"px"})}if(/^bottom/.test(f)){e.style.bottom=-a+"px"}if(/^above$/.test(f)){hs.setStyles(e,{left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",bottom:"100%",marginBottom:this.y.cb+"px",width:"auto"});this.y.p1=e.offsetHeight}else{if(/^below$/.test(f)){hs.setStyles(e,{position:"relative",left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",top:"100%",marginTop:this.y.cb+"px",width:"auto"});this.y.p2=e.offsetHeight;e.style.position="absolute"}}},getOverlays:function(){this.getInline(["heading","caption"],true);this.getNumber();if(this.caption){hs.fireEvent(this,"onAfterGetCaption")}if(this.heading){hs.fireEvent(this,"onAfterGetHeading")}if(this.heading&&this.dragByHeading){this.heading.className+=" highslide-move"}if(hs.showCredits){this.writeCredits()}for(var a=0;a<hs.overlays.length;a++){var d=hs.overlays[a],e=d.thumbnailId,b=d.slideshowGroup;if((!e&&!b)||(e&&e==this.thumbsUserSetId)||(b&&b===this.slideshowGroup)){if(this.isImage||(this.isHtml&&d.useOnHtml)){this.createOverlay(d)}}}var c=[];for(var a=0;a<this.overlays.length;a++){var d=hs.$("hsId"+this.overlays[a]);if(/panel$/.test(d.position)){this.positionOverlay(d)}else{hs.push(c,d)}}for(var a=0;a<c.length;a++){this.positionOverlay(c[a])}this.gotOverlays=true},genOverlayBox:function(){if(!this.overlayBox){this.overlayBox=hs.createElement("div",{className:this.wrapperClassName},{position:"absolute",width:(this.x.size||(this.useBox?this.width:null)||this.x.full)+"px",height:(this.y.size||this.y.full)+"px",visibility:"hidden",overflow:"hidden",zIndex:hs.ie?4:"auto"},hs.container,true)}},sizeOverlayBox:function(f,d){var c=this.overlayBox,a=this.x,h=this.y;hs.setStyles(c,{width:a.size+"px",height:h.size+"px"});if(f||d){for(var e=0;e<this.overlays.length;e++){var g=hs.$("hsId"+this.overlays[e]);var b=(hs.ieLt7||document.compatMode=="BackCompat");if(g&&/^(above|below)$/.test(g.position)){if(b){g.style.width=(c.offsetWidth+2*a.cb+a.p1+a.p2)+"px"}h[g.position=="above"?"p1":"p2"]=g.offsetHeight}if(g&&b&&/^(left|right)panel$/.test(g.position)){g.style.height=(c.offsetHeight+2*h.cb)+"px"}}}if(f){hs.setStyles(this.content,{top:h.p1+"px"});hs.setStyles(c,{top:(h.p1+h.cb)+"px"})}},showOverlays:function(){var a=this.overlayBox;a.className="";hs.setStyles(a,{top:(this.y.p1+this.y.cb)+"px",left:(this.x.p1+this.x.cb)+"px",overflow:"visible"});if(hs.safari){a.style.visibility="visible"}this.wrapper.appendChild(a);for(var c=0;c<this.overlays.length;c++){var d=hs.$("hsId"+this.overlays[c]);d.style.zIndex=d.zIndex||4;if(!d.hideOnMouseOut||this.mouseIsOver){d.style.visibility="visible";hs.setStyles(d,{visibility:"visible",display:""});hs.animate(d,{opacity:d.opacity},d.dur)}}},destroyOverlays:function(){if(!this.overlays.length){return}if(this.slideshow){var d=this.slideshow.controls;if(d&&hs.getExpander(d)==this){d.parentNode.removeChild(d)}}for(var a=0;a<this.overlays.length;a++){var b=hs.$("hsId"+this.overlays[a]);if(b&&b.parentNode==hs.viewport&&hs.getExpander(b)==this){hs.discardElement(b)}}if(this.isHtml&&this.preserveContent){this.overlayBox.style.top="-9999px";hs.container.appendChild(this.overlayBox)}else{hs.discardElement(this.overlayBox)}},createFullExpand:function(){if(this.slideshow&&this.slideshow.controls){this.slideshow.enable("full-expand");return}this.fullExpandLabel=hs.createElement("a",{href:"javascript:hs.expanders["+this.key+"].doFullExpand();",title:hs.lang.fullExpandTitle,className:"highslide-full-expand"});if(!hs.fireEvent(this,"onCreateFullExpand")){return}this.createOverlay({overlayId:this.fullExpandLabel,position:hs.fullExpandPosition,hideOnMouseOut:true,opacity:hs.fullExpandOpacity})},doFullExpand:function(){try{if(!hs.fireEvent(this,"onDoFullExpand")){return}if(this.fullExpandLabel){hs.discardElement(this.fullExpandLabel)}this.focus();var c=this.x.size,a=this.y.size;this.resizeTo(this.x.full,this.y.full);var b=this.x.pos-(this.x.size-c)/2;if(b<hs.marginLeft){b=hs.marginLeft}var f=this.y.pos-(this.y.size-a)/2;if(f<hs.marginTop){f=hs.marginTop}this.moveTo(b,f);this.doShowHide("hidden")}catch(d){this.error(d)}},afterClose:function(){this.a.className=this.a.className.replace("highslide-active-anchor","");this.doShowHide("visible");if(this.isHtml&&this.preserveContent&&this.transitions[1]!="crossfade"){this.sleep()}else{if(this.outline&&this.outlineWhileAnimating){this.outline.destroy()}hs.discardElement(this.wrapper)}if(hs.mask){hs.mask.style.display="none"}this.destroyOverlays();if(!hs.viewport.childNodes.length){hs.viewport.style.display="none"}if(this.dimmingOpacity){hs.undim(this.key)}hs.fireEvent(this,"onAfterClose");hs.expanders[this.key]=null;hs.reOrder()}};hs.Ajax=function(b,c,d){this.a=b;this.content=c;this.pre=d};hs.Ajax.prototype={run:function(){var d;if(!this.src){this.src=hs.getSrc(this.a)}if(this.src.match("#")){var a=this.src.split("#");this.src=a[0];this.id=a[1]}if(hs.cachedGets[this.src]){this.cachedGet=hs.cachedGets[this.src];if(this.id){this.getElementContent()}else{this.loadHTML()}return}try{d=new XMLHttpRequest()}catch(b){try{d=new ActiveXObject("Msxml2.XMLHTTP")}catch(b){try{d=new ActiveXObject("Microsoft.XMLHTTP")}catch(b){this.onError()}}}var f=this;d.onreadystatechange=function(){if(f.xhr.readyState==4){if(f.id){f.getElementContent()}else{f.loadHTML()}}};var c=this.src;this.xhr=d;if(hs.forceAjaxReload){c=c.replace(/$/,(/\?/.test(c)?"&":"?")+"dummy="+(new Date()).getTime())}d.open("GET",c,true);d.setRequestHeader("X-Requested-With","XMLHttpRequest");d.setRequestHeader("Content-Type","application/x-www-form-urlencoded");d.send(null)},getElementContent:function(){hs.init();var a=window.opera||hs.ie6SSL?{src:"about:blank"}:null;this.iframe=hs.createElement("iframe",a,{position:"absolute",top:"-9999px"},hs.container);this.loadHTML()},loadHTML:function(){var c=this.cachedGet||this.xhr.responseText,b;if(this.pre){hs.cachedGets[this.src]=c}if(!hs.ie||hs.uaVersion>=5.5){c=c.replace(new RegExp("<link[^>]*>","gi"),"").replace(new RegExp("<script[^>]*>.*?<\/script>","gi"),"");if(this.iframe){var f=this.iframe.contentDocument;if(!f&&this.iframe.contentWindow){f=this.iframe.contentWindow.document}if(!f){var g=this;setTimeout(function(){g.loadHTML()},25);return}f.open();f.write(c);f.close();try{c=f.getElementById(this.id).innerHTML}catch(d){try{c=this.iframe.document.getElementById(this.id).innerHTML}catch(d){}}hs.discardElement(this.iframe)}else{b=/(<body[^>]*>|<\/body>)/ig;if(b.test(c)){c=c.split(b)[hs.ieLt9?1:2]}}}hs.getElementByClass(this.content,"DIV","highslide-body").innerHTML=c;this.onLoad();for(var a in this){this[a]=null}}};hs.Slideshow=function(c,b){if(hs.dynamicallyUpdateAnchors!==false){hs.updateAnchors()}this.expKey=c;for(var a in b){this[a]=b[a]}if(this.useControls){this.getControls()}if(this.thumbstrip){this.thumbstrip=hs.Thumbstrip(this)}};hs.Slideshow.prototype={getControls:function(){this.controls=hs.createElement("div",{innerHTML:hs.replaceLang(hs.skin.controls)},null,hs.container);var b=["play","pause","previous","next","move","full-expand","close"];this.btn={};var c=this;for(var a=0;a<b.length;a++){this.btn[b[a]]=hs.getElementByClass(this.controls,"li","highslide-"+b[a]);this.enable(b[a])}this.btn.pause.style.display="none"},checkFirstAndLast:function(){if(this.repeat||!this.controls){return}var c=hs.expanders[this.expKey],b=c.getAnchorIndex(),a=/disabled$/;if(b==0){this.disable("previous")}else{if(a.test(this.btn.previous.getElementsByTagName("a")[0].className)){this.enable("previous")}}if(b+1==hs.anchors.groups[c.slideshowGroup||"none"].length){this.disable("next");this.disable("play")}else{if(a.test(this.btn.next.getElementsByTagName("a")[0].className)){this.enable("next");this.enable("play")}}},enable:function(d){if(!this.btn){return}var c=this,b=this.btn[d].getElementsByTagName("a")[0],e=/disabled$/;b.onclick=function(){c[d]();return false};if(e.test(b.className)){b.className=b.className.replace(e,"")}},disable:function(c){if(!this.btn){return}var b=this.btn[c].getElementsByTagName("a")[0];b.onclick=function(){return false};if(!/disabled$/.test(b.className)){b.className+=" disabled"}},hitSpace:function(){if(this.autoplay){this.pause()}else{this.play()}},play:function(a){if(this.btn){this.btn.play.style.display="none";this.btn.pause.style.display=""}this.autoplay=true;if(!a){hs.next(this.expKey)}},pause:function(){if(this.btn){this.btn.pause.style.display="none";this.btn.play.style.display=""}clearTimeout(this.autoplay);this.autoplay=null},previous:function(){this.pause();hs.previous(this.btn.previous)},next:function(){this.pause();hs.next(this.btn.next)},move:function(){},"full-expand":function(){hs.getExpander().doFullExpand()},close:function(){hs.close(this.btn.close)}};hs.Thumbstrip=function(k){function p(i){hs.extend(f||{},{overlayId:r,hsId:"thumbstrip",className:"highslide-thumbstrip-"+m+"-overlay "+(f.className||"")});if(hs.ieLt7){f.fade=0}i.createOverlay(f);hs.setStyles(r.parentNode,{overflow:"hidden"})}function c(i){d(undefined,Math.round(i*r[h?"offsetWidth":"offsetHeight"]*0.7))}function d(L,M){if(L===undefined){for(var K=0;K<j.length;K++){if(j[K]==hs.expanders[k.expKey].a){L=K;break}}}if(L===undefined){return}var G=r.getElementsByTagName("a"),z=G[L],w=z.parentNode,y=h?"Left":"Top",N=h?"Right":"Bottom",I=h?"Width":"Height",B="offset"+y,H="offset"+I,x=n.parentNode.parentNode[H],F=x-s[H],v=parseInt(s.style[h?"left":"top"])||0,C=v,D=20;if(M!==undefined){C=v-M;if(F>0){F=0}if(C>0){C=0}if(C<F){C=F}}else{for(var K=0;K<G.length;K++){G[K].className=""}z.className="highslide-active-anchor";var J=L>0?G[L-1].parentNode[B]:w[B],A=w[B]+w[H]+(G[L+1]?G[L+1].parentNode[H]:0);if(A>x-v){C=x-A}else{if(J<-v){C=-J}}}var E=w[B]+(w[H]-g[H])/2+C;hs.animate(s,h?{left:C}:{top:C},null,"easeOutQuad");hs.animate(g,h?{left:E}:{top:E},null,"easeOutQuad");l.style.display=C<0?"block":"none";t.style.display=(C>F)?"block":"none"}var j=hs.anchors.groups[hs.expanders[k.expKey].slideshowGroup||"none"],f=k.thumbstrip,m=f.mode||"horizontal",u=(m=="float"),o=u?["div","ul","li","span"]:["table","tbody","tr","td"],h=(m=="horizontal"),r=hs.createElement("div",{className:"highslide-thumbstrip highslide-thumbstrip-"+m,innerHTML:'<div class="highslide-thumbstrip-inner"><'+o[0]+"><"+o[1]+"></"+o[1]+"></"+o[0]+'></div><div class="highslide-scroll-up"><div></div></div><div class="highslide-scroll-down"><div></div></div><div class="highslide-marker"><div></div></div>'},{display:"none"},hs.container),e=r.childNodes,n=e[0],l=e[1],t=e[2],g=e[3],s=n.firstChild,a=r.getElementsByTagName(o[1])[0],b;for(var q=0;q<j.length;q++){if(q==0||!h){b=hs.createElement(o[2],null,null,a)}(function(){var v=j[q],i=hs.createElement(o[3],null,null,b),w=q;hs.createElement("a",{href:v.href,title:v.title,onclick:function(){if(/highslide-active-anchor/.test(this.className)){return false}hs.getExpander(this).focus();return hs.transit(v)},innerHTML:hs.stripItemFormatter?hs.stripItemFormatter(v):v.innerHTML},null,i)})()}if(!u){l.onclick=function(){c(-1)};t.onclick=function(){c(1)};hs.addEventListener(a,document.onmousewheel!==undefined?"mousewheel":"DOMMouseScroll",function(i){var v=0;i=i||window.event;if(i.wheelDelta){v=i.wheelDelta/120;if(hs.opera){v=-v}}else{if(i.detail){v=-i.detail/3}}if(v){c(-v*0.2)}if(i.preventDefault){i.preventDefault()}i.returnValue=false})}return{add:p,selectThumb:d}};hs.langDefaults=hs.lang;var HsExpander=hs.Expander;if(hs.ie&&window==window.top){(function(){try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,50);return}hs.ready()})()}hs.addEventListener(document,"DOMContentLoaded",hs.ready);hs.addEventListener(window,"load",hs.ready);hs.addEventListener(document,"ready",function(){if(hs.expandCursor||hs.dimmingOpacity){var d=hs.createElement("style",{type:"text/css"},null,document.getElementsByTagName("HEAD")[0]),c=document.compatMode=="BackCompat";function b(f,g){if(hs.ie&&(hs.uaVersion<9||c)){var e=document.styleSheets[document.styleSheets.length-1];if(typeof(e.addRule)=="object"){e.addRule(f,g)}}else{d.appendChild(document.createTextNode(f+" {"+g+"}"))}}function a(e){return"expression( ( ( ignoreMe = document.documentElement."+e+" ? document.documentElement."+e+" : document.body."+e+" ) ) + 'px' );"}if(hs.expandCursor){b(".highslide img","cursor: url("+hs.graphicsDir+hs.expandCursor+"), pointer !important;")}b(".highslide-viewport-size",hs.ie&&(hs.uaVersion<7||c)?"position: absolute; left:"+a("scrollLeft")+"top:"+a("scrollTop")+"width:"+a("clientWidth")+"height:"+a("clientHeight"):"position: fixed; width: 100%; height: 100%; left: 0; top: 0")}});hs.addEventListener(window,"resize",function(){hs.getPageSize();if(hs.viewport){for(var a=0;a<hs.viewport.childNodes.length;a++){var b=hs.viewport.childNodes[a],c=hs.getExpander(b);c.positionOverlay(b);if(b.hsId=="thumbstrip"){c.slideshow.thumbstrip.selectThumb()}}}});hs.addEventListener(document,"mousemove",function(a){hs.mouse={x:a.clientX,y:a.clientY}});hs.addEventListener(document,"mousedown",hs.mouseClickHandler);hs.addEventListener(document,"mouseup",hs.mouseClickHandler);hs.addEventListener(document,"ready",hs.setClickEvents);hs.addEventListener(window,"load",hs.preloadImages);hs.addEventListener(window,"load",hs.preloadAjax)}; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.packed.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.packed.js index 9419d2ed262e6b6577bff5fa89af7f26360e91f5..21cae3b6dbe1b18fd7093262222a27ccbbc4b14d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.packed.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-full.packed.js @@ -1,9 +1,9 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) - * Config: default +events +unobtrusive +imagemap +slideshow +positioning +transitions +viewport +thumbstrip +inline +ajax +iframe +flash +packed - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ -eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?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}('q(!m){A m={18:{97:\'aK\',aZ:\'fw...\',aY:\'8G 2i fP\',bD:\'8G 2i g0 2i eR\',9Z:\'eZ 2i fc D (f)\',cq:\'f8 by <i>an ao</i>\',cr:\'f4 2i f6 an ao fg\',8Y:\'aq\',8W:\'ay\',8Z:\'ag\',92:\'am\',90:\'am (eD)\',b0:\'eY\',ab:\'al\',au:\'al 1p (aj)\',ac:\'ah\',ad:\'ah 1p (aj)\',8s:\'aq (8w 1b)\',8X:\'ay (8w 3m)\',8V:\'ag\',ae:\'1:1\',3G:\'g7 %1 fz %2\',9W:\'8G 2i 26 2R, dC aA dE 2i 3u. dF 8w dB O 1D aA 3a.\'},5c:\'K/dw/\',7R:\'dv.5q\',6h:\'dx.5q\',6W:5Z,9A:5Z,4W:15,9B:15,4d:15,6L:15,4F:cY,be:0.75,9l:M,9f:5,3Y:2,ei:3,5S:1j,bz:\'4Q 3m\',bA:1,br:M,ct:\'em://K.eh/\',cs:\'ec\',aS:M,9w:[\'a\',\'5v\'],3q:[],cE:5Z,4b:0,87:50,6J:1j,6X:M,4D:M,3U:\'60\',7W:M,46:\'1M\',9n:\'1M\',b1:I,aC:I,a7:M,4s:aw,6k:aw,5Y:M,1Z:\'ev-dV\',8i:{2X:\'<P 1W="K-2X"><6t>\'+\'<1H 1W="K-3a">\'+\'<a 21="#" 24="{m.18.8s}">\'+\'<1C>{m.18.8Y}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-3L">\'+\'<a 21="#" 24="{m.18.au}">\'+\'<1C>{m.18.ab}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-3p">\'+\'<a 21="#" 24="{m.18.ad}">\'+\'<1C>{m.18.ac}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-1D">\'+\'<a 21="#" 24="{m.18.8X}">\'+\'<1C>{m.18.8W}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-3u">\'+\'<a 21="#" 24="{m.18.8V}">\'+\'<1C>{m.18.8Z}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-1a-2F">\'+\'<a 21="#" 24="{m.18.9Z}">\'+\'<1C>{m.18.ae}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-26">\'+\'<a 21="#" 24="{m.18.90}" >\'+\'<1C>{m.18.92}</1C></a>\'+\'</1H>\'+\'</6t></P>\',bd:\'<P 1W="K-e2"><6t>\'+\'<1H 1W="K-3a">\'+\'<a 21="#" 24="{m.18.8s}" 2p="E m.3a(k)">\'+\'<1C>{m.18.8Y}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-1D">\'+\'<a 21="#" 24="{m.18.8X}" 2p="E m.1D(k)">\'+\'<1C>{m.18.8W}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-3u">\'+\'<a 21="#" 24="{m.18.8V}" 2p="E 1j">\'+\'<1C>{m.18.8Z}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-26">\'+\'<a 21="#" 24="{m.18.90}" 2p="E m.26(k)">\'+\'<1C>{m.18.92}</1C></a>\'+\'</1H>\'+\'</6t></P>\'+\'<P 1W="K-19"></P>\'+\'<P 1W="K-e7"><P>\'+\'<1C 1W="K-3O" 24="{m.18.b0}"><1C></1C></1C>\'+\'</P></P>\'},64:[],a1:M,16:[],a4:[\'5Y\',\'3t\',\'46\',\'9n\',\'b1\',\'aC\',\'1Z\',\'3Y\',\'dU\',\'dM\',\'dL\',\'b3\',\'dK\',\'dI\',\'dJ\',\'b2\',\'cv\',\'a7\',\'42\',\'6l\',\'3q\',\'4b\',\'L\',\'N\',\'88\',\'6J\',\'6X\',\'4D\',\'dN\',\'dO\',\'dT\',\'2I\',\'7W\',\'4j\',\'4x\',\'3U\',\'8e\',\'a9\',\'4s\',\'6k\',\'6M\',\'9i\',\'aX\',\'2N\',\'2Q\',\'cF\',\'cD\',\'1e\'],1T:[],61:0,8g:{x:[\'bM\',\'1b\',\'4X\',\'3m\',\'bC\'],y:[\'5N\',\'Y\',\'9a\',\'4Q\',\'7E\']},7B:{},b2:{},b3:{},8e:{aG:{},29:{},aF:{}},4m:[],6u:[],4n:{},4R:[],7q:[],5a:[],7k:{},8c:{},7l:[],2t:/dP\\/4\\.0/.11(4A.6d)?8:8J((4A.6d.5G().3b(/.+(?:b9|dQ|e9|2h)[\\/: ]([\\d.]+)/)||[0,\'0\'])[1]),2h:(W.6q&&!1S.3z),4M:/ea/.11(4A.6d),6y:/eu.+b9:1\\.[0-8].+es/.11(4A.6d),$:C(1v){q(1v)E W.9Q(1v)},2o:C(2a,3j){2a[2a.V]=3j},1d:C(ba,4l,49,6c,bh){A el=W.1d(ba);q(4l)m.3A(el,4l);q(bh)m.R(el,{94:0,8H:\'1E\',9D:0});q(49)m.R(el,49);q(6c)6c.1X(el);E el},3A:C(el,4l){O(A x 2Y 4l)el[x]=4l[x];E el},R:C(el,49){O(A x 2Y 49){q(m.3R&&x==\'1z\'){q(49[x]>0.99)el.G.ew(\'5Q\');J el.G.5Q=\'bg(1z=\'+(49[x]*2w)+\')\'}J el.G[x]=49[x]}},2z:C(el,1f,3C){A 4T,51,4w;q(1F 3C!=\'7j\'||3C===I){A 2H=c5;3C={4h:2H[2],2Q:2H[3],76:2H[4]}}q(1F 3C.4h!=\'3G\')3C.4h=5Z;3C.2Q=1h[3C.2Q]||1h.bj;3C.7g=m.3A({},1f);O(A 2Z 2Y 1f){A e=1J m.fx(el,3C,2Z);4T=8J(m.8I(el,2Z))||0;51=8J(1f[2Z]);4w=2Z!=\'1z\'?\'F\':\'\';e.3E(4T,51,4w)}},8I:C(el,1f){q(el.G[1f]){E el.G[1f]}J q(W.8L){E W.8L.cK(el,I).co(1f)}J{q(1f==\'1z\')1f=\'5Q\';A 3j=el.5y[1f.2k(/\\-(\\w)/g,C(a,b){E b.bi()})];q(1f==\'5Q\')3j=3j.2k(/bg\\(1z=([0-9]+)\\)/,C(a,b){E b/2w});E 3j===\'\'?1:3j}},7S:C(){A d=W,w=1S,63=d.7a&&d.7a!=\'8v\'?d.5h:d.19,3R=m.2h&&(m.2t<9||1F bf==\'1L\');A L=3R?63.8F:(d.5h.8F||7c.ep),N=3R?63.c4:7c.eo;m.4g={L:L,N:N,5O:3R?63.5O:bf,5R:3R?63.5R:ed};E m.4g},6K:C(el){q(/5v/i.11(el.3J)){A 7N=W.2C(\'1N\');O(A i=0;i<7N.V;i++){A u=7N[i].eb;q(u&&u.2k(/^.*?#/,\'\')==el.23.2Z){el=7N[i];5m}}}A p={x:el.4V,y:el.8O};5g(el.bb){el=el.bb;p.x+=el.4V;p.y+=el.8O;q(el!=W.19&&el!=W.5h){p.x-=el.5O;p.y-=el.5R}}E p},2F:C(a,29,3E,T){q(!a)a=m.1d(\'a\',I,{1o:\'1E\'},m.2b);q(1F a.6a==\'C\')E 29;q(T==\'3D\'){O(A i=0;i<m.4R.V;i++){q(m.4R[i]&&m.4R[i].a==a){m.4R[i].bP();m.4R[i]=I;E 1j}}m.aU=M}1t{1J m.5A(a,29,3E,T);E 1j}1y(e){E M}},9u:C(a,29,3E){E m.2F(a,29,3E,\'3D\')},89:C(){E m.1d(\'P\',{1c:\'K-3D-S\',2d:m.8b(m.8i.bd)})},4p:C(el,3J,1c){A 1m=el.2C(3J);O(A i=0;i<1m.V;i++){q((1J 4Y(1c)).11(1m[i].1c)){E 1m[i]}}E I},8b:C(s){s=s.2k(/\\s/g,\' \');A 2m=/{m\\.18\\.([^}]+)\\}/g,6v=s.3b(2m),18;q(6v)O(A i=0;i<6v.V;i++){18=6v[i].2k(2m,"$1");q(1F m.18[18]!=\'1L\')s=s.2k(6v[i],m.18[18])}E s},c1:C(){A 1m=W.2C(\'a\');O(A i=0;i<1m.V;i++){A T=m.aH(1m[i]);q(T&&!1m[i].aI){(C(){A t=T;q(m.1A(m,\'ek\',{7y:1m[i],T:t})){1m[i].2p=(T==\'2R\')?C(){E m.2F(k)}:C(){E m.9u(k,{2I:t})}}})();1m[i].aI=M}}m.6p()},aH:C(el){q(el.7b==\'K\')E\'2R\';J q(el.7b==\'K-2W\')E\'2W\';J q(el.7b==\'K-1k\')E\'1k\';J q(el.7b==\'K-3x\')E\'3x\'},86:C(a){O(A i=0;i<m.5a.V;i++){q(m.5a[i][0]==a){A c=m.5a[i][1];m.5a[i][1]=c.5J(1);E c}}E I},bI:C(e){A 2a=m.6p();O(A i=0;i<2a.56.V;i++){A a=2a.56[i];q(m.43(a,\'2I\')==\'2W\'&&m.43(a,\'7W\'))m.2o(m.7q,a)}m.8k(0)},8k:C(i){q(!m.7q[i])E;A a=m.7q[i];A 6z=m.4J(m.43(a,\'88\'));q(!6z)6z=m.89();A 2W=1J m.7x(a,6z,1);2W.9z=C(){};2W.3F=C(){m.2o(m.5a,[a,6z]);m.8k(i+1)};2W.9r()},aQ:C(){A 8d=0,7n=-1,16=m.16,B,1B;O(A i=0;i<16.V;i++){B=16[i];q(B){1B=B.U.G.1B;q(1B&&1B>8d){8d=1B;7n=i}}}q(7n==-1)m.3d=-1;J 16[7n].3M()},43:C(a,6b){a.6a=a.2p;A p=a.6a?a.6a():I;a.6a=I;E(p&&1F p[6b]!=\'1L\')?p[6b]:(1F m[6b]!=\'1L\'?m[6b]:I)},7s:C(a){A 1e=m.43(a,\'1e\');q(1e)E 1e;E a.21},4J:C(1v){A 1P=m.$(1v),4q=m.8c[1v],a={};q(!1P&&!4q)E I;q(!4q){4q=1P.5J(M);4q.1v=\'\';m.8c[1v]=4q;E 1P}J{E 4q.5J(M)}},3B:C(d){q(d)m.9y.1X(d);m.9y.2d=\'\'},1u:C(B){q(!m.2v){84=M;m.2v=m.1d(\'P\',{1c:\'K-dc K-2x-D\',5r:\'\',2p:C(){q(m.1A(m,\'d3\'))m.26()}},{1n:\'1Y\',1z:0},m.2b,M);q(/(df|d2|cU|cT)/.11(4A.6d)){A 19=W.19;C 81(){m.R(m.2v,{L:19.cR+\'F\',N:19.cV+\'F\'})}81();m.2j(1S,\'3O\',81)}}m.2v.G.1o=\'\';A 84=m.2v.5r==\'\';m.2v.5r+=\'|\'+B.Q;q(84){q(m.6y&&m.aR)m.R(m.2v,{9t:\'7T(\'+m.5c+\'d0.ak)\',1z:1});J m.2z(m.2v,{1z:B.4b},m.87)}},9x:C(Q){q(!m.2v)E;q(1F Q!=\'1L\')m.2v.5r=m.2v.5r.2k(\'|\'+Q,\'\');q((1F Q!=\'1L\'&&m.2v.5r!=\'\')||(m.2q&&m.43(m.2q,\'4b\')))E;q(m.6y&&m.aR)m.2v.G.1o=\'1E\';J m.2z(m.2v,{1z:0},m.87,I,C(){m.2v.G.1o=\'1E\'})},8N:C(7z,B){A 1i=B||m.2G();B=1i;q(m.2q)E 1j;J m.1i=1i;m.4z(W,1S.3z?\'6U\':\'71\',m.68);1t{m.2q=7z;7z.2p()}1y(e){m.1i=m.2q=I}1t{q(!7z||B.3q[1]!=\'4e\')B.26()}1y(e){}E 1j},7O:C(el,2n){A B=m.2G(el);q(B)E m.8N(B.7V(2n),B);J E 1j},3a:C(el){E m.7O(el,-1)},1D:C(el){E m.7O(el,1)},68:C(e){q(!e)e=1S.2u;q(!e.2L)e.2L=e.9k;q(1F e.2L.9j!=\'1L\')E M;q(!m.1A(m,\'dz\',e))E M;A B=m.2G();A 2n=I;b6(e.dy){2c 70:q(B)B.7r();E M;2c 32:2n=2;5m;2c 34:2c 39:2c 40:2n=1;5m;2c 8:2c 33:2c 37:2c 38:2n=-1;5m;2c 27:2c 13:2n=0}q(2n!==I){q(2n!=2)m.4z(W,1S.3z?\'6U\':\'71\',m.68);q(!m.aS)E M;q(e.5n)e.5n();J e.c0=1j;q(B){q(2n==0){B.26()}J q(2n==2){q(B.1p)B.1p.cl()}J{q(B.1p)B.1p.3p();m.7O(B.Q,2n)}E 1j}}E M},du:C(14){m.2o(m.1T,m.3A(14,{22:\'22\'+m.61++}))},dt:C(1r){A 3c=1r.2N;q(1F 3c==\'7j\'){O(A i=0;i<3c.V;i++){A o={};O(A x 2Y 1r)o[x]=1r[x];o.2N=3c[i];m.2o(m.6u,o)}}J{m.2o(m.6u,1r)}},9U:C(7y,7h){A el,2m=/^K-U-([0-9]+)$/;el=7y;5g(el.23){q(el.6R!==1L)E el.6R;q(el.1v&&2m.11(el.1v))E el.1v.2k(2m,"$1");el=el.23}q(!7h){el=7y;5g(el.23){q(el.3J&&m.77(el)){O(A Q=0;Q<m.16.V;Q++){A B=m.16[Q];q(B&&B.a==el)E Q}}el=el.23}}E I},2G:C(el,7h){q(1F el==\'1L\')E m.16[m.3d]||I;q(1F el==\'3G\')E m.16[el]||I;q(1F el==\'a8\')el=m.$(el);E m.16[m.9U(el,7h)]||I},77:C(a){E(a.2p&&a.2p.cC().2k(/\\s/g,\' \').3b(/m.(dj|e)dh/))},bw:C(){O(A i=0;i<m.16.V;i++)q(m.16[i]&&m.16[i].55)m.aQ()},1A:C(6i,9K,2H){E 6i&&6i[9K]?(6i[9K](6i,2H)!==1j):M},8z:C(e){q(!e)e=1S.2u;q(e.ds>1)E M;q(!e.2L)e.2L=e.9k;A el=e.2L;5g(el.23&&!(/K-(2R|3u|3D|3O)/.11(el.1c))){el=el.23}A B=m.2G(el);q(B&&(B.62||!B.55))E M;q(B&&e.T==\'8y\'){q(e.2L.9j)E M;A 3b=el.1c.3b(/K-(2R|3u|3O)/);q(3b){m.2y={B:B,T:3b[1],1b:B.x.H,L:B.x.D,Y:B.y.H,N:B.y.D,aV:e.7A,aO:e.7F};m.2j(W,\'7D\',m.6H);q(e.5n)e.5n();q(/K-(2R|3D)-9J/.11(B.S.1c)){B.3M();m.a6=M}E 1j}J q(/K-3D/.11(el.1c)&&m.3d!=B.Q){B.3M();B.59(\'1q\')}}J q(e.T==\'c3\'){m.4z(W,\'7D\',m.6H);q(m.2y){q(m.54&&m.2y.T==\'2R\')m.2y.B.S.G.4L=m.54;A 3I=m.2y.3I;q(!3I&&!m.a6&&!/(3u|3O)/.11(m.2y.T)){q(m.1A(B,\'dr\'))B.26()}J q(3I||(!3I&&m.aU)){m.2y.B.59(\'1q\')}q(m.2y.B.3W)m.2y.B.3W.G.1o=\'1E\';q(3I)m.1A(m.2y.B,\'do\',m.2y);m.a6=1j;m.2y=I}J q(/K-2R-9J/.11(el.1c)){el.G.4L=m.54}}E 1j},6H:C(e){q(!m.2y)E M;q(!e)e=1S.2u;A a=m.2y,B=a.B;q(B.1k){q(!B.3W)B.3W=m.1d(\'P\',I,{1l:\'2l\',L:B.x.D+\'F\',N:B.y.D+\'F\',1b:B.x.cb+\'F\',Y:B.y.cb+\'F\',1B:4,9t:(m.3R?\'eB\':\'1E\'),1z:0.eU},B.U,M);q(B.3W.G.1o==\'1E\')B.3W.G.1o=\'\'}a.dX=e.7A-a.aV;a.dY=e.7F-a.aO;A 9g=1h.fG(1h.aE(a.dX,2)+1h.aE(a.dY,2));q(!a.3I)a.3I=(a.T!=\'2R\'&&9g>0)||(9g>(m.fK||5));q(a.3I&&e.7A>5&&e.7F>5){q(!m.1A(B,\'fN\',a))E 1j;q(a.T==\'3O\')B.3O(a);J{B.9m(a.1b+a.dX,a.Y+a.dY);q(a.T==\'2R\')B.S.G.4L=\'3u\'}}E 1j},aP:C(e){1t{q(!e)e=1S.2u;A 66=/fM/i.11(e.T);q(!e.2L)e.2L=e.9k;q(!e.7P)e.7P=66?e.fE:e.fD;A B=m.2G(e.2L);q(!B.55)E;q(!B||!e.7P||m.2G(e.7P,M)==B||m.2y)E;m.1A(B,66?\'ft\':\'fr\',e);O(A i=0;i<B.1T.V;i++)(C(){A o=m.$(\'22\'+B.1T[i]);q(o&&o.7d){q(66)m.R(o,{1n:\'1Y\',1o:\'\'});m.2z(o,{1z:66?o.1z:0},o.4i)}})()}1y(e){}},2j:C(el,2u,3Q){q(el==W&&2u==\'41\'){m.2o(m.7l,3Q)}1t{el.2j(2u,3Q,1j)}1y(e){1t{el.aM(\'65\'+2u,3Q);el.fy(\'65\'+2u,3Q)}1y(e){el[\'65\'+2u]=3Q}}},4z:C(el,2u,3Q){1t{el.4z(2u,3Q,1j)}1y(e){1t{el.aM(\'65\'+2u,3Q)}1y(e){el[\'65\'+2u]=I}}},7C:C(i){q(m.a1&&m.64[i]&&m.64[i]!=\'1L\'){A 1N=W.1d(\'1N\');1N.4N=C(){1N=I;m.7C(i+1)};1N.1e=m.64[i]}},c2:C(3G){q(3G&&1F 3G!=\'7j\')m.9f=3G;A 2a=m.6p();O(A i=0;i<2a.4Z.V&&i<m.9f;i++){m.2o(m.64,m.7s(2a.4Z[i]))}q(m.1Z)1J m.6r(m.1Z,C(){m.7C(0)});J m.7C(0);q(m.6h)A 5q=m.1d(\'1N\',{1e:m.5c+m.6h})},7m:C(){q(!m.2b){m.3Z=m.2h&&m.2t<7;m.3R=m.2h&&m.2t<9;m.7S();m.cf=m.3Z&&85.g5==\'g4:\';O(A x 2Y m.7o){q(1F m[x]!=\'1L\')m.18[x]=m[x];J q(1F m.18[x]==\'1L\'&&1F m.7o[x]!=\'1L\')m.18[x]=m.7o[x]}m.2b=m.1d(\'P\',{1c:\'K-2b\'},{1l:\'2l\',1b:0,Y:0,L:\'2w%\',1B:m.4F,9S:\'aK\'},W.19,M);m.2r=m.1d(\'a\',{1c:\'K-2r\',24:m.18.aY,2d:m.18.aZ,21:\'bt:;\'},{1l:\'2l\',Y:\'-4v\',1z:m.be,1B:1},m.2b);m.9y=m.1d(\'P\',I,{1o:\'1E\'},m.2b);m.2x=m.1d(\'P\',{1c:\'K-2x K-2x-D\'},{1n:(m.4M&&m.2t<73)?\'1Y\':\'1q\'},m.2b,1);m.3w=m.1d(\'P\',I,{aJ:\'bc\',g9:\'ga\'},I,M);1h.g2=C(t,b,c,d){E c*t/d+b};1h.bj=C(t,b,c,d){E c*(t/=d)*t+b};1h.8S=C(t,b,c,d){E-c*(t/=d)*(t-2)+b};m.cO=m.3Z;m.cQ=((1S.3z&&m.2t<9)||4A.av==\'at\'||(m.3Z&&m.2t<5.5));m.1A(k,\'fU\')}},41:C(){q(m.9F)E;m.9F=M;O(A i=0;i<m.7l.V;i++)m.7l[i]()},95:C(){A el,1m,6q=[],4Z=[],56=[],3i={},2m;O(A i=0;i<m.9w.V;i++){1m=W.2C(m.9w[i]);O(A j=0;j<1m.V;j++){el=1m[j];2m=m.77(el);q(2m){m.2o(6q,el);q(2m[0]==\'m.2F\')m.2o(4Z,el);J q(2m[0]==\'m.9u\')m.2o(56,el);A g=m.43(el,\'2N\')||\'1E\';q(!3i[g])3i[g]=[];m.2o(3i[g],el)}}}m.4U={6q:6q,3i:3i,4Z:4Z,56:56};E m.4U},6p:C(){E m.4U||m.95()},26:C(el){A B=m.2G(el);q(B)B.26();E 1j}};m.fx=C(30,1r,1f){k.1r=1r;k.30=30;k.1f=1f;q(!1r.b7)1r.b7={}};m.fx.5w={82:C(){(m.fx.3P[k.1f]||m.fx.3P.ap)(k);q(k.1r.3P)k.1r.3P.ax(k.30,k.4o,k)},3E:C(8u,2i,4w){k.9c=(1J 7K()).79();k.4T=8u;k.51=2i;k.4w=4w;k.4o=k.4T;k.H=k.96=0;A 7c=k;C t(7i){E 7c.3P(7i)}t.30=k.30;q(t()&&m.4m.2o(t)==1){m.af=fX(C(){A 4m=m.4m;O(A i=0;i<4m.V;i++)q(!4m[i]())4m.gd(i--,1);q(!4m.V){eT(m.af)}},13)}},3P:C(7i){A t=(1J 7K()).79();q(7i||t>=k.1r.4h+k.9c){k.4o=k.51;k.H=k.96=1;k.82();k.1r.7g[k.1f]=M;A 9s=M;O(A i 2Y k.1r.7g)q(k.1r.7g[i]!==M)9s=1j;q(9s){q(k.1r.76)k.1r.76.ax(k.30)}E 1j}J{A n=t-k.9c;k.96=n/k.1r.4h;k.H=k.1r.2Q(n,0,1,k.1r.4h);k.4o=k.4T+((k.51-k.4T)*k.H);k.82()}E M}};m.3A(m.fx,{3P:{1z:C(fx){m.R(fx.30,{1z:fx.4o})},ap:C(fx){1t{q(fx.30.G&&fx.30.G[fx.1f]!=I)fx.30.G[fx.1f]=fx.4o+fx.4w;J fx.30[fx.1f]=fx.4o}1y(e){}}}});m.6r=C(1Z,3F){k.3F=3F;k.1Z=1Z;A v=m.2t,47;k.9G=m.2h&&m.2t<7;q(!1Z){q(3F)3F();E}m.7m();k.2g=m.1d(\'2g\',{eJ:0},{1n:\'1q\',1l:\'2l\',eN:\'eM\',L:0},m.2b,M);A 4G=m.1d(\'4G\',I,I,k.2g,1);k.2J=[];O(A i=0;i<=8;i++){q(i%3==0)47=m.1d(\'47\',I,{N:\'1M\'},4G,M);k.2J[i]=m.1d(\'2J\',I,I,47,M);A G=i!=4?{eL:0,eK:0}:{1l:\'4y\'};m.R(k.2J[i],G)}k.2J[4].1c=1Z+\' K-1g\';k.ai()};m.6r.5w={ai:C(){A 1e=m.5c+(m.f1||"fi/")+k.1Z+".ak";A ar=m.4M&&m.2t<73?m.2b:I;k.3V=m.1d(\'1N\',I,{1l:\'2l\',Y:\'-4v\'},ar,M);A 3v=k;k.3V.4N=C(){3v.az()};k.3V.1e=1e},az:C(){A o=k.1w=k.3V.L/4,H=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],1u={N:(2*o)+\'F\',L:(2*o)+\'F\'};O(A i=0;i<=8;i++){q(H[i]){q(k.9G){A w=(i==1||i==7)?\'2w%\':k.3V.L+\'F\';A P=m.1d(\'P\',I,{L:\'2w%\',N:\'2w%\',1l:\'4y\',2e:\'1q\'},k.2J[i],M);m.1d(\'P\',I,{5Q:"fo:fn.bv.fm(fl=fe, 1e=\'"+k.3V.1e+"\')",1l:\'2l\',L:w,N:k.3V.N+\'F\',1b:(H[i][0]*o)+\'F\',Y:(H[i][1]*o)+\'F\'},P,M)}J{m.R(k.2J[i],{9t:\'7T(\'+k.3V.1e+\') \'+(H[i][0]*o)+\'F \'+(H[i][1]*o)+\'F\'})}q(1S.3z&&(i==3||i==5))m.1d(\'P\',I,1u,k.2J[i],M);m.R(k.2J[i],1u)}}k.3V=I;q(m.4n[k.1Z])m.4n[k.1Z].5U();m.4n[k.1Z]=k;q(k.3F)k.3F()},4C:C(H,1w,aB,4i,2Q){A B=k.B,5X=B.U.G,1w=1w||0,H=H||{x:B.x.H+1w,y:B.y.H+1w,w:B.x.Z(\'2f\')-2*1w,h:B.y.Z(\'2f\')-2*1w};q(aB)k.2g.G.1n=(H.h>=4*k.1w)?\'1Y\':\'1q\';m.R(k.2g,{1b:(H.x-k.1w)+\'F\',Y:(H.y-k.1w)+\'F\',L:(H.w+2*k.1w)+\'F\'});H.w-=2*k.1w;H.h-=2*k.1w;m.R(k.2J[4],{L:H.w>=0?H.w+\'F\':0,N:H.h>=0?H.h+\'F\':0});q(k.9G)k.2J[3].G.N=k.2J[5].G.N=k.2J[4].G.N},5U:C(bk){q(bk)k.2g.G.1n=\'1q\';J m.3B(k.2g)}};m.6A=C(B,1u){k.B=B;k.1u=1u;k.3l=1u==\'x\'?\'bY\':\'bW\';k.3k=k.3l.5G();k.6m=1u==\'x\'?\'cj\':\'c8\';k.6Y=k.6m.5G();k.9L=1u==\'x\'?\'c7\':\'bX\';k.b5=k.9L.5G();k.1G=k.36=0};m.6A.5w={Z:C(Q){b6(Q){2c\'9T\':E k.1K+k.3s+(k.t-m.2r[\'1w\'+k.3l])/2;2c\'9v\':E k.H+k.cb+k.1G+(k.D-m.2r[\'1w\'+k.3l])/2;2c\'2f\':E k.D+2*k.cb+k.1G+k.36;2c\'5e\':E k.4K-k.3o-k.4S;2c\'8D\':E k.Z(\'5e\')-2*k.cb-k.1G-k.36;2c\'6e\':E k.H-(k.B.1g?k.B.1g.1w:0);2c\'9R\':E k.Z(\'2f\')+(k.B.1g?2*k.B.1g.1w:0);2c\'2K\':E k.1V?1h.3e((k.D-k.1V)/2):0}},8a:C(){k.cb=(k.B.S[\'1w\'+k.3l]-k.t)/2;k.4S=m[\'9D\'+k.9L]},9M:C(){k.t=k.B.el[k.3k]?3H(k.B.el[k.3k]):k.B.el[\'1w\'+k.3l];k.1K=k.B.1K[k.1u];k.3s=(k.B.el[\'1w\'+k.3l]-k.t)/2;q(k.1K==0||k.1K==-1){k.1K=(m.4g[k.3k]/2)+m.4g[\'28\'+k.6m]}},8h:C(){A B=k.B;k.2T=\'1M\';q(B.9n==\'4X\')k.2T=\'4X\';J q(1J 4Y(k.6Y).11(B.46))k.2T=I;J q(1J 4Y(k.b5).11(B.46))k.2T=\'4t\';k.H=k.1K-k.cb+k.3s;q(k.9i&&k.1u==\'x\')B.6M=1h.31(B.6M||k.1a,B.9i*k.1a/B.y.1a);k.D=1h.31(k.1a,B[\'4t\'+k.3l]||k.1a);k.2U=B.5Y?1h.31(B[\'31\'+k.3l],k.1a):k.1a;q(B.2E&&B.3t){k.D=B[k.3k];k.1V=k.1a}q(k.1u==\'x\'&&m.5S)k.2U=B.4s;k.2L=B[\'2L\'+k.1u.bi()];k.3o=m[\'9D\'+k.6m];k.28=m.4g[\'28\'+k.6m];k.4K=m.4g[k.3k]},72:C(i){A B=k.B;q(B.2E&&(B.3t||m.5S)){k.1V=i;k.D=1h.4t(k.D,k.1V);B.S.G[k.6Y]=k.Z(\'2K\')+\'F\'}J k.D=i;B.S.G[k.3k]=i+\'F\';B.U.G[k.3k]=k.Z(\'2f\')+\'F\';q(B.1g)B.1g.4C();q(B.3W)B.3W.G[k.3k]=i+\'F\';q(k.1u==\'y\'&&B.5C&&B.19.G.N!=\'1M\')1t{B.5C.19.G.2e=\'1M\'}1y(e){}q(B.2A){A d=B.2s;q(k.9e===1L)k.9e=B.1s[\'1w\'+k.3l]-d[\'1w\'+k.3l];d.G[k.3k]=(k.D-k.9e)+\'F\';q(k.1u==\'x\')B.4c.G.L=\'1M\';q(B.19)B.19.G[k.3k]=\'1M\'}q(k.1u==\'x\'&&B.1x)B.57(M);q(k.1u==\'x\'&&B.1p&&B.2E){q(i==k.1a)B.1p.5d(\'1a-2F\');J B.1p.4u(\'1a-2F\')}},aa:C(i){k.H=i;k.B.U.G[k.6Y]=i+\'F\';q(k.B.1g)k.B.1g.4C()}};m.5A=C(a,29,3E,35){q(W.bS&&m.2h&&!m.9F){m.2j(W,\'41\',C(){1J m.5A(a,29,3E,35)});E}k.a=a;k.3E=3E;k.35=35||\'2R\';k.2A=(35==\'3D\');k.2E=!k.2A;m.a1=1j;k.1T=[];k.1i=m.1i;m.1i=I;m.7m();A Q=k.Q=m.16.V;O(A i=0;i<m.a4.V;i++){A 2Z=m.a4[i];k[2Z]=29&&1F 29[2Z]!=\'1L\'?29[2Z]:m[2Z]}q(!k.1e)k.1e=a.21;A el=(29&&29.9P)?m.$(29.9P):a;el=k.aW=el.2C(\'1N\')[0]||el;k.6Q=el.1v||a.1v;q(!m.1A(k,\'f3\'))E M;O(A i=0;i<m.16.V;i++){q(m.16[i]&&m.16[i].a==a&&!(k.1i&&k.3q[1]==\'4e\')){m.16[i].3M();E 1j}}q(!m.f5)O(A i=0;i<m.16.V;i++){q(m.16[i]&&m.16[i].aW!=el&&!m.16[i].6D){m.16[i].6P()}}m.16[Q]=k;q(!m.9l&&!m.2q){q(m.16[Q-1])m.16[Q-1].26();q(1F m.3d!=\'1L\'&&m.16[m.3d])m.16[m.3d].26()}k.el=el;k.1K=k.aX||m.6K(el);m.7S();A x=k.x=1J m.6A(k,\'x\');x.9M();A y=k.y=1J m.6A(k,\'y\');y.9M();q(/5v/i.11(el.3J))k.b8(el);k.U=m.1d(\'P\',{1v:\'K-U-\'+k.Q,1c:\'K-U \'+k.a9},{1n:\'1q\',1l:\'2l\',1B:m.4F+=2},I,M);k.U.eX=k.U.eS=m.aP;q(k.35==\'2R\'&&k.3Y==2)k.3Y=0;q(!k.1Z||(k.1i&&k.2E&&k.3q[1]==\'4e\')){k[k.35+\'9H\']()}J q(m.4n[k.1Z]){k.9I();k[k.35+\'9H\']()}J{k.6n();A B=k;1J m.6r(k.1Z,C(){B.9I();B[B.35+\'9H\']()})}E M};m.5A.5w={9o:C(e){q(m.g8)dq(\'dk \'+e.dl+\': \'+e.dD);J 1S.85.21=k.1e},9I:C(){A 1g=k.1g=m.4n[k.1Z];1g.B=k;1g.2g.G.1B=k.U.G.1B-1;m.4n[k.1Z]=I},6n:C(){q(k.6D||k.2r)E;k.2r=m.2r;A B=k;k.2r.2p=C(){B.6P()};q(!m.1A(k,\'d5\'))E;A B=k,l=k.x.Z(\'9T\')+\'F\',t=k.y.Z(\'9T\')+\'F\';q(!2P&&k.1i&&k.3q[1]==\'4e\')A 2P=k.1i;q(2P){l=2P.x.Z(\'9v\')+\'F\';t=2P.y.Z(\'9v\')+\'F\';k.2r.G.1B=m.4F++}4a(C(){q(B.2r)m.R(B.2r,{1b:l,Y:t,1B:m.4F++})},2w)},ey:C(){A B=k;A 1N=W.1d(\'1N\');k.S=1N;1N.4N=C(){q(m.16[B.Q])B.69()};q(m.e3)1N.dp=C(){E 1j};1N.1c=\'K-2R\';m.R(1N,{1n:\'1q\',1o:\'3X\',1l:\'2l\',6M:\'4v\',1B:3});1N.24=m.18.9W;q(m.4M&&m.2t<73)m.2b.1X(1N);q(m.2h&&m.dH)1N.1e=I;1N.1e=k.1e;k.6n()},d4:C(){q(!m.1A(k,\'da\'))E;k.S=m.86(k.a);q(!k.S)k.S=m.4J(k.88);q(!k.S)k.S=m.89();k.a2([\'6C\']);q(k.6C){A 19=m.4p(k.S,\'P\',\'K-19\');q(19)19.1X(k.6C);k.6C.G.1o=\'3X\'}m.1A(k,\'fp\');A 1s=k.1s=k.S;q(/(3x|1k)/.11(k.2I))k.91(1s);m.2b.1X(k.U);m.R(k.U,{1l:\'fa\',94:\'0 \'+m.9B+\'F 0 \'+m.4W+\'F\'});k.S=m.1d(\'P\',{1c:\'K-3D\'},{1l:\'4y\',1B:3,N:0,2e:\'1q\'},k.U);k.4c=m.1d(\'P\',I,I,k.S,1);k.4c.1X(1s);m.R(1s,{1l:\'4y\',1o:\'3X\',9S:m.18.97||\'\'});q(k.L)1s.G.L=k.L+\'F\';q(k.N)m.R(1s,{N:k.N+\'F\',2e:\'1q\'});q(1s.1O<k.4s)1s.G.L=k.4s+\'F\';q(k.2I==\'2W\'&&!m.86(k.a)){k.6n();A B=k;A 2W=1J m.7x(k.a,1s);2W.1e=k.1e;2W.3F=C(){q(m.16[B.Q])B.69()};2W.9z=C(){85.21=B.1e};2W.9r()}J q(k.2I==\'1k\'&&k.3U==\'60\'){k.6T()}J k.69()},69:C(){1t{q(!k.S)E;k.S.4N=I;q(k.6D)E;J k.6D=M;A x=k.x,y=k.y;q(k.2r){m.R(k.2r,{Y:\'-4v\'});k.2r=I;m.1A(k,\'cu\')}q(k.2E){x.1a=k.S.L;y.1a=k.S.N;m.R(k.S,{L:x.t+\'F\',N:y.t+\'F\'});k.U.1X(k.S);m.2b.1X(k.U)}J q(k.7Z)k.7Z();x.8a();y.8a();m.R(k.U,{1b:(x.1K+x.3s-x.cb)+\'F\',Y:(y.1K+x.3s-y.cb)+\'F\'});k.a0();k.bB();A 2M=x.1a/y.1a;x.8h();k.2T(x);y.8h();k.2T(y);q(k.2A)k.b4();q(k.1x)k.57(0,1);q(k.5Y){q(k.2E)k.cG(2M);J k.8x();A 1R=k.1p;q(1R&&k.1i&&1R.2X&&1R.aT){A H=1R.cB.1l||\'\',p;O(A 1u 2Y m.8g)O(A i=0;i<5;i++){p=k[1u];q(H.3b(m.8g[1u][i])){p.H=k.1i[1u].H+(k.1i[1u].1G-p.1G)+(k.1i[1u].D-p.D)*[0,0,.5,1,1][i];q(1R.aT==\'f0\'){q(p.H+p.D+p.1G+p.36>p.28+p.4K-p.4S)p.H=p.28+p.4K-p.D-p.3o-p.4S-p.1G-p.36;q(p.H<p.28+p.3o)p.H=p.28+p.3o}}}}q(k.2E&&k.x.1a>(k.x.1V||k.x.D)){k.bs();q(k.1T.V==1)k.57()}}k.a5()}1y(e){k.9o(e)}},91:C(6c,1M){A c=m.4p(6c,\'7J\',\'K-19\');q(/(1k|3x)/.11(k.2I)){q(k.4j)c.G.L=k.4j+\'F\';q(k.4x)c.G.N=k.4x+\'F\'}},6T:C(){q(k.aD)E;A B=k;k.19=m.4p(k.1s,\'7J\',\'K-19\');q(k.2I==\'1k\'){k.6n();A 5o=m.3w.5J(1);k.19.1X(5o);k.eP=k.1s.1O;q(!k.4j)k.4j=5o.1O;A 5b=k.1s.1U-k.19.1U,h=k.4x||m.4g.N-5b-m.4d-m.6L,4N=k.3U==\'60\'?\' 4N="q (m.16[\'+k.Q+\']) m.16[\'+k.Q+\'].69()" \':\'\';k.19.2d+=\'<1k 2Z="m\'+(1J 7K()).79()+\'" eQ="0" Q="\'+k.Q+\'" \'+\' G="L:\'+k.4j+\'F; N:\'+h+\'F" \'+4N+\' 1e="\'+k.1e+\'" ></1k>\';k.5o=k.19.2C(\'P\')[0];k.1k=k.19.2C(\'1k\')[0];q(k.3U==\'6x\')k.8A()}q(k.2I==\'3x\'){k.19.1v=k.19.1v||\'m-fY-1v-\'+k.Q;A a=k.8e;q(!a.29)a.29={};q(1F a.29.aN==\'1L\')a.29.aN=\'fR\';q(9p)9p.fT(k.1e,k.19.1v,k.4j,k.4x,a.g1||\'7\',a.gb,a.aG,a.29,a.aF)}k.aD=M},7Z:C(){q(k.1k&&!k.4x){k.1k.G.N=k.19.G.N=k.8p()+\'F\'}k.1s.1X(m.3w);q(!k.x.1a)k.x.1a=k.1s.1O;k.y.1a=k.1s.1U;k.1s.9q(m.3w);q(m.2h&&k.aL>3H(k.1s.5y.N)){k.aL=3H(k.1s.5y.N)}m.R(k.U,{1l:\'2l\',94:\'0\'});m.R(k.S,{L:k.x.t+\'F\',N:k.y.t+\'F\'})},8p:C(){A h;1t{A 2B=k.5C=k.1k.9O||k.1k.6g.W;A 3w=2B.1d(\'P\');3w.G.aJ=\'bc\';2B.19.1X(3w);h=3w.8O;q(m.2h)h+=3H(2B.19.5y.4d)+3H(2B.19.5y.6L)-1}1y(e){h=de}E h},8A:C(){A 5i=k.1s.1O-k.5o.1O;m.3B(k.5o);q(5i<0)5i=0;A 5b=k.1s.1U-k.1k.1U;q(k.5C&&!k.4x&&!k.N&&k.y.D==k.y.1a)1t{k.5C.19.G.2e=\'1q\'}1y(e){}m.R(k.1k,{L:1h.9Y(k.x.D-5i)+\'F\',N:1h.9Y(k.y.D-5b)+\'F\'});m.R(k.19,{L:k.1k.G.L,N:k.1k.G.N});k.52=k.1k;k.2s=k.52},b4:C(){k.91(k.1s);q(k.2I==\'3x\'&&k.3U==\'60\')k.6T();q(k.x.D<k.x.1a&&!k.6J)k.x.D=k.x.1a;q(k.y.D<k.y.1a&&!k.6X)k.y.D=k.y.1a;k.2s=k.1s;m.R(k.4c,{1l:\'4y\',L:k.x.D+\'F\'});m.R(k.1s,{8H:\'1E\',L:\'1M\',N:\'1M\'});A 1P=m.4p(k.1s,\'7J\',\'K-19\');q(1P&&!/(1k|3x)/.11(k.2I)){A 5f=1P;1P=m.1d(5f.d8,I,{2e:\'1q\'},I,M);5f.23.dG(1P,5f);1P.1X(m.3w);1P.1X(5f);A 5i=k.1s.1O-1P.1O;A 5b=k.1s.1U-1P.1U;1P.9q(m.3w);A 6E=m.4M||4A.av==\'at\'?1:0;m.R(1P,{L:(k.x.D-5i-6E)+\'F\',N:(k.y.D-5b)+\'F\',2e:\'1M\',1l:\'4y\'});q(6E&&5f.1U>1P.1U){1P.G.L=(3H(1P.G.L)+6E)+\'F\'}k.52=1P;k.2s=k.52}q(k.1k&&k.3U==\'60\')k.8A();q(!k.52&&k.y.D<k.4c.1U)k.2s=k.S;q(k.2s==k.S&&!k.6J&&!/(1k|3x)/.11(k.2I)){k.x.D+=17}q(k.2s&&k.2s.1U>k.2s.23.1U){4a("1t { m.16["+k.Q+"].2s.G.2e = \'1M\'; } 1y(e) {}",m.6W)}},b8:C(5v){A c=5v.fC.7G(\',\');O(A i=0;i<c.V;i++)c[i]=3H(c[i]);q(5v.ff.5G()==\'eI\'){k.x.1K+=c[0]-c[2];k.y.1K+=c[1]-c[2];k.x.t=k.y.t=2*c[2]}J{A 5H,5z,5x=5H=c[0],5B=5z=c[1];O(A i=0;i<c.V;i++){q(i%2==0){5x=1h.31(5x,c[i]);5H=1h.4t(5H,c[i])}J{5B=1h.31(5B,c[i]);5z=1h.4t(5z,c[i])}}k.x.1K+=5x;k.x.t=5H-5x;k.y.1K+=5B;k.y.t=5z-5B}},2T:C(p,5u){A 4H,2P=p.2L,1u=p==k.x?\'x\':\'y\';q(2P&&2P.3b(/ /)){4H=2P.7G(\' \');2P=4H[0]}q(2P&&m.$(2P)){p.H=m.6K(m.$(2P))[1u];q(4H&&4H[1]&&4H[1].3b(/^[-]?[0-9]+F$/))p.H+=3H(4H[1]);q(p.D<p.2U)p.D=p.2U}J q(p.2T==\'1M\'||p.2T==\'4X\'){A 8C=1j;A 5s=p.B.5Y;q(p.2T==\'4X\')p.H=1h.3e(p.28+(p.4K+p.3o-p.4S-p.Z(\'2f\'))/2);J p.H=1h.3e(p.H-((p.Z(\'2f\')-p.t)/2));q(p.H<p.28+p.3o){p.H=p.28+p.3o;8C=M}q(!5u&&p.D<p.2U){p.D=p.2U;5s=1j}q(p.H+p.Z(\'2f\')>p.28+p.4K-p.4S){q(!5u&&8C&&5s){p.D=1h.31(p.D,p.Z(1u==\'y\'?\'5e\':\'8D\'))}J q(p.Z(\'2f\')<p.Z(\'5e\')){p.H=p.28+p.4K-p.4S-p.Z(\'2f\')}J{p.H=p.28+p.3o;q(!5u&&5s)p.D=p.Z(1u==\'y\'?\'5e\':\'8D\')}}q(!5u&&p.D<p.2U){p.D=p.2U;5s=1j}}J q(p.2T==\'4t\'){p.H=1h.dm(p.H-p.D+p.t)}q(p.H<p.3o){A cH=p.H;p.H=p.3o;q(5s&&!5u)p.D=p.D-(p.H-cH)}},cG:C(2M){A x=k.x,y=k.y,3T=1j,3f=1h.31(x.1a,x.D),3y=1h.31(y.1a,y.D),3t=(k.3t||m.5S);q(3f/3y>2M){ 3f=3y*2M;q(3f<x.2U){3f=x.2U;3y=3f/2M}3T=M}J q(3f/3y<2M){ 3y=3f/2M;3T=M}q(m.5S&&x.1a<x.2U){x.1V=x.1a;y.D=y.1V=y.1a}J q(k.3t){x.1V=3f;y.1V=3y}J{x.D=3f;y.D=3y}3T=k.8x(k.3t?I:2M,3T);q(3t&&y.D<y.1V){y.1V=y.D;x.1V=y.D*2M}q(3T||3t){x.H=x.1K-x.cb+x.3s;x.2U=x.D;k.2T(x,M);y.H=y.1K-y.cb+y.3s;y.2U=y.D;k.2T(y,M);q(k.1x)k.57()}},8x:C(2M,3T){A x=k.x,y=k.y;q(k.1x&&(k.2E||k.6X)){5g(y.D>k.6k&&x.D>k.4s&&y.Z(\'2f\')>y.Z(\'5e\')){y.D-=10;q(2M)x.D=y.D*2M;k.57(0,1);3T=M}}E 3T},dS:C(){q(k.2s){A h=/1k/i.11(k.2s.3J)?(k.8p()+1)+\'F\':\'1M\';q(k.19)k.19.G.N=h;k.2s.G.N=h;k.y.72(k.1s.1U)}},a5:C(){A x=k.x,y=k.y;k.59(\'1q\');m.1A(k,\'et\');q(k.1p&&k.1p.2D)k.1p.2D.5t();k.9b(1,{U:{L:x.Z(\'2f\'),N:y.Z(\'2f\'),1b:x.H,Y:y.H},S:{1b:x.1G+x.Z(\'2K\'),Y:y.1G+y.Z(\'2K\'),L:x.1V||x.D,N:y.1V||y.D}},m.6W)},9b:C(1I,2i,4i){A 5M=k.3q,8o=1I?(k.1i?k.1i.a:I):m.2q,t=(5M[1]&&8o&&m.43(8o,\'3q\')[1]==5M[1])?5M[1]:5M[0];q(k[t]&&t!=\'2F\'){k[t](1I,2i);E}q(k.1g&&!k.3Y){q(1I)k.1g.4C();J k.1g.5U((k.2A&&k.4D))}q(!1I)k.78();A B=k,x=B.x,y=B.y,2Q=k.2Q;q(!1I)2Q=k.cF||2Q;A 6x=1I?C(){q(B.1g)B.1g.2g.G.1n="1Y";4a(C(){B.6I()},50)}:C(){B.5D()};q(1I)m.R(k.U,{L:x.t+\'F\',N:y.t+\'F\'});q(1I&&k.2A){m.R(k.U,{1b:(x.1K-x.cb+x.3s)+\'F\',Y:(y.1K-y.cb+y.3s)+\'F\'})}q(k.cD){m.R(k.U,{1z:1I?0:1});m.3A(2i.U,{1z:1I})}m.2z(k.U,2i.U,{4h:4i,2Q:2Q,3P:C(3j,2H){q(B.1g&&B.3Y&&2H.1f==\'Y\'){A 5W=1I?2H.H:1-2H.H;A H={w:x.t+(x.Z(\'2f\')-x.t)*5W,h:y.t+(y.Z(\'2f\')-y.t)*5W,x:x.1K+(x.H-x.1K)*5W,y:y.1K+(y.H-y.1K)*5W};B.1g.4C(H,0,1)}q(B.2A){q(2H.1f==\'1b\')B.4c.G.1b=(x.H-3j)+\'F\';q(2H.1f==\'Y\')B.4c.G.Y=(y.H-3j)+\'F\'}}});m.2z(k.S,2i.S,4i,2Q,6x);q(1I){k.U.G.1n=\'1Y\';k.S.G.1n=\'1Y\';q(k.2A)k.1s.G.1n=\'1Y\';k.a.1c+=\' K-4I-46\'}},6w:C(1I,2i){k.3Y=1j;A B=k,t=1I?m.6W:0;q(1I){m.2z(k.U,2i.U,0);m.R(k.U,{1z:0,1n:\'1Y\'});m.2z(k.S,2i.S,0);k.S.G.1n=\'1Y\';m.2z(k.U,{1z:1},t,I,C(){B.6I()})}q(k.1g){k.1g.2g.G.1B=k.U.G.1B;A 6Z=1I||-1,1w=k.1g.1w,8r=1I?3:1w,8q=1I?1w:3;O(A i=8r;6Z*i<=6Z*8q;i+=6Z,t+=25){(C(){A o=1I?8q-i:8r-i;4a(C(){B.1g.4C(0,o,1)},t)})()}}q(1I){}J{4a(C(){q(B.1g)B.1g.5U(B.4D);B.78();m.2z(B.U,{1z:0},m.9A,I,C(){B.5D()})},t)}},4e:C(1I,2i,8u){q(!1I)E;A B=k,1i=k.1i,x=k.x,y=k.y,3n=1i.x,3g=1i.y,U=k.U,S=k.S,1x=k.1x;m.4z(W,\'7D\',m.6H);m.R(S,{L:(x.1V||x.D)+\'F\',N:(y.1V||y.D)+\'F\'});q(1x)1x.G.2e=\'1Y\';k.1g=1i.1g;q(k.1g)k.1g.B=B;1i.1g=I;A 5l=m.1d(\'P\',{1c:\'K-\'+k.35},{1l:\'2l\',1B:4,2e:\'1q\',1o:\'1E\'});A 8t={cN:1i,cM:k};O(A n 2Y 8t){k[n]=8t[n].S.5J(1);m.R(k[n],{1l:\'2l\',8H:0,1n:\'1Y\'});5l.1X(k[n])}U.1X(5l);q(k.2A)m.R(k.4c,{1b:0,Y:0});q(1x){1x.1c=\'\';U.1X(1x)}5l.G.1o=\'\';1i.S.G.1o=\'1E\';q(m.4M&&m.2t<73){k.U.G.1n=\'1Y\'}m.2z(U,{L:x.D},{4h:m.cE,3P:C(3j,2H){A H=2H.H,4B=1-H;A 1f,D={},93=[\'H\',\'D\',\'1G\',\'36\'];O(A n 2Y 93){1f=93[n];D[\'x\'+1f]=1h.3e(4B*3n[1f]+H*x[1f]);D[\'y\'+1f]=1h.3e(4B*3g[1f]+H*y[1f]);D.cI=1h.3e(4B*(3n.1V||3n.D)+H*(x.1V||x.D));D.6S=1h.3e(4B*3n.Z(\'2K\')+H*x.Z(\'2K\'));D.cJ=1h.3e(4B*(3g.1V||3g.D)+H*(y.1V||y.D));D.6V=1h.3e(4B*3g.Z(\'2K\')+H*y.Z(\'2K\'))}q(B.1g)B.1g.4C({x:D.3h,y:D.3r,w:D.5L+D.44+D.8U+2*x.cb,h:D.5K+D.45+D.8T+2*y.cb});1i.U.G.d7=\'d6(\'+(D.3r-3g.H)+\'F, \'+(D.5L+D.44+D.8U+D.3h+2*3n.cb-3n.H)+\'F, \'+(D.5K+D.45+D.8T+D.3r+2*3g.cb-3g.H)+\'F, \'+(D.3h-3n.H)+\'F)\';m.R(S,{Y:(D.45+y.Z(\'2K\'))+\'F\',1b:(D.44+x.Z(\'2K\'))+\'F\',4d:(y.H-D.3r)+\'F\',4W:(x.H-D.3h)+\'F\'});m.R(U,{Y:D.3r+\'F\',1b:D.3h+\'F\',L:(D.44+D.8U+D.5L+2*x.cb)+\'F\',N:(D.45+D.8T+D.5K+2*y.cb)+\'F\'});m.R(5l,{L:(D.cI||D.5L)+\'F\',N:(D.cJ||D.5K)+\'F\',1b:(D.44+D.6S)+\'F\',Y:(D.45+D.6V)+\'F\',1n:\'1Y\'});m.R(B.cN,{Y:(3g.H-D.3r+3g.1G-D.45+3g.Z(\'2K\')-D.6V)+\'F\',1b:(3n.H-D.3h+3n.1G-D.44+3n.Z(\'2K\')-D.6S)+\'F\'});m.R(B.cM,{1z:H,Y:(y.H-D.3r+y.1G-D.45+y.Z(\'2K\')-D.6V)+\'F\',1b:(x.H-D.3h+x.1G-D.44+x.Z(\'2K\')-D.6S)+\'F\'});q(1x)m.R(1x,{L:D.5L+\'F\',N:D.5K+\'F\',1b:(D.44+x.cb)+\'F\',Y:(D.45+y.cb)+\'F\'})},76:C(){U.G.1n=S.G.1n=\'1Y\';S.G.1o=\'3X\';m.3B(5l);B.6I();1i.5D();B.1i=I}})},bQ:C(o,el){q(!k.1i)E 1j;O(A i=0;i<k.1i.1T.V;i++){A 6G=m.$(\'22\'+k.1i.1T[i]);q(6G&&6G.22==o.22){k.9V();6G.cS=k.Q;m.2o(k.1T,k.1i.1T[i]);E M}}E 1j},6I:C(){k.55=M;k.3M();q(k.2A&&k.3U==\'6x\')k.6T();q(k.1k){1t{A B=k,2B=k.1k.9O||k.1k.6g.W;m.2j(2B,\'8y\',C(){q(m.3d!=B.Q)B.3M()})}1y(e){}q(m.2h&&1F k.62!=\'cW\')k.1k.G.L=(k.4j-1)+\'F\'}q(k.4b)m.1u(k);q(m.2q&&m.2q==k.a)m.2q=I;k.cL();A p=m.4g,8Q=m.7B.x+p.5O,8P=m.7B.y+p.5R;k.9C=k.x.H<8Q&&8Q<k.x.H+k.x.Z(\'2f\')&&k.y.H<8P&&8P<k.y.H+k.y.Z(\'2f\');q(k.1x)k.bn();m.1A(k,\'d1\')},cL:C(){A Q=k.Q;A 1Z=k.1Z;1J m.6r(1Z,C(){1t{m.16[Q].cP()}1y(e){}})},cP:C(){A 1D=k.7V(1);q(1D&&1D.2p.cC().3b(/m\\.2F/))A 1N=m.1d(\'1N\',{1e:m.7s(1D)})},7V:C(2n){A 7U=k.7v(),as=m.4U.3i[k.2N||\'1E\'];q(as&&!as[7U+2n]&&k.1p&&k.1p.cm){q(2n==1)E as[0];J q(2n==-1)E as[as.V-1]}E(as&&as[7U+2n])||I},7v:C(){A 2a=m.6p().3i[k.2N||\'1E\'];q(2a)O(A i=0;i<2a.V;i++){q(2a[i]==k.a)E i}E I},bq:C(){q(k[k.6l]){A 2a=m.4U.3i[k.2N||\'1E\'];q(2a){A s=m.18.3G.2k(\'%1\',k.7v()+1).2k(\'%2\',2a.V);k[k.6l].2d=\'<P 1W="K-3G">\'+s+\'</P>\'+k[k.6l].2d}}},a0:C(){q(!k.1i){O(A i=0;i<m.6u.V;i++){A 1R=m.6u[i],3c=1R.2N;q(1F 3c==\'1L\'||3c===I||3c===k.2N)k.1p=1J m.83(k.Q,1R)}}J{k.1p=k.1i.1p}A 1R=k.1p;q(!1R)E;A Q=1R.4k=k.Q;1R.ch();1R.5d(\'1a-2F\');q(1R.2X){k.4O(m.3A(1R.cB||{},{4P:1R.2X,22:\'2X\',1B:5}))}q(1R.2D)1R.2D.7p(k);q(!k.1i&&k.42)1R.3L(M);q(1R.42){1R.42=4a(C(){m.1D(Q)},(1R.fH||fs))}},6P:C(){m.3B(k.U);m.16[k.Q]=I;q(m.2q==k.a)m.2q=I;m.9x(k.Q);q(k.2r)m.2r.G.1b=\'-4v\';m.1A(k,\'cu\')},bp:C(){q(k.67)E;k.67=m.1d(\'a\',{21:m.ct,2L:m.cs,1c:\'K-67\',2d:m.18.cq,24:m.18.cr});k.4O({4P:k.67,1l:k.cv||\'Y 1b\',22:\'67\'})},a2:C(8f,cy){O(A i=0;i<8f.V;i++){A T=8f[i],s=I;q(T==\'9X\'&&!m.1A(k,\'eH\'))E;J q(T==\'58\'&&!m.1A(k,\'eG\'))E;q(!k[T+\'5p\']&&k.6Q)k[T+\'5p\']=T+\'-O-\'+k.6Q;q(k[T+\'5p\'])k[T]=m.4J(k[T+\'5p\']);q(!k[T]&&!k[T+\'8j\']&&k[T+\'cw\'])1t{s=fh(k[T+\'cw\'])}1y(e){}q(!k[T]&&k[T+\'8j\']){s=k[T+\'8j\']}q(!k[T]&&!s){k[T]=m.4J(k.a[\'cA\'+T+\'5p\']);q(!k[T]){A 1D=k.a.cz;5g(1D&&!m.77(1D)){q((1J 4Y(\'K-\'+T)).11(1D.1c||I)){q(!1D.1v)k.a[\'cA\'+T+\'5p\']=1D.1v=\'22\'+m.61++;k[T]=m.4J(1D.1v);5m}1D=1D.cz}}}q(!k[T]&&!s&&k.6l==T)s=\'\\n\';q(!k[T]&&s)k[T]=m.1d(\'P\',{1c:\'K-\'+T,2d:s});q(cy&&k[T]){A o={1l:(T==\'58\')?\'5N\':\'7E\'};O(A x 2Y k[T+\'cx\'])o[x]=k[T+\'cx\'][x];o.4P=k[T];k.4O(o)}}},59:C(1n){q(m.cO)k.6B(\'fk\',1n);q(m.cQ)k.6B(\'dd\',1n);q(m.6y)k.6B(\'*\',1n)},6B:C(3J,1n){A 1m=W.2C(3J);A 1f=3J==\'*\'?\'2e\':\'1n\';O(A i=0;i<1m.V;i++){q(1f==\'1n\'||(W.8L.cK(1m[i],"").co(\'2e\')==\'1M\'||1m[i].bH(\'1q-by\')!=I)){A 2S=1m[i].bH(\'1q-by\');q(1n==\'1Y\'&&2S){2S=2S.2k(\'[\'+k.Q+\']\',\'\');1m[i].5F(\'1q-by\',2S);q(!2S)1m[i].G[1f]=1m[i].9N}J q(1n==\'1q\'){A 3N=m.6K(1m[i]);3N.w=1m[i].1O;3N.h=1m[i].1U;q(!k.4b){A bl=(3N.x+3N.w<k.x.Z(\'6e\')||3N.x>k.x.Z(\'6e\')+k.x.Z(\'9R\'));A bG=(3N.y+3N.h<k.y.Z(\'6e\')||3N.y>k.y.Z(\'6e\')+k.y.Z(\'9R\'))}A 6F=m.9U(1m[i]);q(!bl&&!bG&&6F!=k.Q){q(!2S){1m[i].5F(\'1q-by\',\'[\'+k.Q+\']\');1m[i].9N=1m[i].G[1f];1m[i].G[1f]=\'1q\'}J q(2S.bF(\'[\'+k.Q+\']\')==-1){1m[i].5F(\'1q-by\',2S+\'[\'+k.Q+\']\')}}J q((2S==\'[\'+k.Q+\']\'||m.3d==6F)&&6F!=k.Q){1m[i].5F(\'1q-by\',\'\');1m[i].G[1f]=1m[i].9N||\'\'}J q(2S&&2S.bF(\'[\'+k.Q+\']\')>-1){1m[i].5F(\'1q-by\',2S.2k(\'[\'+k.Q+\']\',\'\'))}}}}},3M:C(){k.U.G.1B=m.4F+=2;O(A i=0;i<m.16.V;i++){q(m.16[i]&&i==m.3d){A 4r=m.16[i];4r.S.1c+=\' K-\'+4r.35+\'-9J\';q(4r.2E){4r.S.G.4L=m.3Z?\'bE\':\'7Q\';4r.S.24=m.18.bD}m.1A(4r,\'eW\')}}q(k.1g)k.1g.2g.G.1B=k.U.G.1B-1;k.S.1c=\'K-\'+k.35;q(k.2E){k.S.24=m.18.9W;q(m.6h){m.54=1S.3z?\'7Q\':\'7T(\'+m.5c+m.6h+\'), 7Q\';q(m.3Z&&m.2t<6)m.54=\'bE\';k.S.G.4L=m.54}}m.3d=k.Q;m.2j(W,1S.3z?\'6U\':\'71\',m.68);m.1A(k,\'fd\')},9m:C(x,y){k.x.aa(x);k.y.aa(y)},3O:C(e){A w,h,r=e.L/e.N;w=1h.4t(e.L+e.dX,1h.31(k.4s,k.x.1a));q(k.2E&&1h.9Y(w-k.x.1a)<12)w=k.x.1a;h=k.2A?e.N+e.dY:w/r;q(h<1h.31(k.6k,k.y.1a)){h=1h.31(k.6k,k.y.1a);q(k.2E)w=h*r}k.9h(w,h)},9h:C(w,h){k.y.72(h);k.x.72(w);k.U.G.N=k.y.Z(\'2f\')+\'F\'},26:C(){q(k.62||!k.55)E;q(k.3q[1]==\'4e\'&&m.2q){m.2G(m.2q).6P();m.2q=I}q(!m.1A(k,\'eV\'))E;k.62=M;q(k.1p&&!m.2q)k.1p.3p();m.4z(W,1S.3z?\'6U\':\'71\',m.68);1t{q(k.2A)k.bJ();k.S.G.4L=\'fj\';k.9b(0,{U:{L:k.x.t,N:k.y.t,1b:k.x.1K-k.x.cb+k.x.3s,Y:k.y.1K-k.y.cb+k.y.3s},S:{1b:0,Y:0,L:k.x.t,N:k.y.t}},m.9A)}1y(e){k.5D()}},bJ:C(){q(m.6y){q(!m.6s)m.6s=m.1d(\'P\',I,{1l:\'2l\'},m.2b);m.R(m.6s,{L:k.x.D+\'F\',N:k.y.D+\'F\',1b:k.x.H+\'F\',Y:k.y.H+\'F\',1o:\'3X\'})}q(k.2I==\'3x\')1t{m.$(k.19.1v).f9()}1y(e){}q(k.3U==\'6x\'&&!k.4D)k.bK();q(k.2s&&k.2s!=k.52)k.2s.G.2e=\'1q\'},bK:C(){q(m.2h&&k.1k)1t{k.1k.6g.W.19.2d=\'\'}1y(e){}q(k.2I==\'3x\')9p.fb(k.19.1v);k.19.2d=\'\'},bx:C(){q(k.1g)k.1g.2g.G.1o=\'1E\';k.3W=I;k.U.G.1o=\'1E\';k.55=1j;m.2o(m.4R,k)},bP:C(){1t{m.16[k.Q]=k;q(!m.9l&&m.3d!=k.Q){1t{m.16[m.3d].26()}1y(e){}}A z=m.4F++,5X={1o:\'\',1B:z};m.R(k.U,5X);k.62=1j;A o=k.1g||0;q(o){q(!k.3Y)5X.1n=\'1q\';m.R(o.2g,5X)}q(k.1p){k.a0()}k.a5()}1y(e){}},4O:C(o){A el=o.4P,53=(o.bO==\'2x\'&&!/7M$/.11(o.1l));q(1F el==\'a8\')el=m.4J(el);q(o.3D)el=m.1d(\'P\',{2d:o.3D});q(!el||1F el==\'a8\')E;q(!m.1A(k,\'f7\',{14:el}))E;el.G.1o=\'3X\';o.22=o.22||o.4P;q(k.3q[1]==\'4e\'&&k.bQ(o,el))E;k.9V();A L=o.L&&/^[0-9]+(F|%)$/.11(o.L)?o.L:\'1M\';q(/^(1b|3m)7M$/.11(o.1l)&&!/^[0-9]+F$/.11(o.L))L=\'f2\';A 14=m.1d(\'P\',{1v:\'22\'+m.61++,22:o.22},{1l:\'2l\',1n:\'1q\',L:L,9S:m.18.97||\'\',1z:0},53?m.2x:k.1x,M);q(53)14.6R=k.Q;14.1X(el);m.3A(14,{1z:1,bN:0,bL:0,4i:(o.6w===0||o.6w===1j||(o.6w==2&&m.2h))?0:5Z});m.3A(14,o);q(k.bo){k.5V(14);q(!14.7d||k.9C)m.2z(14,{1z:14.1z},14.4i)}m.2o(k.1T,m.61-1)},5V:C(14){A p=14.1l||\'9a 4X\',53=(14.bO==\'2x\'),74=14.bN,6O=14.bL;q(53){m.2x.G.1o=\'3X\';14.6R=k.Q;q(14.1O>14.23.1O)14.G.L=\'2w%\'}J q(14.23!=k.1x)k.1x.1X(14);q(/1b$/.11(p))14.G.1b=74+\'F\';q(/4X$/.11(p))m.R(14,{1b:\'50%\',4W:(74-1h.3e(14.1O/2))+\'F\'});q(/3m$/.11(p))14.G.3m=-74+\'F\';q(/^bM$/.11(p)){m.R(14,{3m:\'2w%\',9B:k.x.cb+\'F\',Y:-k.y.cb+\'F\',4Q:-k.y.cb+\'F\',2e:\'1M\'});k.x.1G=14.1O}J q(/^bC$/.11(p)){m.R(14,{1b:\'2w%\',4W:k.x.cb+\'F\',Y:-k.y.cb+\'F\',4Q:-k.y.cb+\'F\',2e:\'1M\'});k.x.36=14.1O}A 9d=14.23.1U;14.G.N=\'1M\';q(53&&14.1U>9d)14.G.N=m.3Z?9d+\'F\':\'2w%\';q(/^Y/.11(p))14.G.Y=6O+\'F\';q(/^9a/.11(p))m.R(14,{Y:\'50%\',4d:(6O-1h.3e(14.1U/2))+\'F\'});q(/^4Q/.11(p))14.G.4Q=-6O+\'F\';q(/^5N$/.11(p)){m.R(14,{1b:(-k.x.1G-k.x.cb)+\'F\',3m:(-k.x.36-k.x.cb)+\'F\',4Q:\'2w%\',6L:k.y.cb+\'F\',L:\'1M\'});k.y.1G=14.1U}J q(/^7E$/.11(p)){m.R(14,{1l:\'4y\',1b:(-k.x.1G-k.x.cb)+\'F\',3m:(-k.x.36-k.x.cb)+\'F\',Y:\'2w%\',4d:k.y.cb+\'F\',L:\'1M\'});k.y.36=14.1U;14.G.1l=\'2l\'}},bB:C(){k.a2([\'58\',\'9X\'],M);k.bq();q(k.9X)m.1A(k,\'eE\');q(k.58)m.1A(k,\'eF\');q(k.58&&k.a7)k.58.1c+=\' K-3u\';q(m.br)k.bp();O(A i=0;i<m.1T.V;i++){A o=m.1T[i],6N=o.9P,3c=o.2N;q((!6N&&!3c)||(6N&&6N==k.6Q)||(3c&&3c===k.2N)){q(k.2E||(k.2A&&o.eO))k.4O(o)}}A 7I=[];O(A i=0;i<k.1T.V;i++){A o=m.$(\'22\'+k.1T[i]);q(/7M$/.11(o.1l))k.5V(o);J m.2o(7I,o)}O(A i=0;i<7I.V;i++)k.5V(7I[i]);k.bo=M},9V:C(){q(!k.1x)k.1x=m.1d(\'P\',{1c:k.a9},{1l:\'2l\',L:(k.x.D||(k.3t?k.L:I)||k.x.1a)+\'F\',N:(k.y.D||k.y.1a)+\'F\',1n:\'1q\',2e:\'1q\',1B:m.2h?4:\'1M\'},m.2b,M)},57:C(98,bm){A 1x=k.1x,x=k.x,y=k.y;m.R(1x,{L:x.D+\'F\',N:y.D+\'F\'});q(98||bm){O(A i=0;i<k.1T.V;i++){A o=m.$(\'22\'+k.1T[i]);A 9E=(m.3Z||W.7a==\'8v\');q(o&&/^(5N|7E)$/.11(o.1l)){q(9E){o.G.L=(1x.1O+2*x.cb+x.1G+x.36)+\'F\'}y[o.1l==\'5N\'?\'1G\':\'36\']=o.1U}q(o&&9E&&/^(1b|3m)7M$/.11(o.1l)){o.G.N=(1x.1U+2*y.cb)+\'F\'}}}q(98){m.R(k.S,{Y:y.1G+\'F\'});m.R(1x,{Y:(y.1G+y.cb)+\'F\'})}},bn:C(){A b=k.1x;b.1c=\'\';m.R(b,{Y:(k.y.1G+k.y.cb)+\'F\',1b:(k.x.1G+k.x.cb)+\'F\',2e:\'1Y\'});q(m.4M)b.G.1n=\'1Y\';k.U.1X(b);O(A i=0;i<k.1T.V;i++){A o=m.$(\'22\'+k.1T[i]);o.G.1B=o.1B||4;q(!o.7d||k.9C){o.G.1n=\'1Y\';m.R(o,{1n:\'1Y\',1o:\'\'});m.2z(o,{1z:o.1z},o.4i)}}},78:C(){q(!k.1T.V)E;q(k.1p){A c=k.1p.2X;q(c&&m.2G(c)==k)c.23.9q(c)}O(A i=0;i<k.1T.V;i++){A o=m.$(\'22\'+k.1T[i]);q(o&&o.23==m.2x&&m.2G(o)==k)m.3B(o)}q(k.2A&&k.4D){k.1x.G.Y=\'-4v\';m.2b.1X(k.1x)}J m.3B(k.1x)},bs:C(){q(k.1p&&k.1p.2X){k.1p.4u(\'1a-2F\');E}k.7u=m.1d(\'a\',{21:\'bt:m.16[\'+k.Q+\'].7r();\',24:m.18.9Z,1c:\'K-1a-2F\'});q(!m.1A(k,\'fq\'))E;k.4O({4P:k.7u,1l:m.bz,7d:M,1z:m.bA})},7r:C(){1t{q(!m.1A(k,\'fZ\'))E;q(k.7u)m.3B(k.7u);k.3M();A 3f=k.x.D,3y=k.y.D;k.9h(k.x.1a,k.y.1a);A 3h=k.x.H-(k.x.D-3f)/2;q(3h<m.4W)3h=m.4W;A 3r=k.y.H-(k.y.D-3y)/2;q(3r<m.4d)3r=m.4d;k.9m(3h,3r);k.59(\'1q\')}1y(e){k.9o(e)}},5D:C(){k.a.1c=k.a.1c.2k(\'K-4I-46\',\'\');k.59(\'1Y\');q(k.2A&&k.4D&&k.3q[1]!=\'4e\'){k.bx()}J{q(k.1g&&k.3Y)k.1g.5U();m.3B(k.U)}q(m.6s)m.6s.G.1o=\'1E\';k.78();q(!m.2x.7L.V)m.2x.G.1o=\'1E\';q(k.4b)m.9x(k.Q);m.1A(k,\'fW\');m.16[k.Q]=I;m.bw()}};m.7x=C(a,S,7t){k.a=a;k.S=S;k.7t=7t};m.7x.5w={9r:C(){A 2V;q(!k.1e)k.1e=m.7s(k.a);q(k.1e.3b(\'#\')){A 2a=k.1e.7G(\'#\');k.1e=2a[0];k.1v=2a[1]}q(m.7k[k.1e]){k.cd=m.7k[k.1e];q(k.1v)k.a3();J k.6f();E}1t{2V=1J cp()}1y(e){1t{2V=1J bu("fS.bR")}1y(e){1t{2V=1J bu("bv.bR")}1y(e){k.9z()}}}A 3v=k;2V.gc=C(){q(3v.2V.bS==4){q(3v.1v)3v.a3();J 3v.6f()}};A 1e=k.1e;k.2V=2V;q(m.g3)1e=1e.2k(/$/,(/\\?/.11(1e)?\'&\':\'?\')+\'g6=\'+(1J 7K()).79());2V.ca(\'fQ\',1e,M);2V.ce(\'X-fA-fB\',\'cp\');2V.ce(\'fu-fv\',\'fL/x-fO-9j-fJ\');2V.fF(I)},a3:C(){m.7m();A 4l=1S.3z||m.cf?{1e:\'fI:eC\'}:I;k.1k=m.1d(\'1k\',4l,{1l:\'2l\',Y:\'-4v\'},m.2b);k.6f()},6f:C(){A s=k.cd||k.2V.dn,7H;q(k.7t)m.7k[k.1e]=s;q(!m.2h||m.2t>=5.5){s=s.2k(1J 4Y(\'<di[^>]*>\',\'c9\'),\'\').2k(1J 4Y(\'<cc[^>]*>.*?</cc>\',\'c9\'),\'\');q(k.1k){A 2B=k.1k.9O;q(!2B&&k.1k.6g)2B=k.1k.6g.W;q(!2B){A 3v=k;4a(C(){3v.6f()},25);E}2B.ca();2B.dg(s);2B.26();1t{s=2B.9Q(k.1v).2d}1y(e){1t{s=k.1k.W.9Q(k.1v).2d}1y(e){}}m.3B(k.1k)}J{7H=/(<19[^>]*>|<\\/19>)/db;q(7H.11(s))s=s.7G(7H)[m.3R?1:2]}}m.4p(k.S,\'7J\',\'K-19\').2d=s;k.3F();O(A x 2Y k)k[x]=I}};m.83=C(4k,1r){q(m.cX!==1j)m.95();k.4k=4k;O(A x 2Y 1r)k[x]=1r[x];q(k.cZ)k.cg();q(k.2D)k.2D=m.ci(k)};m.83.5w={cg:C(){k.2X=m.1d(\'P\',{2d:m.8b(m.8i.2X)},I,m.2b);A 6j=[\'3L\',\'3p\',\'3a\',\'1D\',\'3u\',\'1a-2F\',\'26\'];k.1Q={};A 3v=k;O(A i=0;i<6j.V;i++){k.1Q[6j[i]]=m.4p(k.2X,\'1H\',\'K-\'+6j[i]);k.4u(6j[i])}k.1Q.3p.G.1o=\'1E\'},ch:C(){q(k.cm||!k.2X)E;A B=m.16[k.4k],5q=B.7v(),2m=/7w$/;q(5q==0)k.5d(\'3a\');J q(2m.11(k.1Q.3a.2C(\'a\')[0].1c))k.4u(\'3a\');q(5q+1==m.4U.3i[B.2N||\'1E\'].V){k.5d(\'1D\');k.5d(\'3L\')}J q(2m.11(k.1Q.1D.2C(\'a\')[0].1c)){k.4u(\'1D\');k.4u(\'3L\')}},4u:C(1Q){q(!k.1Q)E;A cn=k,a=k.1Q[1Q].2C(\'a\')[0],2m=/7w$/;a.2p=C(){cn[1Q]();E 1j};q(2m.11(a.1c))a.1c=a.1c.2k(2m,\'\')},5d:C(1Q){q(!k.1Q)E;A a=k.1Q[1Q].2C(\'a\')[0];a.2p=C(){E 1j};q(!/7w$/.11(a.1c))a.1c+=\' 7w\'},cl:C(){q(k.42)k.3p();J k.3L()},3L:C(ck){q(k.1Q){k.1Q.3L.G.1o=\'1E\';k.1Q.3p.G.1o=\'\'}k.42=M;q(!ck)m.1D(k.4k)},3p:C(){q(k.1Q){k.1Q.3p.G.1o=\'1E\';k.1Q.3L.G.1o=\'\'}d9(k.42);k.42=I},3a:C(){k.3p();m.3a(k.1Q.3a)},1D:C(){k.3p();m.1D(k.1Q.1D)},3u:C(){},\'1a-2F\':C(){m.2G().7r()},26:C(){m.26(k.1Q.26)}};m.ci=C(1p){C 7p(B){m.3A(1r||{},{4P:4E,22:\'2D\',1c:\'K-2D-\'+5k+\'-14 \'+(1r.1c||\'\')});q(m.3Z)1r.6w=0;B.4O(1r);m.R(4E.23,{2e:\'1q\'})};C 28(3K){5t(1L,1h.3e(3K*4E[3S?\'1O\':\'1U\']*0.7))};C 5t(i,80){q(i===1L)O(A j=0;j<5I.V;j++){q(5I[j]==m.16[1p.4k].a){i=j;5m}}q(i===1L)E;A as=4E.2C(\'a\'),4I=as[i],48=4I.23,1b=3S?\'cj\':\'c8\',3m=3S?\'c7\':\'bX\',L=3S?\'bY\':\'bW\',4V=\'1w\'+1b,1O=\'1w\'+L,7e=P.23.23[1O],5j=7e-2g[1O],6o=3H(2g.G[3S?\'1b\':\'Y\'])||0,2O=6o,ej=20;q(80!==1L){2O=6o-80;q(5j>0)5j=0;q(2O>0)2O=0;q(2O<5j)2O=5j}J{O(A j=0;j<as.V;j++)as[j].1c=\'\';4I.1c=\'K-4I-46\';A 7X=i>0?as[i-1].23[4V]:48[4V],7Y=48[4V]+48[1O]+(as[i+1]?as[i+1].23[1O]:0);q(7Y>7e-6o)2O=7e-7Y;J q(7X<-6o)2O=-7X}A 8R=48[4V]+(48[1O]-7f[1O])/2+2O;m.2z(2g,3S?{1b:2O}:{Y:2O},I,\'8S\');m.2z(7f,3S?{1b:8R}:{Y:8R},I,\'8S\');8l.G.1o=2O<0?\'3X\':\'1E\';8M.G.1o=(2O>5j)?\'3X\':\'1E\'};A 5I=m.4U.3i[m.16[1p.4k].2N||\'1E\'],1r=1p.2D,5k=1r.5k||\'bV\',8K=(5k==\'en\'),4f=8K?[\'P\',\'6t\',\'1H\',\'1C\']:[\'2g\',\'4G\',\'47\',\'2J\'],3S=(5k==\'bV\'),4E=m.1d(\'P\',{1c:\'K-2D K-2D-\'+5k,2d:\'<P 1W="K-2D-eg">\'+\'<\'+4f[0]+\'><\'+4f[1]+\'></\'+4f[1]+\'></\'+4f[0]+\'></P>\'+\'<P 1W="K-28-1I"><P></P></P>\'+\'<P 1W="K-28-ee"><P></P></P>\'+\'<P 1W="K-7f"><P></P></P>\'},{1o:\'1E\'},m.2b),5E=4E.7L,P=5E[0],8l=5E[1],8M=5E[2],7f=5E[3],2g=P.ef,4G=4E.2C(4f[1])[0],47;O(A i=0;i<5I.V;i++){q(i==0||!3S)47=m.1d(4f[2],I,I,4G);(C(){A a=5I[i],48=m.1d(4f[3],I,I,47),ex=i;m.1d(\'a\',{21:a.21,24:a.24,2p:C(){q(/K-4I-46/.11(k.1c))E 1j;m.2G(k).3M();E m.8N(a)},2d:m.bT?m.bT(a):a.2d},I,48)})()}q(!8K){8l.2p=C(){28(-1)};8M.2p=C(){28(1)};m.2j(4G,W.eA!==1L?\'er\':\'eq\',C(e){A 3K=0;e=e||1S.2u;q(e.bU){3K=e.bU/dR;q(m.3z)3K=-3K}J q(e.bZ){3K=-e.bZ/3}q(3K)28(-3K*0.2);q(e.5n)e.5n();e.c0=1j})}E{7p:7p,5t:5t}};m.7o=m.18;A e8=m.5A;q(m.2h&&1S==1S.Y){(C(){1t{W.5h.e4(\'1b\')}1y(e){4a(c5.dZ,50);E}m.41()})()}m.2j(W,\'dW\',m.41);m.2j(1S,\'8B\',m.41);m.2j(W,\'41\',C(){q(m.7R||m.4b){A G=m.1d(\'G\',{T:\'e0/8I\'},I,W.2C(\'e1\')[0]),8E=W.7a==\'8v\';C 5P(8m,8n){q(m.2h&&(m.2t<9||8E)){A 1i=W.c6[W.c6.V-1];q(1F(1i.5P)=="7j")1i.5P(8m,8n)}J{G.1X(W.e6(8m+" {"+8n+"}"))}}C 5T(1f){E\'e5( ( ( ez = W.5h.\'+1f+\' ? W.5h.\'+1f+\' : W.19.\'+1f+\' ) ) + \\\'F\\\' );\'}q(m.7R)5P(\'.K 1N\',\'4L: 7T(\'+m.5c+m.7R+\'), 7Q !dA;\');5P(\'.K-2x-D\',m.2h&&(m.2t<7||8E)?\'1l: 2l; \'+\'1b:\'+5T(\'5O\')+\'Y:\'+5T(\'5R\')+\'L:\'+5T(\'8F\')+\'N:\'+5T(\'c4\'):\'1l: fV; L: 2w%; N: 2w%; 1b: 0; Y: 0\')}});m.2j(1S,\'3O\',C(){m.7S();q(m.2x)O(A i=0;i<m.2x.7L.V;i++){A 1P=m.2x.7L[i],B=m.2G(1P);B.5V(1P);q(1P.22==\'2D\')B.1p.2D.5t()}});m.2j(W,\'7D\',C(e){m.7B={x:e.7A,y:e.7F}});m.2j(W,\'8y\',m.8z);m.2j(W,\'c3\',m.8z);m.2j(W,\'41\',m.c1);m.2j(1S,\'8B\',m.c2);m.2j(1S,\'8B\',m.bI)}',62,1006,'||||||||||||||||||||this||hs||||if||||||||||var|exp|function|size|return|px|style|pos|null|else|highslide|width|true|height|for|div|key|setStyles|content|type|wrapper|length|document||top|get||test|||overlay||expanders||lang|body|full|left|className|createElement|src|prop|outline|Math|last|false|iframe|position|els|visibility|display|slideshow|hidden|options|innerContent|try|dim|id|offset|overlayBox|catch|opacity|fireEvent|zIndex|span|next|none|typeof|p1|li|up|new|tpos|undefined|auto|img|offsetWidth|node|btn|ss|window|overlays|offsetHeight|imgSize|class|appendChild|visible|outlineType||href|hsId|parentNode|title||close||scroll|params|arr|container|case|innerHTML|overflow|wsize|table|ie|to|addEventListener|replace|absolute|re|op|push|onclick|upcoming|loading|scrollerDiv|uaVersion|event|dimmer|100|viewport|dragArgs|animate|isHtml|doc|getElementsByTagName|thumbstrip|isImage|expand|getExpander|args|objectType|td|imgPad|target|ratio|slideshowGroup|tblPos|tgt|easing|image|hiddenBy|justify|minSize|xhr|ajax|controls|in|name|elem|min||||contentType|p2||||previous|match|sg|focusKey|round|xSize|lastY|xpos|groups|val|wh|ucwh|right|lastX|marginMin|pause|transitions|ypos|tb|useBox|move|pThis|clearing|swf|ySize|opera|extend|discardElement|opt|html|custom|onLoad|number|parseInt|hasDragged|tagName|delta|play|focus|elPos|resize|step|func|ieLt9|isX|changed|objectLoadTime|graphic|releaseMask|block|outlineWhileAnimating|ieLt7||ready|autoplay|getParam|xp1|yp1|anchor|tr|cell|styles|setTimeout|dimmingOpacity|mediumContent|marginTop|crossfade|tree|page|duration|dur|objectWidth|expKey|attribs|timers|pendingOutlines|now|getElementByClass|clone|blurExp|minWidth|max|enable|9999px|unit|objectHeight|relative|removeEventListener|navigator|invPos|setPosition|preserveContent|dom|zIndexCounter|tbody|tgtArr|active|getNode|clientSize|cursor|safari|onload|createOverlay|overlayId|bottom|sleeping|marginMax|start|anchors|offsetLeft|marginLeft|center|RegExp|images||end|scrollingContent|relToVP|styleRestoreCursor|isExpanded|htmls|sizeOverlayBox|heading|doShowHide|cacheBindings|hDiff|graphicsDir|disable|fitsize|cNode|while|documentElement|wDiff|minTblPos|mode|fadeBox|break|preventDefault|ruler|Id|cur|owner|allowReduce|selectThumb|moveOnly|area|prototype|minX|currentStyle|maxY|Expander|minY|iDoc|afterClose|domCh|setAttribute|toLowerCase|maxX|group|cloneNode|ysize|xsize|trans|above|scrollLeft|addRule|filter|scrollTop|padToMinWidth|fix|destroy|positionOverlay|fac|stl|allowSizeReduction|250|before|idCounter|isClosing|iebody|preloadTheseImages|on|over|credits|keyHandler|contentLoaded|getParams|param|parent|userAgent|opos|loadHTML|contentWindow|restoreCursor|obj|buttons|minHeight|numberPosition|uclt|showLoading|curTblPos|getAnchors|all|Outline|mask|ul|slideshows|matches|fade|after|geckoMac|cache|Dimension|showHideElements|maincontent|onLoadStarted|kdeBugCorr|wrapperKey|oDiv|dragHandler|afterExpand|allowWidthReduction|getPosition|marginBottom|maxWidth|tId|offY|cancelLoading|thumbsUserSetId|hsKey|ximgPad|writeExtendedContent|keypress|yimgPad|expandDuration|allowHeightReduction|lt|dir||keydown|setSize|525|offX||complete|isHsAnchor|destroyOverlays|getTime|compatMode|rel|self|hideOnMouseOut|overlayWidth|marker|curAnim|expOnly|gotoEnd|object|cachedGets|onReady|init|topmostKey|langDefaults|add|preloadTheseAjax|doFullExpand|getSrc|pre|fullExpandLabel|getAnchorIndex|disabled|Ajax|element|adj|clientX|mouse|preloadFullImage|mousemove|below|clientY|split|regBody|os|DIV|Date|childNodes|panel|imgs|previousOrNext|relatedTarget|pointer|expandCursor|getPageSize|url|current|getAdjacentAnchor|cacheAjax|activeLeft|activeRight|htmlGetSize|scrollBy|pixDimmerSize|update|Slideshow|isNew|location|getCacheBinding|dimmingDuration|contentId|getSelfRendered|calcBorders|replaceLang|clones|topZ|swfOptions|types|oPos|calcExpanded|skin|Text|preloadAjaxElement|scrollUp|sel|dec|other|getIframePageHeight|endOff|startOff|previousTitle|names|from|BackCompat|arrow|fitOverlayBox|mousedown|mouseClickHandler|correctIframeSize|load|hasMovedMin|maxsize|backCompat|clientWidth|Click|border|css|parseFloat|floatMode|defaultView|scrollDown|transit|offsetTop|mY|mX|markerPos|easeOutQuad|yp2|xp2|moveTitle|nextText|nextTitle|previousText|moveText|closeTitle|setObjContainerSize|closeText|props|padding|updateAnchors|state|cssDirection|doWrapper||middle|changeSize|startTime|parOff|sizeDiff|numberOfImagesToPreload|distance|resizeTo|maxHeight|form|srcElement|allowMultipleInstances|moveTo|align|error|swfobject|removeChild|run|done|background|htmlExpand|loadingPosXfade|openerTagNames|undim|garbageBin|onError|restoreDuration|marginRight|mouseIsOver|margin|ie6|isReady|hasAlphaImageLoader|Create|connectOutline|blur|evt|ucrb|calcThumb|origProp|contentDocument|thumbnailId|getElementById|osize|direction|loadingPos|getWrapperKey|genOverlayBox|restoreTitle|caption|abs|fullExpandTitle|initSlideshow|continuePreloading|getInline|getElementContent|overrides|show|hasFocused|dragByHeading|string|wrapperClassName|setPos|playText|pauseText|pauseTitle|fullExpandText|timerId|Move|Pause|preloadGraphic|spacebar|png|Play|Close|Highslide|JS|_default|Previous|appendTo||KDE|playTitle|vendor|200|call|Next|onGraphicLoad|and|vis|targetY|hasExtendedContent|pow|attributes|flashvars|isUnobtrusiveAnchor|hsHasSetClick|clear|ltr|newHeight|detachEvent|wmode|clickY|wrapperMouseHandler|focusTopmost|dimmingGeckoFix|enableKeyListener|fixedControls|hasHtmlExpanders|clickX|thumb|pageOrigin|loadingTitle|loadingText|resizeTitle|targetX|headingOverlay|captionOverlay|htmlSizeOperations|rb|switch|orig|getImageMapAreaCorrection|rv|tag|offsetParent|both|contentWrapper|loadingOpacity|pageXOffset|alpha|nopad|toUpperCase|easeInQuad|hide|clearsX|doPanels|showOverlays|gotOverlays|writeCredits|getNumber|showCredits|createFullExpand|javascript|ActiveXObject|Microsoft|reOrder|sleep||fullExpandPosition|fullExpandOpacity|getOverlays|rightpanel|focusTitle|hand|indexOf|clearsY|getAttribute|preloadAjax|htmlPrepareClose|destroyObject|offsetY|leftpanel|offsetX|relativeTo|awake|reuseOverlay|XMLHTTP|readyState|stripItemFormatter|wheelDelta|horizontal|Height|Bottom|Width|detail|returnValue|setClickEvents|preloadImages|mouseup|clientHeight|arguments|styleSheets|Right|Top|gi|open||script|cachedGet|setRequestHeader|ie6SSL|getControls|checkFirstAndLast|Thumbstrip|Left|wait|hitSpace|repeat|sls|getPropertyValue|XMLHttpRequest|creditsText|creditsTitle|creditsTarget|creditsHref|onHideLoading|creditsPosition|Eval|Overlay|addOverlay|nextSibling|_|overlayOptions|toString|fadeInOut|transitionDuration|easingClose|correctRatio|tmpMin|ximgSize|yimgSize|getComputedStyle|prepareNextOutline|newImg|oldImg|hideSelects|preloadNext|hideIframes|scrollWidth|reuse|iPod|iPhone|scrollHeight|boolean|dynamicallyUpdateAnchors|10001|useControls|geckodimmer|onAfterExpand|iPad|onDimmerClick|htmlCreate|onShowLoading|rect|clip|nodeName|clearTimeout|onBeforeGetContent|ig|dimming|IFRAME|300|Android|write|xpand|link|htmlE|Line|lineNumber|floor|responseText|onDrop|oncontextmenu|alert|onImageClick|button|addSlideshow|registerOverlay|zoomin|graphics|zoomout|keyCode|onKeyDown|important|keys|click|message|drag|Use|insertBefore|flushImgSize|headingText|headingEval|headingId|captionEval|captionText|maincontentId|maincontentText|Trident|it|120|reflow|maincontentEval|captionId|shadow|DOMContentLoaded|||callee|text|HEAD|header|blockRightClick|doScroll|expression|createTextNode|footer|HsExpander|ra|Safari|useMap|_self|pageYOffset|down|firstChild|inner|com|outlineStartOffset|mgnRight|onSetClickEvent||http|float|innerHeight|innerWidth|DOMMouseScroll|mousewheel|Gecko|onBeforeExpand|Macintosh|drop|removeAttribute|pI|imageCreate|ignoreMe|onmousewheel|white|blank|esc|onAfterGetCaption|onAfterGetHeading|onBeforeGetHeading|onBeforeGetCaption|circle|cellSpacing|fontSize|lineHeight|collapse|borderCollapse|useOnHtml|newWidth|frameborder|front|onmouseout|clearInterval|01|onBeforeClose|onBlur|onmouseover|Resize|Expand|fit|outlinesDir|200px|onInit|Go|allowSimultaneousLoading|the|onCreateOverlay|Powered|StopPlay|static|removeSWF|actual|onFocus|scale|shape|homepage|eval|outlines|default|SELECT|sizingMethod|AlphaImageLoader|DXImageTransform|progid|onAfterGetContent|onCreateFullExpand|onMouseOut|500|onMouseOver|Content|Type|Loading||attachEvent|of|Requested|With|coords|toElement|fromElement|send|sqrt|interval|about|urlencoded|dragSensitivity|application|mouseover|onDrag|www|cancel|GET|transparent|Msxml2|embedSWF|onActivate|fixed|onAfterClose|setInterval|flash|onDoFullExpand|bring|version|linearTween|forceAjaxReload|https|protocol|dummy|Image|debug|paddingTop|1px|expressInstallSwfurl|onreadystatechange|splice'.split('|'),0,{})) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) + * Config: default +events +unobtrusive +imagemap +slideshow +positioning +transitions +viewport +thumbstrip +inline +ajax +iframe +flash +packed + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?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}('q(!m){A m={18:{97:\'aK\',aZ:\'fw...\',aY:\'8G 2i fP\',bD:\'8G 2i g0 2i eR\',9Z:\'eZ 2i fc D (f)\',cq:\'f8 by <i>an ao</i>\',cr:\'f4 2i f6 an ao fg\',8Y:\'aq\',8W:\'ay\',8Z:\'ag\',92:\'am\',90:\'am (eD)\',b0:\'eY\',ab:\'al\',au:\'al 1p (aj)\',ac:\'ah\',ad:\'ah 1p (aj)\',8s:\'aq (8w 1b)\',8X:\'ay (8w 3m)\',8V:\'ag\',ae:\'1:1\',3G:\'g7 %1 fz %2\',9W:\'8G 2i 26 2R, dC aA dE 2i 3u. dF 8w dB O 1D aA 3a.\'},5c:\'K/dw/\',7R:\'dv.5q\',6h:\'dx.5q\',6W:5Z,9A:5Z,4W:15,9B:15,4d:15,6L:15,4F:cY,be:0.75,9l:M,9f:5,3Y:2,ei:3,5S:1j,bz:\'4Q 3m\',bA:1,br:M,ct:\'em://K.eh/\',cs:\'ec\',aS:M,9w:[\'a\',\'5v\'],3q:[],cE:5Z,4b:0,87:50,6J:1j,6X:M,4D:M,3U:\'60\',7W:M,46:\'1M\',9n:\'1M\',b1:I,aC:I,a7:M,4s:aw,6k:aw,5Y:M,1Z:\'ev-dV\',8i:{2X:\'<P 1W="K-2X"><6t>\'+\'<1H 1W="K-3a">\'+\'<a 21="#" 24="{m.18.8s}">\'+\'<1C>{m.18.8Y}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-3L">\'+\'<a 21="#" 24="{m.18.au}">\'+\'<1C>{m.18.ab}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-3p">\'+\'<a 21="#" 24="{m.18.ad}">\'+\'<1C>{m.18.ac}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-1D">\'+\'<a 21="#" 24="{m.18.8X}">\'+\'<1C>{m.18.8W}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-3u">\'+\'<a 21="#" 24="{m.18.8V}">\'+\'<1C>{m.18.8Z}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-1a-2F">\'+\'<a 21="#" 24="{m.18.9Z}">\'+\'<1C>{m.18.ae}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-26">\'+\'<a 21="#" 24="{m.18.90}" >\'+\'<1C>{m.18.92}</1C></a>\'+\'</1H>\'+\'</6t></P>\',bd:\'<P 1W="K-e2"><6t>\'+\'<1H 1W="K-3a">\'+\'<a 21="#" 24="{m.18.8s}" 2p="E m.3a(k)">\'+\'<1C>{m.18.8Y}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-1D">\'+\'<a 21="#" 24="{m.18.8X}" 2p="E m.1D(k)">\'+\'<1C>{m.18.8W}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-3u">\'+\'<a 21="#" 24="{m.18.8V}" 2p="E 1j">\'+\'<1C>{m.18.8Z}</1C></a>\'+\'</1H>\'+\'<1H 1W="K-26">\'+\'<a 21="#" 24="{m.18.90}" 2p="E m.26(k)">\'+\'<1C>{m.18.92}</1C></a>\'+\'</1H>\'+\'</6t></P>\'+\'<P 1W="K-19"></P>\'+\'<P 1W="K-e7"><P>\'+\'<1C 1W="K-3O" 24="{m.18.b0}"><1C></1C></1C>\'+\'</P></P>\'},64:[],a1:M,16:[],a4:[\'5Y\',\'3t\',\'46\',\'9n\',\'b1\',\'aC\',\'1Z\',\'3Y\',\'dU\',\'dM\',\'dL\',\'b3\',\'dK\',\'dI\',\'dJ\',\'b2\',\'cv\',\'a7\',\'42\',\'6l\',\'3q\',\'4b\',\'L\',\'N\',\'88\',\'6J\',\'6X\',\'4D\',\'dN\',\'dO\',\'dT\',\'2I\',\'7W\',\'4j\',\'4x\',\'3U\',\'8e\',\'a9\',\'4s\',\'6k\',\'6M\',\'9i\',\'aX\',\'2N\',\'2Q\',\'cF\',\'cD\',\'1e\'],1T:[],61:0,8g:{x:[\'bM\',\'1b\',\'4X\',\'3m\',\'bC\'],y:[\'5N\',\'Y\',\'9a\',\'4Q\',\'7E\']},7B:{},b2:{},b3:{},8e:{aG:{},29:{},aF:{}},4m:[],6u:[],4n:{},4R:[],7q:[],5a:[],7k:{},8c:{},7l:[],2t:/dP\\/4\\.0/.11(4A.6d)?8:8J((4A.6d.5G().3b(/.+(?:b9|dQ|e9|2h)[\\/: ]([\\d.]+)/)||[0,\'0\'])[1]),2h:(W.6q&&!1S.3z),4M:/ea/.11(4A.6d),6y:/eu.+b9:1\\.[0-8].+es/.11(4A.6d),$:C(1v){q(1v)E W.9Q(1v)},2o:C(2a,3j){2a[2a.V]=3j},1d:C(ba,4l,49,6c,bh){A el=W.1d(ba);q(4l)m.3A(el,4l);q(bh)m.R(el,{94:0,8H:\'1E\',9D:0});q(49)m.R(el,49);q(6c)6c.1X(el);E el},3A:C(el,4l){O(A x 2Y 4l)el[x]=4l[x];E el},R:C(el,49){O(A x 2Y 49){q(m.3R&&x==\'1z\'){q(49[x]>0.99)el.G.ew(\'5Q\');J el.G.5Q=\'bg(1z=\'+(49[x]*2w)+\')\'}J el.G[x]=49[x]}},2z:C(el,1f,3C){A 4T,51,4w;q(1F 3C!=\'7j\'||3C===I){A 2H=c5;3C={4h:2H[2],2Q:2H[3],76:2H[4]}}q(1F 3C.4h!=\'3G\')3C.4h=5Z;3C.2Q=1h[3C.2Q]||1h.bj;3C.7g=m.3A({},1f);O(A 2Z 2Y 1f){A e=1J m.fx(el,3C,2Z);4T=8J(m.8I(el,2Z))||0;51=8J(1f[2Z]);4w=2Z!=\'1z\'?\'F\':\'\';e.3E(4T,51,4w)}},8I:C(el,1f){q(el.G[1f]){E el.G[1f]}J q(W.8L){E W.8L.cK(el,I).co(1f)}J{q(1f==\'1z\')1f=\'5Q\';A 3j=el.5y[1f.2k(/\\-(\\w)/g,C(a,b){E b.bi()})];q(1f==\'5Q\')3j=3j.2k(/bg\\(1z=([0-9]+)\\)/,C(a,b){E b/2w});E 3j===\'\'?1:3j}},7S:C(){A d=W,w=1S,63=d.7a&&d.7a!=\'8v\'?d.5h:d.19,3R=m.2h&&(m.2t<9||1F bf==\'1L\');A L=3R?63.8F:(d.5h.8F||7c.ep),N=3R?63.c4:7c.eo;m.4g={L:L,N:N,5O:3R?63.5O:bf,5R:3R?63.5R:ed};E m.4g},6K:C(el){q(/5v/i.11(el.3J)){A 7N=W.2C(\'1N\');O(A i=0;i<7N.V;i++){A u=7N[i].eb;q(u&&u.2k(/^.*?#/,\'\')==el.23.2Z){el=7N[i];5m}}}A p={x:el.4V,y:el.8O};5g(el.bb){el=el.bb;p.x+=el.4V;p.y+=el.8O;q(el!=W.19&&el!=W.5h){p.x-=el.5O;p.y-=el.5R}}E p},2F:C(a,29,3E,T){q(!a)a=m.1d(\'a\',I,{1o:\'1E\'},m.2b);q(1F a.6a==\'C\')E 29;q(T==\'3D\'){O(A i=0;i<m.4R.V;i++){q(m.4R[i]&&m.4R[i].a==a){m.4R[i].bP();m.4R[i]=I;E 1j}}m.aU=M}1t{1J m.5A(a,29,3E,T);E 1j}1y(e){E M}},9u:C(a,29,3E){E m.2F(a,29,3E,\'3D\')},89:C(){E m.1d(\'P\',{1c:\'K-3D-S\',2d:m.8b(m.8i.bd)})},4p:C(el,3J,1c){A 1m=el.2C(3J);O(A i=0;i<1m.V;i++){q((1J 4Y(1c)).11(1m[i].1c)){E 1m[i]}}E I},8b:C(s){s=s.2k(/\\s/g,\' \');A 2m=/{m\\.18\\.([^}]+)\\}/g,6v=s.3b(2m),18;q(6v)O(A i=0;i<6v.V;i++){18=6v[i].2k(2m,"$1");q(1F m.18[18]!=\'1L\')s=s.2k(6v[i],m.18[18])}E s},c1:C(){A 1m=W.2C(\'a\');O(A i=0;i<1m.V;i++){A T=m.aH(1m[i]);q(T&&!1m[i].aI){(C(){A t=T;q(m.1A(m,\'ek\',{7y:1m[i],T:t})){1m[i].2p=(T==\'2R\')?C(){E m.2F(k)}:C(){E m.9u(k,{2I:t})}}})();1m[i].aI=M}}m.6p()},aH:C(el){q(el.7b==\'K\')E\'2R\';J q(el.7b==\'K-2W\')E\'2W\';J q(el.7b==\'K-1k\')E\'1k\';J q(el.7b==\'K-3x\')E\'3x\'},86:C(a){O(A i=0;i<m.5a.V;i++){q(m.5a[i][0]==a){A c=m.5a[i][1];m.5a[i][1]=c.5J(1);E c}}E I},bI:C(e){A 2a=m.6p();O(A i=0;i<2a.56.V;i++){A a=2a.56[i];q(m.43(a,\'2I\')==\'2W\'&&m.43(a,\'7W\'))m.2o(m.7q,a)}m.8k(0)},8k:C(i){q(!m.7q[i])E;A a=m.7q[i];A 6z=m.4J(m.43(a,\'88\'));q(!6z)6z=m.89();A 2W=1J m.7x(a,6z,1);2W.9z=C(){};2W.3F=C(){m.2o(m.5a,[a,6z]);m.8k(i+1)};2W.9r()},aQ:C(){A 8d=0,7n=-1,16=m.16,B,1B;O(A i=0;i<16.V;i++){B=16[i];q(B){1B=B.U.G.1B;q(1B&&1B>8d){8d=1B;7n=i}}}q(7n==-1)m.3d=-1;J 16[7n].3M()},43:C(a,6b){a.6a=a.2p;A p=a.6a?a.6a():I;a.6a=I;E(p&&1F p[6b]!=\'1L\')?p[6b]:(1F m[6b]!=\'1L\'?m[6b]:I)},7s:C(a){A 1e=m.43(a,\'1e\');q(1e)E 1e;E a.21},4J:C(1v){A 1P=m.$(1v),4q=m.8c[1v],a={};q(!1P&&!4q)E I;q(!4q){4q=1P.5J(M);4q.1v=\'\';m.8c[1v]=4q;E 1P}J{E 4q.5J(M)}},3B:C(d){q(d)m.9y.1X(d);m.9y.2d=\'\'},1u:C(B){q(!m.2v){84=M;m.2v=m.1d(\'P\',{1c:\'K-dc K-2x-D\',5r:\'\',2p:C(){q(m.1A(m,\'d3\'))m.26()}},{1n:\'1Y\',1z:0},m.2b,M);q(/(df|d2|cU|cT)/.11(4A.6d)){A 19=W.19;C 81(){m.R(m.2v,{L:19.cR+\'F\',N:19.cV+\'F\'})}81();m.2j(1S,\'3O\',81)}}m.2v.G.1o=\'\';A 84=m.2v.5r==\'\';m.2v.5r+=\'|\'+B.Q;q(84){q(m.6y&&m.aR)m.R(m.2v,{9t:\'7T(\'+m.5c+\'d0.ak)\',1z:1});J m.2z(m.2v,{1z:B.4b},m.87)}},9x:C(Q){q(!m.2v)E;q(1F Q!=\'1L\')m.2v.5r=m.2v.5r.2k(\'|\'+Q,\'\');q((1F Q!=\'1L\'&&m.2v.5r!=\'\')||(m.2q&&m.43(m.2q,\'4b\')))E;q(m.6y&&m.aR)m.2v.G.1o=\'1E\';J m.2z(m.2v,{1z:0},m.87,I,C(){m.2v.G.1o=\'1E\'})},8N:C(7z,B){A 1i=B||m.2G();B=1i;q(m.2q)E 1j;J m.1i=1i;m.4z(W,1S.3z?\'6U\':\'71\',m.68);1t{m.2q=7z;7z.2p()}1y(e){m.1i=m.2q=I}1t{q(!7z||B.3q[1]!=\'4e\')B.26()}1y(e){}E 1j},7O:C(el,2n){A B=m.2G(el);q(B)E m.8N(B.7V(2n),B);J E 1j},3a:C(el){E m.7O(el,-1)},1D:C(el){E m.7O(el,1)},68:C(e){q(!e)e=1S.2u;q(!e.2L)e.2L=e.9k;q(1F e.2L.9j!=\'1L\')E M;q(!m.1A(m,\'dz\',e))E M;A B=m.2G();A 2n=I;b6(e.dy){2c 70:q(B)B.7r();E M;2c 32:2n=2;5m;2c 34:2c 39:2c 40:2n=1;5m;2c 8:2c 33:2c 37:2c 38:2n=-1;5m;2c 27:2c 13:2n=0}q(2n!==I){q(2n!=2)m.4z(W,1S.3z?\'6U\':\'71\',m.68);q(!m.aS)E M;q(e.5n)e.5n();J e.c0=1j;q(B){q(2n==0){B.26()}J q(2n==2){q(B.1p)B.1p.cl()}J{q(B.1p)B.1p.3p();m.7O(B.Q,2n)}E 1j}}E M},du:C(14){m.2o(m.1T,m.3A(14,{22:\'22\'+m.61++}))},dt:C(1r){A 3c=1r.2N;q(1F 3c==\'7j\'){O(A i=0;i<3c.V;i++){A o={};O(A x 2Y 1r)o[x]=1r[x];o.2N=3c[i];m.2o(m.6u,o)}}J{m.2o(m.6u,1r)}},9U:C(7y,7h){A el,2m=/^K-U-([0-9]+)$/;el=7y;5g(el.23){q(el.6R!==1L)E el.6R;q(el.1v&&2m.11(el.1v))E el.1v.2k(2m,"$1");el=el.23}q(!7h){el=7y;5g(el.23){q(el.3J&&m.77(el)){O(A Q=0;Q<m.16.V;Q++){A B=m.16[Q];q(B&&B.a==el)E Q}}el=el.23}}E I},2G:C(el,7h){q(1F el==\'1L\')E m.16[m.3d]||I;q(1F el==\'3G\')E m.16[el]||I;q(1F el==\'a8\')el=m.$(el);E m.16[m.9U(el,7h)]||I},77:C(a){E(a.2p&&a.2p.cC().2k(/\\s/g,\' \').3b(/m.(dj|e)dh/))},bw:C(){O(A i=0;i<m.16.V;i++)q(m.16[i]&&m.16[i].55)m.aQ()},1A:C(6i,9K,2H){E 6i&&6i[9K]?(6i[9K](6i,2H)!==1j):M},8z:C(e){q(!e)e=1S.2u;q(e.ds>1)E M;q(!e.2L)e.2L=e.9k;A el=e.2L;5g(el.23&&!(/K-(2R|3u|3D|3O)/.11(el.1c))){el=el.23}A B=m.2G(el);q(B&&(B.62||!B.55))E M;q(B&&e.T==\'8y\'){q(e.2L.9j)E M;A 3b=el.1c.3b(/K-(2R|3u|3O)/);q(3b){m.2y={B:B,T:3b[1],1b:B.x.H,L:B.x.D,Y:B.y.H,N:B.y.D,aV:e.7A,aO:e.7F};m.2j(W,\'7D\',m.6H);q(e.5n)e.5n();q(/K-(2R|3D)-9J/.11(B.S.1c)){B.3M();m.a6=M}E 1j}J q(/K-3D/.11(el.1c)&&m.3d!=B.Q){B.3M();B.59(\'1q\')}}J q(e.T==\'c3\'){m.4z(W,\'7D\',m.6H);q(m.2y){q(m.54&&m.2y.T==\'2R\')m.2y.B.S.G.4L=m.54;A 3I=m.2y.3I;q(!3I&&!m.a6&&!/(3u|3O)/.11(m.2y.T)){q(m.1A(B,\'dr\'))B.26()}J q(3I||(!3I&&m.aU)){m.2y.B.59(\'1q\')}q(m.2y.B.3W)m.2y.B.3W.G.1o=\'1E\';q(3I)m.1A(m.2y.B,\'do\',m.2y);m.a6=1j;m.2y=I}J q(/K-2R-9J/.11(el.1c)){el.G.4L=m.54}}E 1j},6H:C(e){q(!m.2y)E M;q(!e)e=1S.2u;A a=m.2y,B=a.B;q(B.1k){q(!B.3W)B.3W=m.1d(\'P\',I,{1l:\'2l\',L:B.x.D+\'F\',N:B.y.D+\'F\',1b:B.x.cb+\'F\',Y:B.y.cb+\'F\',1B:4,9t:(m.3R?\'eB\':\'1E\'),1z:0.eU},B.U,M);q(B.3W.G.1o==\'1E\')B.3W.G.1o=\'\'}a.dX=e.7A-a.aV;a.dY=e.7F-a.aO;A 9g=1h.fG(1h.aE(a.dX,2)+1h.aE(a.dY,2));q(!a.3I)a.3I=(a.T!=\'2R\'&&9g>0)||(9g>(m.fK||5));q(a.3I&&e.7A>5&&e.7F>5){q(!m.1A(B,\'fN\',a))E 1j;q(a.T==\'3O\')B.3O(a);J{B.9m(a.1b+a.dX,a.Y+a.dY);q(a.T==\'2R\')B.S.G.4L=\'3u\'}}E 1j},aP:C(e){1t{q(!e)e=1S.2u;A 66=/fM/i.11(e.T);q(!e.2L)e.2L=e.9k;q(!e.7P)e.7P=66?e.fE:e.fD;A B=m.2G(e.2L);q(!B.55)E;q(!B||!e.7P||m.2G(e.7P,M)==B||m.2y)E;m.1A(B,66?\'ft\':\'fr\',e);O(A i=0;i<B.1T.V;i++)(C(){A o=m.$(\'22\'+B.1T[i]);q(o&&o.7d){q(66)m.R(o,{1n:\'1Y\',1o:\'\'});m.2z(o,{1z:66?o.1z:0},o.4i)}})()}1y(e){}},2j:C(el,2u,3Q){q(el==W&&2u==\'41\'){m.2o(m.7l,3Q)}1t{el.2j(2u,3Q,1j)}1y(e){1t{el.aM(\'65\'+2u,3Q);el.fy(\'65\'+2u,3Q)}1y(e){el[\'65\'+2u]=3Q}}},4z:C(el,2u,3Q){1t{el.4z(2u,3Q,1j)}1y(e){1t{el.aM(\'65\'+2u,3Q)}1y(e){el[\'65\'+2u]=I}}},7C:C(i){q(m.a1&&m.64[i]&&m.64[i]!=\'1L\'){A 1N=W.1d(\'1N\');1N.4N=C(){1N=I;m.7C(i+1)};1N.1e=m.64[i]}},c2:C(3G){q(3G&&1F 3G!=\'7j\')m.9f=3G;A 2a=m.6p();O(A i=0;i<2a.4Z.V&&i<m.9f;i++){m.2o(m.64,m.7s(2a.4Z[i]))}q(m.1Z)1J m.6r(m.1Z,C(){m.7C(0)});J m.7C(0);q(m.6h)A 5q=m.1d(\'1N\',{1e:m.5c+m.6h})},7m:C(){q(!m.2b){m.3Z=m.2h&&m.2t<7;m.3R=m.2h&&m.2t<9;m.7S();m.cf=m.3Z&&85.g5==\'g4:\';O(A x 2Y m.7o){q(1F m[x]!=\'1L\')m.18[x]=m[x];J q(1F m.18[x]==\'1L\'&&1F m.7o[x]!=\'1L\')m.18[x]=m.7o[x]}m.2b=m.1d(\'P\',{1c:\'K-2b\'},{1l:\'2l\',1b:0,Y:0,L:\'2w%\',1B:m.4F,9S:\'aK\'},W.19,M);m.2r=m.1d(\'a\',{1c:\'K-2r\',24:m.18.aY,2d:m.18.aZ,21:\'bt:;\'},{1l:\'2l\',Y:\'-4v\',1z:m.be,1B:1},m.2b);m.9y=m.1d(\'P\',I,{1o:\'1E\'},m.2b);m.2x=m.1d(\'P\',{1c:\'K-2x K-2x-D\'},{1n:(m.4M&&m.2t<73)?\'1Y\':\'1q\'},m.2b,1);m.3w=m.1d(\'P\',I,{aJ:\'bc\',g9:\'ga\'},I,M);1h.g2=C(t,b,c,d){E c*t/d+b};1h.bj=C(t,b,c,d){E c*(t/=d)*t+b};1h.8S=C(t,b,c,d){E-c*(t/=d)*(t-2)+b};m.cO=m.3Z;m.cQ=((1S.3z&&m.2t<9)||4A.av==\'at\'||(m.3Z&&m.2t<5.5));m.1A(k,\'fU\')}},41:C(){q(m.9F)E;m.9F=M;O(A i=0;i<m.7l.V;i++)m.7l[i]()},95:C(){A el,1m,6q=[],4Z=[],56=[],3i={},2m;O(A i=0;i<m.9w.V;i++){1m=W.2C(m.9w[i]);O(A j=0;j<1m.V;j++){el=1m[j];2m=m.77(el);q(2m){m.2o(6q,el);q(2m[0]==\'m.2F\')m.2o(4Z,el);J q(2m[0]==\'m.9u\')m.2o(56,el);A g=m.43(el,\'2N\')||\'1E\';q(!3i[g])3i[g]=[];m.2o(3i[g],el)}}}m.4U={6q:6q,3i:3i,4Z:4Z,56:56};E m.4U},6p:C(){E m.4U||m.95()},26:C(el){A B=m.2G(el);q(B)B.26();E 1j}};m.fx=C(30,1r,1f){k.1r=1r;k.30=30;k.1f=1f;q(!1r.b7)1r.b7={}};m.fx.5w={82:C(){(m.fx.3P[k.1f]||m.fx.3P.ap)(k);q(k.1r.3P)k.1r.3P.ax(k.30,k.4o,k)},3E:C(8u,2i,4w){k.9c=(1J 7K()).79();k.4T=8u;k.51=2i;k.4w=4w;k.4o=k.4T;k.H=k.96=0;A 7c=k;C t(7i){E 7c.3P(7i)}t.30=k.30;q(t()&&m.4m.2o(t)==1){m.af=fX(C(){A 4m=m.4m;O(A i=0;i<4m.V;i++)q(!4m[i]())4m.gd(i--,1);q(!4m.V){eT(m.af)}},13)}},3P:C(7i){A t=(1J 7K()).79();q(7i||t>=k.1r.4h+k.9c){k.4o=k.51;k.H=k.96=1;k.82();k.1r.7g[k.1f]=M;A 9s=M;O(A i 2Y k.1r.7g)q(k.1r.7g[i]!==M)9s=1j;q(9s){q(k.1r.76)k.1r.76.ax(k.30)}E 1j}J{A n=t-k.9c;k.96=n/k.1r.4h;k.H=k.1r.2Q(n,0,1,k.1r.4h);k.4o=k.4T+((k.51-k.4T)*k.H);k.82()}E M}};m.3A(m.fx,{3P:{1z:C(fx){m.R(fx.30,{1z:fx.4o})},ap:C(fx){1t{q(fx.30.G&&fx.30.G[fx.1f]!=I)fx.30.G[fx.1f]=fx.4o+fx.4w;J fx.30[fx.1f]=fx.4o}1y(e){}}}});m.6r=C(1Z,3F){k.3F=3F;k.1Z=1Z;A v=m.2t,47;k.9G=m.2h&&m.2t<7;q(!1Z){q(3F)3F();E}m.7m();k.2g=m.1d(\'2g\',{eJ:0},{1n:\'1q\',1l:\'2l\',eN:\'eM\',L:0},m.2b,M);A 4G=m.1d(\'4G\',I,I,k.2g,1);k.2J=[];O(A i=0;i<=8;i++){q(i%3==0)47=m.1d(\'47\',I,{N:\'1M\'},4G,M);k.2J[i]=m.1d(\'2J\',I,I,47,M);A G=i!=4?{eL:0,eK:0}:{1l:\'4y\'};m.R(k.2J[i],G)}k.2J[4].1c=1Z+\' K-1g\';k.ai()};m.6r.5w={ai:C(){A 1e=m.5c+(m.f1||"fi/")+k.1Z+".ak";A ar=m.4M&&m.2t<73?m.2b:I;k.3V=m.1d(\'1N\',I,{1l:\'2l\',Y:\'-4v\'},ar,M);A 3v=k;k.3V.4N=C(){3v.az()};k.3V.1e=1e},az:C(){A o=k.1w=k.3V.L/4,H=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],1u={N:(2*o)+\'F\',L:(2*o)+\'F\'};O(A i=0;i<=8;i++){q(H[i]){q(k.9G){A w=(i==1||i==7)?\'2w%\':k.3V.L+\'F\';A P=m.1d(\'P\',I,{L:\'2w%\',N:\'2w%\',1l:\'4y\',2e:\'1q\'},k.2J[i],M);m.1d(\'P\',I,{5Q:"fo:fn.bv.fm(fl=fe, 1e=\'"+k.3V.1e+"\')",1l:\'2l\',L:w,N:k.3V.N+\'F\',1b:(H[i][0]*o)+\'F\',Y:(H[i][1]*o)+\'F\'},P,M)}J{m.R(k.2J[i],{9t:\'7T(\'+k.3V.1e+\') \'+(H[i][0]*o)+\'F \'+(H[i][1]*o)+\'F\'})}q(1S.3z&&(i==3||i==5))m.1d(\'P\',I,1u,k.2J[i],M);m.R(k.2J[i],1u)}}k.3V=I;q(m.4n[k.1Z])m.4n[k.1Z].5U();m.4n[k.1Z]=k;q(k.3F)k.3F()},4C:C(H,1w,aB,4i,2Q){A B=k.B,5X=B.U.G,1w=1w||0,H=H||{x:B.x.H+1w,y:B.y.H+1w,w:B.x.Z(\'2f\')-2*1w,h:B.y.Z(\'2f\')-2*1w};q(aB)k.2g.G.1n=(H.h>=4*k.1w)?\'1Y\':\'1q\';m.R(k.2g,{1b:(H.x-k.1w)+\'F\',Y:(H.y-k.1w)+\'F\',L:(H.w+2*k.1w)+\'F\'});H.w-=2*k.1w;H.h-=2*k.1w;m.R(k.2J[4],{L:H.w>=0?H.w+\'F\':0,N:H.h>=0?H.h+\'F\':0});q(k.9G)k.2J[3].G.N=k.2J[5].G.N=k.2J[4].G.N},5U:C(bk){q(bk)k.2g.G.1n=\'1q\';J m.3B(k.2g)}};m.6A=C(B,1u){k.B=B;k.1u=1u;k.3l=1u==\'x\'?\'bY\':\'bW\';k.3k=k.3l.5G();k.6m=1u==\'x\'?\'cj\':\'c8\';k.6Y=k.6m.5G();k.9L=1u==\'x\'?\'c7\':\'bX\';k.b5=k.9L.5G();k.1G=k.36=0};m.6A.5w={Z:C(Q){b6(Q){2c\'9T\':E k.1K+k.3s+(k.t-m.2r[\'1w\'+k.3l])/2;2c\'9v\':E k.H+k.cb+k.1G+(k.D-m.2r[\'1w\'+k.3l])/2;2c\'2f\':E k.D+2*k.cb+k.1G+k.36;2c\'5e\':E k.4K-k.3o-k.4S;2c\'8D\':E k.Z(\'5e\')-2*k.cb-k.1G-k.36;2c\'6e\':E k.H-(k.B.1g?k.B.1g.1w:0);2c\'9R\':E k.Z(\'2f\')+(k.B.1g?2*k.B.1g.1w:0);2c\'2K\':E k.1V?1h.3e((k.D-k.1V)/2):0}},8a:C(){k.cb=(k.B.S[\'1w\'+k.3l]-k.t)/2;k.4S=m[\'9D\'+k.9L]},9M:C(){k.t=k.B.el[k.3k]?3H(k.B.el[k.3k]):k.B.el[\'1w\'+k.3l];k.1K=k.B.1K[k.1u];k.3s=(k.B.el[\'1w\'+k.3l]-k.t)/2;q(k.1K==0||k.1K==-1){k.1K=(m.4g[k.3k]/2)+m.4g[\'28\'+k.6m]}},8h:C(){A B=k.B;k.2T=\'1M\';q(B.9n==\'4X\')k.2T=\'4X\';J q(1J 4Y(k.6Y).11(B.46))k.2T=I;J q(1J 4Y(k.b5).11(B.46))k.2T=\'4t\';k.H=k.1K-k.cb+k.3s;q(k.9i&&k.1u==\'x\')B.6M=1h.31(B.6M||k.1a,B.9i*k.1a/B.y.1a);k.D=1h.31(k.1a,B[\'4t\'+k.3l]||k.1a);k.2U=B.5Y?1h.31(B[\'31\'+k.3l],k.1a):k.1a;q(B.2E&&B.3t){k.D=B[k.3k];k.1V=k.1a}q(k.1u==\'x\'&&m.5S)k.2U=B.4s;k.2L=B[\'2L\'+k.1u.bi()];k.3o=m[\'9D\'+k.6m];k.28=m.4g[\'28\'+k.6m];k.4K=m.4g[k.3k]},72:C(i){A B=k.B;q(B.2E&&(B.3t||m.5S)){k.1V=i;k.D=1h.4t(k.D,k.1V);B.S.G[k.6Y]=k.Z(\'2K\')+\'F\'}J k.D=i;B.S.G[k.3k]=i+\'F\';B.U.G[k.3k]=k.Z(\'2f\')+\'F\';q(B.1g)B.1g.4C();q(B.3W)B.3W.G[k.3k]=i+\'F\';q(k.1u==\'y\'&&B.5C&&B.19.G.N!=\'1M\')1t{B.5C.19.G.2e=\'1M\'}1y(e){}q(B.2A){A d=B.2s;q(k.9e===1L)k.9e=B.1s[\'1w\'+k.3l]-d[\'1w\'+k.3l];d.G[k.3k]=(k.D-k.9e)+\'F\';q(k.1u==\'x\')B.4c.G.L=\'1M\';q(B.19)B.19.G[k.3k]=\'1M\'}q(k.1u==\'x\'&&B.1x)B.57(M);q(k.1u==\'x\'&&B.1p&&B.2E){q(i==k.1a)B.1p.5d(\'1a-2F\');J B.1p.4u(\'1a-2F\')}},aa:C(i){k.H=i;k.B.U.G[k.6Y]=i+\'F\';q(k.B.1g)k.B.1g.4C()}};m.5A=C(a,29,3E,35){q(W.bS&&m.2h&&!m.9F){m.2j(W,\'41\',C(){1J m.5A(a,29,3E,35)});E}k.a=a;k.3E=3E;k.35=35||\'2R\';k.2A=(35==\'3D\');k.2E=!k.2A;m.a1=1j;k.1T=[];k.1i=m.1i;m.1i=I;m.7m();A Q=k.Q=m.16.V;O(A i=0;i<m.a4.V;i++){A 2Z=m.a4[i];k[2Z]=29&&1F 29[2Z]!=\'1L\'?29[2Z]:m[2Z]}q(!k.1e)k.1e=a.21;A el=(29&&29.9P)?m.$(29.9P):a;el=k.aW=el.2C(\'1N\')[0]||el;k.6Q=el.1v||a.1v;q(!m.1A(k,\'f3\'))E M;O(A i=0;i<m.16.V;i++){q(m.16[i]&&m.16[i].a==a&&!(k.1i&&k.3q[1]==\'4e\')){m.16[i].3M();E 1j}}q(!m.f5)O(A i=0;i<m.16.V;i++){q(m.16[i]&&m.16[i].aW!=el&&!m.16[i].6D){m.16[i].6P()}}m.16[Q]=k;q(!m.9l&&!m.2q){q(m.16[Q-1])m.16[Q-1].26();q(1F m.3d!=\'1L\'&&m.16[m.3d])m.16[m.3d].26()}k.el=el;k.1K=k.aX||m.6K(el);m.7S();A x=k.x=1J m.6A(k,\'x\');x.9M();A y=k.y=1J m.6A(k,\'y\');y.9M();q(/5v/i.11(el.3J))k.b8(el);k.U=m.1d(\'P\',{1v:\'K-U-\'+k.Q,1c:\'K-U \'+k.a9},{1n:\'1q\',1l:\'2l\',1B:m.4F+=2},I,M);k.U.eX=k.U.eS=m.aP;q(k.35==\'2R\'&&k.3Y==2)k.3Y=0;q(!k.1Z||(k.1i&&k.2E&&k.3q[1]==\'4e\')){k[k.35+\'9H\']()}J q(m.4n[k.1Z]){k.9I();k[k.35+\'9H\']()}J{k.6n();A B=k;1J m.6r(k.1Z,C(){B.9I();B[B.35+\'9H\']()})}E M};m.5A.5w={9o:C(e){q(m.g8)dq(\'dk \'+e.dl+\': \'+e.dD);J 1S.85.21=k.1e},9I:C(){A 1g=k.1g=m.4n[k.1Z];1g.B=k;1g.2g.G.1B=k.U.G.1B-1;m.4n[k.1Z]=I},6n:C(){q(k.6D||k.2r)E;k.2r=m.2r;A B=k;k.2r.2p=C(){B.6P()};q(!m.1A(k,\'d5\'))E;A B=k,l=k.x.Z(\'9T\')+\'F\',t=k.y.Z(\'9T\')+\'F\';q(!2P&&k.1i&&k.3q[1]==\'4e\')A 2P=k.1i;q(2P){l=2P.x.Z(\'9v\')+\'F\';t=2P.y.Z(\'9v\')+\'F\';k.2r.G.1B=m.4F++}4a(C(){q(B.2r)m.R(B.2r,{1b:l,Y:t,1B:m.4F++})},2w)},ey:C(){A B=k;A 1N=W.1d(\'1N\');k.S=1N;1N.4N=C(){q(m.16[B.Q])B.69()};q(m.e3)1N.dp=C(){E 1j};1N.1c=\'K-2R\';m.R(1N,{1n:\'1q\',1o:\'3X\',1l:\'2l\',6M:\'4v\',1B:3});1N.24=m.18.9W;q(m.4M&&m.2t<73)m.2b.1X(1N);q(m.2h&&m.dH)1N.1e=I;1N.1e=k.1e;k.6n()},d4:C(){q(!m.1A(k,\'da\'))E;k.S=m.86(k.a);q(!k.S)k.S=m.4J(k.88);q(!k.S)k.S=m.89();k.a2([\'6C\']);q(k.6C){A 19=m.4p(k.S,\'P\',\'K-19\');q(19)19.1X(k.6C);k.6C.G.1o=\'3X\'}m.1A(k,\'fp\');A 1s=k.1s=k.S;q(/(3x|1k)/.11(k.2I))k.91(1s);m.2b.1X(k.U);m.R(k.U,{1l:\'fa\',94:\'0 \'+m.9B+\'F 0 \'+m.4W+\'F\'});k.S=m.1d(\'P\',{1c:\'K-3D\'},{1l:\'4y\',1B:3,N:0,2e:\'1q\'},k.U);k.4c=m.1d(\'P\',I,I,k.S,1);k.4c.1X(1s);m.R(1s,{1l:\'4y\',1o:\'3X\',9S:m.18.97||\'\'});q(k.L)1s.G.L=k.L+\'F\';q(k.N)m.R(1s,{N:k.N+\'F\',2e:\'1q\'});q(1s.1O<k.4s)1s.G.L=k.4s+\'F\';q(k.2I==\'2W\'&&!m.86(k.a)){k.6n();A B=k;A 2W=1J m.7x(k.a,1s);2W.1e=k.1e;2W.3F=C(){q(m.16[B.Q])B.69()};2W.9z=C(){85.21=B.1e};2W.9r()}J q(k.2I==\'1k\'&&k.3U==\'60\'){k.6T()}J k.69()},69:C(){1t{q(!k.S)E;k.S.4N=I;q(k.6D)E;J k.6D=M;A x=k.x,y=k.y;q(k.2r){m.R(k.2r,{Y:\'-4v\'});k.2r=I;m.1A(k,\'cu\')}q(k.2E){x.1a=k.S.L;y.1a=k.S.N;m.R(k.S,{L:x.t+\'F\',N:y.t+\'F\'});k.U.1X(k.S);m.2b.1X(k.U)}J q(k.7Z)k.7Z();x.8a();y.8a();m.R(k.U,{1b:(x.1K+x.3s-x.cb)+\'F\',Y:(y.1K+x.3s-y.cb)+\'F\'});k.a0();k.bB();A 2M=x.1a/y.1a;x.8h();k.2T(x);y.8h();k.2T(y);q(k.2A)k.b4();q(k.1x)k.57(0,1);q(k.5Y){q(k.2E)k.cG(2M);J k.8x();A 1R=k.1p;q(1R&&k.1i&&1R.2X&&1R.aT){A H=1R.cB.1l||\'\',p;O(A 1u 2Y m.8g)O(A i=0;i<5;i++){p=k[1u];q(H.3b(m.8g[1u][i])){p.H=k.1i[1u].H+(k.1i[1u].1G-p.1G)+(k.1i[1u].D-p.D)*[0,0,.5,1,1][i];q(1R.aT==\'f0\'){q(p.H+p.D+p.1G+p.36>p.28+p.4K-p.4S)p.H=p.28+p.4K-p.D-p.3o-p.4S-p.1G-p.36;q(p.H<p.28+p.3o)p.H=p.28+p.3o}}}}q(k.2E&&k.x.1a>(k.x.1V||k.x.D)){k.bs();q(k.1T.V==1)k.57()}}k.a5()}1y(e){k.9o(e)}},91:C(6c,1M){A c=m.4p(6c,\'7J\',\'K-19\');q(/(1k|3x)/.11(k.2I)){q(k.4j)c.G.L=k.4j+\'F\';q(k.4x)c.G.N=k.4x+\'F\'}},6T:C(){q(k.aD)E;A B=k;k.19=m.4p(k.1s,\'7J\',\'K-19\');q(k.2I==\'1k\'){k.6n();A 5o=m.3w.5J(1);k.19.1X(5o);k.eP=k.1s.1O;q(!k.4j)k.4j=5o.1O;A 5b=k.1s.1U-k.19.1U,h=k.4x||m.4g.N-5b-m.4d-m.6L,4N=k.3U==\'60\'?\' 4N="q (m.16[\'+k.Q+\']) m.16[\'+k.Q+\'].69()" \':\'\';k.19.2d+=\'<1k 2Z="m\'+(1J 7K()).79()+\'" eQ="0" Q="\'+k.Q+\'" \'+\' G="L:\'+k.4j+\'F; N:\'+h+\'F" \'+4N+\' 1e="\'+k.1e+\'" ></1k>\';k.5o=k.19.2C(\'P\')[0];k.1k=k.19.2C(\'1k\')[0];q(k.3U==\'6x\')k.8A()}q(k.2I==\'3x\'){k.19.1v=k.19.1v||\'m-fY-1v-\'+k.Q;A a=k.8e;q(!a.29)a.29={};q(1F a.29.aN==\'1L\')a.29.aN=\'fR\';q(9p)9p.fT(k.1e,k.19.1v,k.4j,k.4x,a.g1||\'7\',a.gb,a.aG,a.29,a.aF)}k.aD=M},7Z:C(){q(k.1k&&!k.4x){k.1k.G.N=k.19.G.N=k.8p()+\'F\'}k.1s.1X(m.3w);q(!k.x.1a)k.x.1a=k.1s.1O;k.y.1a=k.1s.1U;k.1s.9q(m.3w);q(m.2h&&k.aL>3H(k.1s.5y.N)){k.aL=3H(k.1s.5y.N)}m.R(k.U,{1l:\'2l\',94:\'0\'});m.R(k.S,{L:k.x.t+\'F\',N:k.y.t+\'F\'})},8p:C(){A h;1t{A 2B=k.5C=k.1k.9O||k.1k.6g.W;A 3w=2B.1d(\'P\');3w.G.aJ=\'bc\';2B.19.1X(3w);h=3w.8O;q(m.2h)h+=3H(2B.19.5y.4d)+3H(2B.19.5y.6L)-1}1y(e){h=de}E h},8A:C(){A 5i=k.1s.1O-k.5o.1O;m.3B(k.5o);q(5i<0)5i=0;A 5b=k.1s.1U-k.1k.1U;q(k.5C&&!k.4x&&!k.N&&k.y.D==k.y.1a)1t{k.5C.19.G.2e=\'1q\'}1y(e){}m.R(k.1k,{L:1h.9Y(k.x.D-5i)+\'F\',N:1h.9Y(k.y.D-5b)+\'F\'});m.R(k.19,{L:k.1k.G.L,N:k.1k.G.N});k.52=k.1k;k.2s=k.52},b4:C(){k.91(k.1s);q(k.2I==\'3x\'&&k.3U==\'60\')k.6T();q(k.x.D<k.x.1a&&!k.6J)k.x.D=k.x.1a;q(k.y.D<k.y.1a&&!k.6X)k.y.D=k.y.1a;k.2s=k.1s;m.R(k.4c,{1l:\'4y\',L:k.x.D+\'F\'});m.R(k.1s,{8H:\'1E\',L:\'1M\',N:\'1M\'});A 1P=m.4p(k.1s,\'7J\',\'K-19\');q(1P&&!/(1k|3x)/.11(k.2I)){A 5f=1P;1P=m.1d(5f.d8,I,{2e:\'1q\'},I,M);5f.23.dG(1P,5f);1P.1X(m.3w);1P.1X(5f);A 5i=k.1s.1O-1P.1O;A 5b=k.1s.1U-1P.1U;1P.9q(m.3w);A 6E=m.4M||4A.av==\'at\'?1:0;m.R(1P,{L:(k.x.D-5i-6E)+\'F\',N:(k.y.D-5b)+\'F\',2e:\'1M\',1l:\'4y\'});q(6E&&5f.1U>1P.1U){1P.G.L=(3H(1P.G.L)+6E)+\'F\'}k.52=1P;k.2s=k.52}q(k.1k&&k.3U==\'60\')k.8A();q(!k.52&&k.y.D<k.4c.1U)k.2s=k.S;q(k.2s==k.S&&!k.6J&&!/(1k|3x)/.11(k.2I)){k.x.D+=17}q(k.2s&&k.2s.1U>k.2s.23.1U){4a("1t { m.16["+k.Q+"].2s.G.2e = \'1M\'; } 1y(e) {}",m.6W)}},b8:C(5v){A c=5v.fC.7G(\',\');O(A i=0;i<c.V;i++)c[i]=3H(c[i]);q(5v.ff.5G()==\'eI\'){k.x.1K+=c[0]-c[2];k.y.1K+=c[1]-c[2];k.x.t=k.y.t=2*c[2]}J{A 5H,5z,5x=5H=c[0],5B=5z=c[1];O(A i=0;i<c.V;i++){q(i%2==0){5x=1h.31(5x,c[i]);5H=1h.4t(5H,c[i])}J{5B=1h.31(5B,c[i]);5z=1h.4t(5z,c[i])}}k.x.1K+=5x;k.x.t=5H-5x;k.y.1K+=5B;k.y.t=5z-5B}},2T:C(p,5u){A 4H,2P=p.2L,1u=p==k.x?\'x\':\'y\';q(2P&&2P.3b(/ /)){4H=2P.7G(\' \');2P=4H[0]}q(2P&&m.$(2P)){p.H=m.6K(m.$(2P))[1u];q(4H&&4H[1]&&4H[1].3b(/^[-]?[0-9]+F$/))p.H+=3H(4H[1]);q(p.D<p.2U)p.D=p.2U}J q(p.2T==\'1M\'||p.2T==\'4X\'){A 8C=1j;A 5s=p.B.5Y;q(p.2T==\'4X\')p.H=1h.3e(p.28+(p.4K+p.3o-p.4S-p.Z(\'2f\'))/2);J p.H=1h.3e(p.H-((p.Z(\'2f\')-p.t)/2));q(p.H<p.28+p.3o){p.H=p.28+p.3o;8C=M}q(!5u&&p.D<p.2U){p.D=p.2U;5s=1j}q(p.H+p.Z(\'2f\')>p.28+p.4K-p.4S){q(!5u&&8C&&5s){p.D=1h.31(p.D,p.Z(1u==\'y\'?\'5e\':\'8D\'))}J q(p.Z(\'2f\')<p.Z(\'5e\')){p.H=p.28+p.4K-p.4S-p.Z(\'2f\')}J{p.H=p.28+p.3o;q(!5u&&5s)p.D=p.Z(1u==\'y\'?\'5e\':\'8D\')}}q(!5u&&p.D<p.2U){p.D=p.2U;5s=1j}}J q(p.2T==\'4t\'){p.H=1h.dm(p.H-p.D+p.t)}q(p.H<p.3o){A cH=p.H;p.H=p.3o;q(5s&&!5u)p.D=p.D-(p.H-cH)}},cG:C(2M){A x=k.x,y=k.y,3T=1j,3f=1h.31(x.1a,x.D),3y=1h.31(y.1a,y.D),3t=(k.3t||m.5S);q(3f/3y>2M){ 3f=3y*2M;q(3f<x.2U){3f=x.2U;3y=3f/2M}3T=M}J q(3f/3y<2M){ 3y=3f/2M;3T=M}q(m.5S&&x.1a<x.2U){x.1V=x.1a;y.D=y.1V=y.1a}J q(k.3t){x.1V=3f;y.1V=3y}J{x.D=3f;y.D=3y}3T=k.8x(k.3t?I:2M,3T);q(3t&&y.D<y.1V){y.1V=y.D;x.1V=y.D*2M}q(3T||3t){x.H=x.1K-x.cb+x.3s;x.2U=x.D;k.2T(x,M);y.H=y.1K-y.cb+y.3s;y.2U=y.D;k.2T(y,M);q(k.1x)k.57()}},8x:C(2M,3T){A x=k.x,y=k.y;q(k.1x&&(k.2E||k.6X)){5g(y.D>k.6k&&x.D>k.4s&&y.Z(\'2f\')>y.Z(\'5e\')){y.D-=10;q(2M)x.D=y.D*2M;k.57(0,1);3T=M}}E 3T},dS:C(){q(k.2s){A h=/1k/i.11(k.2s.3J)?(k.8p()+1)+\'F\':\'1M\';q(k.19)k.19.G.N=h;k.2s.G.N=h;k.y.72(k.1s.1U)}},a5:C(){A x=k.x,y=k.y;k.59(\'1q\');m.1A(k,\'et\');q(k.1p&&k.1p.2D)k.1p.2D.5t();k.9b(1,{U:{L:x.Z(\'2f\'),N:y.Z(\'2f\'),1b:x.H,Y:y.H},S:{1b:x.1G+x.Z(\'2K\'),Y:y.1G+y.Z(\'2K\'),L:x.1V||x.D,N:y.1V||y.D}},m.6W)},9b:C(1I,2i,4i){A 5M=k.3q,8o=1I?(k.1i?k.1i.a:I):m.2q,t=(5M[1]&&8o&&m.43(8o,\'3q\')[1]==5M[1])?5M[1]:5M[0];q(k[t]&&t!=\'2F\'){k[t](1I,2i);E}q(k.1g&&!k.3Y){q(1I)k.1g.4C();J k.1g.5U((k.2A&&k.4D))}q(!1I)k.78();A B=k,x=B.x,y=B.y,2Q=k.2Q;q(!1I)2Q=k.cF||2Q;A 6x=1I?C(){q(B.1g)B.1g.2g.G.1n="1Y";4a(C(){B.6I()},50)}:C(){B.5D()};q(1I)m.R(k.U,{L:x.t+\'F\',N:y.t+\'F\'});q(1I&&k.2A){m.R(k.U,{1b:(x.1K-x.cb+x.3s)+\'F\',Y:(y.1K-y.cb+y.3s)+\'F\'})}q(k.cD){m.R(k.U,{1z:1I?0:1});m.3A(2i.U,{1z:1I})}m.2z(k.U,2i.U,{4h:4i,2Q:2Q,3P:C(3j,2H){q(B.1g&&B.3Y&&2H.1f==\'Y\'){A 5W=1I?2H.H:1-2H.H;A H={w:x.t+(x.Z(\'2f\')-x.t)*5W,h:y.t+(y.Z(\'2f\')-y.t)*5W,x:x.1K+(x.H-x.1K)*5W,y:y.1K+(y.H-y.1K)*5W};B.1g.4C(H,0,1)}q(B.2A){q(2H.1f==\'1b\')B.4c.G.1b=(x.H-3j)+\'F\';q(2H.1f==\'Y\')B.4c.G.Y=(y.H-3j)+\'F\'}}});m.2z(k.S,2i.S,4i,2Q,6x);q(1I){k.U.G.1n=\'1Y\';k.S.G.1n=\'1Y\';q(k.2A)k.1s.G.1n=\'1Y\';k.a.1c+=\' K-4I-46\'}},6w:C(1I,2i){k.3Y=1j;A B=k,t=1I?m.6W:0;q(1I){m.2z(k.U,2i.U,0);m.R(k.U,{1z:0,1n:\'1Y\'});m.2z(k.S,2i.S,0);k.S.G.1n=\'1Y\';m.2z(k.U,{1z:1},t,I,C(){B.6I()})}q(k.1g){k.1g.2g.G.1B=k.U.G.1B;A 6Z=1I||-1,1w=k.1g.1w,8r=1I?3:1w,8q=1I?1w:3;O(A i=8r;6Z*i<=6Z*8q;i+=6Z,t+=25){(C(){A o=1I?8q-i:8r-i;4a(C(){B.1g.4C(0,o,1)},t)})()}}q(1I){}J{4a(C(){q(B.1g)B.1g.5U(B.4D);B.78();m.2z(B.U,{1z:0},m.9A,I,C(){B.5D()})},t)}},4e:C(1I,2i,8u){q(!1I)E;A B=k,1i=k.1i,x=k.x,y=k.y,3n=1i.x,3g=1i.y,U=k.U,S=k.S,1x=k.1x;m.4z(W,\'7D\',m.6H);m.R(S,{L:(x.1V||x.D)+\'F\',N:(y.1V||y.D)+\'F\'});q(1x)1x.G.2e=\'1Y\';k.1g=1i.1g;q(k.1g)k.1g.B=B;1i.1g=I;A 5l=m.1d(\'P\',{1c:\'K-\'+k.35},{1l:\'2l\',1B:4,2e:\'1q\',1o:\'1E\'});A 8t={cN:1i,cM:k};O(A n 2Y 8t){k[n]=8t[n].S.5J(1);m.R(k[n],{1l:\'2l\',8H:0,1n:\'1Y\'});5l.1X(k[n])}U.1X(5l);q(k.2A)m.R(k.4c,{1b:0,Y:0});q(1x){1x.1c=\'\';U.1X(1x)}5l.G.1o=\'\';1i.S.G.1o=\'1E\';q(m.4M&&m.2t<73){k.U.G.1n=\'1Y\'}m.2z(U,{L:x.D},{4h:m.cE,3P:C(3j,2H){A H=2H.H,4B=1-H;A 1f,D={},93=[\'H\',\'D\',\'1G\',\'36\'];O(A n 2Y 93){1f=93[n];D[\'x\'+1f]=1h.3e(4B*3n[1f]+H*x[1f]);D[\'y\'+1f]=1h.3e(4B*3g[1f]+H*y[1f]);D.cI=1h.3e(4B*(3n.1V||3n.D)+H*(x.1V||x.D));D.6S=1h.3e(4B*3n.Z(\'2K\')+H*x.Z(\'2K\'));D.cJ=1h.3e(4B*(3g.1V||3g.D)+H*(y.1V||y.D));D.6V=1h.3e(4B*3g.Z(\'2K\')+H*y.Z(\'2K\'))}q(B.1g)B.1g.4C({x:D.3h,y:D.3r,w:D.5L+D.44+D.8U+2*x.cb,h:D.5K+D.45+D.8T+2*y.cb});1i.U.G.d7=\'d6(\'+(D.3r-3g.H)+\'F, \'+(D.5L+D.44+D.8U+D.3h+2*3n.cb-3n.H)+\'F, \'+(D.5K+D.45+D.8T+D.3r+2*3g.cb-3g.H)+\'F, \'+(D.3h-3n.H)+\'F)\';m.R(S,{Y:(D.45+y.Z(\'2K\'))+\'F\',1b:(D.44+x.Z(\'2K\'))+\'F\',4d:(y.H-D.3r)+\'F\',4W:(x.H-D.3h)+\'F\'});m.R(U,{Y:D.3r+\'F\',1b:D.3h+\'F\',L:(D.44+D.8U+D.5L+2*x.cb)+\'F\',N:(D.45+D.8T+D.5K+2*y.cb)+\'F\'});m.R(5l,{L:(D.cI||D.5L)+\'F\',N:(D.cJ||D.5K)+\'F\',1b:(D.44+D.6S)+\'F\',Y:(D.45+D.6V)+\'F\',1n:\'1Y\'});m.R(B.cN,{Y:(3g.H-D.3r+3g.1G-D.45+3g.Z(\'2K\')-D.6V)+\'F\',1b:(3n.H-D.3h+3n.1G-D.44+3n.Z(\'2K\')-D.6S)+\'F\'});m.R(B.cM,{1z:H,Y:(y.H-D.3r+y.1G-D.45+y.Z(\'2K\')-D.6V)+\'F\',1b:(x.H-D.3h+x.1G-D.44+x.Z(\'2K\')-D.6S)+\'F\'});q(1x)m.R(1x,{L:D.5L+\'F\',N:D.5K+\'F\',1b:(D.44+x.cb)+\'F\',Y:(D.45+y.cb)+\'F\'})},76:C(){U.G.1n=S.G.1n=\'1Y\';S.G.1o=\'3X\';m.3B(5l);B.6I();1i.5D();B.1i=I}})},bQ:C(o,el){q(!k.1i)E 1j;O(A i=0;i<k.1i.1T.V;i++){A 6G=m.$(\'22\'+k.1i.1T[i]);q(6G&&6G.22==o.22){k.9V();6G.cS=k.Q;m.2o(k.1T,k.1i.1T[i]);E M}}E 1j},6I:C(){k.55=M;k.3M();q(k.2A&&k.3U==\'6x\')k.6T();q(k.1k){1t{A B=k,2B=k.1k.9O||k.1k.6g.W;m.2j(2B,\'8y\',C(){q(m.3d!=B.Q)B.3M()})}1y(e){}q(m.2h&&1F k.62!=\'cW\')k.1k.G.L=(k.4j-1)+\'F\'}q(k.4b)m.1u(k);q(m.2q&&m.2q==k.a)m.2q=I;k.cL();A p=m.4g,8Q=m.7B.x+p.5O,8P=m.7B.y+p.5R;k.9C=k.x.H<8Q&&8Q<k.x.H+k.x.Z(\'2f\')&&k.y.H<8P&&8P<k.y.H+k.y.Z(\'2f\');q(k.1x)k.bn();m.1A(k,\'d1\')},cL:C(){A Q=k.Q;A 1Z=k.1Z;1J m.6r(1Z,C(){1t{m.16[Q].cP()}1y(e){}})},cP:C(){A 1D=k.7V(1);q(1D&&1D.2p.cC().3b(/m\\.2F/))A 1N=m.1d(\'1N\',{1e:m.7s(1D)})},7V:C(2n){A 7U=k.7v(),as=m.4U.3i[k.2N||\'1E\'];q(as&&!as[7U+2n]&&k.1p&&k.1p.cm){q(2n==1)E as[0];J q(2n==-1)E as[as.V-1]}E(as&&as[7U+2n])||I},7v:C(){A 2a=m.6p().3i[k.2N||\'1E\'];q(2a)O(A i=0;i<2a.V;i++){q(2a[i]==k.a)E i}E I},bq:C(){q(k[k.6l]){A 2a=m.4U.3i[k.2N||\'1E\'];q(2a){A s=m.18.3G.2k(\'%1\',k.7v()+1).2k(\'%2\',2a.V);k[k.6l].2d=\'<P 1W="K-3G">\'+s+\'</P>\'+k[k.6l].2d}}},a0:C(){q(!k.1i){O(A i=0;i<m.6u.V;i++){A 1R=m.6u[i],3c=1R.2N;q(1F 3c==\'1L\'||3c===I||3c===k.2N)k.1p=1J m.83(k.Q,1R)}}J{k.1p=k.1i.1p}A 1R=k.1p;q(!1R)E;A Q=1R.4k=k.Q;1R.ch();1R.5d(\'1a-2F\');q(1R.2X){k.4O(m.3A(1R.cB||{},{4P:1R.2X,22:\'2X\',1B:5}))}q(1R.2D)1R.2D.7p(k);q(!k.1i&&k.42)1R.3L(M);q(1R.42){1R.42=4a(C(){m.1D(Q)},(1R.fH||fs))}},6P:C(){m.3B(k.U);m.16[k.Q]=I;q(m.2q==k.a)m.2q=I;m.9x(k.Q);q(k.2r)m.2r.G.1b=\'-4v\';m.1A(k,\'cu\')},bp:C(){q(k.67)E;k.67=m.1d(\'a\',{21:m.ct,2L:m.cs,1c:\'K-67\',2d:m.18.cq,24:m.18.cr});k.4O({4P:k.67,1l:k.cv||\'Y 1b\',22:\'67\'})},a2:C(8f,cy){O(A i=0;i<8f.V;i++){A T=8f[i],s=I;q(T==\'9X\'&&!m.1A(k,\'eH\'))E;J q(T==\'58\'&&!m.1A(k,\'eG\'))E;q(!k[T+\'5p\']&&k.6Q)k[T+\'5p\']=T+\'-O-\'+k.6Q;q(k[T+\'5p\'])k[T]=m.4J(k[T+\'5p\']);q(!k[T]&&!k[T+\'8j\']&&k[T+\'cw\'])1t{s=fh(k[T+\'cw\'])}1y(e){}q(!k[T]&&k[T+\'8j\']){s=k[T+\'8j\']}q(!k[T]&&!s){k[T]=m.4J(k.a[\'cA\'+T+\'5p\']);q(!k[T]){A 1D=k.a.cz;5g(1D&&!m.77(1D)){q((1J 4Y(\'K-\'+T)).11(1D.1c||I)){q(!1D.1v)k.a[\'cA\'+T+\'5p\']=1D.1v=\'22\'+m.61++;k[T]=m.4J(1D.1v);5m}1D=1D.cz}}}q(!k[T]&&!s&&k.6l==T)s=\'\\n\';q(!k[T]&&s)k[T]=m.1d(\'P\',{1c:\'K-\'+T,2d:s});q(cy&&k[T]){A o={1l:(T==\'58\')?\'5N\':\'7E\'};O(A x 2Y k[T+\'cx\'])o[x]=k[T+\'cx\'][x];o.4P=k[T];k.4O(o)}}},59:C(1n){q(m.cO)k.6B(\'fk\',1n);q(m.cQ)k.6B(\'dd\',1n);q(m.6y)k.6B(\'*\',1n)},6B:C(3J,1n){A 1m=W.2C(3J);A 1f=3J==\'*\'?\'2e\':\'1n\';O(A i=0;i<1m.V;i++){q(1f==\'1n\'||(W.8L.cK(1m[i],"").co(\'2e\')==\'1M\'||1m[i].bH(\'1q-by\')!=I)){A 2S=1m[i].bH(\'1q-by\');q(1n==\'1Y\'&&2S){2S=2S.2k(\'[\'+k.Q+\']\',\'\');1m[i].5F(\'1q-by\',2S);q(!2S)1m[i].G[1f]=1m[i].9N}J q(1n==\'1q\'){A 3N=m.6K(1m[i]);3N.w=1m[i].1O;3N.h=1m[i].1U;q(!k.4b){A bl=(3N.x+3N.w<k.x.Z(\'6e\')||3N.x>k.x.Z(\'6e\')+k.x.Z(\'9R\'));A bG=(3N.y+3N.h<k.y.Z(\'6e\')||3N.y>k.y.Z(\'6e\')+k.y.Z(\'9R\'))}A 6F=m.9U(1m[i]);q(!bl&&!bG&&6F!=k.Q){q(!2S){1m[i].5F(\'1q-by\',\'[\'+k.Q+\']\');1m[i].9N=1m[i].G[1f];1m[i].G[1f]=\'1q\'}J q(2S.bF(\'[\'+k.Q+\']\')==-1){1m[i].5F(\'1q-by\',2S+\'[\'+k.Q+\']\')}}J q((2S==\'[\'+k.Q+\']\'||m.3d==6F)&&6F!=k.Q){1m[i].5F(\'1q-by\',\'\');1m[i].G[1f]=1m[i].9N||\'\'}J q(2S&&2S.bF(\'[\'+k.Q+\']\')>-1){1m[i].5F(\'1q-by\',2S.2k(\'[\'+k.Q+\']\',\'\'))}}}}},3M:C(){k.U.G.1B=m.4F+=2;O(A i=0;i<m.16.V;i++){q(m.16[i]&&i==m.3d){A 4r=m.16[i];4r.S.1c+=\' K-\'+4r.35+\'-9J\';q(4r.2E){4r.S.G.4L=m.3Z?\'bE\':\'7Q\';4r.S.24=m.18.bD}m.1A(4r,\'eW\')}}q(k.1g)k.1g.2g.G.1B=k.U.G.1B-1;k.S.1c=\'K-\'+k.35;q(k.2E){k.S.24=m.18.9W;q(m.6h){m.54=1S.3z?\'7Q\':\'7T(\'+m.5c+m.6h+\'), 7Q\';q(m.3Z&&m.2t<6)m.54=\'bE\';k.S.G.4L=m.54}}m.3d=k.Q;m.2j(W,1S.3z?\'6U\':\'71\',m.68);m.1A(k,\'fd\')},9m:C(x,y){k.x.aa(x);k.y.aa(y)},3O:C(e){A w,h,r=e.L/e.N;w=1h.4t(e.L+e.dX,1h.31(k.4s,k.x.1a));q(k.2E&&1h.9Y(w-k.x.1a)<12)w=k.x.1a;h=k.2A?e.N+e.dY:w/r;q(h<1h.31(k.6k,k.y.1a)){h=1h.31(k.6k,k.y.1a);q(k.2E)w=h*r}k.9h(w,h)},9h:C(w,h){k.y.72(h);k.x.72(w);k.U.G.N=k.y.Z(\'2f\')+\'F\'},26:C(){q(k.62||!k.55)E;q(k.3q[1]==\'4e\'&&m.2q){m.2G(m.2q).6P();m.2q=I}q(!m.1A(k,\'eV\'))E;k.62=M;q(k.1p&&!m.2q)k.1p.3p();m.4z(W,1S.3z?\'6U\':\'71\',m.68);1t{q(k.2A)k.bJ();k.S.G.4L=\'fj\';k.9b(0,{U:{L:k.x.t,N:k.y.t,1b:k.x.1K-k.x.cb+k.x.3s,Y:k.y.1K-k.y.cb+k.y.3s},S:{1b:0,Y:0,L:k.x.t,N:k.y.t}},m.9A)}1y(e){k.5D()}},bJ:C(){q(m.6y){q(!m.6s)m.6s=m.1d(\'P\',I,{1l:\'2l\'},m.2b);m.R(m.6s,{L:k.x.D+\'F\',N:k.y.D+\'F\',1b:k.x.H+\'F\',Y:k.y.H+\'F\',1o:\'3X\'})}q(k.2I==\'3x\')1t{m.$(k.19.1v).f9()}1y(e){}q(k.3U==\'6x\'&&!k.4D)k.bK();q(k.2s&&k.2s!=k.52)k.2s.G.2e=\'1q\'},bK:C(){q(m.2h&&k.1k)1t{k.1k.6g.W.19.2d=\'\'}1y(e){}q(k.2I==\'3x\')9p.fb(k.19.1v);k.19.2d=\'\'},bx:C(){q(k.1g)k.1g.2g.G.1o=\'1E\';k.3W=I;k.U.G.1o=\'1E\';k.55=1j;m.2o(m.4R,k)},bP:C(){1t{m.16[k.Q]=k;q(!m.9l&&m.3d!=k.Q){1t{m.16[m.3d].26()}1y(e){}}A z=m.4F++,5X={1o:\'\',1B:z};m.R(k.U,5X);k.62=1j;A o=k.1g||0;q(o){q(!k.3Y)5X.1n=\'1q\';m.R(o.2g,5X)}q(k.1p){k.a0()}k.a5()}1y(e){}},4O:C(o){A el=o.4P,53=(o.bO==\'2x\'&&!/7M$/.11(o.1l));q(1F el==\'a8\')el=m.4J(el);q(o.3D)el=m.1d(\'P\',{2d:o.3D});q(!el||1F el==\'a8\')E;q(!m.1A(k,\'f7\',{14:el}))E;el.G.1o=\'3X\';o.22=o.22||o.4P;q(k.3q[1]==\'4e\'&&k.bQ(o,el))E;k.9V();A L=o.L&&/^[0-9]+(F|%)$/.11(o.L)?o.L:\'1M\';q(/^(1b|3m)7M$/.11(o.1l)&&!/^[0-9]+F$/.11(o.L))L=\'f2\';A 14=m.1d(\'P\',{1v:\'22\'+m.61++,22:o.22},{1l:\'2l\',1n:\'1q\',L:L,9S:m.18.97||\'\',1z:0},53?m.2x:k.1x,M);q(53)14.6R=k.Q;14.1X(el);m.3A(14,{1z:1,bN:0,bL:0,4i:(o.6w===0||o.6w===1j||(o.6w==2&&m.2h))?0:5Z});m.3A(14,o);q(k.bo){k.5V(14);q(!14.7d||k.9C)m.2z(14,{1z:14.1z},14.4i)}m.2o(k.1T,m.61-1)},5V:C(14){A p=14.1l||\'9a 4X\',53=(14.bO==\'2x\'),74=14.bN,6O=14.bL;q(53){m.2x.G.1o=\'3X\';14.6R=k.Q;q(14.1O>14.23.1O)14.G.L=\'2w%\'}J q(14.23!=k.1x)k.1x.1X(14);q(/1b$/.11(p))14.G.1b=74+\'F\';q(/4X$/.11(p))m.R(14,{1b:\'50%\',4W:(74-1h.3e(14.1O/2))+\'F\'});q(/3m$/.11(p))14.G.3m=-74+\'F\';q(/^bM$/.11(p)){m.R(14,{3m:\'2w%\',9B:k.x.cb+\'F\',Y:-k.y.cb+\'F\',4Q:-k.y.cb+\'F\',2e:\'1M\'});k.x.1G=14.1O}J q(/^bC$/.11(p)){m.R(14,{1b:\'2w%\',4W:k.x.cb+\'F\',Y:-k.y.cb+\'F\',4Q:-k.y.cb+\'F\',2e:\'1M\'});k.x.36=14.1O}A 9d=14.23.1U;14.G.N=\'1M\';q(53&&14.1U>9d)14.G.N=m.3Z?9d+\'F\':\'2w%\';q(/^Y/.11(p))14.G.Y=6O+\'F\';q(/^9a/.11(p))m.R(14,{Y:\'50%\',4d:(6O-1h.3e(14.1U/2))+\'F\'});q(/^4Q/.11(p))14.G.4Q=-6O+\'F\';q(/^5N$/.11(p)){m.R(14,{1b:(-k.x.1G-k.x.cb)+\'F\',3m:(-k.x.36-k.x.cb)+\'F\',4Q:\'2w%\',6L:k.y.cb+\'F\',L:\'1M\'});k.y.1G=14.1U}J q(/^7E$/.11(p)){m.R(14,{1l:\'4y\',1b:(-k.x.1G-k.x.cb)+\'F\',3m:(-k.x.36-k.x.cb)+\'F\',Y:\'2w%\',4d:k.y.cb+\'F\',L:\'1M\'});k.y.36=14.1U;14.G.1l=\'2l\'}},bB:C(){k.a2([\'58\',\'9X\'],M);k.bq();q(k.9X)m.1A(k,\'eE\');q(k.58)m.1A(k,\'eF\');q(k.58&&k.a7)k.58.1c+=\' K-3u\';q(m.br)k.bp();O(A i=0;i<m.1T.V;i++){A o=m.1T[i],6N=o.9P,3c=o.2N;q((!6N&&!3c)||(6N&&6N==k.6Q)||(3c&&3c===k.2N)){q(k.2E||(k.2A&&o.eO))k.4O(o)}}A 7I=[];O(A i=0;i<k.1T.V;i++){A o=m.$(\'22\'+k.1T[i]);q(/7M$/.11(o.1l))k.5V(o);J m.2o(7I,o)}O(A i=0;i<7I.V;i++)k.5V(7I[i]);k.bo=M},9V:C(){q(!k.1x)k.1x=m.1d(\'P\',{1c:k.a9},{1l:\'2l\',L:(k.x.D||(k.3t?k.L:I)||k.x.1a)+\'F\',N:(k.y.D||k.y.1a)+\'F\',1n:\'1q\',2e:\'1q\',1B:m.2h?4:\'1M\'},m.2b,M)},57:C(98,bm){A 1x=k.1x,x=k.x,y=k.y;m.R(1x,{L:x.D+\'F\',N:y.D+\'F\'});q(98||bm){O(A i=0;i<k.1T.V;i++){A o=m.$(\'22\'+k.1T[i]);A 9E=(m.3Z||W.7a==\'8v\');q(o&&/^(5N|7E)$/.11(o.1l)){q(9E){o.G.L=(1x.1O+2*x.cb+x.1G+x.36)+\'F\'}y[o.1l==\'5N\'?\'1G\':\'36\']=o.1U}q(o&&9E&&/^(1b|3m)7M$/.11(o.1l)){o.G.N=(1x.1U+2*y.cb)+\'F\'}}}q(98){m.R(k.S,{Y:y.1G+\'F\'});m.R(1x,{Y:(y.1G+y.cb)+\'F\'})}},bn:C(){A b=k.1x;b.1c=\'\';m.R(b,{Y:(k.y.1G+k.y.cb)+\'F\',1b:(k.x.1G+k.x.cb)+\'F\',2e:\'1Y\'});q(m.4M)b.G.1n=\'1Y\';k.U.1X(b);O(A i=0;i<k.1T.V;i++){A o=m.$(\'22\'+k.1T[i]);o.G.1B=o.1B||4;q(!o.7d||k.9C){o.G.1n=\'1Y\';m.R(o,{1n:\'1Y\',1o:\'\'});m.2z(o,{1z:o.1z},o.4i)}}},78:C(){q(!k.1T.V)E;q(k.1p){A c=k.1p.2X;q(c&&m.2G(c)==k)c.23.9q(c)}O(A i=0;i<k.1T.V;i++){A o=m.$(\'22\'+k.1T[i]);q(o&&o.23==m.2x&&m.2G(o)==k)m.3B(o)}q(k.2A&&k.4D){k.1x.G.Y=\'-4v\';m.2b.1X(k.1x)}J m.3B(k.1x)},bs:C(){q(k.1p&&k.1p.2X){k.1p.4u(\'1a-2F\');E}k.7u=m.1d(\'a\',{21:\'bt:m.16[\'+k.Q+\'].7r();\',24:m.18.9Z,1c:\'K-1a-2F\'});q(!m.1A(k,\'fq\'))E;k.4O({4P:k.7u,1l:m.bz,7d:M,1z:m.bA})},7r:C(){1t{q(!m.1A(k,\'fZ\'))E;q(k.7u)m.3B(k.7u);k.3M();A 3f=k.x.D,3y=k.y.D;k.9h(k.x.1a,k.y.1a);A 3h=k.x.H-(k.x.D-3f)/2;q(3h<m.4W)3h=m.4W;A 3r=k.y.H-(k.y.D-3y)/2;q(3r<m.4d)3r=m.4d;k.9m(3h,3r);k.59(\'1q\')}1y(e){k.9o(e)}},5D:C(){k.a.1c=k.a.1c.2k(\'K-4I-46\',\'\');k.59(\'1Y\');q(k.2A&&k.4D&&k.3q[1]!=\'4e\'){k.bx()}J{q(k.1g&&k.3Y)k.1g.5U();m.3B(k.U)}q(m.6s)m.6s.G.1o=\'1E\';k.78();q(!m.2x.7L.V)m.2x.G.1o=\'1E\';q(k.4b)m.9x(k.Q);m.1A(k,\'fW\');m.16[k.Q]=I;m.bw()}};m.7x=C(a,S,7t){k.a=a;k.S=S;k.7t=7t};m.7x.5w={9r:C(){A 2V;q(!k.1e)k.1e=m.7s(k.a);q(k.1e.3b(\'#\')){A 2a=k.1e.7G(\'#\');k.1e=2a[0];k.1v=2a[1]}q(m.7k[k.1e]){k.cd=m.7k[k.1e];q(k.1v)k.a3();J k.6f();E}1t{2V=1J cp()}1y(e){1t{2V=1J bu("fS.bR")}1y(e){1t{2V=1J bu("bv.bR")}1y(e){k.9z()}}}A 3v=k;2V.gc=C(){q(3v.2V.bS==4){q(3v.1v)3v.a3();J 3v.6f()}};A 1e=k.1e;k.2V=2V;q(m.g3)1e=1e.2k(/$/,(/\\?/.11(1e)?\'&\':\'?\')+\'g6=\'+(1J 7K()).79());2V.ca(\'fQ\',1e,M);2V.ce(\'X-fA-fB\',\'cp\');2V.ce(\'fu-fv\',\'fL/x-fO-9j-fJ\');2V.fF(I)},a3:C(){m.7m();A 4l=1S.3z||m.cf?{1e:\'fI:eC\'}:I;k.1k=m.1d(\'1k\',4l,{1l:\'2l\',Y:\'-4v\'},m.2b);k.6f()},6f:C(){A s=k.cd||k.2V.dn,7H;q(k.7t)m.7k[k.1e]=s;q(!m.2h||m.2t>=5.5){s=s.2k(1J 4Y(\'<di[^>]*>\',\'c9\'),\'\').2k(1J 4Y(\'<cc[^>]*>.*?</cc>\',\'c9\'),\'\');q(k.1k){A 2B=k.1k.9O;q(!2B&&k.1k.6g)2B=k.1k.6g.W;q(!2B){A 3v=k;4a(C(){3v.6f()},25);E}2B.ca();2B.dg(s);2B.26();1t{s=2B.9Q(k.1v).2d}1y(e){1t{s=k.1k.W.9Q(k.1v).2d}1y(e){}}m.3B(k.1k)}J{7H=/(<19[^>]*>|<\\/19>)/db;q(7H.11(s))s=s.7G(7H)[m.3R?1:2]}}m.4p(k.S,\'7J\',\'K-19\').2d=s;k.3F();O(A x 2Y k)k[x]=I}};m.83=C(4k,1r){q(m.cX!==1j)m.95();k.4k=4k;O(A x 2Y 1r)k[x]=1r[x];q(k.cZ)k.cg();q(k.2D)k.2D=m.ci(k)};m.83.5w={cg:C(){k.2X=m.1d(\'P\',{2d:m.8b(m.8i.2X)},I,m.2b);A 6j=[\'3L\',\'3p\',\'3a\',\'1D\',\'3u\',\'1a-2F\',\'26\'];k.1Q={};A 3v=k;O(A i=0;i<6j.V;i++){k.1Q[6j[i]]=m.4p(k.2X,\'1H\',\'K-\'+6j[i]);k.4u(6j[i])}k.1Q.3p.G.1o=\'1E\'},ch:C(){q(k.cm||!k.2X)E;A B=m.16[k.4k],5q=B.7v(),2m=/7w$/;q(5q==0)k.5d(\'3a\');J q(2m.11(k.1Q.3a.2C(\'a\')[0].1c))k.4u(\'3a\');q(5q+1==m.4U.3i[B.2N||\'1E\'].V){k.5d(\'1D\');k.5d(\'3L\')}J q(2m.11(k.1Q.1D.2C(\'a\')[0].1c)){k.4u(\'1D\');k.4u(\'3L\')}},4u:C(1Q){q(!k.1Q)E;A cn=k,a=k.1Q[1Q].2C(\'a\')[0],2m=/7w$/;a.2p=C(){cn[1Q]();E 1j};q(2m.11(a.1c))a.1c=a.1c.2k(2m,\'\')},5d:C(1Q){q(!k.1Q)E;A a=k.1Q[1Q].2C(\'a\')[0];a.2p=C(){E 1j};q(!/7w$/.11(a.1c))a.1c+=\' 7w\'},cl:C(){q(k.42)k.3p();J k.3L()},3L:C(ck){q(k.1Q){k.1Q.3L.G.1o=\'1E\';k.1Q.3p.G.1o=\'\'}k.42=M;q(!ck)m.1D(k.4k)},3p:C(){q(k.1Q){k.1Q.3p.G.1o=\'1E\';k.1Q.3L.G.1o=\'\'}d9(k.42);k.42=I},3a:C(){k.3p();m.3a(k.1Q.3a)},1D:C(){k.3p();m.1D(k.1Q.1D)},3u:C(){},\'1a-2F\':C(){m.2G().7r()},26:C(){m.26(k.1Q.26)}};m.ci=C(1p){C 7p(B){m.3A(1r||{},{4P:4E,22:\'2D\',1c:\'K-2D-\'+5k+\'-14 \'+(1r.1c||\'\')});q(m.3Z)1r.6w=0;B.4O(1r);m.R(4E.23,{2e:\'1q\'})};C 28(3K){5t(1L,1h.3e(3K*4E[3S?\'1O\':\'1U\']*0.7))};C 5t(i,80){q(i===1L)O(A j=0;j<5I.V;j++){q(5I[j]==m.16[1p.4k].a){i=j;5m}}q(i===1L)E;A as=4E.2C(\'a\'),4I=as[i],48=4I.23,1b=3S?\'cj\':\'c8\',3m=3S?\'c7\':\'bX\',L=3S?\'bY\':\'bW\',4V=\'1w\'+1b,1O=\'1w\'+L,7e=P.23.23[1O],5j=7e-2g[1O],6o=3H(2g.G[3S?\'1b\':\'Y\'])||0,2O=6o,ej=20;q(80!==1L){2O=6o-80;q(5j>0)5j=0;q(2O>0)2O=0;q(2O<5j)2O=5j}J{O(A j=0;j<as.V;j++)as[j].1c=\'\';4I.1c=\'K-4I-46\';A 7X=i>0?as[i-1].23[4V]:48[4V],7Y=48[4V]+48[1O]+(as[i+1]?as[i+1].23[1O]:0);q(7Y>7e-6o)2O=7e-7Y;J q(7X<-6o)2O=-7X}A 8R=48[4V]+(48[1O]-7f[1O])/2+2O;m.2z(2g,3S?{1b:2O}:{Y:2O},I,\'8S\');m.2z(7f,3S?{1b:8R}:{Y:8R},I,\'8S\');8l.G.1o=2O<0?\'3X\':\'1E\';8M.G.1o=(2O>5j)?\'3X\':\'1E\'};A 5I=m.4U.3i[m.16[1p.4k].2N||\'1E\'],1r=1p.2D,5k=1r.5k||\'bV\',8K=(5k==\'en\'),4f=8K?[\'P\',\'6t\',\'1H\',\'1C\']:[\'2g\',\'4G\',\'47\',\'2J\'],3S=(5k==\'bV\'),4E=m.1d(\'P\',{1c:\'K-2D K-2D-\'+5k,2d:\'<P 1W="K-2D-eg">\'+\'<\'+4f[0]+\'><\'+4f[1]+\'></\'+4f[1]+\'></\'+4f[0]+\'></P>\'+\'<P 1W="K-28-1I"><P></P></P>\'+\'<P 1W="K-28-ee"><P></P></P>\'+\'<P 1W="K-7f"><P></P></P>\'},{1o:\'1E\'},m.2b),5E=4E.7L,P=5E[0],8l=5E[1],8M=5E[2],7f=5E[3],2g=P.ef,4G=4E.2C(4f[1])[0],47;O(A i=0;i<5I.V;i++){q(i==0||!3S)47=m.1d(4f[2],I,I,4G);(C(){A a=5I[i],48=m.1d(4f[3],I,I,47),ex=i;m.1d(\'a\',{21:a.21,24:a.24,2p:C(){q(/K-4I-46/.11(k.1c))E 1j;m.2G(k).3M();E m.8N(a)},2d:m.bT?m.bT(a):a.2d},I,48)})()}q(!8K){8l.2p=C(){28(-1)};8M.2p=C(){28(1)};m.2j(4G,W.eA!==1L?\'er\':\'eq\',C(e){A 3K=0;e=e||1S.2u;q(e.bU){3K=e.bU/dR;q(m.3z)3K=-3K}J q(e.bZ){3K=-e.bZ/3}q(3K)28(-3K*0.2);q(e.5n)e.5n();e.c0=1j})}E{7p:7p,5t:5t}};m.7o=m.18;A e8=m.5A;q(m.2h&&1S==1S.Y){(C(){1t{W.5h.e4(\'1b\')}1y(e){4a(c5.dZ,50);E}m.41()})()}m.2j(W,\'dW\',m.41);m.2j(1S,\'8B\',m.41);m.2j(W,\'41\',C(){q(m.7R||m.4b){A G=m.1d(\'G\',{T:\'e0/8I\'},I,W.2C(\'e1\')[0]),8E=W.7a==\'8v\';C 5P(8m,8n){q(m.2h&&(m.2t<9||8E)){A 1i=W.c6[W.c6.V-1];q(1F(1i.5P)=="7j")1i.5P(8m,8n)}J{G.1X(W.e6(8m+" {"+8n+"}"))}}C 5T(1f){E\'e5( ( ( ez = W.5h.\'+1f+\' ? W.5h.\'+1f+\' : W.19.\'+1f+\' ) ) + \\\'F\\\' );\'}q(m.7R)5P(\'.K 1N\',\'4L: 7T(\'+m.5c+m.7R+\'), 7Q !dA;\');5P(\'.K-2x-D\',m.2h&&(m.2t<7||8E)?\'1l: 2l; \'+\'1b:\'+5T(\'5O\')+\'Y:\'+5T(\'5R\')+\'L:\'+5T(\'8F\')+\'N:\'+5T(\'c4\'):\'1l: fV; L: 2w%; N: 2w%; 1b: 0; Y: 0\')}});m.2j(1S,\'3O\',C(){m.7S();q(m.2x)O(A i=0;i<m.2x.7L.V;i++){A 1P=m.2x.7L[i],B=m.2G(1P);B.5V(1P);q(1P.22==\'2D\')B.1p.2D.5t()}});m.2j(W,\'7D\',C(e){m.7B={x:e.7A,y:e.7F}});m.2j(W,\'8y\',m.8z);m.2j(W,\'c3\',m.8z);m.2j(W,\'41\',m.c1);m.2j(1S,\'8B\',m.c2);m.2j(1S,\'8B\',m.bI)}',62,1006,'||||||||||||||||||||this||hs||||if||||||||||var|exp|function|size|return|px|style|pos|null|else|highslide|width|true|height|for|div|key|setStyles|content|type|wrapper|length|document||top|get||test|||overlay||expanders||lang|body|full|left|className|createElement|src|prop|outline|Math|last|false|iframe|position|els|visibility|display|slideshow|hidden|options|innerContent|try|dim|id|offset|overlayBox|catch|opacity|fireEvent|zIndex|span|next|none|typeof|p1|li|up|new|tpos|undefined|auto|img|offsetWidth|node|btn|ss|window|overlays|offsetHeight|imgSize|class|appendChild|visible|outlineType||href|hsId|parentNode|title||close||scroll|params|arr|container|case|innerHTML|overflow|wsize|table|ie|to|addEventListener|replace|absolute|re|op|push|onclick|upcoming|loading|scrollerDiv|uaVersion|event|dimmer|100|viewport|dragArgs|animate|isHtml|doc|getElementsByTagName|thumbstrip|isImage|expand|getExpander|args|objectType|td|imgPad|target|ratio|slideshowGroup|tblPos|tgt|easing|image|hiddenBy|justify|minSize|xhr|ajax|controls|in|name|elem|min||||contentType|p2||||previous|match|sg|focusKey|round|xSize|lastY|xpos|groups|val|wh|ucwh|right|lastX|marginMin|pause|transitions|ypos|tb|useBox|move|pThis|clearing|swf|ySize|opera|extend|discardElement|opt|html|custom|onLoad|number|parseInt|hasDragged|tagName|delta|play|focus|elPos|resize|step|func|ieLt9|isX|changed|objectLoadTime|graphic|releaseMask|block|outlineWhileAnimating|ieLt7||ready|autoplay|getParam|xp1|yp1|anchor|tr|cell|styles|setTimeout|dimmingOpacity|mediumContent|marginTop|crossfade|tree|page|duration|dur|objectWidth|expKey|attribs|timers|pendingOutlines|now|getElementByClass|clone|blurExp|minWidth|max|enable|9999px|unit|objectHeight|relative|removeEventListener|navigator|invPos|setPosition|preserveContent|dom|zIndexCounter|tbody|tgtArr|active|getNode|clientSize|cursor|safari|onload|createOverlay|overlayId|bottom|sleeping|marginMax|start|anchors|offsetLeft|marginLeft|center|RegExp|images||end|scrollingContent|relToVP|styleRestoreCursor|isExpanded|htmls|sizeOverlayBox|heading|doShowHide|cacheBindings|hDiff|graphicsDir|disable|fitsize|cNode|while|documentElement|wDiff|minTblPos|mode|fadeBox|break|preventDefault|ruler|Id|cur|owner|allowReduce|selectThumb|moveOnly|area|prototype|minX|currentStyle|maxY|Expander|minY|iDoc|afterClose|domCh|setAttribute|toLowerCase|maxX|group|cloneNode|ysize|xsize|trans|above|scrollLeft|addRule|filter|scrollTop|padToMinWidth|fix|destroy|positionOverlay|fac|stl|allowSizeReduction|250|before|idCounter|isClosing|iebody|preloadTheseImages|on|over|credits|keyHandler|contentLoaded|getParams|param|parent|userAgent|opos|loadHTML|contentWindow|restoreCursor|obj|buttons|minHeight|numberPosition|uclt|showLoading|curTblPos|getAnchors|all|Outline|mask|ul|slideshows|matches|fade|after|geckoMac|cache|Dimension|showHideElements|maincontent|onLoadStarted|kdeBugCorr|wrapperKey|oDiv|dragHandler|afterExpand|allowWidthReduction|getPosition|marginBottom|maxWidth|tId|offY|cancelLoading|thumbsUserSetId|hsKey|ximgPad|writeExtendedContent|keypress|yimgPad|expandDuration|allowHeightReduction|lt|dir||keydown|setSize|525|offX||complete|isHsAnchor|destroyOverlays|getTime|compatMode|rel|self|hideOnMouseOut|overlayWidth|marker|curAnim|expOnly|gotoEnd|object|cachedGets|onReady|init|topmostKey|langDefaults|add|preloadTheseAjax|doFullExpand|getSrc|pre|fullExpandLabel|getAnchorIndex|disabled|Ajax|element|adj|clientX|mouse|preloadFullImage|mousemove|below|clientY|split|regBody|os|DIV|Date|childNodes|panel|imgs|previousOrNext|relatedTarget|pointer|expandCursor|getPageSize|url|current|getAdjacentAnchor|cacheAjax|activeLeft|activeRight|htmlGetSize|scrollBy|pixDimmerSize|update|Slideshow|isNew|location|getCacheBinding|dimmingDuration|contentId|getSelfRendered|calcBorders|replaceLang|clones|topZ|swfOptions|types|oPos|calcExpanded|skin|Text|preloadAjaxElement|scrollUp|sel|dec|other|getIframePageHeight|endOff|startOff|previousTitle|names|from|BackCompat|arrow|fitOverlayBox|mousedown|mouseClickHandler|correctIframeSize|load|hasMovedMin|maxsize|backCompat|clientWidth|Click|border|css|parseFloat|floatMode|defaultView|scrollDown|transit|offsetTop|mY|mX|markerPos|easeOutQuad|yp2|xp2|moveTitle|nextText|nextTitle|previousText|moveText|closeTitle|setObjContainerSize|closeText|props|padding|updateAnchors|state|cssDirection|doWrapper||middle|changeSize|startTime|parOff|sizeDiff|numberOfImagesToPreload|distance|resizeTo|maxHeight|form|srcElement|allowMultipleInstances|moveTo|align|error|swfobject|removeChild|run|done|background|htmlExpand|loadingPosXfade|openerTagNames|undim|garbageBin|onError|restoreDuration|marginRight|mouseIsOver|margin|ie6|isReady|hasAlphaImageLoader|Create|connectOutline|blur|evt|ucrb|calcThumb|origProp|contentDocument|thumbnailId|getElementById|osize|direction|loadingPos|getWrapperKey|genOverlayBox|restoreTitle|caption|abs|fullExpandTitle|initSlideshow|continuePreloading|getInline|getElementContent|overrides|show|hasFocused|dragByHeading|string|wrapperClassName|setPos|playText|pauseText|pauseTitle|fullExpandText|timerId|Move|Pause|preloadGraphic|spacebar|png|Play|Close|Highslide|JS|_default|Previous|appendTo||KDE|playTitle|vendor|200|call|Next|onGraphicLoad|and|vis|targetY|hasExtendedContent|pow|attributes|flashvars|isUnobtrusiveAnchor|hsHasSetClick|clear|ltr|newHeight|detachEvent|wmode|clickY|wrapperMouseHandler|focusTopmost|dimmingGeckoFix|enableKeyListener|fixedControls|hasHtmlExpanders|clickX|thumb|pageOrigin|loadingTitle|loadingText|resizeTitle|targetX|headingOverlay|captionOverlay|htmlSizeOperations|rb|switch|orig|getImageMapAreaCorrection|rv|tag|offsetParent|both|contentWrapper|loadingOpacity|pageXOffset|alpha|nopad|toUpperCase|easeInQuad|hide|clearsX|doPanels|showOverlays|gotOverlays|writeCredits|getNumber|showCredits|createFullExpand|javascript|ActiveXObject|Microsoft|reOrder|sleep||fullExpandPosition|fullExpandOpacity|getOverlays|rightpanel|focusTitle|hand|indexOf|clearsY|getAttribute|preloadAjax|htmlPrepareClose|destroyObject|offsetY|leftpanel|offsetX|relativeTo|awake|reuseOverlay|XMLHTTP|readyState|stripItemFormatter|wheelDelta|horizontal|Height|Bottom|Width|detail|returnValue|setClickEvents|preloadImages|mouseup|clientHeight|arguments|styleSheets|Right|Top|gi|open||script|cachedGet|setRequestHeader|ie6SSL|getControls|checkFirstAndLast|Thumbstrip|Left|wait|hitSpace|repeat|sls|getPropertyValue|XMLHttpRequest|creditsText|creditsTitle|creditsTarget|creditsHref|onHideLoading|creditsPosition|Eval|Overlay|addOverlay|nextSibling|_|overlayOptions|toString|fadeInOut|transitionDuration|easingClose|correctRatio|tmpMin|ximgSize|yimgSize|getComputedStyle|prepareNextOutline|newImg|oldImg|hideSelects|preloadNext|hideIframes|scrollWidth|reuse|iPod|iPhone|scrollHeight|boolean|dynamicallyUpdateAnchors|10001|useControls|geckodimmer|onAfterExpand|iPad|onDimmerClick|htmlCreate|onShowLoading|rect|clip|nodeName|clearTimeout|onBeforeGetContent|ig|dimming|IFRAME|300|Android|write|xpand|link|htmlE|Line|lineNumber|floor|responseText|onDrop|oncontextmenu|alert|onImageClick|button|addSlideshow|registerOverlay|zoomin|graphics|zoomout|keyCode|onKeyDown|important|keys|click|message|drag|Use|insertBefore|flushImgSize|headingText|headingEval|headingId|captionEval|captionText|maincontentId|maincontentText|Trident|it|120|reflow|maincontentEval|captionId|shadow|DOMContentLoaded|||callee|text|HEAD|header|blockRightClick|doScroll|expression|createTextNode|footer|HsExpander|ra|Safari|useMap|_self|pageYOffset|down|firstChild|inner|com|outlineStartOffset|mgnRight|onSetClickEvent||http|float|innerHeight|innerWidth|DOMMouseScroll|mousewheel|Gecko|onBeforeExpand|Macintosh|drop|removeAttribute|pI|imageCreate|ignoreMe|onmousewheel|white|blank|esc|onAfterGetCaption|onAfterGetHeading|onBeforeGetHeading|onBeforeGetCaption|circle|cellSpacing|fontSize|lineHeight|collapse|borderCollapse|useOnHtml|newWidth|frameborder|front|onmouseout|clearInterval|01|onBeforeClose|onBlur|onmouseover|Resize|Expand|fit|outlinesDir|200px|onInit|Go|allowSimultaneousLoading|the|onCreateOverlay|Powered|StopPlay|static|removeSWF|actual|onFocus|scale|shape|homepage|eval|outlines|default|SELECT|sizingMethod|AlphaImageLoader|DXImageTransform|progid|onAfterGetContent|onCreateFullExpand|onMouseOut|500|onMouseOver|Content|Type|Loading||attachEvent|of|Requested|With|coords|toElement|fromElement|send|sqrt|interval|about|urlencoded|dragSensitivity|application|mouseover|onDrag|www|cancel|GET|transparent|Msxml2|embedSWF|onActivate|fixed|onAfterClose|setInterval|flash|onDoFullExpand|bring|version|linearTween|forceAjaxReload|https|protocol|dummy|Image|debug|paddingTop|1px|expressInstallSwfurl|onreadystatechange|splice'.split('|'),0,{})) diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-ie6.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-ie6.css index b4d54840d6a0a7cbc2b3f8ef1e107c5b6f0c2bf8..7a385dd7110669747d4497aa3ed0383f0c75ee00 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-ie6.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-ie6.css @@ -1,76 +1,76 @@ -.closebutton { - /* NOTE! This URL is relative to the HTML page, not the CSS */ - filter:progid:DXImageTransform.Microsoft.AlphaImageLoader( - src='../highslide/graphics/close.png', sizingMethod='scale'); - - background: none; - cursor: hand; -} - -/* Viewport fixed hack */ -.highslide-viewport { - position: absolute; - left: expression( ( ( ignoreMe1 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( ignoreMe2 = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) + 'px' ); - width: expression( ( ( ignoreMe3 = document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) ) + 'px' ); - height: expression( ( ( ignoreMe4 = document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) ) + 'px' ); -} - -/* Thumbstrip PNG fix */ -.highslide-scroll-down, .highslide-scroll-up { - position: relative; - overflow: hidden; -} -.highslide-scroll-down div, .highslide-scroll-up div { - /* NOTE! This URL is relative to the HTML page, not the CSS */ - filter:progid:DXImageTransform.Microsoft.AlphaImageLoader( - src='../highslide/graphics/scrollarrows.png', sizingMethod='scale'); - background: none !important; - position: absolute; - cursor: hand; - width: 75px; - height: 75px !important; -} -.highslide-thumbstrip-horizontal .highslide-scroll-down div { - left: -50px; - top: -15px; -} -.highslide-thumbstrip-horizontal .highslide-scroll-up div { - top: -15px; -} -.highslide-thumbstrip-vertical .highslide-scroll-down div { - top: -50px; -} - -/* Thumbstrip marker arrow trasparent background fix */ -.highslide-thumbstrip .highslide-marker { - border-color: white; /* match the background */ -} -.dark .highslide-thumbstrip-horizontal .highslide-marker { - border-color: #111; -} -.highslide-viewport .highslide-marker { - border-color: #333; -} -.highslide-thumbstrip { - float: left; -} - -/* Positioning fixes for the control bar */ -.text-controls .highslide-controls { - width: 480px; -} -.text-controls a span { - width: 4em; -} -.text-controls .highslide-full-expand a span { - width: 0; -} -.text-controls .highslide-close a span { - width: 0; -} - -/* Special */ -.in-page .highslide-thumbstrip-horizontal .highslide-marker { - border-bottom: gray; -} +.closebutton { + /* NOTE! This URL is relative to the HTML page, not the CSS */ + filter:progid:DXImageTransform.Microsoft.AlphaImageLoader( + src='../highslide/graphics/close.png', sizingMethod='scale'); + + background: none; + cursor: hand; +} + +/* Viewport fixed hack */ +.highslide-viewport { + position: absolute; + left: expression( ( ( ignoreMe1 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); + top: expression( ( ignoreMe2 = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) + 'px' ); + width: expression( ( ( ignoreMe3 = document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) ) + 'px' ); + height: expression( ( ( ignoreMe4 = document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) ) + 'px' ); +} + +/* Thumbstrip PNG fix */ +.highslide-scroll-down, .highslide-scroll-up { + position: relative; + overflow: hidden; +} +.highslide-scroll-down div, .highslide-scroll-up div { + /* NOTE! This URL is relative to the HTML page, not the CSS */ + filter:progid:DXImageTransform.Microsoft.AlphaImageLoader( + src='../highslide/graphics/scrollarrows.png', sizingMethod='scale'); + background: none !important; + position: absolute; + cursor: hand; + width: 75px; + height: 75px !important; +} +.highslide-thumbstrip-horizontal .highslide-scroll-down div { + left: -50px; + top: -15px; +} +.highslide-thumbstrip-horizontal .highslide-scroll-up div { + top: -15px; +} +.highslide-thumbstrip-vertical .highslide-scroll-down div { + top: -50px; +} + +/* Thumbstrip marker arrow trasparent background fix */ +.highslide-thumbstrip .highslide-marker { + border-color: white; /* match the background */ +} +.dark .highslide-thumbstrip-horizontal .highslide-marker { + border-color: #111; +} +.highslide-viewport .highslide-marker { + border-color: #333; +} +.highslide-thumbstrip { + float: left; +} + +/* Positioning fixes for the control bar */ +.text-controls .highslide-controls { + width: 480px; +} +.text-controls a span { + width: 4em; +} +.text-controls .highslide-full-expand a span { + width: 0; +} +.text-controls .highslide-close a span { + width: 0; +} + +/* Special */ +.in-page .highslide-thumbstrip-horizontal .highslide-marker { + border-bottom: gray; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.js index fa1333e252774c461acb9f8961f0c52926076020..020bd0813edff4ce8d7986960fc0505af3464dab 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.js @@ -1,1046 +1,1046 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) * Config: default +slideshow +positioning +transitions +viewport +thumbstrip - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ -if (!hs) { var hs = { -// Language strings -lang : { - cssDirection: 'ltr', - loadingText : 'Loading...', - loadingTitle : 'Click to cancel', - focusTitle : 'Click to bring to front', - fullExpandTitle : 'Expand to actual size (f)', - creditsText : 'Powered by <i>Highslide JS</i>', - creditsTitle : 'Go to the Highslide JS homepage', - previousText : 'Previous', - nextText : 'Next', - moveText : 'Move', - closeText : 'Close', - closeTitle : 'Close (esc)', - resizeTitle : 'Resize', - playText : 'Play', - playTitle : 'Play slideshow (spacebar)', - pauseText : 'Pause', - pauseTitle : 'Pause slideshow (spacebar)', - previousTitle : 'Previous (arrow left)', - nextTitle : 'Next (arrow right)', - moveTitle : 'Move', - fullExpandText : '1:1', - number: 'Image %1 of %2', - restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' -}, -// See http://highslide.com/ref for examples of settings -graphicsDir : 'highslide/graphics/', -expandCursor : 'zoomin.cur', // null disables -restoreCursor : 'zoomout.cur', // null disables -expandDuration : 250, // milliseconds -restoreDuration : 250, -marginLeft : 15, -marginRight : 15, -marginTop : 15, -marginBottom : 15, -zIndexCounter : 1001, // adjust to other absolutely positioned elements -loadingOpacity : 0.75, -allowMultipleInstances: true, -numberOfImagesToPreload : 5, -outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only -outlineStartOffset : 3, // ends at 10 -padToMinWidth : false, // pad the popup width to make room for wide caption -fullExpandPosition : 'bottom right', -fullExpandOpacity : 1, -showCredits : true, // you can set this to false if you want -creditsHref : 'http://highslide.com/', -creditsTarget : '_self', -enableKeyListener : true, -openerTagNames : ['a'], // Add more to allow slideshow indexing -transitions : [], -transitionDuration: 250, -dimmingOpacity: 0, // Lightbox style dimming background -dimmingDuration: 50, // 0 for instant dimming - -anchor : 'auto', // where the image expands from -align : 'auto', // position in the client (overrides anchor) -targetX: null, // the id of a target element -targetY: null, -dragByHeading: true, -minWidth: 200, -minHeight: 200, -allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ +if (!hs) { var hs = { +// Language strings +lang : { + cssDirection: 'ltr', + loadingText : 'Loading...', + loadingTitle : 'Click to cancel', + focusTitle : 'Click to bring to front', + fullExpandTitle : 'Expand to actual size (f)', + creditsText : 'Powered by <i>Highslide JS</i>', + creditsTitle : 'Go to the Highslide JS homepage', + previousText : 'Previous', + nextText : 'Next', + moveText : 'Move', + closeText : 'Close', + closeTitle : 'Close (esc)', + resizeTitle : 'Resize', + playText : 'Play', + playTitle : 'Play slideshow (spacebar)', + pauseText : 'Pause', + pauseTitle : 'Pause slideshow (spacebar)', + previousTitle : 'Previous (arrow left)', + nextTitle : 'Next (arrow right)', + moveTitle : 'Move', + fullExpandText : '1:1', + number: 'Image %1 of %2', + restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' +}, +// See http://highslide.com/ref for examples of settings +graphicsDir : 'highslide/graphics/', +expandCursor : 'zoomin.cur', // null disables +restoreCursor : 'zoomout.cur', // null disables +expandDuration : 250, // milliseconds +restoreDuration : 250, +marginLeft : 15, +marginRight : 15, +marginTop : 15, +marginBottom : 15, +zIndexCounter : 1001, // adjust to other absolutely positioned elements +loadingOpacity : 0.75, +allowMultipleInstances: true, +numberOfImagesToPreload : 5, +outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only +outlineStartOffset : 3, // ends at 10 +padToMinWidth : false, // pad the popup width to make room for wide caption +fullExpandPosition : 'bottom right', +fullExpandOpacity : 1, +showCredits : true, // you can set this to false if you want +creditsHref : 'http://highslide.com/', +creditsTarget : '_self', +enableKeyListener : true, +openerTagNames : ['a'], // Add more to allow slideshow indexing +transitions : [], +transitionDuration: 250, +dimmingOpacity: 0, // Lightbox style dimming background +dimmingDuration: 50, // 0 for instant dimming + +anchor : 'auto', // where the image expands from +align : 'auto', // position in the client (overrides anchor) +targetX: null, // the id of a target element +targetY: null, +dragByHeading: true, +minWidth: 200, +minHeight: 200, +allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight outlineType : 'drop-shadow', // set null to disable outlines -skin : { - controls: - '<div class="highslide-controls"><ul>'+ - '<li class="highslide-previous">'+ - '<a href="#" title="{hs.lang.previousTitle}">'+ - '<span>{hs.lang.previousText}</span></a>'+ - '</li>'+ - '<li class="highslide-play">'+ - '<a href="#" title="{hs.lang.playTitle}">'+ - '<span>{hs.lang.playText}</span></a>'+ - '</li>'+ - '<li class="highslide-pause">'+ - '<a href="#" title="{hs.lang.pauseTitle}">'+ - '<span>{hs.lang.pauseText}</span></a>'+ - '</li>'+ - '<li class="highslide-next">'+ - '<a href="#" title="{hs.lang.nextTitle}">'+ - '<span>{hs.lang.nextText}</span></a>'+ - '</li>'+ - '<li class="highslide-move">'+ - '<a href="#" title="{hs.lang.moveTitle}">'+ - '<span>{hs.lang.moveText}</span></a>'+ - '</li>'+ - '<li class="highslide-full-expand">'+ - '<a href="#" title="{hs.lang.fullExpandTitle}">'+ - '<span>{hs.lang.fullExpandText}</span></a>'+ - '</li>'+ - '<li class="highslide-close">'+ - '<a href="#" title="{hs.lang.closeTitle}" >'+ - '<span>{hs.lang.closeText}</span></a>'+ - '</li>'+ - '</ul></div>' -}, -// END OF YOUR SETTINGS - - -// declare internal properties -preloadTheseImages : [], -continuePreloading: true, -expanders : [], -overrides : [ - 'allowSizeReduction', - 'useBox', - 'anchor', - 'align', - 'targetX', - 'targetY', - 'outlineType', - 'outlineWhileAnimating', - 'captionId', - 'captionText', - 'captionEval', - 'captionOverlay', - 'headingId', - 'headingText', - 'headingEval', - 'headingOverlay', - 'creditsPosition', - 'dragByHeading', - 'autoplay', - 'numberPosition', - 'transitions', - 'dimmingOpacity', - - 'width', - 'height', - - 'wrapperClassName', - 'minWidth', - 'minHeight', - 'maxWidth', - 'maxHeight', - 'pageOrigin', - 'slideshowGroup', - 'easing', - 'easingClose', - 'fadeInOut', - 'src' -], -overlays : [], -idCounter : 0, -oPos : { - x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], - y: ['above', 'top', 'middle', 'bottom', 'below'] -}, -mouse: {}, -headingOverlay: {}, -captionOverlay: {}, -timers : [], - -slideshows : [], - -pendingOutlines : {}, -clones : {}, -onReady: [], +skin : { + controls: + '<div class="highslide-controls"><ul>'+ + '<li class="highslide-previous">'+ + '<a href="#" title="{hs.lang.previousTitle}">'+ + '<span>{hs.lang.previousText}</span></a>'+ + '</li>'+ + '<li class="highslide-play">'+ + '<a href="#" title="{hs.lang.playTitle}">'+ + '<span>{hs.lang.playText}</span></a>'+ + '</li>'+ + '<li class="highslide-pause">'+ + '<a href="#" title="{hs.lang.pauseTitle}">'+ + '<span>{hs.lang.pauseText}</span></a>'+ + '</li>'+ + '<li class="highslide-next">'+ + '<a href="#" title="{hs.lang.nextTitle}">'+ + '<span>{hs.lang.nextText}</span></a>'+ + '</li>'+ + '<li class="highslide-move">'+ + '<a href="#" title="{hs.lang.moveTitle}">'+ + '<span>{hs.lang.moveText}</span></a>'+ + '</li>'+ + '<li class="highslide-full-expand">'+ + '<a href="#" title="{hs.lang.fullExpandTitle}">'+ + '<span>{hs.lang.fullExpandText}</span></a>'+ + '</li>'+ + '<li class="highslide-close">'+ + '<a href="#" title="{hs.lang.closeTitle}" >'+ + '<span>{hs.lang.closeText}</span></a>'+ + '</li>'+ + '</ul></div>' +}, +// END OF YOUR SETTINGS + + +// declare internal properties +preloadTheseImages : [], +continuePreloading: true, +expanders : [], +overrides : [ + 'allowSizeReduction', + 'useBox', + 'anchor', + 'align', + 'targetX', + 'targetY', + 'outlineType', + 'outlineWhileAnimating', + 'captionId', + 'captionText', + 'captionEval', + 'captionOverlay', + 'headingId', + 'headingText', + 'headingEval', + 'headingOverlay', + 'creditsPosition', + 'dragByHeading', + 'autoplay', + 'numberPosition', + 'transitions', + 'dimmingOpacity', + + 'width', + 'height', + + 'wrapperClassName', + 'minWidth', + 'minHeight', + 'maxWidth', + 'maxHeight', + 'pageOrigin', + 'slideshowGroup', + 'easing', + 'easingClose', + 'fadeInOut', + 'src' +], +overlays : [], +idCounter : 0, +oPos : { + x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], + y: ['above', 'top', 'middle', 'bottom', 'below'] +}, +mouse: {}, +headingOverlay: {}, +captionOverlay: {}, +timers : [], + +slideshows : [], + +pendingOutlines : {}, +clones : {}, +onReady: [], uaVersion: /Trident\/4\.0/.test(navigator.userAgent) ? 8 : - parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), -ie : (document.all && !window.opera), -//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? -safari : /Safari/.test(navigator.userAgent), -geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), - -$ : function (id) { - if (id) return document.getElementById(id); -}, - -push : function (arr, val) { - arr[arr.length] = val; -}, - -createElement : function (tag, attribs, styles, parent, nopad) { - var el = document.createElement(tag); - if (attribs) hs.extend(el, attribs); - if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); - if (styles) hs.setStyles(el, styles); - if (parent) parent.appendChild(el); - return el; -}, - -extend : function (el, attribs) { - for (var x in attribs) el[x] = attribs[x]; - return el; -}, - -setStyles : function (el, styles) { - for (var x in styles) { - if (hs.ieLt9 && x == 'opacity') { + parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), +ie : (document.all && !window.opera), +//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? +safari : /Safari/.test(navigator.userAgent), +geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), + +$ : function (id) { + if (id) return document.getElementById(id); +}, + +push : function (arr, val) { + arr[arr.length] = val; +}, + +createElement : function (tag, attribs, styles, parent, nopad) { + var el = document.createElement(tag); + if (attribs) hs.extend(el, attribs); + if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); + if (styles) hs.setStyles(el, styles); + if (parent) parent.appendChild(el); + return el; +}, + +extend : function (el, attribs) { + for (var x in attribs) el[x] = attribs[x]; + return el; +}, + +setStyles : function (el, styles) { + for (var x in styles) { + if (hs.ieLt9 && x == 'opacity') { if (styles[x] > 0.99) el.style.removeAttribute('filter'); - else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; - } - else el.style[x] = styles[x]; - } + else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; + } + else el.style[x] = styles[x]; + } }, animate: function(el, prop, opt) { - var start, - end, - unit; - if (typeof opt != 'object' || opt === null) { - var args = arguments; - opt = { - duration: args[2], - easing: args[3], - complete: args[4] - }; - } - if (typeof opt.duration != 'number') opt.duration = 250; - opt.easing = Math[opt.easing] || Math.easeInQuad; + var start, + end, + unit; + if (typeof opt != 'object' || opt === null) { + var args = arguments; + opt = { + duration: args[2], + easing: args[3], + complete: args[4] + }; + } + if (typeof opt.duration != 'number') opt.duration = 250; + opt.easing = Math[opt.easing] || Math.easeInQuad; opt.curAnim = hs.extend({}, prop); - for (var name in prop) { - var e = new hs.fx(el, opt , name ); - - start = parseFloat(hs.css(el, name)) || 0; - end = parseFloat(prop[name]); + for (var name in prop) { + var e = new hs.fx(el, opt , name ); + + start = parseFloat(hs.css(el, name)) || 0; + end = parseFloat(prop[name]); unit = name != 'opacity' ? 'px' : ''; - - e.custom( start, end, unit ); - } + + e.custom( start, end, unit ); + } }, -css: function(el, prop) { +css: function(el, prop) { if (el.style[prop]) { - return el.style[prop]; + return el.style[prop]; } else if (document.defaultView) { - return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); - + return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); + } else { - if (prop == 'opacity') prop = 'filter'; - var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; - if (prop == 'filter') - val = val.replace(/alpha\(opacity=([0-9]+)\)/, - function (a, b) { return b / 100 }); - return val === '' ? 1 : val; - } -}, - -getPageSize : function () { - var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' - ? d.documentElement : d.body, - ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); - - var width = ieLt9 ? iebody.clientWidth : - (d.documentElement.clientWidth || self.innerWidth), - height = ieLt9 ? iebody.clientHeight : self.innerHeight; - hs.page = { - width: width, - height: height, - scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, - scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset - }; - return hs.page; -}, - -getPosition : function(el) { - var p = { x: el.offsetLeft, y: el.offsetTop }; - while (el.offsetParent) { - el = el.offsetParent; - p.x += el.offsetLeft; - p.y += el.offsetTop; - if (el != document.body && el != document.documentElement) { - p.x -= el.scrollLeft; - p.y -= el.scrollTop; - } - } - return p; -}, - -expand : function(a, params, custom, type) { - if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); - if (typeof a.getParams == 'function') return params; - try { - new hs.Expander(a, params, custom); - return false; - } catch (e) { return true; } -}, -getElementByClass : function (el, tagName, className) { - var els = el.getElementsByTagName(tagName); - for (var i = 0; i < els.length; i++) { - if ((new RegExp(className)).test(els[i].className)) { - return els[i]; - } - } - return null; -}, -replaceLang : function(s) { - s = s.replace(/\s/g, ' '); - var re = /{hs\.lang\.([^}]+)\}/g, - matches = s.match(re), - lang; - if (matches) for (var i = 0; i < matches.length; i++) { - lang = matches[i].replace(re, "$1"); - if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]); - } - return s; -}, - - -focusTopmost : function() { - var topZ = 0, - topmostKey = -1, - expanders = hs.expanders, - exp, - zIndex; - for (var i = 0; i < expanders.length; i++) { - exp = expanders[i]; - if (exp) { - zIndex = exp.wrapper.style.zIndex; - if (zIndex && zIndex > topZ) { - topZ = zIndex; - topmostKey = i; - } - } - } - if (topmostKey == -1) hs.focusKey = -1; - else expanders[topmostKey].focus(); -}, - -getParam : function (a, param) { - a.getParams = a.onclick; - var p = a.getParams ? a.getParams() : null; - a.getParams = null; - - return (p && typeof p[param] != 'undefined') ? p[param] : + if (prop == 'opacity') prop = 'filter'; + var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; + if (prop == 'filter') + val = val.replace(/alpha\(opacity=([0-9]+)\)/, + function (a, b) { return b / 100 }); + return val === '' ? 1 : val; + } +}, + +getPageSize : function () { + var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' + ? d.documentElement : d.body, + ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); + + var width = ieLt9 ? iebody.clientWidth : + (d.documentElement.clientWidth || self.innerWidth), + height = ieLt9 ? iebody.clientHeight : self.innerHeight; + hs.page = { + width: width, + height: height, + scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, + scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset + }; + return hs.page; +}, + +getPosition : function(el) { + var p = { x: el.offsetLeft, y: el.offsetTop }; + while (el.offsetParent) { + el = el.offsetParent; + p.x += el.offsetLeft; + p.y += el.offsetTop; + if (el != document.body && el != document.documentElement) { + p.x -= el.scrollLeft; + p.y -= el.scrollTop; + } + } + return p; +}, + +expand : function(a, params, custom, type) { + if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); + if (typeof a.getParams == 'function') return params; + try { + new hs.Expander(a, params, custom); + return false; + } catch (e) { return true; } +}, +getElementByClass : function (el, tagName, className) { + var els = el.getElementsByTagName(tagName); + for (var i = 0; i < els.length; i++) { + if ((new RegExp(className)).test(els[i].className)) { + return els[i]; + } + } + return null; +}, +replaceLang : function(s) { + s = s.replace(/\s/g, ' '); + var re = /{hs\.lang\.([^}]+)\}/g, + matches = s.match(re), + lang; + if (matches) for (var i = 0; i < matches.length; i++) { + lang = matches[i].replace(re, "$1"); + if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]); + } + return s; +}, + + +focusTopmost : function() { + var topZ = 0, + topmostKey = -1, + expanders = hs.expanders, + exp, + zIndex; + for (var i = 0; i < expanders.length; i++) { + exp = expanders[i]; + if (exp) { + zIndex = exp.wrapper.style.zIndex; + if (zIndex && zIndex > topZ) { + topZ = zIndex; + topmostKey = i; + } + } + } + if (topmostKey == -1) hs.focusKey = -1; + else expanders[topmostKey].focus(); +}, + +getParam : function (a, param) { + a.getParams = a.onclick; + var p = a.getParams ? a.getParams() : null; + a.getParams = null; + + return (p && typeof p[param] != 'undefined') ? p[param] : (typeof hs[param] != 'undefined' ? hs[param] : null); -}, - -getSrc : function (a) { - var src = hs.getParam(a, 'src'); - if (src) return src; - return a.href; -}, - -getNode : function (id) { - var node = hs.$(id), clone = hs.clones[id], a = {}; - if (!node && !clone) return null; - if (!clone) { - clone = node.cloneNode(true); - clone.id = ''; - hs.clones[id] = clone; - return node; - } else { - return clone.cloneNode(true); - } -}, - +}, + +getSrc : function (a) { + var src = hs.getParam(a, 'src'); + if (src) return src; + return a.href; +}, + +getNode : function (id) { + var node = hs.$(id), clone = hs.clones[id], a = {}; + if (!node && !clone) return null; + if (!clone) { + clone = node.cloneNode(true); + clone.id = ''; + hs.clones[id] = clone; + return node; + } else { + return clone.cloneNode(true); + } +}, + discardElement : function(d) { - if (d) hs.garbageBin.appendChild(d); - hs.garbageBin.innerHTML = ''; -}, -dim : function(exp) { - if (!hs.dimmer) { - isNew = true; - hs.dimmer = hs.createElement ('div', { - className: 'highslide-dimming highslide-viewport-size', - owner: '', - onclick: function() { - - hs.close(); - } - }, { - visibility: 'visible', - opacity: 0 - }, hs.container, true); - - if (/(Android|iPad|iPhone|iPod)/.test(navigator.userAgent)) { - var body = document.body; - function pixDimmerSize() { - hs.setStyles(hs.dimmer, { - width: body.scrollWidth +'px', - height: body.scrollHeight +'px' - }); - } - pixDimmerSize(); - hs.addEventListener(window, 'resize', pixDimmerSize); - } - } - hs.dimmer.style.display = ''; - - var isNew = hs.dimmer.owner == ''; - hs.dimmer.owner += '|'+ exp.key; - - if (isNew) { - if (hs.geckoMac && hs.dimmingGeckoFix) - hs.setStyles(hs.dimmer, { - background: 'url('+ hs.graphicsDir + 'geckodimmer.png)', - opacity: 1 - }); - else - hs.animate(hs.dimmer, { opacity: exp.dimmingOpacity }, hs.dimmingDuration); - } -}, -undim : function(key) { - if (!hs.dimmer) return; - if (typeof key != 'undefined') hs.dimmer.owner = hs.dimmer.owner.replace('|'+ key, ''); - - if ( - (typeof key != 'undefined' && hs.dimmer.owner != '') - || (hs.upcoming && hs.getParam(hs.upcoming, 'dimmingOpacity')) - ) return; - - if (hs.geckoMac && hs.dimmingGeckoFix) hs.dimmer.style.display = 'none'; - else hs.animate(hs.dimmer, { opacity: 0 }, hs.dimmingDuration, null, function() { - hs.dimmer.style.display = 'none'; - }); -}, -transit : function (adj, exp) { - var last = exp || hs.getExpander(); - exp = last; - if (hs.upcoming) return false; - else hs.last = last; - hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - try { - hs.upcoming = adj; - adj.onclick(); - } catch (e){ - hs.last = hs.upcoming = null; - } - try { - if (!adj || exp.transitions[1] != 'crossfade') - exp.close(); - } catch (e) {} - return false; -}, - -previousOrNext : function (el, op) { - var exp = hs.getExpander(el); - if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); - else return false; -}, - -previous : function (el) { - return hs.previousOrNext(el, -1); -}, - -next : function (el) { - return hs.previousOrNext(el, 1); -}, - -keyHandler : function(e) { - if (!e) e = window.event; - if (!e.target) e.target = e.srcElement; // ie - if (typeof e.target.form != 'undefined') return true; // form element has focus - var exp = hs.getExpander(); - - var op = null; - switch (e.keyCode) { - case 70: // f - if (exp) exp.doFullExpand(); - return true; - case 32: // Space - op = 2; - break; - case 34: // Page Down - case 39: // Arrow right - case 40: // Arrow down - op = 1; - break; - case 8: // Backspace - case 33: // Page Up - case 37: // Arrow left - case 38: // Arrow up - op = -1; - break; - case 27: // Escape - case 13: // Enter - op = 0; - } - if (op !== null) {if (op != 2)hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - if (!hs.enableKeyListener) return true; - - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - if (exp) { - if (op == 0) { - exp.close(); - } else if (op == 2) { - if (exp.slideshow) exp.slideshow.hitSpace(); - } else { - if (exp.slideshow) exp.slideshow.pause(); - hs.previousOrNext(exp.key, op); - } - return false; - } - } - return true; -}, - - -registerOverlay : function (overlay) { - hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); -}, - - -addSlideshow : function (options) { - var sg = options.slideshowGroup; - if (typeof sg == 'object') { - for (var i = 0; i < sg.length; i++) { - var o = {}; - for (var x in options) o[x] = options[x]; - o.slideshowGroup = sg[i]; - hs.push(hs.slideshows, o); - } - } else { - hs.push(hs.slideshows, options); - } -}, - -getWrapperKey : function (element, expOnly) { - var el, re = /^highslide-wrapper-([0-9]+)$/; - // 1. look in open expanders - el = element; - while (el.parentNode) { - if (el.hsKey !== undefined) return el.hsKey; - if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); - el = el.parentNode; - } - // 2. look in thumbnail - if (!expOnly) { - el = element; - while (el.parentNode) { - if (el.tagName && hs.isHsAnchor(el)) { - for (var key = 0; key < hs.expanders.length; key++) { - var exp = hs.expanders[key]; - if (exp && exp.a == el) return key; - } - } - el = el.parentNode; - } - } - return null; -}, - -getExpander : function (el, expOnly) { - if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; - if (typeof el == 'number') return hs.expanders[el] || null; - if (typeof el == 'string') el = hs.$(el); - return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; -}, - -isHsAnchor : function (a) { - return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); -}, - -reOrder : function () { - for (var i = 0; i < hs.expanders.length; i++) - if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); -}, - -mouseClickHandler : function(e) -{ - if (!e) e = window.event; - if (e.button > 1) return true; - if (!e.target) e.target = e.srcElement; - - var el = e.target; - while (el.parentNode - && !(/highslide-(image|move|html|resize)/.test(el.className))) - { - el = el.parentNode; - } - var exp = hs.getExpander(el); - if (exp && (exp.isClosing || !exp.isExpanded)) return true; - - if (exp && e.type == 'mousedown') { - if (e.target.form) return true; - var match = el.className.match(/highslide-(image|move|resize)/); - if (match) { - hs.dragArgs = { - exp: exp , - type: match[1], - left: exp.x.pos, - width: exp.x.size, - top: exp.y.pos, - height: exp.y.size, - clickX: e.clientX, - clickY: e.clientY - }; - - - hs.addEventListener(document, 'mousemove', hs.dragHandler); - if (e.preventDefault) e.preventDefault(); // FF - - if (/highslide-(image|html)-blur/.test(exp.content.className)) { - exp.focus(); - hs.hasFocused = true; - } - return false; - } - } else if (e.type == 'mouseup') { - - hs.removeEventListener(document, 'mousemove', hs.dragHandler); - - if (hs.dragArgs) { - if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') - hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; - var hasDragged = hs.dragArgs.hasDragged; - - if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { - exp.close(); - } - else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { - hs.dragArgs.exp.doShowHide('hidden'); - } - hs.hasFocused = false; - hs.dragArgs = null; - - } else if (/highslide-image-blur/.test(el.className)) { - el.style.cursor = hs.styleRestoreCursor; - } - } - return false; -}, - -dragHandler : function(e) -{ - if (!hs.dragArgs) return true; - if (!e) e = window.event; - var a = hs.dragArgs, exp = a.exp; - - a.dX = e.clientX - a.clickX; - a.dY = e.clientY - a.clickY; - - var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); - if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) - || (distance > (hs.dragSensitivity || 5)); - - if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { - - if (a.type == 'resize') exp.resize(a); - else { - exp.moveTo(a.left + a.dX, a.top + a.dY); - if (a.type == 'image') exp.content.style.cursor = 'move'; - } - } - return false; -}, - -wrapperMouseHandler : function (e) { + if (d) hs.garbageBin.appendChild(d); + hs.garbageBin.innerHTML = ''; +}, +dim : function(exp) { + if (!hs.dimmer) { + isNew = true; + hs.dimmer = hs.createElement ('div', { + className: 'highslide-dimming highslide-viewport-size', + owner: '', + onclick: function() { + + hs.close(); + } + }, { + visibility: 'visible', + opacity: 0 + }, hs.container, true); + + if (/(Android|iPad|iPhone|iPod)/.test(navigator.userAgent)) { + var body = document.body; + function pixDimmerSize() { + hs.setStyles(hs.dimmer, { + width: body.scrollWidth +'px', + height: body.scrollHeight +'px' + }); + } + pixDimmerSize(); + hs.addEventListener(window, 'resize', pixDimmerSize); + } + } + hs.dimmer.style.display = ''; + + var isNew = hs.dimmer.owner == ''; + hs.dimmer.owner += '|'+ exp.key; + + if (isNew) { + if (hs.geckoMac && hs.dimmingGeckoFix) + hs.setStyles(hs.dimmer, { + background: 'url('+ hs.graphicsDir + 'geckodimmer.png)', + opacity: 1 + }); + else + hs.animate(hs.dimmer, { opacity: exp.dimmingOpacity }, hs.dimmingDuration); + } +}, +undim : function(key) { + if (!hs.dimmer) return; + if (typeof key != 'undefined') hs.dimmer.owner = hs.dimmer.owner.replace('|'+ key, ''); + + if ( + (typeof key != 'undefined' && hs.dimmer.owner != '') + || (hs.upcoming && hs.getParam(hs.upcoming, 'dimmingOpacity')) + ) return; + + if (hs.geckoMac && hs.dimmingGeckoFix) hs.dimmer.style.display = 'none'; + else hs.animate(hs.dimmer, { opacity: 0 }, hs.dimmingDuration, null, function() { + hs.dimmer.style.display = 'none'; + }); +}, +transit : function (adj, exp) { + var last = exp || hs.getExpander(); + exp = last; + if (hs.upcoming) return false; + else hs.last = last; + hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + try { + hs.upcoming = adj; + adj.onclick(); + } catch (e){ + hs.last = hs.upcoming = null; + } try { - if (!e) e = window.event; - var over = /mouseover/i.test(e.type); - if (!e.target) e.target = e.srcElement; // ie - if (!e.relatedTarget) e.relatedTarget = - over ? e.fromElement : e.toElement; // ie - var exp = hs.getExpander(e.target); - if (!exp.isExpanded) return; - if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp - || hs.dragArgs) return; - for (var i = 0; i < exp.overlays.length; i++) (function() { - var o = hs.$('hsId'+ exp.overlays[i]); - if (o && o.hideOnMouseOut) { - if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); - hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); - } - })(); - } catch (e) {} -}, -addEventListener : function (el, event, func) { - if (el == document && event == 'ready') { - hs.push(hs.onReady, func); - } - try { - el.addEventListener(event, func, false); - } catch (e) { - try { - el.detachEvent('on'+ event, func); - el.attachEvent('on'+ event, func); - } catch (e) { - el['on'+ event] = func; - } - } -}, - -removeEventListener : function (el, event, func) { + if (!adj || exp.transitions[1] != 'crossfade') + exp.close(); + } catch (e) {} + return false; +}, + +previousOrNext : function (el, op) { + var exp = hs.getExpander(el); + if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); + else return false; +}, + +previous : function (el) { + return hs.previousOrNext(el, -1); +}, + +next : function (el) { + return hs.previousOrNext(el, 1); +}, + +keyHandler : function(e) { + if (!e) e = window.event; + if (!e.target) e.target = e.srcElement; // ie + if (typeof e.target.form != 'undefined') return true; // form element has focus + var exp = hs.getExpander(); + + var op = null; + switch (e.keyCode) { + case 70: // f + if (exp) exp.doFullExpand(); + return true; + case 32: // Space + op = 2; + break; + case 34: // Page Down + case 39: // Arrow right + case 40: // Arrow down + op = 1; + break; + case 8: // Backspace + case 33: // Page Up + case 37: // Arrow left + case 38: // Arrow up + op = -1; + break; + case 27: // Escape + case 13: // Enter + op = 0; + } + if (op !== null) {if (op != 2)hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + if (!hs.enableKeyListener) return true; + + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + if (exp) { + if (op == 0) { + exp.close(); + } else if (op == 2) { + if (exp.slideshow) exp.slideshow.hitSpace(); + } else { + if (exp.slideshow) exp.slideshow.pause(); + hs.previousOrNext(exp.key, op); + } + return false; + } + } + return true; +}, + + +registerOverlay : function (overlay) { + hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); +}, + + +addSlideshow : function (options) { + var sg = options.slideshowGroup; + if (typeof sg == 'object') { + for (var i = 0; i < sg.length; i++) { + var o = {}; + for (var x in options) o[x] = options[x]; + o.slideshowGroup = sg[i]; + hs.push(hs.slideshows, o); + } + } else { + hs.push(hs.slideshows, options); + } +}, + +getWrapperKey : function (element, expOnly) { + var el, re = /^highslide-wrapper-([0-9]+)$/; + // 1. look in open expanders + el = element; + while (el.parentNode) { + if (el.hsKey !== undefined) return el.hsKey; + if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); + el = el.parentNode; + } + // 2. look in thumbnail + if (!expOnly) { + el = element; + while (el.parentNode) { + if (el.tagName && hs.isHsAnchor(el)) { + for (var key = 0; key < hs.expanders.length; key++) { + var exp = hs.expanders[key]; + if (exp && exp.a == el) return key; + } + } + el = el.parentNode; + } + } + return null; +}, + +getExpander : function (el, expOnly) { + if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; + if (typeof el == 'number') return hs.expanders[el] || null; + if (typeof el == 'string') el = hs.$(el); + return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; +}, + +isHsAnchor : function (a) { + return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); +}, + +reOrder : function () { + for (var i = 0; i < hs.expanders.length; i++) + if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); +}, + +mouseClickHandler : function(e) +{ + if (!e) e = window.event; + if (e.button > 1) return true; + if (!e.target) e.target = e.srcElement; + + var el = e.target; + while (el.parentNode + && !(/highslide-(image|move|html|resize)/.test(el.className))) + { + el = el.parentNode; + } + var exp = hs.getExpander(el); + if (exp && (exp.isClosing || !exp.isExpanded)) return true; + + if (exp && e.type == 'mousedown') { + if (e.target.form) return true; + var match = el.className.match(/highslide-(image|move|resize)/); + if (match) { + hs.dragArgs = { + exp: exp , + type: match[1], + left: exp.x.pos, + width: exp.x.size, + top: exp.y.pos, + height: exp.y.size, + clickX: e.clientX, + clickY: e.clientY + }; + + + hs.addEventListener(document, 'mousemove', hs.dragHandler); + if (e.preventDefault) e.preventDefault(); // FF + + if (/highslide-(image|html)-blur/.test(exp.content.className)) { + exp.focus(); + hs.hasFocused = true; + } + return false; + } + } else if (e.type == 'mouseup') { + + hs.removeEventListener(document, 'mousemove', hs.dragHandler); + + if (hs.dragArgs) { + if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') + hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; + var hasDragged = hs.dragArgs.hasDragged; + + if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { + exp.close(); + } + else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { + hs.dragArgs.exp.doShowHide('hidden'); + } + hs.hasFocused = false; + hs.dragArgs = null; + + } else if (/highslide-image-blur/.test(el.className)) { + el.style.cursor = hs.styleRestoreCursor; + } + } + return false; +}, + +dragHandler : function(e) +{ + if (!hs.dragArgs) return true; + if (!e) e = window.event; + var a = hs.dragArgs, exp = a.exp; + + a.dX = e.clientX - a.clickX; + a.dY = e.clientY - a.clickY; + + var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); + if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) + || (distance > (hs.dragSensitivity || 5)); + + if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { + + if (a.type == 'resize') exp.resize(a); + else { + exp.moveTo(a.left + a.dX, a.top + a.dY); + if (a.type == 'image') exp.content.style.cursor = 'move'; + } + } + return false; +}, + +wrapperMouseHandler : function (e) { try { - el.removeEventListener(event, func, false); - } catch (e) { - try { - el.detachEvent('on'+ event, func); - } catch (e) { - el['on'+ event] = null; - } - } -}, - -preloadFullImage : function (i) { - if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { - var img = document.createElement('img'); - img.onload = function() { + if (!e) e = window.event; + var over = /mouseover/i.test(e.type); + if (!e.target) e.target = e.srcElement; // ie + if (!e.relatedTarget) e.relatedTarget = + over ? e.fromElement : e.toElement; // ie + var exp = hs.getExpander(e.target); + if (!exp.isExpanded) return; + if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp + || hs.dragArgs) return; + for (var i = 0; i < exp.overlays.length; i++) (function() { + var o = hs.$('hsId'+ exp.overlays[i]); + if (o && o.hideOnMouseOut) { + if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); + hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); + } + })(); + } catch (e) {} +}, +addEventListener : function (el, event, func) { + if (el == document && event == 'ready') { + hs.push(hs.onReady, func); + } + try { + el.addEventListener(event, func, false); + } catch (e) { + try { + el.detachEvent('on'+ event, func); + el.attachEvent('on'+ event, func); + } catch (e) { + el['on'+ event] = func; + } + } +}, + +removeEventListener : function (el, event, func) { + try { + el.removeEventListener(event, func, false); + } catch (e) { + try { + el.detachEvent('on'+ event, func); + } catch (e) { + el['on'+ event] = null; + } + } +}, + +preloadFullImage : function (i) { + if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { + var img = document.createElement('img'); + img.onload = function() { img = null; - hs.preloadFullImage(i + 1); - }; - img.src = hs.preloadTheseImages[i]; - } -}, -preloadImages : function (number) { - if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; - - var arr = hs.getAnchors(); - for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { - hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); - } - - // preload outlines - if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); - else - - hs.preloadFullImage(0); - - // preload cursor - if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); -}, - - -init : function () { - if (!hs.container) { - - hs.ieLt7 = hs.ie && hs.uaVersion < 7; - hs.ieLt9 = hs.ie && hs.uaVersion < 9; - + hs.preloadFullImage(i + 1); + }; + img.src = hs.preloadTheseImages[i]; + } +}, +preloadImages : function (number) { + if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; + + var arr = hs.getAnchors(); + for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { + hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); + } + + // preload outlines + if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); + else + + hs.preloadFullImage(0); + + // preload cursor + if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); +}, + + +init : function () { + if (!hs.container) { + + hs.ieLt7 = hs.ie && hs.uaVersion < 7; + hs.ieLt9 = hs.ie && hs.uaVersion < 9; + hs.getPageSize(); - for (var x in hs.langDefaults) { - if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; - else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') - hs.lang[x] = hs.langDefaults[x]; - } - - hs.container = hs.createElement('div', { - className: 'highslide-container' + for (var x in hs.langDefaults) { + if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; + else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') + hs.lang[x] = hs.langDefaults[x]; + } + + hs.container = hs.createElement('div', { + className: 'highslide-container' + }, { + position: 'absolute', + left: 0, + top: 0, + width: '100%', + zIndex: hs.zIndexCounter, + direction: 'ltr' + }, + document.body, + true + ); + hs.loading = hs.createElement('a', { + className: 'highslide-loading', + title: hs.lang.loadingTitle, + innerHTML: hs.lang.loadingText, + href: 'javascript:;' + }, { + position: 'absolute', + top: '-9999px', + opacity: hs.loadingOpacity, + zIndex: 1 + }, hs.container + ); + hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); + hs.viewport = hs.createElement('div', { + className: 'highslide-viewport highslide-viewport-size' }, { - position: 'absolute', - left: 0, - top: 0, - width: '100%', - zIndex: hs.zIndexCounter, - direction: 'ltr' - }, - document.body, - true - ); - hs.loading = hs.createElement('a', { - className: 'highslide-loading', - title: hs.lang.loadingTitle, - innerHTML: hs.lang.loadingText, - href: 'javascript:;' - }, { - position: 'absolute', - top: '-9999px', - opacity: hs.loadingOpacity, - zIndex: 1 - }, hs.container - ); - hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); - hs.viewport = hs.createElement('div', { - className: 'highslide-viewport highslide-viewport-size' - }, { - visibility: (hs.safari && hs.uaVersion < 525) ? 'visible' : 'hidden' - }, hs.container, 1 - ); - - // http://www.robertpenner.com/easing/ - Math.linearTween = function (t, b, c, d) { - return c*t/d + b; - }; - Math.easeInQuad = function (t, b, c, d) { - return c*(t/=d)*t + b; - }; - Math.easeOutQuad = function (t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }; - - hs.hideSelects = hs.ieLt7; - hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' - || (hs.ieLt7 && hs.uaVersion < 5.5)); - } -}, -ready : function() { - if (hs.isReady) return; - hs.isReady = true; - for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); -}, - -updateAnchors : function() { - var el, els, all = [], images = [],groups = {}, re; - + visibility: (hs.safari && hs.uaVersion < 525) ? 'visible' : 'hidden' + }, hs.container, 1 + ); + + // http://www.robertpenner.com/easing/ + Math.linearTween = function (t, b, c, d) { + return c*t/d + b; + }; + Math.easeInQuad = function (t, b, c, d) { + return c*(t/=d)*t + b; + }; + Math.easeOutQuad = function (t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }; + + hs.hideSelects = hs.ieLt7; + hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' + || (hs.ieLt7 && hs.uaVersion < 5.5)); + } +}, +ready : function() { + if (hs.isReady) return; + hs.isReady = true; + for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); +}, + +updateAnchors : function() { + var el, els, all = [], images = [],groups = {}, re; + for (var i = 0; i < hs.openerTagNames.length; i++) { - els = document.getElementsByTagName(hs.openerTagNames[i]); + els = document.getElementsByTagName(hs.openerTagNames[i]); for (var j = 0; j < els.length; j++) { - el = els[j]; - re = hs.isHsAnchor(el); - if (re) { + el = els[j]; + re = hs.isHsAnchor(el); + if (re) { hs.push(all, el); if (re[0] == 'hs.expand') hs.push(images, el); - var g = hs.getParam(el, 'slideshowGroup') || 'none'; - if (!groups[g]) groups[g] = []; - hs.push(groups[g], el); - } - } - } - hs.anchors = { all: all, groups: groups, images: images }; - return hs.anchors; - -}, - -getAnchors : function() { - return hs.anchors || hs.updateAnchors(); -}, - - -close : function(el) { - var exp = hs.getExpander(el); - if (exp) exp.close(); - return false; -} + var g = hs.getParam(el, 'slideshowGroup') || 'none'; + if (!groups[g]) groups[g] = []; + hs.push(groups[g], el); + } + } + } + hs.anchors = { all: all, groups: groups, images: images }; + return hs.anchors; + +}, + +getAnchors : function() { + return hs.anchors || hs.updateAnchors(); +}, + + +close : function(el) { + var exp = hs.getExpander(el); + if (exp) exp.close(); + return false; +} }; // end hs object -hs.fx = function( elem, options, prop ){ - this.options = options; - this.elem = elem; - this.prop = prop; - - if (!options.orig) options.orig = {}; -}; +hs.fx = function( elem, options, prop ){ + this.options = options; + this.elem = elem; + this.prop = prop; + + if (!options.orig) options.orig = {}; +}; hs.fx.prototype = { update: function(){ - (hs.fx.step[this.prop] || hs.fx.step._default)(this); - - if (this.options.step) - this.options.step.call(this.elem, this.now, this); - + (hs.fx.step[this.prop] || hs.fx.step._default)(this); + + if (this.options.step) + this.options.step.call(this.elem, this.now, this); + }, - custom: function(from, to, unit){ - this.startTime = (new Date()).getTime(); - this.start = from; - this.end = to; - this.unit = unit;// || this.unit || "px"; - this.now = this.start; - this.pos = this.state = 0; - - var self = this; - function t(gotoEnd){ - return self.step(gotoEnd); - } - - t.elem = this.elem; - - if ( t() && hs.timers.push(t) == 1 ) { - hs.timerId = setInterval(function(){ - var timers = hs.timers; - - for ( var i = 0; i < timers.length; i++ ) - if ( !timers[i]() ) - timers.splice(i--, 1); - - if ( !timers.length ) { - clearInterval(hs.timerId); - } - }, 13); - } + custom: function(from, to, unit){ + this.startTime = (new Date()).getTime(); + this.start = from; + this.end = to; + this.unit = unit;// || this.unit || "px"; + this.now = this.start; + this.pos = this.state = 0; + + var self = this; + function t(gotoEnd){ + return self.step(gotoEnd); + } + + t.elem = this.elem; + + if ( t() && hs.timers.push(t) == 1 ) { + hs.timerId = setInterval(function(){ + var timers = hs.timers; + + for ( var i = 0; i < timers.length; i++ ) + if ( !timers[i]() ) + timers.splice(i--, 1); + + if ( !timers.length ) { + clearInterval(hs.timerId); + } + }, 13); + } }, - step: function(gotoEnd){ - var t = (new Date()).getTime(); - if ( gotoEnd || t >= this.options.duration + this.startTime ) { - this.now = this.end; - this.pos = this.state = 1; - this.update(); - - this.options.curAnim[ this.prop ] = true; - - var done = true; - for ( var i in this.options.curAnim ) - if ( this.options.curAnim[i] !== true ) - done = false; - + step: function(gotoEnd){ + var t = (new Date()).getTime(); + if ( gotoEnd || t >= this.options.duration + this.startTime ) { + this.now = this.end; + this.pos = this.state = 1; + this.update(); + + this.options.curAnim[ this.prop ] = true; + + var done = true; + for ( var i in this.options.curAnim ) + if ( this.options.curAnim[i] !== true ) + done = false; + if ( done ) { - if (this.options.complete) this.options.complete.call(this.elem); - } - return false; - } else { - var n = t - this.startTime; + if (this.options.complete) this.options.complete.call(this.elem); + } + return false; + } else { + var n = t - this.startTime; this.state = n / this.options.duration; - this.pos = this.options.easing(n, 0, 1, this.options.duration); + this.pos = this.options.easing(n, 0, 1, this.options.duration); this.now = this.start + ((this.end - this.start) * this.pos); - this.update(); - } - return true; - } - -}; - -hs.extend( hs.fx, { - step: { - - opacity: function(fx){ - hs.setStyles(fx.elem, { opacity: fx.now }); - }, - - _default: function(fx){ + this.update(); + } + return true; + } + +}; + +hs.extend( hs.fx, { + step: { + + opacity: function(fx){ + hs.setStyles(fx.elem, { opacity: fx.now }); + }, + + _default: function(fx){ try { - if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) - fx.elem.style[ fx.prop ] = fx.now + fx.unit; - else - fx.elem[ fx.prop ] = fx.now; - } catch (e) {} - } - } -}); - -hs.Outline = function (outlineType, onLoad) { - this.onLoad = onLoad; - this.outlineType = outlineType; - var v = hs.uaVersion, tr; - - this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; - if (!outlineType) { - if (onLoad) onLoad(); - return; - } - - hs.init(); - this.table = hs.createElement( - 'table', { - cellSpacing: 0 - }, { - visibility: 'hidden', - position: 'absolute', - borderCollapse: 'collapse', - width: 0 - }, - hs.container, - true - ); - var tbody = hs.createElement('tbody', null, null, this.table, 1); - - this.td = []; - for (var i = 0; i <= 8; i++) { - if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); - this.td[i] = hs.createElement('td', null, null, tr, true); - var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; - hs.setStyles(this.td[i], style); - } - this.td[4].className = outlineType +' highslide-outline'; - - this.preloadGraphic(); -}; - -hs.Outline.prototype = { -preloadGraphic : function () { - var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; - - var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; - this.graphic = hs.createElement('img', null, { position: 'absolute', - top: '-9999px' }, appendTo, true); // for onload trigger - - var pThis = this; - this.graphic.onload = function() { pThis.onGraphicLoad(); }; - - this.graphic.src = src; -}, - -onGraphicLoad : function () { - var o = this.offset = this.graphic.width / 4, - pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], - dim = { height: (2*o) +'px', width: (2*o) +'px' }; - for (var i = 0; i <= 8; i++) { - if (pos[i]) { - if (this.hasAlphaImageLoader) { - var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; - var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); - hs.createElement ('div', null, { - filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", - position: 'absolute', - width: w, - height: this.graphic.height +'px', - left: (pos[i][0]*o)+'px', - top: (pos[i][1]*o)+'px' - }, - div, - true); - } else { - hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); - } - - if (window.opera && (i == 3 || i ==5)) - hs.createElement('div', null, dim, this.td[i], true); - - hs.setStyles (this.td[i], dim); - } - } - this.graphic = null; - if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); - hs.pendingOutlines[this.outlineType] = this; - if (this.onLoad) this.onLoad(); -}, - -setPosition : function (pos, offset, vis, dur, easing) { - var exp = this.exp, - stl = exp.wrapper.style, - offset = offset || 0, - pos = pos || { - x: exp.x.pos + offset, - y: exp.y.pos + offset, - w: exp.x.get('wsize') - 2 * offset, - h: exp.y.get('wsize') - 2 * offset - }; - if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) - ? 'visible' : 'hidden'; - hs.setStyles(this.table, { - left: (pos.x - this.offset) +'px', - top: (pos.y - this.offset) +'px', - width: (pos.w + 2 * this.offset) +'px' - }); - - pos.w -= 2 * this.offset; - pos.h -= 2 * this.offset; - hs.setStyles (this.td[4], { - width: pos.w >= 0 ? pos.w +'px' : 0, - height: pos.h >= 0 ? pos.h +'px' : 0 - }); - if (this.hasAlphaImageLoader) this.td[3].style.height - = this.td[5].style.height = this.td[4].style.height; - -}, - -destroy : function(hide) { - if (hide) this.table.style.visibility = 'hidden'; - else hs.discardElement(this.table); -} -}; - -hs.Dimension = function(exp, dim) { - this.exp = exp; - this.dim = dim; + if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) + fx.elem.style[ fx.prop ] = fx.now + fx.unit; + else + fx.elem[ fx.prop ] = fx.now; + } catch (e) {} + } + } +}); + +hs.Outline = function (outlineType, onLoad) { + this.onLoad = onLoad; + this.outlineType = outlineType; + var v = hs.uaVersion, tr; + + this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; + if (!outlineType) { + if (onLoad) onLoad(); + return; + } + + hs.init(); + this.table = hs.createElement( + 'table', { + cellSpacing: 0 + }, { + visibility: 'hidden', + position: 'absolute', + borderCollapse: 'collapse', + width: 0 + }, + hs.container, + true + ); + var tbody = hs.createElement('tbody', null, null, this.table, 1); + + this.td = []; + for (var i = 0; i <= 8; i++) { + if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); + this.td[i] = hs.createElement('td', null, null, tr, true); + var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; + hs.setStyles(this.td[i], style); + } + this.td[4].className = outlineType +' highslide-outline'; + + this.preloadGraphic(); +}; + +hs.Outline.prototype = { +preloadGraphic : function () { + var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; + + var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; + this.graphic = hs.createElement('img', null, { position: 'absolute', + top: '-9999px' }, appendTo, true); // for onload trigger + + var pThis = this; + this.graphic.onload = function() { pThis.onGraphicLoad(); }; + + this.graphic.src = src; +}, + +onGraphicLoad : function () { + var o = this.offset = this.graphic.width / 4, + pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], + dim = { height: (2*o) +'px', width: (2*o) +'px' }; + for (var i = 0; i <= 8; i++) { + if (pos[i]) { + if (this.hasAlphaImageLoader) { + var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; + var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); + hs.createElement ('div', null, { + filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", + position: 'absolute', + width: w, + height: this.graphic.height +'px', + left: (pos[i][0]*o)+'px', + top: (pos[i][1]*o)+'px' + }, + div, + true); + } else { + hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); + } + + if (window.opera && (i == 3 || i ==5)) + hs.createElement('div', null, dim, this.td[i], true); + + hs.setStyles (this.td[i], dim); + } + } + this.graphic = null; + if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); + hs.pendingOutlines[this.outlineType] = this; + if (this.onLoad) this.onLoad(); +}, + +setPosition : function (pos, offset, vis, dur, easing) { + var exp = this.exp, + stl = exp.wrapper.style, + offset = offset || 0, + pos = pos || { + x: exp.x.pos + offset, + y: exp.y.pos + offset, + w: exp.x.get('wsize') - 2 * offset, + h: exp.y.get('wsize') - 2 * offset + }; + if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) + ? 'visible' : 'hidden'; + hs.setStyles(this.table, { + left: (pos.x - this.offset) +'px', + top: (pos.y - this.offset) +'px', + width: (pos.w + 2 * this.offset) +'px' + }); + + pos.w -= 2 * this.offset; + pos.h -= 2 * this.offset; + hs.setStyles (this.td[4], { + width: pos.w >= 0 ? pos.w +'px' : 0, + height: pos.h >= 0 ? pos.h +'px' : 0 + }); + if (this.hasAlphaImageLoader) this.td[3].style.height + = this.td[5].style.height = this.td[4].style.height; + +}, + +destroy : function(hide) { + if (hide) this.table.style.visibility = 'hidden'; + else hs.discardElement(this.table); +} +}; + +hs.Dimension = function(exp, dim) { + this.exp = exp; + this.dim = dim; this.ucwh = dim == 'x' ? 'Width' : 'Height'; this.wh = this.ucwh.toLowerCase(); this.uclt = dim == 'x' ? 'Left' : 'Top'; @@ -1048,1610 +1048,1610 @@ hs.Dimension = function(exp, dim) { this.ucrb = dim == 'x' ? 'Right' : 'Bottom'; this.rb = this.ucrb.toLowerCase(); this.p1 = this.p2 = 0; -}; -hs.Dimension.prototype = { -get : function(key) { - switch (key) { - case 'loadingPos': - return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; - case 'loadingPosXfade': - return this.pos + this.cb+ this.p1 + (this.size - hs.loading['offset'+ this.ucwh]) / 2; +}; +hs.Dimension.prototype = { +get : function(key) { + switch (key) { + case 'loadingPos': + return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; + case 'loadingPosXfade': + return this.pos + this.cb+ this.p1 + (this.size - hs.loading['offset'+ this.ucwh]) / 2; case 'wsize': - return this.size + 2 * this.cb + this.p1 + this.p2; + return this.size + 2 * this.cb + this.p1 + this.p2; case 'fitsize': - return this.clientSize - this.marginMin - this.marginMax; + return this.clientSize - this.marginMin - this.marginMax; case 'maxsize': - return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; + return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; case 'opos': - return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); + return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); case 'osize': - return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); + return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); case 'imgPad': - return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; - - } -}, -calcBorders: function() { - // correct for borders + return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; + + } +}, +calcBorders: function() { + // correct for borders this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2; - - this.marginMax = hs['margin'+ this.ucrb]; -}, -calcThumb: function() { - this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : + + this.marginMax = hs['margin'+ this.ucrb]; +}, +calcThumb: function() { + this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : this.exp.el['offset'+ this.ucwh]; this.tpos = this.exp.tpos[this.dim]; this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2; if (this.tpos == 0 || this.tpos == -1) { - this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; - }; -}, -calcExpanded: function() { - var exp = this.exp; - this.justify = 'auto'; - - // get alignment - if (exp.align == 'center') this.justify = 'center'; - else if (new RegExp(this.lt).test(exp.anchor)) this.justify = null; - else if (new RegExp(this.rb).test(exp.anchor)) this.justify = 'max'; - - - // size and position + this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; + }; +}, +calcExpanded: function() { + var exp = this.exp; + this.justify = 'auto'; + + // get alignment + if (exp.align == 'center') this.justify = 'center'; + else if (new RegExp(this.lt).test(exp.anchor)) this.justify = null; + else if (new RegExp(this.rb).test(exp.anchor)) this.justify = 'max'; + + + // size and position this.pos = this.tpos - this.cb + this.tb; - + if (this.maxHeight && this.dim == 'x') - exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); - - this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); - this.minSize = exp.allowSizeReduction ? - Math.min(exp['min'+ this.ucwh], this.full) :this.full; - if (exp.isImage && exp.useBox) { - this.size = exp[this.wh]; - this.imgSize = this.full; - } - if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; - this.target = exp['target'+ this.dim.toUpperCase()]; - this.marginMin = hs['margin'+ this.uclt]; - this.scroll = hs.page['scroll'+ this.uclt]; - this.clientSize = hs.page[this.wh]; -}, -setSize: function(i) { - var exp = this.exp; - if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { - this.imgSize = i; - this.size = Math.max(this.size, this.imgSize); - exp.content.style[this.lt] = this.get('imgPad')+'px'; - } else - this.size = i; - - exp.content.style[this.wh] = i +'px'; - exp.wrapper.style[this.wh] = this.get('wsize') +'px'; - if (exp.outline) exp.outline.setPosition(); - if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); - if (this.dim == 'x' && exp.slideshow && exp.isImage) { - if (i == this.full) exp.slideshow.disable('full-expand'); - else exp.slideshow.enable('full-expand'); - } -}, -setPos: function(i) { - this.pos = i; - this.exp.wrapper.style[this.lt] = i +'px'; - - if (this.exp.outline) this.exp.outline.setPosition(); - -} -}; - -hs.Expander = function(a, params, custom, contentType) { - if (document.readyState && hs.ie && !hs.isReady) { - hs.addEventListener(document, 'ready', function() { - new hs.Expander(a, params, custom, contentType); - }); - return; - } - this.a = a; - this.custom = custom; - this.contentType = contentType || 'image'; - this.isImage = !this.isHtml; - - hs.continuePreloading = false; - this.overlays = []; - this.last = hs.last; - hs.last = null; - hs.init(); - var key = this.key = hs.expanders.length; - // override inline parameters - for (var i = 0; i < hs.overrides.length; i++) { - var name = hs.overrides[i]; - this[name] = params && typeof params[name] != 'undefined' ? - params[name] : hs[name]; - } - if (!this.src) this.src = a.href; - - // get thumb - var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; - el = this.thumb = el.getElementsByTagName('img')[0] || el; - this.thumbsUserSetId = el.id || a.id; - - // check if already open - for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && hs.expanders[i].a == a - && !(this.last && this.transitions[1] == 'crossfade')) { - hs.expanders[i].focus(); - return false; - } - } - - // cancel other - if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { - hs.expanders[i].cancelLoading(); - } - } - hs.expanders[key] = this; - if (!hs.allowMultipleInstances && !hs.upcoming) { - if (hs.expanders[key-1]) hs.expanders[key-1].close(); - if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) + exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); + + this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); + this.minSize = exp.allowSizeReduction ? + Math.min(exp['min'+ this.ucwh], this.full) :this.full; + if (exp.isImage && exp.useBox) { + this.size = exp[this.wh]; + this.imgSize = this.full; + } + if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; + this.target = exp['target'+ this.dim.toUpperCase()]; + this.marginMin = hs['margin'+ this.uclt]; + this.scroll = hs.page['scroll'+ this.uclt]; + this.clientSize = hs.page[this.wh]; +}, +setSize: function(i) { + var exp = this.exp; + if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { + this.imgSize = i; + this.size = Math.max(this.size, this.imgSize); + exp.content.style[this.lt] = this.get('imgPad')+'px'; + } else + this.size = i; + + exp.content.style[this.wh] = i +'px'; + exp.wrapper.style[this.wh] = this.get('wsize') +'px'; + if (exp.outline) exp.outline.setPosition(); + if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); + if (this.dim == 'x' && exp.slideshow && exp.isImage) { + if (i == this.full) exp.slideshow.disable('full-expand'); + else exp.slideshow.enable('full-expand'); + } +}, +setPos: function(i) { + this.pos = i; + this.exp.wrapper.style[this.lt] = i +'px'; + + if (this.exp.outline) this.exp.outline.setPosition(); + +} +}; + +hs.Expander = function(a, params, custom, contentType) { + if (document.readyState && hs.ie && !hs.isReady) { + hs.addEventListener(document, 'ready', function() { + new hs.Expander(a, params, custom, contentType); + }); + return; + } + this.a = a; + this.custom = custom; + this.contentType = contentType || 'image'; + this.isImage = !this.isHtml; + + hs.continuePreloading = false; + this.overlays = []; + this.last = hs.last; + hs.last = null; + hs.init(); + var key = this.key = hs.expanders.length; + // override inline parameters + for (var i = 0; i < hs.overrides.length; i++) { + var name = hs.overrides[i]; + this[name] = params && typeof params[name] != 'undefined' ? + params[name] : hs[name]; + } + if (!this.src) this.src = a.href; + + // get thumb + var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; + el = this.thumb = el.getElementsByTagName('img')[0] || el; + this.thumbsUserSetId = el.id || a.id; + + // check if already open + for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && hs.expanders[i].a == a + && !(this.last && this.transitions[1] == 'crossfade')) { + hs.expanders[i].focus(); + return false; + } + } + + // cancel other + if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { + hs.expanders[i].cancelLoading(); + } + } + hs.expanders[key] = this; + if (!hs.allowMultipleInstances && !hs.upcoming) { + if (hs.expanders[key-1]) hs.expanders[key-1].close(); + if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) hs.expanders[hs.focusKey].close(); - } - - // initiate metrics - this.el = el; - this.tpos = this.pageOrigin || hs.getPosition(el); - hs.getPageSize(); - var x = this.x = new hs.Dimension(this, 'x'); - x.calcThumb(); - var y = this.y = new hs.Dimension(this, 'y'); + } + + // initiate metrics + this.el = el; + this.tpos = this.pageOrigin || hs.getPosition(el); + hs.getPageSize(); + var x = this.x = new hs.Dimension(this, 'x'); + x.calcThumb(); + var y = this.y = new hs.Dimension(this, 'y'); y.calcThumb(); - this.wrapper = hs.createElement( - 'div', { - id: 'highslide-wrapper-'+ this.key, - className: 'highslide-wrapper '+ this.wrapperClassName - }, { - visibility: 'hidden', - position: 'absolute', - zIndex: hs.zIndexCounter += 2 - }, null, true ); - - this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; - if (this.contentType == 'image' && this.outlineWhileAnimating == 2) - this.outlineWhileAnimating = 0; - - // get the outline - if (!this.outlineType - || (this.last && this.isImage && this.transitions[1] == 'crossfade')) { - this[this.contentType +'Create'](); - - } else if (hs.pendingOutlines[this.outlineType]) { - this.connectOutline(); - this[this.contentType +'Create'](); - - } else { - this.showLoading(); - var exp = this; - new hs.Outline(this.outlineType, - function () { - exp.connectOutline(); - exp[exp.contentType +'Create'](); - } - ); - } + this.wrapper = hs.createElement( + 'div', { + id: 'highslide-wrapper-'+ this.key, + className: 'highslide-wrapper '+ this.wrapperClassName + }, { + visibility: 'hidden', + position: 'absolute', + zIndex: hs.zIndexCounter += 2 + }, null, true ); + + this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; + if (this.contentType == 'image' && this.outlineWhileAnimating == 2) + this.outlineWhileAnimating = 0; + + // get the outline + if (!this.outlineType + || (this.last && this.isImage && this.transitions[1] == 'crossfade')) { + this[this.contentType +'Create'](); + + } else if (hs.pendingOutlines[this.outlineType]) { + this.connectOutline(); + this[this.contentType +'Create'](); + + } else { + this.showLoading(); + var exp = this; + new hs.Outline(this.outlineType, + function () { + exp.connectOutline(); + exp[exp.contentType +'Create'](); + } + ); + } return true; -}; - -hs.Expander.prototype = { -error : function(e) { - if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); - else window.location.href = this.src; -}, - -connectOutline : function() { - var outline = this.outline = hs.pendingOutlines[this.outlineType]; - outline.exp = this; - outline.table.style.zIndex = this.wrapper.style.zIndex - 1; - hs.pendingOutlines[this.outlineType] = null; -}, - -showLoading : function() { - if (this.onLoadStarted || this.loading) return; - - this.loading = hs.loading; - var exp = this; - this.loading.onclick = function() { - exp.cancelLoading(); - }; - var exp = this, - l = this.x.get('loadingPos') +'px', +}; + +hs.Expander.prototype = { +error : function(e) { + if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); + else window.location.href = this.src; +}, + +connectOutline : function() { + var outline = this.outline = hs.pendingOutlines[this.outlineType]; + outline.exp = this; + outline.table.style.zIndex = this.wrapper.style.zIndex - 1; + hs.pendingOutlines[this.outlineType] = null; +}, + +showLoading : function() { + if (this.onLoadStarted || this.loading) return; + + this.loading = hs.loading; + var exp = this; + this.loading.onclick = function() { + exp.cancelLoading(); + }; + var exp = this, + l = this.x.get('loadingPos') +'px', t = this.y.get('loadingPos') +'px'; - if (!tgt && this.last && this.transitions[1] == 'crossfade') - var tgt = this.last; - if (tgt) { - l = tgt.x.get('loadingPosXfade') +'px'; - t = tgt.y.get('loadingPosXfade') +'px'; - this.loading.style.zIndex = hs.zIndexCounter++; - } - setTimeout(function () { - if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} - , 100); -}, - -imageCreate : function() { - var exp = this; - - var img = document.createElement('img'); - this.content = img; - img.onload = function () { - if (hs.expanders[exp.key]) exp.contentLoaded(); - }; - if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; - img.className = 'highslide-image'; - hs.setStyles(img, { + if (!tgt && this.last && this.transitions[1] == 'crossfade') + var tgt = this.last; + if (tgt) { + l = tgt.x.get('loadingPosXfade') +'px'; + t = tgt.y.get('loadingPosXfade') +'px'; + this.loading.style.zIndex = hs.zIndexCounter++; + } + setTimeout(function () { + if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} + , 100); +}, + +imageCreate : function() { + var exp = this; + + var img = document.createElement('img'); + this.content = img; + img.onload = function () { + if (hs.expanders[exp.key]) exp.contentLoaded(); + }; + if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; + img.className = 'highslide-image'; + hs.setStyles(img, { visibility: 'hidden', - display: 'block', - position: 'absolute', - maxWidth: '9999px', - zIndex: 3 - }); - img.title = hs.lang.restoreTitle; - if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); - if (hs.ie && hs.flushImgSize) img.src = null; - img.src = this.src; - - this.showLoading(); -}, - -contentLoaded : function() { - try { - if (!this.content) return; + display: 'block', + position: 'absolute', + maxWidth: '9999px', + zIndex: 3 + }); + img.title = hs.lang.restoreTitle; + if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); + if (hs.ie && hs.flushImgSize) img.src = null; + img.src = this.src; + + this.showLoading(); +}, + +contentLoaded : function() { + try { + if (!this.content) return; this.content.onload = null; if (this.onLoadStarted) return; - else this.onLoadStarted = true; - - var x = this.x, y = this.y; - - if (this.loading) { - hs.setStyles(this.loading, { top: '-9999px' }); - this.loading = null; - } - x.full = this.content.width; - y.full = this.content.height; - - hs.setStyles(this.content, { - width: x.t +'px', - height: y.t +'px' - }); - this.wrapper.appendChild(this.content); - hs.container.appendChild(this.wrapper); - - x.calcBorders(); - y.calcBorders(); - + else this.onLoadStarted = true; + + var x = this.x, y = this.y; + + if (this.loading) { + hs.setStyles(this.loading, { top: '-9999px' }); + this.loading = null; + } + x.full = this.content.width; + y.full = this.content.height; + + hs.setStyles(this.content, { + width: x.t +'px', + height: y.t +'px' + }); + this.wrapper.appendChild(this.content); + hs.container.appendChild(this.wrapper); + + x.calcBorders(); + y.calcBorders(); + hs.setStyles (this.wrapper, { - left: (x.tpos + x.tb - x.cb) +'px', - top: (y.tpos + x.tb - y.cb) +'px' - }); - - + left: (x.tpos + x.tb - x.cb) +'px', + top: (y.tpos + x.tb - y.cb) +'px' + }); + + this.initSlideshow(); - this.getOverlays(); - - var ratio = x.full / y.full; - x.calcExpanded(); - this.justify(x); - - y.calcExpanded(); - this.justify(y); - if (this.overlayBox) this.sizeOverlayBox(0, 1); - - - if (this.allowSizeReduction) { + this.getOverlays(); + + var ratio = x.full / y.full; + x.calcExpanded(); + this.justify(x); + + y.calcExpanded(); + this.justify(y); + if (this.overlayBox) this.sizeOverlayBox(0, 1); + + + if (this.allowSizeReduction) { this.correctRatio(ratio); - var ss = this.slideshow; - if (ss && this.last && ss.controls && ss.fixedControls) { - var pos = ss.overlayOptions.position || '', p; - for (var dim in hs.oPos) for (var i = 0; i < 5; i++) { - p = this[dim]; - if (pos.match(hs.oPos[dim][i])) { - p.pos = this.last[dim].pos - + (this.last[dim].p1 - p.p1) - + (this.last[dim].size - p.size) * [0, 0, .5, 1, 1][i]; - if (ss.fixedControls == 'fit') { - if (p.pos + p.size + p.p1 + p.p2 > p.scroll + p.clientSize - p.marginMax) - p.pos = p.scroll + p.clientSize - p.size - p.marginMin - p.marginMax - p.p1 - p.p2; - if (p.pos < p.scroll + p.marginMin) p.pos = p.scroll + p.marginMin; - } - } - } - } - if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { - this.createFullExpand(); - if (this.overlays.length == 1) this.sizeOverlayBox(); - } - } - this.show(); - - } catch (e) { - this.error(e); - } -}, - -justify : function (p, moveOnly) { - var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; - - if (tgt && tgt.match(/ /)) { - tgtArr = tgt.split(' '); - tgt = tgtArr[0]; - } - if (tgt && hs.$(tgt)) { - p.pos = hs.getPosition(hs.$(tgt))[dim]; - if (tgtArr && tgtArr[1] && tgtArr[1].match(/^[-]?[0-9]+px$/)) - p.pos += parseInt(tgtArr[1]); - if (p.size < p.minSize) p.size = p.minSize; - - } else if (p.justify == 'auto' || p.justify == 'center') { - - var hasMovedMin = false; - + var ss = this.slideshow; + if (ss && this.last && ss.controls && ss.fixedControls) { + var pos = ss.overlayOptions.position || '', p; + for (var dim in hs.oPos) for (var i = 0; i < 5; i++) { + p = this[dim]; + if (pos.match(hs.oPos[dim][i])) { + p.pos = this.last[dim].pos + + (this.last[dim].p1 - p.p1) + + (this.last[dim].size - p.size) * [0, 0, .5, 1, 1][i]; + if (ss.fixedControls == 'fit') { + if (p.pos + p.size + p.p1 + p.p2 > p.scroll + p.clientSize - p.marginMax) + p.pos = p.scroll + p.clientSize - p.size - p.marginMin - p.marginMax - p.p1 - p.p2; + if (p.pos < p.scroll + p.marginMin) p.pos = p.scroll + p.marginMin; + } + } + } + } + if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { + this.createFullExpand(); + if (this.overlays.length == 1) this.sizeOverlayBox(); + } + } + this.show(); + + } catch (e) { + this.error(e); + } +}, + +justify : function (p, moveOnly) { + var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; + + if (tgt && tgt.match(/ /)) { + tgtArr = tgt.split(' '); + tgt = tgtArr[0]; + } + if (tgt && hs.$(tgt)) { + p.pos = hs.getPosition(hs.$(tgt))[dim]; + if (tgtArr && tgtArr[1] && tgtArr[1].match(/^[-]?[0-9]+px$/)) + p.pos += parseInt(tgtArr[1]); + if (p.size < p.minSize) p.size = p.minSize; + + } else if (p.justify == 'auto' || p.justify == 'center') { + + var hasMovedMin = false; + var allowReduce = p.exp.allowSizeReduction; - if (p.justify == 'center') - p.pos = Math.round(p.scroll + (p.clientSize + p.marginMin - p.marginMax - p.get('wsize')) / 2); - else + if (p.justify == 'center') + p.pos = Math.round(p.scroll + (p.clientSize + p.marginMin - p.marginMax - p.get('wsize')) / 2); + else p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2)); - if (p.pos < p.scroll + p.marginMin) { - p.pos = p.scroll + p.marginMin; - hasMovedMin = true; + if (p.pos < p.scroll + p.marginMin) { + p.pos = p.scroll + p.marginMin; + hasMovedMin = true; } - if (!moveOnly && p.size < p.minSize) { - p.size = p.minSize; - allowReduce = false; + if (!moveOnly && p.size < p.minSize) { + p.size = p.minSize; + allowReduce = false; } if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) { if (!moveOnly && hasMovedMin && allowReduce) { p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize')); - } else if (p.get('wsize') < p.get('fitsize')) { + } else if (p.get('wsize') < p.get('fitsize')) { p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize'); - } else { // image larger than viewport - p.pos = p.scroll + p.marginMin; - if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); - } - } - - if (!moveOnly && p.size < p.minSize) { - p.size = p.minSize; - allowReduce = false; + } else { // image larger than viewport + p.pos = p.scroll + p.marginMin; + if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); + } } - - - } else if (p.justify == 'max') { - p.pos = Math.floor(p.pos - p.size + p.t); - } - - - if (p.pos < p.marginMin) { - var tmpMin = p.pos; - p.pos = p.marginMin; - - if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); - - } -}, - -correctRatio : function(ratio) { - var x = this.x, - y = this.y, + + if (!moveOnly && p.size < p.minSize) { + p.size = p.minSize; + allowReduce = false; + } + + + } else if (p.justify == 'max') { + p.pos = Math.floor(p.pos - p.size + p.t); + } + + + if (p.pos < p.marginMin) { + var tmpMin = p.pos; + p.pos = p.marginMin; + + if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); + + } +}, + +correctRatio : function(ratio) { + var x = this.x, + y = this.y, changed = false, - xSize = Math.min(x.full, x.size), - ySize = Math.min(y.full, y.size), - useBox = (this.useBox || hs.padToMinWidth); - - if (xSize / ySize > ratio) { // width greater - xSize = ySize * ratio; - if (xSize < x.minSize) { // below minWidth - xSize = x.minSize; - ySize = xSize / ratio; - } - changed = true; - - } else if (xSize / ySize < ratio) { // height greater - ySize = xSize / ratio; - changed = true; - } - - if (hs.padToMinWidth && x.full < x.minSize) { - x.imgSize = x.full; - y.size = y.imgSize = y.full; - } else if (this.useBox) { - x.imgSize = xSize; - y.imgSize = ySize; - } else { - x.size = xSize; - y.size = ySize; - } + xSize = Math.min(x.full, x.size), + ySize = Math.min(y.full, y.size), + useBox = (this.useBox || hs.padToMinWidth); + + if (xSize / ySize > ratio) { // width greater + xSize = ySize * ratio; + if (xSize < x.minSize) { // below minWidth + xSize = x.minSize; + ySize = xSize / ratio; + } + changed = true; + + } else if (xSize / ySize < ratio) { // height greater + ySize = xSize / ratio; + changed = true; + } + + if (hs.padToMinWidth && x.full < x.minSize) { + x.imgSize = x.full; + y.size = y.imgSize = y.full; + } else if (this.useBox) { + x.imgSize = xSize; + y.imgSize = ySize; + } else { + x.size = xSize; + y.size = ySize; + } changed = this.fitOverlayBox(this.useBox ? null : ratio, changed); - if (useBox && y.size < y.imgSize) { - y.imgSize = y.size; - x.imgSize = y.size * ratio; - } - if (changed || useBox) { - x.pos = x.tpos - x.cb + x.tb; - x.minSize = x.size; - this.justify(x, true); - - y.pos = y.tpos - y.cb + y.tb; - y.minSize = y.size; - this.justify(y, true); - if (this.overlayBox) this.sizeOverlayBox(); - } - - -}, -fitOverlayBox : function(ratio, changed) { - var x = this.x, y = this.y; - if (this.overlayBox) { - while (y.size > this.minHeight && x.size > this.minWidth - && y.get('wsize') > y.get('fitsize')) { - y.size -= 10; - if (ratio) x.size = y.size * ratio; - this.sizeOverlayBox(0, 1); - changed = true; - } - } - return changed; -}, - -show : function () { + if (useBox && y.size < y.imgSize) { + y.imgSize = y.size; + x.imgSize = y.size * ratio; + } + if (changed || useBox) { + x.pos = x.tpos - x.cb + x.tb; + x.minSize = x.size; + this.justify(x, true); + + y.pos = y.tpos - y.cb + y.tb; + y.minSize = y.size; + this.justify(y, true); + if (this.overlayBox) this.sizeOverlayBox(); + } + + +}, +fitOverlayBox : function(ratio, changed) { var x = this.x, y = this.y; - this.doShowHide('hidden'); - if (this.slideshow && this.slideshow.thumbstrip) this.slideshow.thumbstrip.selectThumb(); - - // Apply size change - this.changeSize( - 1, { - wrapper: { - width : x.get('wsize'), - height : y.get('wsize'), - left: x.pos, - top: y.pos - }, - content: { - left: x.p1 + x.get('imgPad'), - top: y.p1 + y.get('imgPad'), - width:x.imgSize ||x.size, - height:y.imgSize ||y.size - } - }, - hs.expandDuration - ); -}, - -changeSize : function(up, to, dur) { - // transition - var trans = this.transitions, - other = up ? (this.last ? this.last.a : null) : hs.upcoming, - t = (trans[1] && other - && hs.getParam(other, 'transitions')[1] == trans[1]) ? - trans[1] : trans[0]; - - if (this[t] && t != 'expand') { - this[t](up, to); - return; - } - - if (this.outline && !this.outlineWhileAnimating) { - if (up) this.outline.setPosition(); - else this.outline.destroy(); - } - - - if (!up) this.destroyOverlays(); - - var exp = this, - x = exp.x, - y = exp.y, - easing = this.easing; + if (this.overlayBox) { + while (y.size > this.minHeight && x.size > this.minWidth + && y.get('wsize') > y.get('fitsize')) { + y.size -= 10; + if (ratio) x.size = y.size * ratio; + this.sizeOverlayBox(0, 1); + changed = true; + } + } + return changed; +}, + +show : function () { + var x = this.x, y = this.y; + this.doShowHide('hidden'); + if (this.slideshow && this.slideshow.thumbstrip) this.slideshow.thumbstrip.selectThumb(); + + // Apply size change + this.changeSize( + 1, { + wrapper: { + width : x.get('wsize'), + height : y.get('wsize'), + left: x.pos, + top: y.pos + }, + content: { + left: x.p1 + x.get('imgPad'), + top: y.p1 + y.get('imgPad'), + width:x.imgSize ||x.size, + height:y.imgSize ||y.size + } + }, + hs.expandDuration + ); +}, + +changeSize : function(up, to, dur) { + // transition + var trans = this.transitions, + other = up ? (this.last ? this.last.a : null) : hs.upcoming, + t = (trans[1] && other + && hs.getParam(other, 'transitions')[1] == trans[1]) ? + trans[1] : trans[0]; + + if (this[t] && t != 'expand') { + this[t](up, to); + return; + } + + if (this.outline && !this.outlineWhileAnimating) { + if (up) this.outline.setPosition(); + else this.outline.destroy(); + } + + + if (!up) this.destroyOverlays(); + + var exp = this, + x = exp.x, + y = exp.y, + easing = this.easing; if (!up) easing = this.easingClose || easing; - var after = up ? - function() { - - if (exp.outline) exp.outline.table.style.visibility = "visible"; - setTimeout(function() { - exp.afterExpand(); - }, 50); - } : - function() { - exp.afterClose(); + var after = up ? + function() { + + if (exp.outline) exp.outline.table.style.visibility = "visible"; + setTimeout(function() { + exp.afterExpand(); + }, 50); + } : + function() { + exp.afterClose(); }; - if (up) hs.setStyles( this.wrapper, { - width: x.t +'px', - height: y.t +'px' + if (up) hs.setStyles( this.wrapper, { + width: x.t +'px', + height: y.t +'px' }); - if (this.fadeInOut) { - hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); + if (this.fadeInOut) { + hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); hs.extend(to.wrapper, { opacity: up }); - } - hs.animate( this.wrapper, to.wrapper, { - duration: dur, - easing: easing, - step: function(val, args) { - if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { - var fac = up ? args.pos : 1 - args.pos; - var pos = { - w: x.t + (x.get('wsize') - x.t) * fac, - h: y.t + (y.get('wsize') - y.t) * fac, - x: x.tpos + (x.pos - x.tpos) * fac, - y: y.tpos + (y.pos - y.tpos) * fac - }; - exp.outline.setPosition(pos, 0, 1); - } - } + } + hs.animate( this.wrapper, to.wrapper, { + duration: dur, + easing: easing, + step: function(val, args) { + if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { + var fac = up ? args.pos : 1 - args.pos; + var pos = { + w: x.t + (x.get('wsize') - x.t) * fac, + h: y.t + (y.get('wsize') - y.t) * fac, + x: x.tpos + (x.pos - x.tpos) * fac, + y: y.tpos + (y.pos - y.tpos) * fac + }; + exp.outline.setPosition(pos, 0, 1); + } + } }); hs.animate( this.content, to.content, dur, easing, after); - if (up) { - this.wrapper.style.visibility = 'visible'; - this.content.style.visibility = 'visible'; - this.a.className += ' highslide-active-anchor'; - } -}, - - - -fade : function(up, to) { - this.outlineWhileAnimating = false; - var exp = this, t = up ? hs.expandDuration : 0; - - if (up) { + if (up) { + this.wrapper.style.visibility = 'visible'; + this.content.style.visibility = 'visible'; + this.a.className += ' highslide-active-anchor'; + } +}, + + + +fade : function(up, to) { + this.outlineWhileAnimating = false; + var exp = this, t = up ? hs.expandDuration : 0; + + if (up) { hs.animate(this.wrapper, to.wrapper, 0); - hs.setStyles(this.wrapper, { opacity: 0, visibility: 'visible' }); - hs.animate(this.content, to.content, 0); - this.content.style.visibility = 'visible'; - - hs.animate(this.wrapper, { opacity: 1 }, t, null, - function() { exp.afterExpand(); }); - } - - if (this.outline) { - this.outline.table.style.zIndex = this.wrapper.style.zIndex; - var dir = up || -1, - offset = this.outline.offset, - startOff = up ? 3 : offset, - endOff = up? offset : 3; - for (var i = startOff; dir * i <= dir * endOff; i += dir, t += 25) { - (function() { - var o = up ? endOff - i : startOff - i; - setTimeout(function() { - exp.outline.setPosition(0, o, 1); - }, t); - })(); - } - } - - - if (up) {}//setTimeout(function() { exp.afterExpand(); }, t+50); - else { - setTimeout( function() { - if (exp.outline) exp.outline.destroy(exp.preserveContent); - - exp.destroyOverlays(); - - hs.animate( exp.wrapper, { opacity: 0 }, hs.restoreDuration, null, function(){ - exp.afterClose(); - }); - }, t); - } -}, -crossfade : function (up, to, from) { - if (!up) return; - var exp = this, - last = this.last, - x = this.x, - y = this.y, - lastX = last.x, - lastY = last.y, - wrapper = this.wrapper, - content = this.content, - overlayBox = this.overlayBox; - hs.removeEventListener(document, 'mousemove', hs.dragHandler); - - hs.setStyles(content, { - width: (x.imgSize || x.size) +'px', - height: (y.imgSize || y.size) +'px' - }); - if (overlayBox) overlayBox.style.overflow = 'visible'; - this.outline = last.outline; - if (this.outline) this.outline.exp = exp; + hs.setStyles(this.wrapper, { opacity: 0, visibility: 'visible' }); + hs.animate(this.content, to.content, 0); + this.content.style.visibility = 'visible'; + + hs.animate(this.wrapper, { opacity: 1 }, t, null, + function() { exp.afterExpand(); }); + } + + if (this.outline) { + this.outline.table.style.zIndex = this.wrapper.style.zIndex; + var dir = up || -1, + offset = this.outline.offset, + startOff = up ? 3 : offset, + endOff = up? offset : 3; + for (var i = startOff; dir * i <= dir * endOff; i += dir, t += 25) { + (function() { + var o = up ? endOff - i : startOff - i; + setTimeout(function() { + exp.outline.setPosition(0, o, 1); + }, t); + })(); + } + } + + + if (up) {}//setTimeout(function() { exp.afterExpand(); }, t+50); + else { + setTimeout( function() { + if (exp.outline) exp.outline.destroy(exp.preserveContent); + + exp.destroyOverlays(); + + hs.animate( exp.wrapper, { opacity: 0 }, hs.restoreDuration, null, function(){ + exp.afterClose(); + }); + }, t); + } +}, +crossfade : function (up, to, from) { + if (!up) return; + var exp = this, + last = this.last, + x = this.x, + y = this.y, + lastX = last.x, + lastY = last.y, + wrapper = this.wrapper, + content = this.content, + overlayBox = this.overlayBox; + hs.removeEventListener(document, 'mousemove', hs.dragHandler); + + hs.setStyles(content, { + width: (x.imgSize || x.size) +'px', + height: (y.imgSize || y.size) +'px' + }); + if (overlayBox) overlayBox.style.overflow = 'visible'; + this.outline = last.outline; + if (this.outline) this.outline.exp = exp; last.outline = null; - var fadeBox = hs.createElement('div', { - className: 'highslide-'+ this.contentType - }, { - position: 'absolute', - zIndex: 4, - overflow: 'hidden', - display: 'none' - } + var fadeBox = hs.createElement('div', { + className: 'highslide-'+ this.contentType + }, { + position: 'absolute', + zIndex: 4, + overflow: 'hidden', + display: 'none' + } ); - var names = { oldImg: last, newImg: this }; - for (var n in names) { - this[n] = names[n].content.cloneNode(1); - hs.setStyles(this[n], { - position: 'absolute', - border: 0, - visibility: 'visible' - }); - fadeBox.appendChild(this[n]); - } - wrapper.appendChild(fadeBox); - if (overlayBox) { - overlayBox.className = ''; - wrapper.appendChild(overlayBox); - } - fadeBox.style.display = ''; - last.content.style.display = 'none'; - - + var names = { oldImg: last, newImg: this }; + for (var n in names) { + this[n] = names[n].content.cloneNode(1); + hs.setStyles(this[n], { + position: 'absolute', + border: 0, + visibility: 'visible' + }); + fadeBox.appendChild(this[n]); + } + wrapper.appendChild(fadeBox); + if (overlayBox) { + overlayBox.className = ''; + wrapper.appendChild(overlayBox); + } + fadeBox.style.display = ''; + last.content.style.display = 'none'; + + if (hs.safari && hs.uaVersion < 525) { - this.wrapper.style.visibility = 'visible'; - } - hs.animate(wrapper, { - width: x.size - }, { - duration: hs.transitionDuration, - step: function(val, args) { - var pos = args.pos, + this.wrapper.style.visibility = 'visible'; + } + hs.animate(wrapper, { + width: x.size + }, { + duration: hs.transitionDuration, + step: function(val, args) { + var pos = args.pos, invPos = 1 - pos; - var prop, - size = {}, - props = ['pos', 'size', 'p1', 'p2']; - for (var n in props) { - prop = props[n]; - size['x'+ prop] = Math.round(invPos * lastX[prop] + pos * x[prop]); + var prop, + size = {}, + props = ['pos', 'size', 'p1', 'p2']; + for (var n in props) { + prop = props[n]; + size['x'+ prop] = Math.round(invPos * lastX[prop] + pos * x[prop]); size['y'+ prop] = Math.round(invPos * lastY[prop] + pos * y[prop]); - size.ximgSize = Math.round( - invPos * (lastX.imgSize || lastX.size) + pos * (x.imgSize || x.size)); - size.ximgPad = Math.round(invPos * lastX.get('imgPad') + pos * x.get('imgPad')); - size.yimgSize = Math.round( - invPos * (lastY.imgSize || lastY.size) + pos * (y.imgSize || y.size)); - size.yimgPad = Math.round(invPos * lastY.get('imgPad') + pos * y.get('imgPad')); - } - if (exp.outline) exp.outline.setPosition({ - x: size.xpos, - y: size.ypos, - w: size.xsize + size.xp1 + size.xp2 + 2 * x.cb, - h: size.ysize + size.yp1 + size.yp2 + 2 * y.cb + size.ximgSize = Math.round( + invPos * (lastX.imgSize || lastX.size) + pos * (x.imgSize || x.size)); + size.ximgPad = Math.round(invPos * lastX.get('imgPad') + pos * x.get('imgPad')); + size.yimgSize = Math.round( + invPos * (lastY.imgSize || lastY.size) + pos * (y.imgSize || y.size)); + size.yimgPad = Math.round(invPos * lastY.get('imgPad') + pos * y.get('imgPad')); + } + if (exp.outline) exp.outline.setPosition({ + x: size.xpos, + y: size.ypos, + w: size.xsize + size.xp1 + size.xp2 + 2 * x.cb, + h: size.ysize + size.yp1 + size.yp2 + 2 * y.cb }); - last.wrapper.style.clip = 'rect(' + last.wrapper.style.clip = 'rect(' + (size.ypos - lastY.pos)+'px, ' + (size.xsize + size.xp1 + size.xp2 + size.xpos + 2 * lastX.cb - lastX.pos) +'px, ' + (size.ysize + size.yp1 + size.yp2 + size.ypos + 2 * lastY.cb - lastY.pos) +'px, ' + (size.xpos - lastX.pos)+'px)'; - - hs.setStyles(content, { - top: (size.yp1 + y.get('imgPad')) +'px', - left: (size.xp1 + x.get('imgPad')) +'px', - marginTop: (y.pos - size.ypos) +'px', - marginLeft: (x.pos - size.xpos) +'px' - }); - hs.setStyles(wrapper, { - top: size.ypos +'px', - left: size.xpos +'px', - width: (size.xp1 + size.xp2 + size.xsize + 2 * x.cb)+ 'px', - height: (size.yp1 + size.yp2 + size.ysize + 2 * y.cb) + 'px' - }); - hs.setStyles(fadeBox, { - width: (size.ximgSize || size.xsize) + 'px', - height: (size.yimgSize || size.ysize) +'px', - left: (size.xp1 + size.ximgPad) +'px', - top: (size.yp1 + size.yimgPad) +'px', - visibility: 'visible' - }); - - hs.setStyles(exp.oldImg, { - top: (lastY.pos - size.ypos + lastY.p1 - size.yp1 + lastY.get('imgPad') - size.yimgPad)+'px', - left: (lastX.pos - size.xpos + lastX.p1 - size.xp1 + lastX.get('imgPad') - size.ximgPad)+'px' - }); - - hs.setStyles(exp.newImg, { - opacity: pos, - top: (y.pos - size.ypos + y.p1 - size.yp1 + y.get('imgPad') - size.yimgPad) +'px', - left: (x.pos - size.xpos + x.p1 - size.xp1 + x.get('imgPad') - size.ximgPad) +'px' - }); - if (overlayBox) hs.setStyles(overlayBox, { - width: size.xsize + 'px', - height: size.ysize +'px', - left: (size.xp1 + x.cb) +'px', - top: (size.yp1 + y.cb) +'px' - }); - }, - complete: function () { - wrapper.style.visibility = content.style.visibility = 'visible'; - content.style.display = 'block'; - hs.discardElement(fadeBox); - exp.afterExpand(); - last.afterClose(); - exp.last = null; - } - - }); -}, -reuseOverlay : function(o, el) { - if (!this.last) return false; - for (var i = 0; i < this.last.overlays.length; i++) { - var oDiv = hs.$('hsId'+ this.last.overlays[i]); - if (oDiv && oDiv.hsId == o.hsId) { - this.genOverlayBox(); - oDiv.reuse = this.key; - hs.push(this.overlays, this.last.overlays[i]); - return true; - } - } - return false; -}, - - -afterExpand : function() { - this.isExpanded = true; + + hs.setStyles(content, { + top: (size.yp1 + y.get('imgPad')) +'px', + left: (size.xp1 + x.get('imgPad')) +'px', + marginTop: (y.pos - size.ypos) +'px', + marginLeft: (x.pos - size.xpos) +'px' + }); + hs.setStyles(wrapper, { + top: size.ypos +'px', + left: size.xpos +'px', + width: (size.xp1 + size.xp2 + size.xsize + 2 * x.cb)+ 'px', + height: (size.yp1 + size.yp2 + size.ysize + 2 * y.cb) + 'px' + }); + hs.setStyles(fadeBox, { + width: (size.ximgSize || size.xsize) + 'px', + height: (size.yimgSize || size.ysize) +'px', + left: (size.xp1 + size.ximgPad) +'px', + top: (size.yp1 + size.yimgPad) +'px', + visibility: 'visible' + }); + + hs.setStyles(exp.oldImg, { + top: (lastY.pos - size.ypos + lastY.p1 - size.yp1 + lastY.get('imgPad') - size.yimgPad)+'px', + left: (lastX.pos - size.xpos + lastX.p1 - size.xp1 + lastX.get('imgPad') - size.ximgPad)+'px' + }); + + hs.setStyles(exp.newImg, { + opacity: pos, + top: (y.pos - size.ypos + y.p1 - size.yp1 + y.get('imgPad') - size.yimgPad) +'px', + left: (x.pos - size.xpos + x.p1 - size.xp1 + x.get('imgPad') - size.ximgPad) +'px' + }); + if (overlayBox) hs.setStyles(overlayBox, { + width: size.xsize + 'px', + height: size.ysize +'px', + left: (size.xp1 + x.cb) +'px', + top: (size.yp1 + y.cb) +'px' + }); + }, + complete: function () { + wrapper.style.visibility = content.style.visibility = 'visible'; + content.style.display = 'block'; + hs.discardElement(fadeBox); + exp.afterExpand(); + last.afterClose(); + exp.last = null; + } + + }); +}, +reuseOverlay : function(o, el) { + if (!this.last) return false; + for (var i = 0; i < this.last.overlays.length; i++) { + var oDiv = hs.$('hsId'+ this.last.overlays[i]); + if (oDiv && oDiv.hsId == o.hsId) { + this.genOverlayBox(); + oDiv.reuse = this.key; + hs.push(this.overlays, this.last.overlays[i]); + return true; + } + } + return false; +}, + + +afterExpand : function() { + this.isExpanded = true; this.focus(); - if (this.dimmingOpacity) hs.dim(this); + if (this.dimmingOpacity) hs.dim(this); if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null; this.prepareNextOutline(); - var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; - this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') - && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); - if (this.overlayBox) this.showOverlays(); - -}, - - -prepareNextOutline : function() { - var key = this.key; - var outlineType = this.outlineType; - new hs.Outline(outlineType, - function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); -}, - - -preloadNext : function() { - var next = this.getAdjacentAnchor(1); - if (next && next.onclick.toString().match(/hs\.expand/)) - var img = hs.createElement('img', { src: hs.getSrc(next) }); -}, - - -getAdjacentAnchor : function(op) { - var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; - if (as && !as[current + op] && this.slideshow && this.slideshow.repeat) { - if (op == 1) return as[0]; - else if (op == -1) return as[as.length-1]; - } - return (as && as[current + op]) || null; -}, - -getAnchorIndex : function() { - var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; - if (arr) for (var i = 0; i < arr.length; i++) { - if (arr[i] == this.a) return i; - } - return null; -}, - - -getNumber : function() { - if (this[this.numberPosition]) { - var arr = hs.anchors.groups[this.slideshowGroup || 'none']; - if (arr) { + var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; + this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') + && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); + if (this.overlayBox) this.showOverlays(); + +}, + + +prepareNextOutline : function() { + var key = this.key; + var outlineType = this.outlineType; + new hs.Outline(outlineType, + function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); +}, + + +preloadNext : function() { + var next = this.getAdjacentAnchor(1); + if (next && next.onclick.toString().match(/hs\.expand/)) + var img = hs.createElement('img', { src: hs.getSrc(next) }); +}, + + +getAdjacentAnchor : function(op) { + var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; + if (as && !as[current + op] && this.slideshow && this.slideshow.repeat) { + if (op == 1) return as[0]; + else if (op == -1) return as[as.length-1]; + } + return (as && as[current + op]) || null; +}, + +getAnchorIndex : function() { + var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; + if (arr) for (var i = 0; i < arr.length; i++) { + if (arr[i] == this.a) return i; + } + return null; +}, + + +getNumber : function() { + if (this[this.numberPosition]) { + var arr = hs.anchors.groups[this.slideshowGroup || 'none']; + if (arr) { var s = hs.lang.number.replace('%1', this.getAnchorIndex() + 1).replace('%2', arr.length); - this[this.numberPosition].innerHTML = - '<div class="highslide-number">'+ s +'</div>'+ this[this.numberPosition].innerHTML; - } - } -}, -initSlideshow : function() { + this[this.numberPosition].innerHTML = + '<div class="highslide-number">'+ s +'</div>'+ this[this.numberPosition].innerHTML; + } + } +}, +initSlideshow : function() { if (!this.last) { - for (var i = 0; i < hs.slideshows.length; i++) { - var ss = hs.slideshows[i], sg = ss.slideshowGroup; - if (typeof sg == 'undefined' || sg === null || sg === this.slideshowGroup) - this.slideshow = new hs.Slideshow(this.key, ss); - } + for (var i = 0; i < hs.slideshows.length; i++) { + var ss = hs.slideshows[i], sg = ss.slideshowGroup; + if (typeof sg == 'undefined' || sg === null || sg === this.slideshowGroup) + this.slideshow = new hs.Slideshow(this.key, ss); + } } else { - this.slideshow = this.last.slideshow; - } - var ss = this.slideshow; - if (!ss) return; - var key = ss.expKey = this.key; - - ss.checkFirstAndLast(); - ss.disable('full-expand'); - if (ss.controls) { - this.createOverlay(hs.extend(ss.overlayOptions || {}, { - overlayId: ss.controls, - hsId: 'controls', - zIndex: 5 - })); - } + this.slideshow = this.last.slideshow; + } + var ss = this.slideshow; + if (!ss) return; + var key = ss.expKey = this.key; + + ss.checkFirstAndLast(); + ss.disable('full-expand'); + if (ss.controls) { + this.createOverlay(hs.extend(ss.overlayOptions || {}, { + overlayId: ss.controls, + hsId: 'controls', + zIndex: 5 + })); + } if (ss.thumbstrip) ss.thumbstrip.add(this); if (!this.last && this.autoplay) ss.play(true); - if (ss.autoplay) { - ss.autoplay = setTimeout(function() { - hs.next(key); - }, (ss.interval || 500)); - } -}, - -cancelLoading : function() { - hs.discardElement (this.wrapper); - hs.expanders[this.key] = null; - if (hs.upcoming == this.a) hs.upcoming = null; - hs.undim(this.key); - if (this.loading) hs.loading.style.left = '-9999px'; -}, - -writeCredits : function () { - if (this.credits) return; - this.credits = hs.createElement('a', { - href: hs.creditsHref, - target: hs.creditsTarget, - className: 'highslide-credits', - innerHTML: hs.lang.creditsText, - title: hs.lang.creditsTitle - }); - this.createOverlay({ - overlayId: this.credits, - position: this.creditsPosition || 'top left', - hsId: 'credits' - }); -}, - -getInline : function(types, addOverlay) { - for (var i = 0; i < types.length; i++) { + if (ss.autoplay) { + ss.autoplay = setTimeout(function() { + hs.next(key); + }, (ss.interval || 500)); + } +}, + +cancelLoading : function() { + hs.discardElement (this.wrapper); + hs.expanders[this.key] = null; + if (hs.upcoming == this.a) hs.upcoming = null; + hs.undim(this.key); + if (this.loading) hs.loading.style.left = '-9999px'; +}, + +writeCredits : function () { + if (this.credits) return; + this.credits = hs.createElement('a', { + href: hs.creditsHref, + target: hs.creditsTarget, + className: 'highslide-credits', + innerHTML: hs.lang.creditsText, + title: hs.lang.creditsTitle + }); + this.createOverlay({ + overlayId: this.credits, + position: this.creditsPosition || 'top left', + hsId: 'credits' + }); +}, + +getInline : function(types, addOverlay) { + for (var i = 0; i < types.length; i++) { var type = types[i], s = null; - if (!this[type +'Id'] && this.thumbsUserSetId) + if (!this[type +'Id'] && this.thumbsUserSetId) this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId; if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']); - if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { - s = eval(this[type +'Eval']); + if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { + s = eval(this[type +'Eval']); } catch (e) {} - if (!this[type] && this[type +'Text']) { - s = this[type +'Text']; + if (!this[type] && this[type +'Text']) { + s = this[type +'Text']; } - if (!this[type] && !s) { + if (!this[type] && !s) { this[type] = hs.getNode(this.a['_'+ type + 'Id']); if (!this[type]) { - var next = this.a.nextSibling; - while (next && !hs.isHsAnchor(next)) { - if ((new RegExp('highslide-'+ type)).test(next.className || null)) { - if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; - this[type] = hs.getNode(next.id); - break; - } - next = next.nextSibling; - } - } + var next = this.a.nextSibling; + while (next && !hs.isHsAnchor(next)) { + if ((new RegExp('highslide-'+ type)).test(next.className || null)) { + if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; + this[type] = hs.getNode(next.id); + break; + } + next = next.nextSibling; + } + } } - if (!this[type] && !s && this.numberPosition == type) s = '\n'; - - if (!this[type] && s) this[type] = hs.createElement('div', - { className: 'highslide-'+ type, innerHTML: s } ); - - if (addOverlay && this[type]) { + if (!this[type] && !s && this.numberPosition == type) s = '\n'; + + if (!this[type] && s) this[type] = hs.createElement('div', + { className: 'highslide-'+ type, innerHTML: s } ); + + if (addOverlay && this[type]) { var o = { position: (type == 'heading') ? 'above' : 'below' }; - for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; - o.overlayId = this[type]; - this.createOverlay(o); - } - } -}, - - -// on end move and resize -doShowHide : function(visibility) { - if (hs.hideSelects) this.showHideElements('SELECT', visibility); - if (hs.hideIframes) this.showHideElements('IFRAME', visibility); - if (hs.geckoMac) this.showHideElements('*', visibility); -}, -showHideElements : function (tagName, visibility) { - var els = document.getElementsByTagName(tagName); - var prop = tagName == '*' ? 'overflow' : 'visibility'; - for (var i = 0; i < els.length; i++) { - if (prop == 'visibility' || (document.defaultView.getComputedStyle( - els[i], "").getPropertyValue('overflow') == 'auto' - || els[i].getAttribute('hidden-by') != null)) { - var hiddenBy = els[i].getAttribute('hidden-by'); - if (visibility == 'visible' && hiddenBy) { - hiddenBy = hiddenBy.replace('['+ this.key +']', ''); - els[i].setAttribute('hidden-by', hiddenBy); - if (!hiddenBy) els[i].style[prop] = els[i].origProp; - } else if (visibility == 'hidden') { // hide if behind - var elPos = hs.getPosition(els[i]); - elPos.w = els[i].offsetWidth; - elPos.h = els[i].offsetHeight; - if (!this.dimmingOpacity) { // hide all if dimming - - var clearsX = (elPos.x + elPos.w < this.x.get('opos') - || elPos.x > this.x.get('opos') + this.x.get('osize')); - var clearsY = (elPos.y + elPos.h < this.y.get('opos') - || elPos.y > this.y.get('opos') + this.y.get('osize')); - } - var wrapperKey = hs.getWrapperKey(els[i]); - if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image - if (!hiddenBy) { - els[i].setAttribute('hidden-by', '['+ this.key +']'); - els[i].origProp = els[i].style[prop]; - els[i].style[prop] = 'hidden'; - - } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { - els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); - } - } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) - && wrapperKey != this.key) { // on move - els[i].setAttribute('hidden-by', ''); - els[i].style[prop] = els[i].origProp || ''; - } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { - els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); - } - - } - } - } -}, - -focus : function() { - this.wrapper.style.zIndex = hs.zIndexCounter += 2; - // blur others - for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && i == hs.focusKey) { - var blurExp = hs.expanders[i]; - blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; - blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; - blurExp.content.title = hs.lang.focusTitle; - } - } - - // focus this - if (this.outline) this.outline.table.style.zIndex - = this.wrapper.style.zIndex - 1; - this.content.className = 'highslide-'+ this.contentType; - this.content.title = hs.lang.restoreTitle; - - if (hs.restoreCursor) { - hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; - if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; - this.content.style.cursor = hs.styleRestoreCursor; - } - - hs.focusKey = this.key; - hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); -}, -moveTo: function(x, y) { - this.x.setPos(x); - this.y.setPos(y); -}, -resize : function (e) { + for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; + o.overlayId = this[type]; + this.createOverlay(o); + } + } +}, + + +// on end move and resize +doShowHide : function(visibility) { + if (hs.hideSelects) this.showHideElements('SELECT', visibility); + if (hs.hideIframes) this.showHideElements('IFRAME', visibility); + if (hs.geckoMac) this.showHideElements('*', visibility); +}, +showHideElements : function (tagName, visibility) { + var els = document.getElementsByTagName(tagName); + var prop = tagName == '*' ? 'overflow' : 'visibility'; + for (var i = 0; i < els.length; i++) { + if (prop == 'visibility' || (document.defaultView.getComputedStyle( + els[i], "").getPropertyValue('overflow') == 'auto' + || els[i].getAttribute('hidden-by') != null)) { + var hiddenBy = els[i].getAttribute('hidden-by'); + if (visibility == 'visible' && hiddenBy) { + hiddenBy = hiddenBy.replace('['+ this.key +']', ''); + els[i].setAttribute('hidden-by', hiddenBy); + if (!hiddenBy) els[i].style[prop] = els[i].origProp; + } else if (visibility == 'hidden') { // hide if behind + var elPos = hs.getPosition(els[i]); + elPos.w = els[i].offsetWidth; + elPos.h = els[i].offsetHeight; + if (!this.dimmingOpacity) { // hide all if dimming + + var clearsX = (elPos.x + elPos.w < this.x.get('opos') + || elPos.x > this.x.get('opos') + this.x.get('osize')); + var clearsY = (elPos.y + elPos.h < this.y.get('opos') + || elPos.y > this.y.get('opos') + this.y.get('osize')); + } + var wrapperKey = hs.getWrapperKey(els[i]); + if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image + if (!hiddenBy) { + els[i].setAttribute('hidden-by', '['+ this.key +']'); + els[i].origProp = els[i].style[prop]; + els[i].style[prop] = 'hidden'; + + } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { + els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); + } + } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) + && wrapperKey != this.key) { // on move + els[i].setAttribute('hidden-by', ''); + els[i].style[prop] = els[i].origProp || ''; + } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { + els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); + } + + } + } + } +}, + +focus : function() { + this.wrapper.style.zIndex = hs.zIndexCounter += 2; + // blur others + for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && i == hs.focusKey) { + var blurExp = hs.expanders[i]; + blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; + blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; + blurExp.content.title = hs.lang.focusTitle; + } + } + + // focus this + if (this.outline) this.outline.table.style.zIndex + = this.wrapper.style.zIndex - 1; + this.content.className = 'highslide-'+ this.contentType; + this.content.title = hs.lang.restoreTitle; + + if (hs.restoreCursor) { + hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; + if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; + this.content.style.cursor = hs.styleRestoreCursor; + } + + hs.focusKey = this.key; + hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); +}, +moveTo: function(x, y) { + this.x.setPos(x); + this.y.setPos(y); +}, +resize : function (e) { var w, h, r = e.width / e.height; - w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); + w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full; h = w / r; - if (h < Math.min(this.minHeight, this.y.full)) { - h = Math.min(this.minHeight, this.y.full); - if (this.isImage) w = h * r; - } - this.resizeTo(w, h); -}, -resizeTo: function(w, h) { + if (h < Math.min(this.minHeight, this.y.full)) { + h = Math.min(this.minHeight, this.y.full); + if (this.isImage) w = h * r; + } + this.resizeTo(w, h); +}, +resizeTo: function(w, h) { this.y.setSize(h); - this.x.setSize(w); + this.x.setSize(w); this.wrapper.style.height = this.y.get('wsize') +'px'; -}, - -close : function() { +}, + +close : function() { if (this.isClosing || !this.isExpanded) return; - if (this.transitions[1] == 'crossfade' && hs.upcoming) { - hs.getExpander(hs.upcoming).cancelLoading(); - hs.upcoming = null; - } - this.isClosing = true; - if (this.slideshow && !hs.upcoming) this.slideshow.pause(); - - hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - - try { - this.content.style.cursor = 'default'; - this.changeSize( - 0, { - wrapper: { - width : this.x.t, - height : this.y.t, - left: this.x.tpos - this.x.cb + this.x.tb, - top: this.y.tpos - this.y.cb + this.y.tb - }, - content: { - left: 0, - top: 0, - width: this.x.t, - height: this.y.t - } - }, hs.restoreDuration - ); - } catch (e) { this.afterClose(); } -}, - -createOverlay : function (o) { - var el = o.overlayId, - relToVP = (o.relativeTo == 'viewport' && !/panel$/.test(o.position)); - if (typeof el == 'string') el = hs.getNode(el); - if (o.html) el = hs.createElement('div', { innerHTML: o.html }); - if (!el || typeof el == 'string') return; - el.style.display = 'block'; - o.hsId = o.hsId || o.overlayId; - if (this.transitions[1] == 'crossfade' && this.reuseOverlay(o, el)) return; - this.genOverlayBox(); + if (this.transitions[1] == 'crossfade' && hs.upcoming) { + hs.getExpander(hs.upcoming).cancelLoading(); + hs.upcoming = null; + } + this.isClosing = true; + if (this.slideshow && !hs.upcoming) this.slideshow.pause(); + + hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + + try { + this.content.style.cursor = 'default'; + this.changeSize( + 0, { + wrapper: { + width : this.x.t, + height : this.y.t, + left: this.x.tpos - this.x.cb + this.x.tb, + top: this.y.tpos - this.y.cb + this.y.tb + }, + content: { + left: 0, + top: 0, + width: this.x.t, + height: this.y.t + } + }, hs.restoreDuration + ); + } catch (e) { this.afterClose(); } +}, + +createOverlay : function (o) { + var el = o.overlayId, + relToVP = (o.relativeTo == 'viewport' && !/panel$/.test(o.position)); + if (typeof el == 'string') el = hs.getNode(el); + if (o.html) el = hs.createElement('div', { innerHTML: o.html }); + if (!el || typeof el == 'string') return; + el.style.display = 'block'; + o.hsId = o.hsId || o.overlayId; + if (this.transitions[1] == 'crossfade' && this.reuseOverlay(o, el)) return; + this.genOverlayBox(); var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto'; - if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; - var overlay = hs.createElement( - 'div', { - id: 'hsId'+ hs.idCounter++, - hsId: o.hsId - }, { - position: 'absolute', - visibility: 'hidden', - width: width, - direction: hs.lang.cssDirection || '', - opacity: 0 - }, - relToVP ? hs.viewport :this.overlayBox, - true - ); - if (relToVP) overlay.hsKey = this.key; - - overlay.appendChild(el); + if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; + var overlay = hs.createElement( + 'div', { + id: 'hsId'+ hs.idCounter++, + hsId: o.hsId + }, { + position: 'absolute', + visibility: 'hidden', + width: width, + direction: hs.lang.cssDirection || '', + opacity: 0 + }, + relToVP ? hs.viewport :this.overlayBox, + true + ); + if (relToVP) overlay.hsKey = this.key; + + overlay.appendChild(el); hs.extend(overlay, { - opacity: 1, - offsetX: 0, - offsetY: 0, - dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 - }); + opacity: 1, + offsetX: 0, + offsetY: 0, + dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 + }); hs.extend(overlay, o); - - + + if (this.gotOverlays) { - this.positionOverlay(overlay); - if (!overlay.hideOnMouseOut || this.mouseIsOver) - hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); - } - hs.push(this.overlays, hs.idCounter - 1); -}, -positionOverlay : function(overlay) { - var p = overlay.position || 'middle center', - relToVP = (overlay.relativeTo == 'viewport'), - offX = overlay.offsetX, + this.positionOverlay(overlay); + if (!overlay.hideOnMouseOut || this.mouseIsOver) + hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); + } + hs.push(this.overlays, hs.idCounter - 1); +}, +positionOverlay : function(overlay) { + var p = overlay.position || 'middle center', + relToVP = (overlay.relativeTo == 'viewport'), + offX = overlay.offsetX, offY = overlay.offsetY; - if (relToVP) { - hs.viewport.style.display = 'block'; - overlay.hsKey = this.key; + if (relToVP) { + hs.viewport.style.display = 'block'; + overlay.hsKey = this.key; if (overlay.offsetWidth > overlay.parentNode.offsetWidth) - overlay.style.width = '100%'; - } else + overlay.style.width = '100%'; + } else if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay); - if (/left$/.test(p)) overlay.style.left = offX +'px'; - - if (/center$/.test(p)) hs.setStyles (overlay, { - left: '50%', - marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' - }); - - if (/right$/.test(p)) overlay.style.right = - offX +'px'; - - if (/^leftpanel$/.test(p)) { - hs.setStyles(overlay, { - right: '100%', - marginRight: this.x.cb +'px', - top: - this.y.cb +'px', - bottom: - this.y.cb +'px', - overflow: 'auto' - }); - this.x.p1 = overlay.offsetWidth; - - } else if (/^rightpanel$/.test(p)) { - hs.setStyles(overlay, { - left: '100%', - marginLeft: this.x.cb +'px', - top: - this.y.cb +'px', - bottom: - this.y.cb +'px', - overflow: 'auto' - }); - this.x.p2 = overlay.offsetWidth; - } - var parOff = overlay.parentNode.offsetHeight; - overlay.style.height = 'auto'; + if (/left$/.test(p)) overlay.style.left = offX +'px'; + + if (/center$/.test(p)) hs.setStyles (overlay, { + left: '50%', + marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' + }); + + if (/right$/.test(p)) overlay.style.right = - offX +'px'; + + if (/^leftpanel$/.test(p)) { + hs.setStyles(overlay, { + right: '100%', + marginRight: this.x.cb +'px', + top: - this.y.cb +'px', + bottom: - this.y.cb +'px', + overflow: 'auto' + }); + this.x.p1 = overlay.offsetWidth; + + } else if (/^rightpanel$/.test(p)) { + hs.setStyles(overlay, { + left: '100%', + marginLeft: this.x.cb +'px', + top: - this.y.cb +'px', + bottom: - this.y.cb +'px', + overflow: 'auto' + }); + this.x.p2 = overlay.offsetWidth; + } + var parOff = overlay.parentNode.offsetHeight; + overlay.style.height = 'auto'; if (relToVP && overlay.offsetHeight > parOff) - overlay.style.height = hs.ieLt7 ? parOff +'px' : '100%'; - - if (/^top/.test(p)) overlay.style.top = offY +'px'; - if (/^middle/.test(p)) hs.setStyles (overlay, { - top: '50%', - marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' - }); + overlay.style.height = hs.ieLt7 ? parOff +'px' : '100%'; + + if (/^top/.test(p)) overlay.style.top = offY +'px'; + if (/^middle/.test(p)) hs.setStyles (overlay, { + top: '50%', + marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' + }); if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px'; - if (/^above$/.test(p)) { - hs.setStyles(overlay, { - left: (- this.x.p1 - this.x.cb) +'px', - right: (- this.x.p2 - this.x.cb) +'px', - bottom: '100%', - marginBottom: this.y.cb +'px', - width: 'auto' - }); - this.y.p1 = overlay.offsetHeight; - - } else if (/^below$/.test(p)) { - hs.setStyles(overlay, { - position: 'relative', - left: (- this.x.p1 - this.x.cb) +'px', - right: (- this.x.p2 - this.x.cb) +'px', - top: '100%', - marginTop: this.y.cb +'px', - width: 'auto' - }); - this.y.p2 = overlay.offsetHeight; + if (/^above$/.test(p)) { + hs.setStyles(overlay, { + left: (- this.x.p1 - this.x.cb) +'px', + right: (- this.x.p2 - this.x.cb) +'px', + bottom: '100%', + marginBottom: this.y.cb +'px', + width: 'auto' + }); + this.y.p1 = overlay.offsetHeight; + + } else if (/^below$/.test(p)) { + hs.setStyles(overlay, { + position: 'relative', + left: (- this.x.p1 - this.x.cb) +'px', + right: (- this.x.p2 - this.x.cb) +'px', + top: '100%', + marginTop: this.y.cb +'px', + width: 'auto' + }); + this.y.p2 = overlay.offsetHeight; overlay.style.position = 'absolute'; - } -}, - -getOverlays : function() { - this.getInline(['heading', 'caption'], true); - this.getNumber(); - if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move'; - if (hs.showCredits) this.writeCredits(); - for (var i = 0; i < hs.overlays.length; i++) { - var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; - if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) - || (sg && sg === this.slideshowGroup)) { - this.createOverlay(o); - } - } - var os = []; - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - if (/panel$/.test(o.position)) this.positionOverlay(o); - else hs.push(os, o); - } - for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); - this.gotOverlays = true; -}, -genOverlayBox : function() { - if (!this.overlayBox) this.overlayBox = hs.createElement ( - 'div', { + } +}, + +getOverlays : function() { + this.getInline(['heading', 'caption'], true); + this.getNumber(); + if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move'; + if (hs.showCredits) this.writeCredits(); + for (var i = 0; i < hs.overlays.length; i++) { + var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; + if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) + || (sg && sg === this.slideshowGroup)) { + this.createOverlay(o); + } + } + var os = []; + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + if (/panel$/.test(o.position)) this.positionOverlay(o); + else hs.push(os, o); + } + for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); + this.gotOverlays = true; +}, +genOverlayBox : function() { + if (!this.overlayBox) this.overlayBox = hs.createElement ( + 'div', { className: this.wrapperClassName - }, { - position : 'absolute', - width: (this.x.size || (this.useBox ? this.width : null) + }, { + position : 'absolute', + width: (this.x.size || (this.useBox ? this.width : null) || this.x.full) +'px', height: (this.y.size || this.y.full) +'px', - visibility : 'hidden', + visibility : 'hidden', overflow : 'hidden', - zIndex : hs.ie ? 4 : 'auto' - }, - hs.container, - true - ); -}, -sizeOverlayBox : function(doWrapper, doPanels) { - var overlayBox = this.overlayBox, - x = this.x, - y = this.y; - hs.setStyles( overlayBox, { - width: x.size +'px', - height: y.size +'px' - }); - if (doWrapper || doPanels) { - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); + zIndex : hs.ie ? 4 : 'auto' + }, + hs.container, + true + ); +}, +sizeOverlayBox : function(doWrapper, doPanels) { + var overlayBox = this.overlayBox, + x = this.x, + y = this.y; + hs.setStyles( overlayBox, { + width: x.size +'px', + height: y.size +'px' + }); + if (doWrapper || doPanels) { + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); if (o && /^(above|below)$/.test(o.position)) { - if (ie6) { - o.style.width = (overlayBox.offsetWidth + 2 * x.cb - + x.p1 + x.p2) +'px'; + if (ie6) { + o.style.width = (overlayBox.offsetWidth + 2 * x.cb + + x.p1 + x.p2) +'px'; } - y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; - } - if (o && ie6 && /^(left|right)panel$/.test(o.position)) { - o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; + y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; } - } - } - if (doWrapper) { - hs.setStyles(this.content, { - top: y.p1 +'px' - }); - hs.setStyles(overlayBox, { - top: (y.p1 + y.cb) +'px' - }); - } -}, - + if (o && ie6 && /^(left|right)panel$/.test(o.position)) { + o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; + } + } + } + if (doWrapper) { + hs.setStyles(this.content, { + top: y.p1 +'px' + }); + hs.setStyles(overlayBox, { + top: (y.p1 + y.cb) +'px' + }); + } +}, + showOverlays : function() { - var b = this.overlayBox; - b.className = ''; - hs.setStyles(b, { - top: (this.y.p1 + this.y.cb) +'px', - left: (this.x.p1 + this.x.cb) +'px', - overflow : 'visible' - }); - if (hs.safari) b.style.visibility = 'visible'; + var b = this.overlayBox; + b.className = ''; + hs.setStyles(b, { + top: (this.y.p1 + this.y.cb) +'px', + left: (this.x.p1 + this.x.cb) +'px', + overflow : 'visible' + }); + if (hs.safari) b.style.visibility = 'visible'; this.wrapper.appendChild (b); - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - o.style.zIndex = o.zIndex || 4; - if (!o.hideOnMouseOut || this.mouseIsOver) { - o.style.visibility = 'visible'; - hs.setStyles(o, { visibility: 'visible', display: '' }); - hs.animate(o, { opacity: o.opacity }, o.dur); - } - } -}, - -destroyOverlays : function() { - if (!this.overlays.length) return; + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + o.style.zIndex = o.zIndex || 4; + if (!o.hideOnMouseOut || this.mouseIsOver) { + o.style.visibility = 'visible'; + hs.setStyles(o, { visibility: 'visible', display: '' }); + hs.animate(o, { opacity: o.opacity }, o.dur); + } + } +}, + +destroyOverlays : function() { + if (!this.overlays.length) return; if (this.slideshow) { - var c = this.slideshow.controls; - if (c && hs.getExpander(c) == this) c.parentNode.removeChild(c); - } - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - if (o && o.parentNode == hs.viewport && hs.getExpander(o) == this) hs.discardElement(o); - } - hs.discardElement(this.overlayBox); -}, - - - -createFullExpand : function () { - if (this.slideshow && this.slideshow.controls) { - this.slideshow.enable('full-expand'); - return; - } - this.fullExpandLabel = hs.createElement( - 'a', { - href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', - title: hs.lang.fullExpandTitle, - className: 'highslide-full-expand' - } - ); - - this.createOverlay({ - overlayId: this.fullExpandLabel, - position: hs.fullExpandPosition, - hideOnMouseOut: true, - opacity: hs.fullExpandOpacity - }); -}, - -doFullExpand : function () { - try { - if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); - - this.focus(); - var xSize = this.x.size, - ySize = this.y.size; - this.resizeTo(this.x.full, this.y.full); - - var xpos = this.x.pos - (this.x.size - xSize) / 2; - if (xpos < hs.marginLeft) xpos = hs.marginLeft; - - var ypos = this.y.pos - (this.y.size - ySize) / 2; - if (ypos < hs.marginTop) ypos = hs.marginTop; - - this.moveTo(xpos, ypos); - this.doShowHide('hidden'); - - } catch (e) { - this.error(e); - } -}, - - -afterClose : function () { - this.a.className = this.a.className.replace('highslide-active-anchor', ''); - - this.doShowHide('visible'); - if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); - - hs.discardElement(this.wrapper); - this.destroyOverlays(); - if (!hs.viewport.childNodes.length) hs.viewport.style.display = 'none'; - - if (this.dimmingOpacity) hs.undim(this.key); - hs.expanders[this.key] = null; - hs.reOrder(); -} - -}; - - -hs.Slideshow = function (expKey, options) { - if (hs.dynamicallyUpdateAnchors !== false) hs.updateAnchors(); - this.expKey = expKey; - for (var x in options) this[x] = options[x]; - if (this.useControls) this.getControls(); - if (this.thumbstrip) this.thumbstrip = hs.Thumbstrip(this); -}; -hs.Slideshow.prototype = { -getControls: function() { - this.controls = hs.createElement('div', { innerHTML: hs.replaceLang(hs.skin.controls) }, - null, hs.container); - + var c = this.slideshow.controls; + if (c && hs.getExpander(c) == this) c.parentNode.removeChild(c); + } + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + if (o && o.parentNode == hs.viewport && hs.getExpander(o) == this) hs.discardElement(o); + } + hs.discardElement(this.overlayBox); +}, + + + +createFullExpand : function () { + if (this.slideshow && this.slideshow.controls) { + this.slideshow.enable('full-expand'); + return; + } + this.fullExpandLabel = hs.createElement( + 'a', { + href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', + title: hs.lang.fullExpandTitle, + className: 'highslide-full-expand' + } + ); + + this.createOverlay({ + overlayId: this.fullExpandLabel, + position: hs.fullExpandPosition, + hideOnMouseOut: true, + opacity: hs.fullExpandOpacity + }); +}, + +doFullExpand : function () { + try { + if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); + + this.focus(); + var xSize = this.x.size, + ySize = this.y.size; + this.resizeTo(this.x.full, this.y.full); + + var xpos = this.x.pos - (this.x.size - xSize) / 2; + if (xpos < hs.marginLeft) xpos = hs.marginLeft; + + var ypos = this.y.pos - (this.y.size - ySize) / 2; + if (ypos < hs.marginTop) ypos = hs.marginTop; + + this.moveTo(xpos, ypos); + this.doShowHide('hidden'); + + } catch (e) { + this.error(e); + } +}, + + +afterClose : function () { + this.a.className = this.a.className.replace('highslide-active-anchor', ''); + + this.doShowHide('visible'); + if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); + + hs.discardElement(this.wrapper); + this.destroyOverlays(); + if (!hs.viewport.childNodes.length) hs.viewport.style.display = 'none'; + + if (this.dimmingOpacity) hs.undim(this.key); + hs.expanders[this.key] = null; + hs.reOrder(); +} + +}; + + +hs.Slideshow = function (expKey, options) { + if (hs.dynamicallyUpdateAnchors !== false) hs.updateAnchors(); + this.expKey = expKey; + for (var x in options) this[x] = options[x]; + if (this.useControls) this.getControls(); + if (this.thumbstrip) this.thumbstrip = hs.Thumbstrip(this); +}; +hs.Slideshow.prototype = { +getControls: function() { + this.controls = hs.createElement('div', { innerHTML: hs.replaceLang(hs.skin.controls) }, + null, hs.container); + var buttons = ['play', 'pause', 'previous', 'next', 'move', 'full-expand', 'close']; - this.btn = {}; - var pThis = this; - for (var i = 0; i < buttons.length; i++) { - this.btn[buttons[i]] = hs.getElementByClass(this.controls, 'li', 'highslide-'+ buttons[i]); - this.enable(buttons[i]); - } - this.btn.pause.style.display = 'none'; - //this.disable('full-expand'); -}, + this.btn = {}; + var pThis = this; + for (var i = 0; i < buttons.length; i++) { + this.btn[buttons[i]] = hs.getElementByClass(this.controls, 'li', 'highslide-'+ buttons[i]); + this.enable(buttons[i]); + } + this.btn.pause.style.display = 'none'; + //this.disable('full-expand'); +}, checkFirstAndLast: function() { - if (this.repeat || !this.controls) return; - var exp = hs.expanders[this.expKey], - cur = exp.getAnchorIndex(), - re = /disabled$/; - if (cur == 0) - this.disable('previous'); - else if (re.test(this.btn.previous.getElementsByTagName('a')[0].className)) - this.enable('previous'); - if (cur + 1 == hs.anchors.groups[exp.slideshowGroup || 'none'].length) { - this.disable('next'); - this.disable('play'); - } else if (re.test(this.btn.next.getElementsByTagName('a')[0].className)) { - this.enable('next'); - this.enable('play'); - } -}, -enable: function(btn) { - if (!this.btn) return; - var sls = this, a = this.btn[btn].getElementsByTagName('a')[0], re = /disabled$/; - a.onclick = function() { - sls[btn](); - return false; - }; - if (re.test(a.className)) a.className = a.className.replace(re, ''); -}, -disable: function(btn) { - if (!this.btn) return; - var a = this.btn[btn].getElementsByTagName('a')[0]; - a.onclick = function() { return false; }; - if (!/disabled$/.test(a.className)) a.className += ' disabled'; -}, -hitSpace: function() { - if (this.autoplay) this.pause(); - else this.play(); -}, -play: function(wait) { - if (this.btn) { - this.btn.play.style.display = 'none'; - this.btn.pause.style.display = ''; - } - - this.autoplay = true; - if (!wait) hs.next(this.expKey); -}, -pause: function() { - if (this.btn) { - this.btn.pause.style.display = 'none'; - this.btn.play.style.display = ''; - } - - clearTimeout(this.autoplay); - this.autoplay = null; -}, -previous: function() { - this.pause(); - hs.previous(this.btn.previous); -}, -next: function() { - this.pause(); - hs.next(this.btn.next); -}, -move: function() {}, -'full-expand': function() { - hs.getExpander().doFullExpand(); -}, -close: function() { - hs.close(this.btn.close); -} -}; -hs.Thumbstrip = function(slideshow) { - function add (exp) { - hs.extend(options || {}, { - overlayId: dom, - hsId: 'thumbstrip', - className: 'highslide-thumbstrip-'+ mode +'-overlay ' + (options.className || '') - }); + if (this.repeat || !this.controls) return; + var exp = hs.expanders[this.expKey], + cur = exp.getAnchorIndex(), + re = /disabled$/; + if (cur == 0) + this.disable('previous'); + else if (re.test(this.btn.previous.getElementsByTagName('a')[0].className)) + this.enable('previous'); + if (cur + 1 == hs.anchors.groups[exp.slideshowGroup || 'none'].length) { + this.disable('next'); + this.disable('play'); + } else if (re.test(this.btn.next.getElementsByTagName('a')[0].className)) { + this.enable('next'); + this.enable('play'); + } +}, +enable: function(btn) { + if (!this.btn) return; + var sls = this, a = this.btn[btn].getElementsByTagName('a')[0], re = /disabled$/; + a.onclick = function() { + sls[btn](); + return false; + }; + if (re.test(a.className)) a.className = a.className.replace(re, ''); +}, +disable: function(btn) { + if (!this.btn) return; + var a = this.btn[btn].getElementsByTagName('a')[0]; + a.onclick = function() { return false; }; + if (!/disabled$/.test(a.className)) a.className += ' disabled'; +}, +hitSpace: function() { + if (this.autoplay) this.pause(); + else this.play(); +}, +play: function(wait) { + if (this.btn) { + this.btn.play.style.display = 'none'; + this.btn.pause.style.display = ''; + } + + this.autoplay = true; + if (!wait) hs.next(this.expKey); +}, +pause: function() { + if (this.btn) { + this.btn.pause.style.display = 'none'; + this.btn.play.style.display = ''; + } + + clearTimeout(this.autoplay); + this.autoplay = null; +}, +previous: function() { + this.pause(); + hs.previous(this.btn.previous); +}, +next: function() { + this.pause(); + hs.next(this.btn.next); +}, +move: function() {}, +'full-expand': function() { + hs.getExpander().doFullExpand(); +}, +close: function() { + hs.close(this.btn.close); +} +}; +hs.Thumbstrip = function(slideshow) { + function add (exp) { + hs.extend(options || {}, { + overlayId: dom, + hsId: 'thumbstrip', + className: 'highslide-thumbstrip-'+ mode +'-overlay ' + (options.className || '') + }); if (hs.ieLt7) options.fade = 0; exp.createOverlay(options); - hs.setStyles(dom.parentNode, { overflow: 'hidden' }); - }; - - function scroll (delta) { - selectThumb(undefined, Math.round(delta * dom[isX ? 'offsetWidth' : 'offsetHeight'] * 0.7)); - }; - + hs.setStyles(dom.parentNode, { overflow: 'hidden' }); + }; + + function scroll (delta) { + selectThumb(undefined, Math.round(delta * dom[isX ? 'offsetWidth' : 'offsetHeight'] * 0.7)); + }; + function selectThumb (i, scrollBy) { - if (i === undefined) for (var j = 0; j < group.length; j++) { - if (group[j] == hs.expanders[slideshow.expKey].a) { - i = j; - break; - } - } + if (i === undefined) for (var j = 0; j < group.length; j++) { + if (group[j] == hs.expanders[slideshow.expKey].a) { + i = j; + break; + } + } if (i === undefined) return; - var as = dom.getElementsByTagName('a'), - active = as[i], - cell = active.parentNode, - left = isX ? 'Left' : 'Top', - right = isX ? 'Right' : 'Bottom', - width = isX ? 'Width' : 'Height', - offsetLeft = 'offset' + left, - offsetWidth = 'offset' + width, - overlayWidth = div.parentNode.parentNode[offsetWidth], - minTblPos = overlayWidth - table[offsetWidth], - curTblPos = parseInt(table.style[isX ? 'left' : 'top']) || 0, - tblPos = curTblPos, + var as = dom.getElementsByTagName('a'), + active = as[i], + cell = active.parentNode, + left = isX ? 'Left' : 'Top', + right = isX ? 'Right' : 'Bottom', + width = isX ? 'Width' : 'Height', + offsetLeft = 'offset' + left, + offsetWidth = 'offset' + width, + overlayWidth = div.parentNode.parentNode[offsetWidth], + minTblPos = overlayWidth - table[offsetWidth], + curTblPos = parseInt(table.style[isX ? 'left' : 'top']) || 0, + tblPos = curTblPos, mgnRight = 20; - if (scrollBy !== undefined) { - tblPos = curTblPos - scrollBy; - - if (minTblPos > 0) minTblPos = 0; - if (tblPos > 0) tblPos = 0; - if (tblPos < minTblPos) tblPos = minTblPos; - - + if (scrollBy !== undefined) { + tblPos = curTblPos - scrollBy; + + if (minTblPos > 0) minTblPos = 0; + if (tblPos > 0) tblPos = 0; + if (tblPos < minTblPos) tblPos = minTblPos; + + } else { - for (var j = 0; j < as.length; j++) as[j].className = ''; + for (var j = 0; j < as.length; j++) as[j].className = ''; active.className = 'highslide-active-anchor'; - var activeLeft = i > 0 ? as[i - 1].parentNode[offsetLeft] : cell[offsetLeft], - activeRight = cell[offsetLeft] + cell[offsetWidth] + + var activeLeft = i > 0 ? as[i - 1].parentNode[offsetLeft] : cell[offsetLeft], + activeRight = cell[offsetLeft] + cell[offsetWidth] + (as[i + 1] ? as[i + 1].parentNode[offsetWidth] : 0); - if (activeRight > overlayWidth - curTblPos) tblPos = overlayWidth - activeRight; - else if (activeLeft < -curTblPos) tblPos = -activeLeft; + if (activeRight > overlayWidth - curTblPos) tblPos = overlayWidth - activeRight; + else if (activeLeft < -curTblPos) tblPos = -activeLeft; } var markerPos = cell[offsetLeft] + (cell[offsetWidth] - marker[offsetWidth]) / 2 + tblPos; - hs.animate(table, isX ? { left: tblPos } : { top: tblPos }, null, 'easeOutQuad'); + hs.animate(table, isX ? { left: tblPos } : { top: tblPos }, null, 'easeOutQuad'); hs.animate(marker, isX ? { left: markerPos } : { top: markerPos }, null, 'easeOutQuad'); - scrollUp.style.display = tblPos < 0 ? 'block' : 'none'; - scrollDown.style.display = (tblPos > minTblPos) ? 'block' : 'none'; - - }; - - - // initialize - var group = hs.anchors.groups[hs.expanders[slideshow.expKey].slideshowGroup || 'none'], + scrollUp.style.display = tblPos < 0 ? 'block' : 'none'; + scrollDown.style.display = (tblPos > minTblPos) ? 'block' : 'none'; + + }; + + + // initialize + var group = hs.anchors.groups[hs.expanders[slideshow.expKey].slideshowGroup || 'none'], options = slideshow.thumbstrip, - mode = options.mode || 'horizontal', - floatMode = (mode == 'float'), - tree = floatMode ? ['div', 'ul', 'li', 'span'] : ['table', 'tbody', 'tr', 'td'], - isX = (mode == 'horizontal'), - dom = hs.createElement('div', { - className: 'highslide-thumbstrip highslide-thumbstrip-'+ mode, - innerHTML: - '<div class="highslide-thumbstrip-inner">'+ - '<'+ tree[0] +'><'+ tree[1] +'></'+ tree[1] +'></'+ tree[0] +'></div>'+ - '<div class="highslide-scroll-up"><div></div></div>'+ - '<div class="highslide-scroll-down"><div></div></div>'+ - '<div class="highslide-marker"><div></div></div>' - }, { - display: 'none' - }, hs.container), - domCh = dom.childNodes, - div = domCh[0], - scrollUp = domCh[1], - scrollDown = domCh[2], - marker = domCh[3], - table = div.firstChild, - tbody = dom.getElementsByTagName(tree[1])[0], + mode = options.mode || 'horizontal', + floatMode = (mode == 'float'), + tree = floatMode ? ['div', 'ul', 'li', 'span'] : ['table', 'tbody', 'tr', 'td'], + isX = (mode == 'horizontal'), + dom = hs.createElement('div', { + className: 'highslide-thumbstrip highslide-thumbstrip-'+ mode, + innerHTML: + '<div class="highslide-thumbstrip-inner">'+ + '<'+ tree[0] +'><'+ tree[1] +'></'+ tree[1] +'></'+ tree[0] +'></div>'+ + '<div class="highslide-scroll-up"><div></div></div>'+ + '<div class="highslide-scroll-down"><div></div></div>'+ + '<div class="highslide-marker"><div></div></div>' + }, { + display: 'none' + }, hs.container), + domCh = dom.childNodes, + div = domCh[0], + scrollUp = domCh[1], + scrollDown = domCh[2], + marker = domCh[3], + table = div.firstChild, + tbody = dom.getElementsByTagName(tree[1])[0], tr; - for (var i = 0; i < group.length; i++) { - if (i == 0 || !isX) tr = hs.createElement(tree[2], null, null, tbody); - (function(){ - var a = group[i], - cell = hs.createElement(tree[3], null, null, tr), - pI = i; - hs.createElement('a', { - href: a.href, - title: a.title, - onclick: function() { - if (/highslide-active-anchor/.test(this.className)) return false; - hs.getExpander(this).focus(); - return hs.transit(a); - }, - innerHTML: hs.stripItemFormatter ? hs.stripItemFormatter(a) : a.innerHTML - }, null, cell); - })(); + for (var i = 0; i < group.length; i++) { + if (i == 0 || !isX) tr = hs.createElement(tree[2], null, null, tbody); + (function(){ + var a = group[i], + cell = hs.createElement(tree[3], null, null, tr), + pI = i; + hs.createElement('a', { + href: a.href, + title: a.title, + onclick: function() { + if (/highslide-active-anchor/.test(this.className)) return false; + hs.getExpander(this).focus(); + return hs.transit(a); + }, + innerHTML: hs.stripItemFormatter ? hs.stripItemFormatter(a) : a.innerHTML + }, null, cell); + })(); } if (!floatMode) { - scrollUp.onclick = function () { scroll(-1); }; + scrollUp.onclick = function () { scroll(-1); }; scrollDown.onclick = function() { scroll(1); }; - hs.addEventListener(tbody, document.onmousewheel !== undefined ? - 'mousewheel' : 'DOMMouseScroll', function(e) { - var delta = 0; - e = e || window.event; + hs.addEventListener(tbody, document.onmousewheel !== undefined ? + 'mousewheel' : 'DOMMouseScroll', function(e) { + var delta = 0; + e = e || window.event; if (e.wheelDelta) { - delta = e.wheelDelta/120; - if (hs.opera) delta = -delta; + delta = e.wheelDelta/120; + if (hs.opera) delta = -delta; } else if (e.detail) { - delta = -e.detail/3; - } - if (delta) scroll(-delta * 0.2); - if (e.preventDefault) e.preventDefault(); - e.returnValue = false; - }); - } - - return { - add: add, - selectThumb: selectThumb - } + delta = -e.detail/3; + } + if (delta) scroll(-delta * 0.2); + if (e.preventDefault) e.preventDefault(); + e.returnValue = false; + }); + } + + return { + add: add, + selectThumb: selectThumb + } }; -hs.langDefaults = hs.lang; -// history +hs.langDefaults = hs.lang; +// history var HsExpander = hs.Expander; if (hs.ie && window == window.top) { - (function () { - try { - document.documentElement.doScroll('left'); - } catch (e) { - setTimeout(arguments.callee, 50); - return; - } - hs.ready(); - })(); -} + (function () { + try { + document.documentElement.doScroll('left'); + } catch (e) { + setTimeout(arguments.callee, 50); + return; + } + hs.ready(); + })(); +} hs.addEventListener(document, 'DOMContentLoaded', hs.ready); hs.addEventListener(window, 'load', hs.ready); - + // set handlers -hs.addEventListener(document, 'ready', function() { - if (hs.expandCursor || hs.dimmingOpacity) { - var style = hs.createElement('style', { type: 'text/css' }, null, - document.getElementsByTagName('HEAD')[0]), - backCompat = document.compatMode == 'BackCompat'; - - - function addRule(sel, dec) { - if (hs.ie && (hs.uaVersion < 9 || backCompat)) { - var last = document.styleSheets[document.styleSheets.length - 1]; - if (typeof(last.addRule) == "object") last.addRule(sel, dec); - } else { - style.appendChild(document.createTextNode(sel + " {" + dec + "}")); - } - } - function fix(prop) { - return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + - ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; +hs.addEventListener(document, 'ready', function() { + if (hs.expandCursor || hs.dimmingOpacity) { + var style = hs.createElement('style', { type: 'text/css' }, null, + document.getElementsByTagName('HEAD')[0]), + backCompat = document.compatMode == 'BackCompat'; + + + function addRule(sel, dec) { + if (hs.ie && (hs.uaVersion < 9 || backCompat)) { + var last = document.styleSheets[document.styleSheets.length - 1]; + if (typeof(last.addRule) == "object") last.addRule(sel, dec); + } else { + style.appendChild(document.createTextNode(sel + " {" + dec + "}")); + } + } + function fix(prop) { + return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + + ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; } - if (hs.expandCursor) addRule ('.highslide img', + if (hs.expandCursor) addRule ('.highslide img', 'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); - addRule ('.highslide-viewport-size', - hs.ie && (hs.uaVersion < 7 || backCompat) ? - 'position: absolute; '+ - 'left:'+ fix('scrollLeft') + - 'top:'+ fix('scrollTop') + - 'width:'+ fix('clientWidth') + - 'height:'+ fix('clientHeight') : - 'position: fixed; width: 100%; height: 100%; left: 0; top: 0'); - } -}); -hs.addEventListener(window, 'resize', function() { - hs.getPageSize(); - if (hs.viewport) for (var i = 0; i < hs.viewport.childNodes.length; i++) { - var node = hs.viewport.childNodes[i], - exp = hs.getExpander(node); - exp.positionOverlay(node); - if (node.hsId == 'thumbstrip') exp.slideshow.thumbstrip.selectThumb(); - } -}); -hs.addEventListener(document, 'mousemove', function(e) { - hs.mouse = { x: e.clientX, y: e.clientY }; -}); -hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); -hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); - -hs.addEventListener(document, 'ready', hs.getAnchors); -hs.addEventListener(window, 'load', hs.preloadImages); -} + addRule ('.highslide-viewport-size', + hs.ie && (hs.uaVersion < 7 || backCompat) ? + 'position: absolute; '+ + 'left:'+ fix('scrollLeft') + + 'top:'+ fix('scrollTop') + + 'width:'+ fix('clientWidth') + + 'height:'+ fix('clientHeight') : + 'position: fixed; width: 100%; height: 100%; left: 0; top: 0'); + } +}); +hs.addEventListener(window, 'resize', function() { + hs.getPageSize(); + if (hs.viewport) for (var i = 0; i < hs.viewport.childNodes.length; i++) { + var node = hs.viewport.childNodes[i], + exp = hs.getExpander(node); + exp.positionOverlay(node); + if (node.hsId == 'thumbstrip') exp.slideshow.thumbstrip.selectThumb(); + } +}); +hs.addEventListener(document, 'mousemove', function(e) { + hs.mouse = { x: e.clientX, y: e.clientY }; +}); +hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); +hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); + +hs.addEventListener(document, 'ready', hs.getAnchors); +hs.addEventListener(window, 'load', hs.preloadImages); +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.min.js index 6e634d6487136ab9447adad7d6bccfc3383d119b..5f8669993626dd7f71e774e10045df8d747a2c75 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.min.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.min.js @@ -1,9 +1,9 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) * Config: default +slideshow +positioning +transitions +viewport +thumbstrip - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ if(!hs){var hs={lang:{cssDirection:"ltr",loadingText:"Loading...",loadingTitle:"Click to cancel",focusTitle:"Click to bring to front",fullExpandTitle:"Expand to actual size (f)",creditsText:"Powered by <i>Highslide JS</i>",creditsTitle:"Go to the Highslide JS homepage",previousText:"Previous",nextText:"Next",moveText:"Move",closeText:"Close",closeTitle:"Close (esc)",resizeTitle:"Resize",playText:"Play",playTitle:"Play slideshow (spacebar)",pauseText:"Pause",pauseTitle:"Pause slideshow (spacebar)",previousTitle:"Previous (arrow left)",nextTitle:"Next (arrow right)",moveTitle:"Move",fullExpandText:"1:1",number:"Image %1 of %2",restoreTitle:"Click to close image, click and drag to move. Use arrow keys for next and previous."},graphicsDir:"highslide/graphics/",expandCursor:"zoomin.cur",restoreCursor:"zoomout.cur",expandDuration:250,restoreDuration:250,marginLeft:15,marginRight:15,marginTop:15,marginBottom:15,zIndexCounter:1001,loadingOpacity:0.75,allowMultipleInstances:true,numberOfImagesToPreload:5,outlineWhileAnimating:2,outlineStartOffset:3,padToMinWidth:false,fullExpandPosition:"bottom right",fullExpandOpacity:1,showCredits:true,creditsHref:"http://highslide.com/",creditsTarget:"_self",enableKeyListener:true,openerTagNames:["a"],transitions:[],transitionDuration:250,dimmingOpacity:0,dimmingDuration:50,anchor:"auto",align:"auto",targetX:null,targetY:null,dragByHeading:true,minWidth:200,minHeight:200,allowSizeReduction:true,outlineType:"drop-shadow",skin:{controls:'<div class="highslide-controls"><ul><li class="highslide-previous"><a href="#" title="{hs.lang.previousTitle}"><span>{hs.lang.previousText}</span></a></li><li class="highslide-play"><a href="#" title="{hs.lang.playTitle}"><span>{hs.lang.playText}</span></a></li><li class="highslide-pause"><a href="#" title="{hs.lang.pauseTitle}"><span>{hs.lang.pauseText}</span></a></li><li class="highslide-next"><a href="#" title="{hs.lang.nextTitle}"><span>{hs.lang.nextText}</span></a></li><li class="highslide-move"><a href="#" title="{hs.lang.moveTitle}"><span>{hs.lang.moveText}</span></a></li><li class="highslide-full-expand"><a href="#" title="{hs.lang.fullExpandTitle}"><span>{hs.lang.fullExpandText}</span></a></li><li class="highslide-close"><a href="#" title="{hs.lang.closeTitle}" ><span>{hs.lang.closeText}</span></a></li></ul></div>'},preloadTheseImages:[],continuePreloading:true,expanders:[],overrides:["allowSizeReduction","useBox","anchor","align","targetX","targetY","outlineType","outlineWhileAnimating","captionId","captionText","captionEval","captionOverlay","headingId","headingText","headingEval","headingOverlay","creditsPosition","dragByHeading","autoplay","numberPosition","transitions","dimmingOpacity","width","height","wrapperClassName","minWidth","minHeight","maxWidth","maxHeight","pageOrigin","slideshowGroup","easing","easingClose","fadeInOut","src"],overlays:[],idCounter:0,oPos:{x:["leftpanel","left","center","right","rightpanel"],y:["above","top","middle","bottom","below"]},mouse:{},headingOverlay:{},captionOverlay:{},timers:[],slideshows:[],pendingOutlines:{},clones:{},onReady:[],uaVersion:/Trident\/4\.0/.test(navigator.userAgent)?8:parseFloat((navigator.userAgent.toLowerCase().match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1]),ie:(document.all&&!window.opera),safari:/Safari/.test(navigator.userAgent),geckoMac:/Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent),$:function(a){if(a){return document.getElementById(a)}},push:function(a,b){a[a.length]=b},createElement:function(a,f,e,d,c){var b=document.createElement(a);if(f){hs.extend(b,f)}if(c){hs.setStyles(b,{padding:0,border:"none",margin:0})}if(e){hs.setStyles(b,e)}if(d){d.appendChild(b)}return b},extend:function(b,c){for(var a in c){b[a]=c[a]}return b},setStyles:function(b,c){for(var a in c){if(hs.ieLt9&&a=="opacity"){if(c[a]>0.99){b.style.removeAttribute("filter")}else{b.style.filter="alpha(opacity="+(c[a]*100)+")"}}else{b.style[a]=c[a]}}},animate:function(f,a,d){var c,g,j;if(typeof d!="object"||d===null){var i=arguments;d={duration:i[2],easing:i[3],complete:i[4]}}if(typeof d.duration!="number"){d.duration=250}d.easing=Math[d.easing]||Math.easeInQuad;d.curAnim=hs.extend({},a);for(var b in a){var h=new hs.fx(f,d,b);c=parseFloat(hs.css(f,b))||0;g=parseFloat(a[b]);j=b!="opacity"?"px":"";h.custom(c,g,j)}},css:function(a,c){if(a.style[c]){return a.style[c]}else{if(document.defaultView){return document.defaultView.getComputedStyle(a,null).getPropertyValue(c)}else{if(c=="opacity"){c="filter"}var b=a.currentStyle[c.replace(/\-(\w)/g,function(e,d){return d.toUpperCase()})];if(c=="filter"){b=b.replace(/alpha\(opacity=([0-9]+)\)/,function(e,d){return d/100})}return b===""?1:b}}},getPageSize:function(){var f=document,b=window,e=f.compatMode&&f.compatMode!="BackCompat"?f.documentElement:f.body,g=hs.ie&&(hs.uaVersion<9||typeof pageXOffset=="undefined");var c=g?e.clientWidth:(f.documentElement.clientWidth||self.innerWidth),a=g?e.clientHeight:self.innerHeight;hs.page={width:c,height:a,scrollLeft:g?e.scrollLeft:pageXOffset,scrollTop:g?e.scrollTop:pageYOffset};return hs.page},getPosition:function(a){var b={x:a.offsetLeft,y:a.offsetTop};while(a.offsetParent){a=a.offsetParent;b.x+=a.offsetLeft;b.y+=a.offsetTop;if(a!=document.body&&a!=document.documentElement){b.x-=a.scrollLeft;b.y-=a.scrollTop}}return b},expand:function(b,g,d,c){if(!b){b=hs.createElement("a",null,{display:"none"},hs.container)}if(typeof b.getParams=="function"){return g}try{new hs.Expander(b,g,d);return false}catch(f){return true}},getElementByClass:function(e,c,d){var b=e.getElementsByTagName(c);for(var a=0;a<b.length;a++){if((new RegExp(d)).test(b[a].className)){return b[a]}}return null},replaceLang:function(c){c=c.replace(/\s/g," ");var b=/{hs\.lang\.([^}]+)\}/g,d=c.match(b),e;if(d){for(var a=0;a<d.length;a++){e=d[a].replace(b,"$1");if(typeof hs.lang[e]!="undefined"){c=c.replace(d[a],hs.lang[e])}}}return c},focusTopmost:function(){var c=0,b=-1,a=hs.expanders,e,f;for(var d=0;d<a.length;d++){e=a[d];if(e){f=e.wrapper.style.zIndex;if(f&&f>c){c=f;b=d}}}if(b==-1){hs.focusKey=-1}else{a[b].focus()}},getParam:function(b,d){b.getParams=b.onclick;var c=b.getParams?b.getParams():null;b.getParams=null;return(c&&typeof c[d]!="undefined")?c[d]:(typeof hs[d]!="undefined"?hs[d]:null)},getSrc:function(b){var c=hs.getParam(b,"src");if(c){return c}return b.href},getNode:function(e){var c=hs.$(e),d=hs.clones[e],b={};if(!c&&!d){return null}if(!d){d=c.cloneNode(true);d.id="";hs.clones[e]=d;return c}else{return d.cloneNode(true)}},discardElement:function(a){if(a){hs.garbageBin.appendChild(a)}hs.garbageBin.innerHTML=""},dim:function(d){if(!hs.dimmer){a=true;hs.dimmer=hs.createElement("div",{className:"highslide-dimming highslide-viewport-size",owner:"",onclick:function(){hs.close()}},{visibility:"visible",opacity:0},hs.container,true);if(/(Android|iPad|iPhone|iPod)/.test(navigator.userAgent)){var b=document.body;function c(){hs.setStyles(hs.dimmer,{width:b.scrollWidth+"px",height:b.scrollHeight+"px"})}c();hs.addEventListener(window,"resize",c)}}hs.dimmer.style.display="";var a=hs.dimmer.owner=="";hs.dimmer.owner+="|"+d.key;if(a){if(hs.geckoMac&&hs.dimmingGeckoFix){hs.setStyles(hs.dimmer,{background:"url("+hs.graphicsDir+"geckodimmer.png)",opacity:1})}else{hs.animate(hs.dimmer,{opacity:d.dimmingOpacity},hs.dimmingDuration)}}},undim:function(a){if(!hs.dimmer){return}if(typeof a!="undefined"){hs.dimmer.owner=hs.dimmer.owner.replace("|"+a,"")}if((typeof a!="undefined"&&hs.dimmer.owner!="")||(hs.upcoming&&hs.getParam(hs.upcoming,"dimmingOpacity"))){return}if(hs.geckoMac&&hs.dimmingGeckoFix){hs.dimmer.style.display="none"}else{hs.animate(hs.dimmer,{opacity:0},hs.dimmingDuration,null,function(){hs.dimmer.style.display="none"})}},transit:function(a,d){var b=d||hs.getExpander();d=b;if(hs.upcoming){return false}else{hs.last=b}hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{hs.upcoming=a;a.onclick()}catch(c){hs.last=hs.upcoming=null}try{if(!a||d.transitions[1]!="crossfade"){d.close()}}catch(c){}return false},previousOrNext:function(a,c){var b=hs.getExpander(a);if(b){return hs.transit(b.getAdjacentAnchor(c),b)}else{return false}},previous:function(a){return hs.previousOrNext(a,-1)},next:function(a){return hs.previousOrNext(a,1)},keyHandler:function(a){if(!a){a=window.event}if(!a.target){a.target=a.srcElement}if(typeof a.target.form!="undefined"){return true}var b=hs.getExpander();var c=null;switch(a.keyCode){case 70:if(b){b.doFullExpand()}return true;case 32:c=2;break;case 34:case 39:case 40:c=1;break;case 8:case 33:case 37:case 38:c=-1;break;case 27:case 13:c=0}if(c!==null){if(c!=2){hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler)}if(!hs.enableKeyListener){return true}if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}if(b){if(c==0){b.close()}else{if(c==2){if(b.slideshow){b.slideshow.hitSpace()}}else{if(b.slideshow){b.slideshow.pause()}hs.previousOrNext(b.key,c)}}return false}}return true},registerOverlay:function(a){hs.push(hs.overlays,hs.extend(a,{hsId:"hsId"+hs.idCounter++}))},addSlideshow:function(b){var d=b.slideshowGroup;if(typeof d=="object"){for(var c=0;c<d.length;c++){var e={};for(var a in b){e[a]=b[a]}e.slideshowGroup=d[c];hs.push(hs.slideshows,e)}}else{hs.push(hs.slideshows,b)}},getWrapperKey:function(c,b){var e,d=/^highslide-wrapper-([0-9]+)$/;e=c;while(e.parentNode){if(e.hsKey!==undefined){return e.hsKey}if(e.id&&d.test(e.id)){return e.id.replace(d,"$1")}e=e.parentNode}if(!b){e=c;while(e.parentNode){if(e.tagName&&hs.isHsAnchor(e)){for(var a=0;a<hs.expanders.length;a++){var f=hs.expanders[a];if(f&&f.a==e){return a}}}e=e.parentNode}}return null},getExpander:function(b,a){if(typeof b=="undefined"){return hs.expanders[hs.focusKey]||null}if(typeof b=="number"){return hs.expanders[b]||null}if(typeof b=="string"){b=hs.$(b)}return hs.expanders[hs.getWrapperKey(b,a)]||null},isHsAnchor:function(b){return(b.onclick&&b.onclick.toString().replace(/\s/g," ").match(/hs.(htmlE|e)xpand/))},reOrder:function(){for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&hs.expanders[a].isExpanded){hs.focusTopmost()}}},mouseClickHandler:function(d){if(!d){d=window.event}if(d.button>1){return true}if(!d.target){d.target=d.srcElement}var b=d.target;while(b.parentNode&&!(/highslide-(image|move|html|resize)/.test(b.className))){b=b.parentNode}var f=hs.getExpander(b);if(f&&(f.isClosing||!f.isExpanded)){return true}if(f&&d.type=="mousedown"){if(d.target.form){return true}var a=b.className.match(/highslide-(image|move|resize)/);if(a){hs.dragArgs={exp:f,type:a[1],left:f.x.pos,width:f.x.size,top:f.y.pos,height:f.y.size,clickX:d.clientX,clickY:d.clientY};hs.addEventListener(document,"mousemove",hs.dragHandler);if(d.preventDefault){d.preventDefault()}if(/highslide-(image|html)-blur/.test(f.content.className)){f.focus();hs.hasFocused=true}return false}}else{if(d.type=="mouseup"){hs.removeEventListener(document,"mousemove",hs.dragHandler);if(hs.dragArgs){if(hs.styleRestoreCursor&&hs.dragArgs.type=="image"){hs.dragArgs.exp.content.style.cursor=hs.styleRestoreCursor}var c=hs.dragArgs.hasDragged;if(!c&&!hs.hasFocused&&!/(move|resize)/.test(hs.dragArgs.type)){f.close()}else{if(c||(!c&&hs.hasHtmlExpanders)){hs.dragArgs.exp.doShowHide("hidden")}}hs.hasFocused=false;hs.dragArgs=null}else{if(/highslide-image-blur/.test(b.className)){b.style.cursor=hs.styleRestoreCursor}}}}return false},dragHandler:function(c){if(!hs.dragArgs){return true}if(!c){c=window.event}var b=hs.dragArgs,d=b.exp;b.dX=c.clientX-b.clickX;b.dY=c.clientY-b.clickY;var f=Math.sqrt(Math.pow(b.dX,2)+Math.pow(b.dY,2));if(!b.hasDragged){b.hasDragged=(b.type!="image"&&f>0)||(f>(hs.dragSensitivity||5))}if(b.hasDragged&&c.clientX>5&&c.clientY>5){if(b.type=="resize"){d.resize(b)}else{d.moveTo(b.left+b.dX,b.top+b.dY);if(b.type=="image"){d.content.style.cursor="move"}}}return false},wrapperMouseHandler:function(c){try{if(!c){c=window.event}var b=/mouseover/i.test(c.type);if(!c.target){c.target=c.srcElement}if(!c.relatedTarget){c.relatedTarget=b?c.fromElement:c.toElement}var d=hs.getExpander(c.target);if(!d.isExpanded){return}if(!d||!c.relatedTarget||hs.getExpander(c.relatedTarget,true)==d||hs.dragArgs){return}for(var a=0;a<d.overlays.length;a++){(function(){var e=hs.$("hsId"+d.overlays[a]);if(e&&e.hideOnMouseOut){if(b){hs.setStyles(e,{visibility:"visible",display:""})}hs.animate(e,{opacity:b?e.opacity:0},e.dur)}})()}}catch(c){}},addEventListener:function(a,c,b){if(a==document&&c=="ready"){hs.push(hs.onReady,b)}try{a.addEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b);a.attachEvent("on"+c,b)}catch(d){a["on"+c]=b}}},removeEventListener:function(a,c,b){try{a.removeEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b)}catch(d){a["on"+c]=null}}},preloadFullImage:function(b){if(hs.continuePreloading&&hs.preloadTheseImages[b]&&hs.preloadTheseImages[b]!="undefined"){var a=document.createElement("img");a.onload=function(){a=null;hs.preloadFullImage(b+1)};a.src=hs.preloadTheseImages[b]}},preloadImages:function(c){if(c&&typeof c!="object"){hs.numberOfImagesToPreload=c}var a=hs.getAnchors();for(var b=0;b<a.images.length&&b<hs.numberOfImagesToPreload;b++){hs.push(hs.preloadTheseImages,hs.getSrc(a.images[b]))}if(hs.outlineType){new hs.Outline(hs.outlineType,function(){hs.preloadFullImage(0)})}else{hs.preloadFullImage(0)}if(hs.restoreCursor){var d=hs.createElement("img",{src:hs.graphicsDir+hs.restoreCursor})}},init:function(){if(!hs.container){hs.ieLt7=hs.ie&&hs.uaVersion<7;hs.ieLt9=hs.ie&&hs.uaVersion<9;hs.getPageSize();for(var a in hs.langDefaults){if(typeof hs[a]!="undefined"){hs.lang[a]=hs[a]}else{if(typeof hs.lang[a]=="undefined"&&typeof hs.langDefaults[a]!="undefined"){hs.lang[a]=hs.langDefaults[a]}}}hs.container=hs.createElement("div",{className:"highslide-container"},{position:"absolute",left:0,top:0,width:"100%",zIndex:hs.zIndexCounter,direction:"ltr"},document.body,true);hs.loading=hs.createElement("a",{className:"highslide-loading",title:hs.lang.loadingTitle,innerHTML:hs.lang.loadingText,href:"javascript:;"},{position:"absolute",top:"-9999px",opacity:hs.loadingOpacity,zIndex:1},hs.container);hs.garbageBin=hs.createElement("div",null,{display:"none"},hs.container);hs.viewport=hs.createElement("div",{className:"highslide-viewport highslide-viewport-size"},{visibility:(hs.safari&&hs.uaVersion<525)?"visible":"hidden"},hs.container,1);Math.linearTween=function(f,e,h,g){return h*f/g+e};Math.easeInQuad=function(f,e,h,g){return h*(f/=g)*f+e};Math.easeOutQuad=function(f,e,h,g){return -h*(f/=g)*(f-2)+e};hs.hideSelects=hs.ieLt7;hs.hideIframes=((window.opera&&hs.uaVersion<9)||navigator.vendor=="KDE"||(hs.ieLt7&&hs.uaVersion<5.5))}},ready:function(){if(hs.isReady){return}hs.isReady=true;for(var a=0;a<hs.onReady.length;a++){hs.onReady[a]()}},updateAnchors:function(){var a,c,k=[],h=[],b={},l;for(var e=0;e<hs.openerTagNames.length;e++){c=document.getElementsByTagName(hs.openerTagNames[e]);for(var d=0;d<c.length;d++){a=c[d];l=hs.isHsAnchor(a);if(l){hs.push(k,a);if(l[0]=="hs.expand"){hs.push(h,a)}var f=hs.getParam(a,"slideshowGroup")||"none";if(!b[f]){b[f]=[]}hs.push(b[f],a)}}}hs.anchors={all:k,groups:b,images:h};return hs.anchors},getAnchors:function(){return hs.anchors||hs.updateAnchors()},close:function(a){var b=hs.getExpander(a);if(b){b.close()}return false}};hs.fx=function(b,a,c){this.options=a;this.elem=b;this.prop=c;if(!a.orig){a.orig={}}};hs.fx.prototype={update:function(){(hs.fx.step[this.prop]||hs.fx.step._default)(this);if(this.options.step){this.options.step.call(this.elem,this.now,this)}},custom:function(e,d,c){this.startTime=(new Date()).getTime();this.start=e;this.end=d;this.unit=c;this.now=this.start;this.pos=this.state=0;var a=this;function b(f){return a.step(f)}b.elem=this.elem;if(b()&&hs.timers.push(b)==1){hs.timerId=setInterval(function(){var g=hs.timers;for(var f=0;f<g.length;f++){if(!g[f]()){g.splice(f--,1)}}if(!g.length){clearInterval(hs.timerId)}},13)}},step:function(d){var c=(new Date()).getTime();if(d||c>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var a=true;for(var b in this.options.curAnim){if(this.options.curAnim[b]!==true){a=false}}if(a){if(this.options.complete){this.options.complete.call(this.elem)}}return false}else{var e=c-this.startTime;this.state=e/this.options.duration;this.pos=this.options.easing(e,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};hs.extend(hs.fx,{step:{opacity:function(a){hs.setStyles(a.elem,{opacity:a.now})},_default:function(a){try{if(a.elem.style&&a.elem.style[a.prop]!=null){a.elem.style[a.prop]=a.now+a.unit}else{a.elem[a.prop]=a.now}}catch(b){}}}});hs.Outline=function(g,e){this.onLoad=e;this.outlineType=g;var a=hs.uaVersion,f;this.hasAlphaImageLoader=hs.ie&&hs.uaVersion<7;if(!g){if(e){e()}return}hs.init();this.table=hs.createElement("table",{cellSpacing:0},{visibility:"hidden",position:"absolute",borderCollapse:"collapse",width:0},hs.container,true);var b=hs.createElement("tbody",null,null,this.table,1);this.td=[];for(var c=0;c<=8;c++){if(c%3==0){f=hs.createElement("tr",null,{height:"auto"},b,true)}this.td[c]=hs.createElement("td",null,null,f,true);var d=c!=4?{lineHeight:0,fontSize:0}:{position:"relative"};hs.setStyles(this.td[c],d)}this.td[4].className=g+" highslide-outline";this.preloadGraphic()};hs.Outline.prototype={preloadGraphic:function(){var b=hs.graphicsDir+(hs.outlinesDir||"outlines/")+this.outlineType+".png";var a=hs.safari&&hs.uaVersion<525?hs.container:null;this.graphic=hs.createElement("img",null,{position:"absolute",top:"-9999px"},a,true);var c=this;this.graphic.onload=function(){c.onGraphicLoad()};this.graphic.src=b},onGraphicLoad:function(){var d=this.offset=this.graphic.width/4,f=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],c={height:(2*d)+"px",width:(2*d)+"px"};for(var b=0;b<=8;b++){if(f[b]){if(this.hasAlphaImageLoader){var a=(b==1||b==7)?"100%":this.graphic.width+"px";var e=hs.createElement("div",null,{width:"100%",height:"100%",position:"relative",overflow:"hidden"},this.td[b],true);hs.createElement("div",null,{filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+this.graphic.src+"')",position:"absolute",width:a,height:this.graphic.height+"px",left:(f[b][0]*d)+"px",top:(f[b][1]*d)+"px"},e,true)}else{hs.setStyles(this.td[b],{background:"url("+this.graphic.src+") "+(f[b][0]*d)+"px "+(f[b][1]*d)+"px"})}if(window.opera&&(b==3||b==5)){hs.createElement("div",null,c,this.td[b],true)}hs.setStyles(this.td[b],c)}}this.graphic=null;if(hs.pendingOutlines[this.outlineType]){hs.pendingOutlines[this.outlineType].destroy()}hs.pendingOutlines[this.outlineType]=this;if(this.onLoad){this.onLoad()}},setPosition:function(g,e,c,b,f){var d=this.exp,a=d.wrapper.style,e=e||0,g=g||{x:d.x.pos+e,y:d.y.pos+e,w:d.x.get("wsize")-2*e,h:d.y.get("wsize")-2*e};if(c){this.table.style.visibility=(g.h>=4*this.offset)?"visible":"hidden"}hs.setStyles(this.table,{left:(g.x-this.offset)+"px",top:(g.y-this.offset)+"px",width:(g.w+2*this.offset)+"px"});g.w-=2*this.offset;g.h-=2*this.offset;hs.setStyles(this.td[4],{width:g.w>=0?g.w+"px":0,height:g.h>=0?g.h+"px":0});if(this.hasAlphaImageLoader){this.td[3].style.height=this.td[5].style.height=this.td[4].style.height}},destroy:function(a){if(a){this.table.style.visibility="hidden"}else{hs.discardElement(this.table)}}};hs.Dimension=function(b,a){this.exp=b;this.dim=a;this.ucwh=a=="x"?"Width":"Height";this.wh=this.ucwh.toLowerCase();this.uclt=a=="x"?"Left":"Top";this.lt=this.uclt.toLowerCase();this.ucrb=a=="x"?"Right":"Bottom";this.rb=this.ucrb.toLowerCase();this.p1=this.p2=0};hs.Dimension.prototype={get:function(a){switch(a){case"loadingPos":return this.tpos+this.tb+(this.t-hs.loading["offset"+this.ucwh])/2;case"loadingPosXfade":return this.pos+this.cb+this.p1+(this.size-hs.loading["offset"+this.ucwh])/2;case"wsize":return this.size+2*this.cb+this.p1+this.p2;case"fitsize":return this.clientSize-this.marginMin-this.marginMax;case"maxsize":return this.get("fitsize")-2*this.cb-this.p1-this.p2;case"opos":return this.pos-(this.exp.outline?this.exp.outline.offset:0);case"osize":return this.get("wsize")+(this.exp.outline?2*this.exp.outline.offset:0);case"imgPad":return this.imgSize?Math.round((this.size-this.imgSize)/2):0}},calcBorders:function(){this.cb=(this.exp.content["offset"+this.ucwh]-this.t)/2;this.marginMax=hs["margin"+this.ucrb]},calcThumb:function(){this.t=this.exp.el[this.wh]?parseInt(this.exp.el[this.wh]):this.exp.el["offset"+this.ucwh];this.tpos=this.exp.tpos[this.dim];this.tb=(this.exp.el["offset"+this.ucwh]-this.t)/2;if(this.tpos==0||this.tpos==-1){this.tpos=(hs.page[this.wh]/2)+hs.page["scroll"+this.uclt]}},calcExpanded:function(){var a=this.exp;this.justify="auto";if(a.align=="center"){this.justify="center"}else{if(new RegExp(this.lt).test(a.anchor)){this.justify=null}else{if(new RegExp(this.rb).test(a.anchor)){this.justify="max"}}}this.pos=this.tpos-this.cb+this.tb;if(this.maxHeight&&this.dim=="x"){a.maxWidth=Math.min(a.maxWidth||this.full,a.maxHeight*this.full/a.y.full)}this.size=Math.min(this.full,a["max"+this.ucwh]||this.full);this.minSize=a.allowSizeReduction?Math.min(a["min"+this.ucwh],this.full):this.full;if(a.isImage&&a.useBox){this.size=a[this.wh];this.imgSize=this.full}if(this.dim=="x"&&hs.padToMinWidth){this.minSize=a.minWidth}this.target=a["target"+this.dim.toUpperCase()];this.marginMin=hs["margin"+this.uclt];this.scroll=hs.page["scroll"+this.uclt];this.clientSize=hs.page[this.wh]},setSize:function(a){var b=this.exp;if(b.isImage&&(b.useBox||hs.padToMinWidth)){this.imgSize=a;this.size=Math.max(this.size,this.imgSize);b.content.style[this.lt]=this.get("imgPad")+"px"}else{this.size=a}b.content.style[this.wh]=a+"px";b.wrapper.style[this.wh]=this.get("wsize")+"px";if(b.outline){b.outline.setPosition()}if(this.dim=="x"&&b.overlayBox){b.sizeOverlayBox(true)}if(this.dim=="x"&&b.slideshow&&b.isImage){if(a==this.full){b.slideshow.disable("full-expand")}else{b.slideshow.enable("full-expand")}}},setPos:function(a){this.pos=a;this.exp.wrapper.style[this.lt]=a+"px";if(this.exp.outline){this.exp.outline.setPosition()}}};hs.Expander=function(k,f,b,l){if(document.readyState&&hs.ie&&!hs.isReady){hs.addEventListener(document,"ready",function(){new hs.Expander(k,f,b,l)});return}this.a=k;this.custom=b;this.contentType=l||"image";this.isImage=!this.isHtml;hs.continuePreloading=false;this.overlays=[];this.last=hs.last;hs.last=null;hs.init();var m=this.key=hs.expanders.length;for(var g=0;g<hs.overrides.length;g++){var c=hs.overrides[g];this[c]=f&&typeof f[c]!="undefined"?f[c]:hs[c]}if(!this.src){this.src=k.href}var d=(f&&f.thumbnailId)?hs.$(f.thumbnailId):k;d=this.thumb=d.getElementsByTagName("img")[0]||d;this.thumbsUserSetId=d.id||k.id;for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].a==k&&!(this.last&&this.transitions[1]=="crossfade")){hs.expanders[g].focus();return false}}if(!hs.allowSimultaneousLoading){for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].thumb!=d&&!hs.expanders[g].onLoadStarted){hs.expanders[g].cancelLoading()}}}hs.expanders[m]=this;if(!hs.allowMultipleInstances&&!hs.upcoming){if(hs.expanders[m-1]){hs.expanders[m-1].close()}if(typeof hs.focusKey!="undefined"&&hs.expanders[hs.focusKey]){hs.expanders[hs.focusKey].close()}}this.el=d;this.tpos=this.pageOrigin||hs.getPosition(d);hs.getPageSize();var j=this.x=new hs.Dimension(this,"x");j.calcThumb();var h=this.y=new hs.Dimension(this,"y");h.calcThumb();this.wrapper=hs.createElement("div",{id:"highslide-wrapper-"+this.key,className:"highslide-wrapper "+this.wrapperClassName},{visibility:"hidden",position:"absolute",zIndex:hs.zIndexCounter+=2},null,true);this.wrapper.onmouseover=this.wrapper.onmouseout=hs.wrapperMouseHandler;if(this.contentType=="image"&&this.outlineWhileAnimating==2){this.outlineWhileAnimating=0}if(!this.outlineType||(this.last&&this.isImage&&this.transitions[1]=="crossfade")){this[this.contentType+"Create"]()}else{if(hs.pendingOutlines[this.outlineType]){this.connectOutline();this[this.contentType+"Create"]()}else{this.showLoading();var e=this;new hs.Outline(this.outlineType,function(){e.connectOutline();e[e.contentType+"Create"]()})}}return true};hs.Expander.prototype={error:function(a){if(hs.debug){alert("Line "+a.lineNumber+": "+a.message)}else{window.location.href=this.src}},connectOutline:function(){var a=this.outline=hs.pendingOutlines[this.outlineType];a.exp=this;a.table.style.zIndex=this.wrapper.style.zIndex-1;hs.pendingOutlines[this.outlineType]=null},showLoading:function(){if(this.onLoadStarted||this.loading){return}this.loading=hs.loading;var c=this;this.loading.onclick=function(){c.cancelLoading()};var c=this,a=this.x.get("loadingPos")+"px",b=this.y.get("loadingPos")+"px";if(!d&&this.last&&this.transitions[1]=="crossfade"){var d=this.last}if(d){a=d.x.get("loadingPosXfade")+"px";b=d.y.get("loadingPosXfade")+"px";this.loading.style.zIndex=hs.zIndexCounter++}setTimeout(function(){if(c.loading){hs.setStyles(c.loading,{left:a,top:b,zIndex:hs.zIndexCounter++})}},100)},imageCreate:function(){var b=this;var a=document.createElement("img");this.content=a;a.onload=function(){if(hs.expanders[b.key]){b.contentLoaded()}};if(hs.blockRightClick){a.oncontextmenu=function(){return false}}a.className="highslide-image";hs.setStyles(a,{visibility:"hidden",display:"block",position:"absolute",maxWidth:"9999px",zIndex:3});a.title=hs.lang.restoreTitle;if(hs.safari&&hs.uaVersion<525){hs.container.appendChild(a)}if(hs.ie&&hs.flushImgSize){a.src=null}a.src=this.src;this.showLoading()},contentLoaded:function(){try{if(!this.content){return}this.content.onload=null;if(this.onLoadStarted){return}else{this.onLoadStarted=true}var j=this.x,g=this.y;if(this.loading){hs.setStyles(this.loading,{top:"-9999px"});this.loading=null}j.full=this.content.width;g.full=this.content.height;hs.setStyles(this.content,{width:j.t+"px",height:g.t+"px"});this.wrapper.appendChild(this.content);hs.container.appendChild(this.wrapper);j.calcBorders();g.calcBorders();hs.setStyles(this.wrapper,{left:(j.tpos+j.tb-j.cb)+"px",top:(g.tpos+j.tb-g.cb)+"px"});this.initSlideshow();this.getOverlays();var f=j.full/g.full;j.calcExpanded();this.justify(j);g.calcExpanded();this.justify(g);if(this.overlayBox){this.sizeOverlayBox(0,1)}if(this.allowSizeReduction){this.correctRatio(f);var k=this.slideshow;if(k&&this.last&&k.controls&&k.fixedControls){var h=k.overlayOptions.position||"",a;for(var c in hs.oPos){for(var b=0;b<5;b++){a=this[c];if(h.match(hs.oPos[c][b])){a.pos=this.last[c].pos+(this.last[c].p1-a.p1)+(this.last[c].size-a.size)*[0,0,0.5,1,1][b];if(k.fixedControls=="fit"){if(a.pos+a.size+a.p1+a.p2>a.scroll+a.clientSize-a.marginMax){a.pos=a.scroll+a.clientSize-a.size-a.marginMin-a.marginMax-a.p1-a.p2}if(a.pos<a.scroll+a.marginMin){a.pos=a.scroll+a.marginMin}}}}}}if(this.isImage&&this.x.full>(this.x.imgSize||this.x.size)){this.createFullExpand();if(this.overlays.length==1){this.sizeOverlayBox()}}}this.show()}catch(d){this.error(d)}},justify:function(f,b){var g,h=f.target,e=f==this.x?"x":"y";if(h&&h.match(/ /)){g=h.split(" ");h=g[0]}if(h&&hs.$(h)){f.pos=hs.getPosition(hs.$(h))[e];if(g&&g[1]&&g[1].match(/^[-]?[0-9]+px$/)){f.pos+=parseInt(g[1])}if(f.size<f.minSize){f.size=f.minSize}}else{if(f.justify=="auto"||f.justify=="center"){var d=false;var a=f.exp.allowSizeReduction;if(f.justify=="center"){f.pos=Math.round(f.scroll+(f.clientSize+f.marginMin-f.marginMax-f.get("wsize"))/2)}else{f.pos=Math.round(f.pos-((f.get("wsize")-f.t)/2))}if(f.pos<f.scroll+f.marginMin){f.pos=f.scroll+f.marginMin;d=true}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}if(f.pos+f.get("wsize")>f.scroll+f.clientSize-f.marginMax){if(!b&&d&&a){f.size=Math.min(f.size,f.get(e=="y"?"fitsize":"maxsize"))}else{if(f.get("wsize")<f.get("fitsize")){f.pos=f.scroll+f.clientSize-f.marginMax-f.get("wsize")}else{f.pos=f.scroll+f.marginMin;if(!b&&a){f.size=f.get(e=="y"?"fitsize":"maxsize")}}}}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}}else{if(f.justify=="max"){f.pos=Math.floor(f.pos-f.size+f.t)}}}if(f.pos<f.marginMin){var c=f.pos;f.pos=f.marginMin;if(a&&!b){f.size=f.size-(f.pos-c)}}},correctRatio:function(c){var a=this.x,g=this.y,e=false,d=Math.min(a.full,a.size),b=Math.min(g.full,g.size),f=(this.useBox||hs.padToMinWidth);if(d/b>c){d=b*c;if(d<a.minSize){d=a.minSize;b=d/c}e=true}else{if(d/b<c){b=d/c;e=true}}if(hs.padToMinWidth&&a.full<a.minSize){a.imgSize=a.full;g.size=g.imgSize=g.full}else{if(this.useBox){a.imgSize=d;g.imgSize=b}else{a.size=d;g.size=b}}e=this.fitOverlayBox(this.useBox?null:c,e);if(f&&g.size<g.imgSize){g.imgSize=g.size;a.imgSize=g.size*c}if(e||f){a.pos=a.tpos-a.cb+a.tb;a.minSize=a.size;this.justify(a,true);g.pos=g.tpos-g.cb+g.tb;g.minSize=g.size;this.justify(g,true);if(this.overlayBox){this.sizeOverlayBox()}}},fitOverlayBox:function(b,c){var a=this.x,d=this.y;if(this.overlayBox){while(d.size>this.minHeight&&a.size>this.minWidth&&d.get("wsize")>d.get("fitsize")){d.size-=10;if(b){a.size=d.size*b}this.sizeOverlayBox(0,1);c=true}}return c},show:function(){var a=this.x,b=this.y;this.doShowHide("hidden");if(this.slideshow&&this.slideshow.thumbstrip){this.slideshow.thumbstrip.selectThumb()}this.changeSize(1,{wrapper:{width:a.get("wsize"),height:b.get("wsize"),left:a.pos,top:b.pos},content:{left:a.p1+a.get("imgPad"),top:b.p1+b.get("imgPad"),width:a.imgSize||a.size,height:b.imgSize||b.size}},hs.expandDuration)},changeSize:function(d,i,b){var k=this.transitions,e=d?(this.last?this.last.a:null):hs.upcoming,j=(k[1]&&e&&hs.getParam(e,"transitions")[1]==k[1])?k[1]:k[0];if(this[j]&&j!="expand"){this[j](d,i);return}if(this.outline&&!this.outlineWhileAnimating){if(d){this.outline.setPosition()}else{this.outline.destroy()}}if(!d){this.destroyOverlays()}var c=this,h=c.x,g=c.y,f=this.easing;if(!d){f=this.easingClose||f}var a=d?function(){if(c.outline){c.outline.table.style.visibility="visible"}setTimeout(function(){c.afterExpand()},50)}:function(){c.afterClose()};if(d){hs.setStyles(this.wrapper,{width:h.t+"px",height:g.t+"px"})}if(this.fadeInOut){hs.setStyles(this.wrapper,{opacity:d?0:1});hs.extend(i.wrapper,{opacity:d})}hs.animate(this.wrapper,i.wrapper,{duration:b,easing:f,step:function(n,l){if(c.outline&&c.outlineWhileAnimating&&l.prop=="top"){var m=d?l.pos:1-l.pos;var o={w:h.t+(h.get("wsize")-h.t)*m,h:g.t+(g.get("wsize")-g.t)*m,x:h.tpos+(h.pos-h.tpos)*m,y:g.tpos+(g.pos-g.tpos)*m};c.outline.setPosition(o,0,1)}}});hs.animate(this.content,i.content,b,f,a);if(d){this.wrapper.style.visibility="visible";this.content.style.visibility="visible";this.a.className+=" highslide-active-anchor"}},fade:function(f,h){this.outlineWhileAnimating=false;var c=this,j=f?hs.expandDuration:0;if(f){hs.animate(this.wrapper,h.wrapper,0);hs.setStyles(this.wrapper,{opacity:0,visibility:"visible"});hs.animate(this.content,h.content,0);this.content.style.visibility="visible";hs.animate(this.wrapper,{opacity:1},j,null,function(){c.afterExpand()})}if(this.outline){this.outline.table.style.zIndex=this.wrapper.style.zIndex;var b=f||-1,d=this.outline.offset,a=f?3:d,g=f?d:3;for(var e=a;b*e<=b*g;e+=b,j+=25){(function(){var i=f?g-e:a-e;setTimeout(function(){c.outline.setPosition(0,i,1)},j)})()}}if(f){}else{setTimeout(function(){if(c.outline){c.outline.destroy(c.preserveContent)}c.destroyOverlays();hs.animate(c.wrapper,{opacity:0},hs.restoreDuration,null,function(){c.afterClose()})},j)}},crossfade:function(g,m,o){if(!g){return}var f=this,p=this.last,l=this.x,k=this.y,d=p.x,b=p.y,a=this.wrapper,i=this.content,c=this.overlayBox;hs.removeEventListener(document,"mousemove",hs.dragHandler);hs.setStyles(i,{width:(l.imgSize||l.size)+"px",height:(k.imgSize||k.size)+"px"});if(c){c.style.overflow="visible"}this.outline=p.outline;if(this.outline){this.outline.exp=f}p.outline=null;var h=hs.createElement("div",{className:"highslide-"+this.contentType},{position:"absolute",zIndex:4,overflow:"hidden",display:"none"});var j={oldImg:p,newImg:this};for(var e in j){this[e]=j[e].content.cloneNode(1);hs.setStyles(this[e],{position:"absolute",border:0,visibility:"visible"});h.appendChild(this[e])}a.appendChild(h);if(c){c.className="";a.appendChild(c)}h.style.display="";p.content.style.display="none";if(hs.safari&&hs.uaVersion<525){this.wrapper.style.visibility="visible"}hs.animate(a,{width:l.size},{duration:hs.transitionDuration,step:function(u,r){var x=r.pos,q=1-x;var w,s={},t=["pos","size","p1","p2"];for(var v in t){w=t[v];s["x"+w]=Math.round(q*d[w]+x*l[w]);s["y"+w]=Math.round(q*b[w]+x*k[w]);s.ximgSize=Math.round(q*(d.imgSize||d.size)+x*(l.imgSize||l.size));s.ximgPad=Math.round(q*d.get("imgPad")+x*l.get("imgPad"));s.yimgSize=Math.round(q*(b.imgSize||b.size)+x*(k.imgSize||k.size));s.yimgPad=Math.round(q*b.get("imgPad")+x*k.get("imgPad"))}if(f.outline){f.outline.setPosition({x:s.xpos,y:s.ypos,w:s.xsize+s.xp1+s.xp2+2*l.cb,h:s.ysize+s.yp1+s.yp2+2*k.cb})}p.wrapper.style.clip="rect("+(s.ypos-b.pos)+"px, "+(s.xsize+s.xp1+s.xp2+s.xpos+2*d.cb-d.pos)+"px, "+(s.ysize+s.yp1+s.yp2+s.ypos+2*b.cb-b.pos)+"px, "+(s.xpos-d.pos)+"px)";hs.setStyles(i,{top:(s.yp1+k.get("imgPad"))+"px",left:(s.xp1+l.get("imgPad"))+"px",marginTop:(k.pos-s.ypos)+"px",marginLeft:(l.pos-s.xpos)+"px"});hs.setStyles(a,{top:s.ypos+"px",left:s.xpos+"px",width:(s.xp1+s.xp2+s.xsize+2*l.cb)+"px",height:(s.yp1+s.yp2+s.ysize+2*k.cb)+"px"});hs.setStyles(h,{width:(s.ximgSize||s.xsize)+"px",height:(s.yimgSize||s.ysize)+"px",left:(s.xp1+s.ximgPad)+"px",top:(s.yp1+s.yimgPad)+"px",visibility:"visible"});hs.setStyles(f.oldImg,{top:(b.pos-s.ypos+b.p1-s.yp1+b.get("imgPad")-s.yimgPad)+"px",left:(d.pos-s.xpos+d.p1-s.xp1+d.get("imgPad")-s.ximgPad)+"px"});hs.setStyles(f.newImg,{opacity:x,top:(k.pos-s.ypos+k.p1-s.yp1+k.get("imgPad")-s.yimgPad)+"px",left:(l.pos-s.xpos+l.p1-s.xp1+l.get("imgPad")-s.ximgPad)+"px"});if(c){hs.setStyles(c,{width:s.xsize+"px",height:s.ysize+"px",left:(s.xp1+l.cb)+"px",top:(s.yp1+k.cb)+"px"})}},complete:function(){a.style.visibility=i.style.visibility="visible";i.style.display="block";hs.discardElement(h);f.afterExpand();p.afterClose();f.last=null}})},reuseOverlay:function(d,c){if(!this.last){return false}for(var b=0;b<this.last.overlays.length;b++){var a=hs.$("hsId"+this.last.overlays[b]);if(a&&a.hsId==d.hsId){this.genOverlayBox();a.reuse=this.key;hs.push(this.overlays,this.last.overlays[b]);return true}}return false},afterExpand:function(){this.isExpanded=true;this.focus();if(this.dimmingOpacity){hs.dim(this)}if(hs.upcoming&&hs.upcoming==this.a){hs.upcoming=null}this.prepareNextOutline();var c=hs.page,b=hs.mouse.x+c.scrollLeft,a=hs.mouse.y+c.scrollTop;this.mouseIsOver=this.x.pos<b&&b<this.x.pos+this.x.get("wsize")&&this.y.pos<a&&a<this.y.pos+this.y.get("wsize");if(this.overlayBox){this.showOverlays()}},prepareNextOutline:function(){var a=this.key;var b=this.outlineType;new hs.Outline(b,function(){try{hs.expanders[a].preloadNext()}catch(c){}})},preloadNext:function(){var b=this.getAdjacentAnchor(1);if(b&&b.onclick.toString().match(/hs\.expand/)){var a=hs.createElement("img",{src:hs.getSrc(b)})}},getAdjacentAnchor:function(c){var b=this.getAnchorIndex(),a=hs.anchors.groups[this.slideshowGroup||"none"];if(a&&!a[b+c]&&this.slideshow&&this.slideshow.repeat){if(c==1){return a[0]}else{if(c==-1){return a[a.length-1]}}}return(a&&a[b+c])||null},getAnchorIndex:function(){var a=hs.getAnchors().groups[this.slideshowGroup||"none"];if(a){for(var b=0;b<a.length;b++){if(a[b]==this.a){return b}}}return null},getNumber:function(){if(this[this.numberPosition]){var a=hs.anchors.groups[this.slideshowGroup||"none"];if(a){var b=hs.lang.number.replace("%1",this.getAnchorIndex()+1).replace("%2",a.length);this[this.numberPosition].innerHTML='<div class="highslide-number">'+b+"</div>"+this[this.numberPosition].innerHTML}}},initSlideshow:function(){if(!this.last){for(var c=0;c<hs.slideshows.length;c++){var b=hs.slideshows[c],d=b.slideshowGroup;if(typeof d=="undefined"||d===null||d===this.slideshowGroup){this.slideshow=new hs.Slideshow(this.key,b)}}}else{this.slideshow=this.last.slideshow}var b=this.slideshow;if(!b){return}var a=b.expKey=this.key;b.checkFirstAndLast();b.disable("full-expand");if(b.controls){this.createOverlay(hs.extend(b.overlayOptions||{},{overlayId:b.controls,hsId:"controls",zIndex:5}))}if(b.thumbstrip){b.thumbstrip.add(this)}if(!this.last&&this.autoplay){b.play(true)}if(b.autoplay){b.autoplay=setTimeout(function(){hs.next(a)},(b.interval||500))}},cancelLoading:function(){hs.discardElement(this.wrapper);hs.expanders[this.key]=null;if(hs.upcoming==this.a){hs.upcoming=null}hs.undim(this.key);if(this.loading){hs.loading.style.left="-9999px"}},writeCredits:function(){if(this.credits){return}this.credits=hs.createElement("a",{href:hs.creditsHref,target:hs.creditsTarget,className:"highslide-credits",innerHTML:hs.lang.creditsText,title:hs.lang.creditsTitle});this.createOverlay({overlayId:this.credits,position:this.creditsPosition||"top left",hsId:"credits"})},getInline:function(types,addOverlay){for(var i=0;i<types.length;i++){var type=types[i],s=null;if(!this[type+"Id"]&&this.thumbsUserSetId){this[type+"Id"]=type+"-for-"+this.thumbsUserSetId}if(this[type+"Id"]){this[type]=hs.getNode(this[type+"Id"])}if(!this[type]&&!this[type+"Text"]&&this[type+"Eval"]){try{s=eval(this[type+"Eval"])}catch(e){}}if(!this[type]&&this[type+"Text"]){s=this[type+"Text"]}if(!this[type]&&!s){this[type]=hs.getNode(this.a["_"+type+"Id"]);if(!this[type]){var next=this.a.nextSibling;while(next&&!hs.isHsAnchor(next)){if((new RegExp("highslide-"+type)).test(next.className||null)){if(!next.id){this.a["_"+type+"Id"]=next.id="hsId"+hs.idCounter++}this[type]=hs.getNode(next.id);break}next=next.nextSibling}}}if(!this[type]&&!s&&this.numberPosition==type){s="\n"}if(!this[type]&&s){this[type]=hs.createElement("div",{className:"highslide-"+type,innerHTML:s})}if(addOverlay&&this[type]){var o={position:(type=="heading")?"above":"below"};for(var x in this[type+"Overlay"]){o[x]=this[type+"Overlay"][x]}o.overlayId=this[type];this.createOverlay(o)}}},doShowHide:function(a){if(hs.hideSelects){this.showHideElements("SELECT",a)}if(hs.hideIframes){this.showHideElements("IFRAME",a)}if(hs.geckoMac){this.showHideElements("*",a)}},showHideElements:function(c,b){var e=document.getElementsByTagName(c);var a=c=="*"?"overflow":"visibility";for(var f=0;f<e.length;f++){if(a=="visibility"||(document.defaultView.getComputedStyle(e[f],"").getPropertyValue("overflow")=="auto"||e[f].getAttribute("hidden-by")!=null)){var h=e[f].getAttribute("hidden-by");if(b=="visible"&&h){h=h.replace("["+this.key+"]","");e[f].setAttribute("hidden-by",h);if(!h){e[f].style[a]=e[f].origProp}}else{if(b=="hidden"){var k=hs.getPosition(e[f]);k.w=e[f].offsetWidth;k.h=e[f].offsetHeight;if(!this.dimmingOpacity){var j=(k.x+k.w<this.x.get("opos")||k.x>this.x.get("opos")+this.x.get("osize"));var g=(k.y+k.h<this.y.get("opos")||k.y>this.y.get("opos")+this.y.get("osize"))}var d=hs.getWrapperKey(e[f]);if(!j&&!g&&d!=this.key){if(!h){e[f].setAttribute("hidden-by","["+this.key+"]");e[f].origProp=e[f].style[a];e[f].style[a]="hidden"}else{if(h.indexOf("["+this.key+"]")==-1){e[f].setAttribute("hidden-by",h+"["+this.key+"]")}}}else{if((h=="["+this.key+"]"||hs.focusKey==d)&&d!=this.key){e[f].setAttribute("hidden-by","");e[f].style[a]=e[f].origProp||""}else{if(h&&h.indexOf("["+this.key+"]")>-1){e[f].setAttribute("hidden-by",h.replace("["+this.key+"]",""))}}}}}}}},focus:function(){this.wrapper.style.zIndex=hs.zIndexCounter+=2;for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&a==hs.focusKey){var b=hs.expanders[a];b.content.className+=" highslide-"+b.contentType+"-blur";b.content.style.cursor=hs.ieLt7?"hand":"pointer";b.content.title=hs.lang.focusTitle}}if(this.outline){this.outline.table.style.zIndex=this.wrapper.style.zIndex-1}this.content.className="highslide-"+this.contentType;this.content.title=hs.lang.restoreTitle;if(hs.restoreCursor){hs.styleRestoreCursor=window.opera?"pointer":"url("+hs.graphicsDir+hs.restoreCursor+"), pointer";if(hs.ieLt7&&hs.uaVersion<6){hs.styleRestoreCursor="hand"}this.content.style.cursor=hs.styleRestoreCursor}hs.focusKey=this.key;hs.addEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler)},moveTo:function(a,b){this.x.setPos(a);this.y.setPos(b)},resize:function(d){var a,b,c=d.width/d.height;a=Math.max(d.width+d.dX,Math.min(this.minWidth,this.x.full));if(this.isImage&&Math.abs(a-this.x.full)<12){a=this.x.full}b=a/c;if(b<Math.min(this.minHeight,this.y.full)){b=Math.min(this.minHeight,this.y.full);if(this.isImage){a=b*c}}this.resizeTo(a,b)},resizeTo:function(a,b){this.y.setSize(b);this.x.setSize(a);this.wrapper.style.height=this.y.get("wsize")+"px"},close:function(){if(this.isClosing||!this.isExpanded){return}if(this.transitions[1]=="crossfade"&&hs.upcoming){hs.getExpander(hs.upcoming).cancelLoading();hs.upcoming=null}this.isClosing=true;if(this.slideshow&&!hs.upcoming){this.slideshow.pause()}hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{this.content.style.cursor="default";this.changeSize(0,{wrapper:{width:this.x.t,height:this.y.t,left:this.x.tpos-this.x.cb+this.x.tb,top:this.y.tpos-this.y.cb+this.y.tb},content:{left:0,top:0,width:this.x.t,height:this.y.t}},hs.restoreDuration)}catch(a){this.afterClose()}},createOverlay:function(e){var d=e.overlayId,a=(e.relativeTo=="viewport"&&!/panel$/.test(e.position));if(typeof d=="string"){d=hs.getNode(d)}if(e.html){d=hs.createElement("div",{innerHTML:e.html})}if(!d||typeof d=="string"){return}d.style.display="block";e.hsId=e.hsId||e.overlayId;if(this.transitions[1]=="crossfade"&&this.reuseOverlay(e,d)){return}this.genOverlayBox();var c=e.width&&/^[0-9]+(px|%)$/.test(e.width)?e.width:"auto";if(/^(left|right)panel$/.test(e.position)&&!/^[0-9]+px$/.test(e.width)){c="200px"}var b=hs.createElement("div",{id:"hsId"+hs.idCounter++,hsId:e.hsId},{position:"absolute",visibility:"hidden",width:c,direction:hs.lang.cssDirection||"",opacity:0},a?hs.viewport:this.overlayBox,true);if(a){b.hsKey=this.key}b.appendChild(d);hs.extend(b,{opacity:1,offsetX:0,offsetY:0,dur:(e.fade===0||e.fade===false||(e.fade==2&&hs.ie))?0:250});hs.extend(b,e);if(this.gotOverlays){this.positionOverlay(b);if(!b.hideOnMouseOut||this.mouseIsOver){hs.animate(b,{opacity:b.opacity},b.dur)}}hs.push(this.overlays,hs.idCounter-1)},positionOverlay:function(e){var f=e.position||"middle center",c=(e.relativeTo=="viewport"),b=e.offsetX,a=e.offsetY;if(c){hs.viewport.style.display="block";e.hsKey=this.key;if(e.offsetWidth>e.parentNode.offsetWidth){e.style.width="100%"}}else{if(e.parentNode!=this.overlayBox){this.overlayBox.appendChild(e)}}if(/left$/.test(f)){e.style.left=b+"px"}if(/center$/.test(f)){hs.setStyles(e,{left:"50%",marginLeft:(b-Math.round(e.offsetWidth/2))+"px"})}if(/right$/.test(f)){e.style.right=-b+"px"}if(/^leftpanel$/.test(f)){hs.setStyles(e,{right:"100%",marginRight:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p1=e.offsetWidth}else{if(/^rightpanel$/.test(f)){hs.setStyles(e,{left:"100%",marginLeft:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p2=e.offsetWidth}}var d=e.parentNode.offsetHeight;e.style.height="auto";if(c&&e.offsetHeight>d){e.style.height=hs.ieLt7?d+"px":"100%"}if(/^top/.test(f)){e.style.top=a+"px"}if(/^middle/.test(f)){hs.setStyles(e,{top:"50%",marginTop:(a-Math.round(e.offsetHeight/2))+"px"})}if(/^bottom/.test(f)){e.style.bottom=-a+"px"}if(/^above$/.test(f)){hs.setStyles(e,{left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",bottom:"100%",marginBottom:this.y.cb+"px",width:"auto"});this.y.p1=e.offsetHeight}else{if(/^below$/.test(f)){hs.setStyles(e,{position:"relative",left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",top:"100%",marginTop:this.y.cb+"px",width:"auto"});this.y.p2=e.offsetHeight;e.style.position="absolute"}}},getOverlays:function(){this.getInline(["heading","caption"],true);this.getNumber();if(this.heading&&this.dragByHeading){this.heading.className+=" highslide-move"}if(hs.showCredits){this.writeCredits()}for(var a=0;a<hs.overlays.length;a++){var d=hs.overlays[a],e=d.thumbnailId,b=d.slideshowGroup;if((!e&&!b)||(e&&e==this.thumbsUserSetId)||(b&&b===this.slideshowGroup)){this.createOverlay(d)}}var c=[];for(var a=0;a<this.overlays.length;a++){var d=hs.$("hsId"+this.overlays[a]);if(/panel$/.test(d.position)){this.positionOverlay(d)}else{hs.push(c,d)}}for(var a=0;a<c.length;a++){this.positionOverlay(c[a])}this.gotOverlays=true},genOverlayBox:function(){if(!this.overlayBox){this.overlayBox=hs.createElement("div",{className:this.wrapperClassName},{position:"absolute",width:(this.x.size||(this.useBox?this.width:null)||this.x.full)+"px",height:(this.y.size||this.y.full)+"px",visibility:"hidden",overflow:"hidden",zIndex:hs.ie?4:"auto"},hs.container,true)}},sizeOverlayBox:function(f,d){var c=this.overlayBox,a=this.x,h=this.y;hs.setStyles(c,{width:a.size+"px",height:h.size+"px"});if(f||d){for(var e=0;e<this.overlays.length;e++){var g=hs.$("hsId"+this.overlays[e]);var b=(hs.ieLt7||document.compatMode=="BackCompat");if(g&&/^(above|below)$/.test(g.position)){if(b){g.style.width=(c.offsetWidth+2*a.cb+a.p1+a.p2)+"px"}h[g.position=="above"?"p1":"p2"]=g.offsetHeight}if(g&&b&&/^(left|right)panel$/.test(g.position)){g.style.height=(c.offsetHeight+2*h.cb)+"px"}}}if(f){hs.setStyles(this.content,{top:h.p1+"px"});hs.setStyles(c,{top:(h.p1+h.cb)+"px"})}},showOverlays:function(){var a=this.overlayBox;a.className="";hs.setStyles(a,{top:(this.y.p1+this.y.cb)+"px",left:(this.x.p1+this.x.cb)+"px",overflow:"visible"});if(hs.safari){a.style.visibility="visible"}this.wrapper.appendChild(a);for(var c=0;c<this.overlays.length;c++){var d=hs.$("hsId"+this.overlays[c]);d.style.zIndex=d.zIndex||4;if(!d.hideOnMouseOut||this.mouseIsOver){d.style.visibility="visible";hs.setStyles(d,{visibility:"visible",display:""});hs.animate(d,{opacity:d.opacity},d.dur)}}},destroyOverlays:function(){if(!this.overlays.length){return}if(this.slideshow){var d=this.slideshow.controls;if(d&&hs.getExpander(d)==this){d.parentNode.removeChild(d)}}for(var a=0;a<this.overlays.length;a++){var b=hs.$("hsId"+this.overlays[a]);if(b&&b.parentNode==hs.viewport&&hs.getExpander(b)==this){hs.discardElement(b)}}hs.discardElement(this.overlayBox)},createFullExpand:function(){if(this.slideshow&&this.slideshow.controls){this.slideshow.enable("full-expand");return}this.fullExpandLabel=hs.createElement("a",{href:"javascript:hs.expanders["+this.key+"].doFullExpand();",title:hs.lang.fullExpandTitle,className:"highslide-full-expand"});this.createOverlay({overlayId:this.fullExpandLabel,position:hs.fullExpandPosition,hideOnMouseOut:true,opacity:hs.fullExpandOpacity})},doFullExpand:function(){try{if(this.fullExpandLabel){hs.discardElement(this.fullExpandLabel)}this.focus();var c=this.x.size,a=this.y.size;this.resizeTo(this.x.full,this.y.full);var b=this.x.pos-(this.x.size-c)/2;if(b<hs.marginLeft){b=hs.marginLeft}var f=this.y.pos-(this.y.size-a)/2;if(f<hs.marginTop){f=hs.marginTop}this.moveTo(b,f);this.doShowHide("hidden")}catch(d){this.error(d)}},afterClose:function(){this.a.className=this.a.className.replace("highslide-active-anchor","");this.doShowHide("visible");if(this.outline&&this.outlineWhileAnimating){this.outline.destroy()}hs.discardElement(this.wrapper);this.destroyOverlays();if(!hs.viewport.childNodes.length){hs.viewport.style.display="none"}if(this.dimmingOpacity){hs.undim(this.key)}hs.expanders[this.key]=null;hs.reOrder()}};hs.Slideshow=function(c,b){if(hs.dynamicallyUpdateAnchors!==false){hs.updateAnchors()}this.expKey=c;for(var a in b){this[a]=b[a]}if(this.useControls){this.getControls()}if(this.thumbstrip){this.thumbstrip=hs.Thumbstrip(this)}};hs.Slideshow.prototype={getControls:function(){this.controls=hs.createElement("div",{innerHTML:hs.replaceLang(hs.skin.controls)},null,hs.container);var b=["play","pause","previous","next","move","full-expand","close"];this.btn={};var c=this;for(var a=0;a<b.length;a++){this.btn[b[a]]=hs.getElementByClass(this.controls,"li","highslide-"+b[a]);this.enable(b[a])}this.btn.pause.style.display="none"},checkFirstAndLast:function(){if(this.repeat||!this.controls){return}var c=hs.expanders[this.expKey],b=c.getAnchorIndex(),a=/disabled$/;if(b==0){this.disable("previous")}else{if(a.test(this.btn.previous.getElementsByTagName("a")[0].className)){this.enable("previous")}}if(b+1==hs.anchors.groups[c.slideshowGroup||"none"].length){this.disable("next");this.disable("play")}else{if(a.test(this.btn.next.getElementsByTagName("a")[0].className)){this.enable("next");this.enable("play")}}},enable:function(d){if(!this.btn){return}var c=this,b=this.btn[d].getElementsByTagName("a")[0],e=/disabled$/;b.onclick=function(){c[d]();return false};if(e.test(b.className)){b.className=b.className.replace(e,"")}},disable:function(c){if(!this.btn){return}var b=this.btn[c].getElementsByTagName("a")[0];b.onclick=function(){return false};if(!/disabled$/.test(b.className)){b.className+=" disabled"}},hitSpace:function(){if(this.autoplay){this.pause()}else{this.play()}},play:function(a){if(this.btn){this.btn.play.style.display="none";this.btn.pause.style.display=""}this.autoplay=true;if(!a){hs.next(this.expKey)}},pause:function(){if(this.btn){this.btn.pause.style.display="none";this.btn.play.style.display=""}clearTimeout(this.autoplay);this.autoplay=null},previous:function(){this.pause();hs.previous(this.btn.previous)},next:function(){this.pause();hs.next(this.btn.next)},move:function(){},"full-expand":function(){hs.getExpander().doFullExpand()},close:function(){hs.close(this.btn.close)}};hs.Thumbstrip=function(k){function p(i){hs.extend(f||{},{overlayId:r,hsId:"thumbstrip",className:"highslide-thumbstrip-"+m+"-overlay "+(f.className||"")});if(hs.ieLt7){f.fade=0}i.createOverlay(f);hs.setStyles(r.parentNode,{overflow:"hidden"})}function c(i){d(undefined,Math.round(i*r[h?"offsetWidth":"offsetHeight"]*0.7))}function d(L,M){if(L===undefined){for(var K=0;K<j.length;K++){if(j[K]==hs.expanders[k.expKey].a){L=K;break}}}if(L===undefined){return}var G=r.getElementsByTagName("a"),z=G[L],w=z.parentNode,y=h?"Left":"Top",N=h?"Right":"Bottom",I=h?"Width":"Height",B="offset"+y,H="offset"+I,x=n.parentNode.parentNode[H],F=x-s[H],v=parseInt(s.style[h?"left":"top"])||0,C=v,D=20;if(M!==undefined){C=v-M;if(F>0){F=0}if(C>0){C=0}if(C<F){C=F}}else{for(var K=0;K<G.length;K++){G[K].className=""}z.className="highslide-active-anchor";var J=L>0?G[L-1].parentNode[B]:w[B],A=w[B]+w[H]+(G[L+1]?G[L+1].parentNode[H]:0);if(A>x-v){C=x-A}else{if(J<-v){C=-J}}}var E=w[B]+(w[H]-g[H])/2+C;hs.animate(s,h?{left:C}:{top:C},null,"easeOutQuad");hs.animate(g,h?{left:E}:{top:E},null,"easeOutQuad");l.style.display=C<0?"block":"none";t.style.display=(C>F)?"block":"none"}var j=hs.anchors.groups[hs.expanders[k.expKey].slideshowGroup||"none"],f=k.thumbstrip,m=f.mode||"horizontal",u=(m=="float"),o=u?["div","ul","li","span"]:["table","tbody","tr","td"],h=(m=="horizontal"),r=hs.createElement("div",{className:"highslide-thumbstrip highslide-thumbstrip-"+m,innerHTML:'<div class="highslide-thumbstrip-inner"><'+o[0]+"><"+o[1]+"></"+o[1]+"></"+o[0]+'></div><div class="highslide-scroll-up"><div></div></div><div class="highslide-scroll-down"><div></div></div><div class="highslide-marker"><div></div></div>'},{display:"none"},hs.container),e=r.childNodes,n=e[0],l=e[1],t=e[2],g=e[3],s=n.firstChild,a=r.getElementsByTagName(o[1])[0],b;for(var q=0;q<j.length;q++){if(q==0||!h){b=hs.createElement(o[2],null,null,a)}(function(){var v=j[q],i=hs.createElement(o[3],null,null,b),w=q;hs.createElement("a",{href:v.href,title:v.title,onclick:function(){if(/highslide-active-anchor/.test(this.className)){return false}hs.getExpander(this).focus();return hs.transit(v)},innerHTML:hs.stripItemFormatter?hs.stripItemFormatter(v):v.innerHTML},null,i)})()}if(!u){l.onclick=function(){c(-1)};t.onclick=function(){c(1)};hs.addEventListener(a,document.onmousewheel!==undefined?"mousewheel":"DOMMouseScroll",function(i){var v=0;i=i||window.event;if(i.wheelDelta){v=i.wheelDelta/120;if(hs.opera){v=-v}}else{if(i.detail){v=-i.detail/3}}if(v){c(-v*0.2)}if(i.preventDefault){i.preventDefault()}i.returnValue=false})}return{add:p,selectThumb:d}};hs.langDefaults=hs.lang;var HsExpander=hs.Expander;if(hs.ie&&window==window.top){(function(){try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,50);return}hs.ready()})()}hs.addEventListener(document,"DOMContentLoaded",hs.ready);hs.addEventListener(window,"load",hs.ready);hs.addEventListener(document,"ready",function(){if(hs.expandCursor||hs.dimmingOpacity){var d=hs.createElement("style",{type:"text/css"},null,document.getElementsByTagName("HEAD")[0]),c=document.compatMode=="BackCompat";function b(f,g){if(hs.ie&&(hs.uaVersion<9||c)){var e=document.styleSheets[document.styleSheets.length-1];if(typeof(e.addRule)=="object"){e.addRule(f,g)}}else{d.appendChild(document.createTextNode(f+" {"+g+"}"))}}function a(e){return"expression( ( ( ignoreMe = document.documentElement."+e+" ? document.documentElement."+e+" : document.body."+e+" ) ) + 'px' );"}if(hs.expandCursor){b(".highslide img","cursor: url("+hs.graphicsDir+hs.expandCursor+"), pointer !important;")}b(".highslide-viewport-size",hs.ie&&(hs.uaVersion<7||c)?"position: absolute; left:"+a("scrollLeft")+"top:"+a("scrollTop")+"width:"+a("clientWidth")+"height:"+a("clientHeight"):"position: fixed; width: 100%; height: 100%; left: 0; top: 0")}});hs.addEventListener(window,"resize",function(){hs.getPageSize();if(hs.viewport){for(var a=0;a<hs.viewport.childNodes.length;a++){var b=hs.viewport.childNodes[a],c=hs.getExpander(b);c.positionOverlay(b);if(b.hsId=="thumbstrip"){c.slideshow.thumbstrip.selectThumb()}}}});hs.addEventListener(document,"mousemove",function(a){hs.mouse={x:a.clientX,y:a.clientY}});hs.addEventListener(document,"mousedown",hs.mouseClickHandler);hs.addEventListener(document,"mouseup",hs.mouseClickHandler);hs.addEventListener(document,"ready",hs.getAnchors);hs.addEventListener(window,"load",hs.preloadImages)}; \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.packed.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.packed.js index 449942c8ea8f3a654c487d830a4120540d8780f3..d7d50f6ed327b8dfad1b350155a04ece884b3c3d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.packed.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-gallery.packed.js @@ -1,9 +1,9 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) * Config: default +slideshow +positioning +transitions +viewport +thumbstrip +packed - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?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}('q(!m){u m={18:{9C:\'9t\',9f:\'bb...\',9g:\'8o 1L ba\',9Y:\'8o 1L bd 1L bw\',7p:\'bx 1L bl B (f)\',aS:\'bp by <i>8H 8I</i>\',b0:\'bn 1L bj 8H 8I bz\',8T:\'8C\',8U:\'8D\',8w:\'8E\',8v:\'8J\',8t:\'8J (bv)\',bu:\'bg\',8P:\'8G\',8A:\'8G 1g (8B)\',8N:\'8F\',8M:\'8F 1g (8B)\',8S:\'8C (8l 14)\',8O:\'8D (8l 2V)\',8s:\'8E\',8r:\'1:1\',3n:\'b9 %1 bq %2\',84:\'8o 1L 26 2M, c4 8L c6 1L 3i. c0 8l c1 K 1p 8L 3c.\'},4p:\'L/bX/\',5M:\'bI.4y\',5m:\'bK.4y\',7f:53,8p:53,4L:15,9M:15,4j:15,9K:15,4z:bE,91:0.75,9j:J,7A:5,3B:2,bP:3,4R:1f,at:\'4g 2V\',aq:1,an:J,aF:\'bQ://L.c2/\',aE:\'bO\',8V:J,8e:[\'a\'],2Z:[],aL:53,3I:0,7G:50,3Q:\'2n\',6H:\'2n\',8y:H,8x:H,7v:J,5c:8R,5w:8R,5q:J,1B:\'bR-bS\',a6:{2B:\'<X 2s="L-2B"><7V>\'+\'<1R 2s="L-3c">\'+\'<a 1Y="#" 1X="{m.18.8S}">\'+\'<23>{m.18.8T}</23></a>\'+\'</1R>\'+\'<1R 2s="L-3r">\'+\'<a 1Y="#" 1X="{m.18.8A}">\'+\'<23>{m.18.8P}</23></a>\'+\'</1R>\'+\'<1R 2s="L-2S">\'+\'<a 1Y="#" 1X="{m.18.8M}">\'+\'<23>{m.18.8N}</23></a>\'+\'</1R>\'+\'<1R 2s="L-1p">\'+\'<a 1Y="#" 1X="{m.18.8O}">\'+\'<23>{m.18.8U}</23></a>\'+\'</1R>\'+\'<1R 2s="L-3i">\'+\'<a 1Y="#" 1X="{m.18.8s}">\'+\'<23>{m.18.8w}</23></a>\'+\'</1R>\'+\'<1R 2s="L-1a-2D">\'+\'<a 1Y="#" 1X="{m.18.7p}">\'+\'<23>{m.18.8r}</23></a>\'+\'</1R>\'+\'<1R 2s="L-26">\'+\'<a 1Y="#" 1X="{m.18.8t}" >\'+\'<23>{m.18.8v}</23></a>\'+\'</1R>\'+\'</7V></X>\'},4X:[],6Z:J,W:[],6V:[\'5q\',\'30\',\'3Q\',\'6H\',\'8y\',\'8x\',\'1B\',\'3B\',\'bG\',\'bH\',\'bJ\',\'8u\',\'bW\',\'cd\',\'cc\',\'8z\',\'aW\',\'7v\',\'3D\',\'5b\',\'2Z\',\'3I\',\'M\',\'1b\',\'7B\',\'5c\',\'5w\',\'6F\',\'6R\',\'9i\',\'2t\',\'2r\',\'aT\',\'aD\',\'1G\'],1x:[],4V:0,7q:{x:[\'9H\',\'14\',\'4i\',\'2V\',\'9L\'],y:[\'4T\',\'11\',\'8h\',\'4g\',\'6D\']},66:{},8z:{},8u:{},3u:[],4U:[],48:{},7I:{},5G:[],21:/ca\\/4\\.0/.19(4B.5r)?8:8n((4B.5r.5Y().2H(/.+(?:9y|c9|ce|2m)[\\/: ]([\\d.]+)/)||[0,\'0\'])[1]),2m:(R.52&&!1A.3q),4u:/cf/.19(4B.5r),5Z:/ci.+9y:1\\.[0-8].+cg/.19(4B.5r),$:z(1M){q(1M)D R.c7(1M)},2p:z(2o,3j){2o[2o.S]=3j},1c:z(9m,4k,3P,8b,9n){u C=R.1c(9m);q(4k)m.3b(C,4k);q(9n)m.V(C,{bY:0,aM:\'1F\',6S:0});q(3P)m.V(C,3P);q(8b)8b.2E(C);D C},3b:z(C,4k){K(u x 2T 4k)C[x]=4k[x];D C},V:z(C,3P){K(u x 2T 3P){q(m.4d&&x==\'1n\'){q(3P[x]>0.99)C.G.c5(\'5j\');I C.G.5j=\'9o(1n=\'+(3P[x]*28)+\')\'}I C.G[x]=3P[x]}},2b:z(C,Z,31){u 41,4v,47;q(1q 31!=\'6q\'||31===H){u 36=9V;31={3J:36[2],2r:36[3],63:36[4]}}q(1q 31.3J!=\'3n\')31.3J=53;31.2r=1d[31.2r]||1d.93;31.5S=m.3b({},Z);K(u 35 2T Z){u e=24 m.1E(C,31,35);41=8n(m.7U(C,35))||0;4v=8n(Z[35]);47=35!=\'1n\'?\'F\':\'\';e.3F(41,4v,47)}},7U:z(C,Z){q(C.G[Z]){D C.G[Z]}I q(R.6T){D R.6T.9P(C,H).9Q(Z)}I{q(Z==\'1n\')Z=\'5j\';u 3j=C.bf[Z.2j(/\\-(\\w)/g,z(a,b){D b.92()})];q(Z==\'5j\')3j=3j.2j(/9o\\(1n=([0-9]+)\\)/,z(a,b){D b/28});D 3j===\'\'?1:3j}},6v:z(){u d=R,w=1A,5d=d.6i&&d.6i!=\'7P\'?d.4l:d.3x,4d=m.2m&&(m.21<9||1q 9l==\'1C\');u M=4d?5d.8m:(d.4l.8m||5J.b2),1b=4d?5d.aK:5J.b3;m.3S={M:M,1b:1b,5l:4d?5d.5l:9l,5i:4d?5d.5i:be};D m.3S},6g:z(C){u p={x:C.4f,y:C.9h};4o(C.9k){C=C.9k;p.x+=C.4f;p.y+=C.9h;q(C!=R.3x&&C!=R.4l){p.x-=C.5l;p.y-=C.5i}}D p},2D:z(a,2O,3F,T){q(!a)a=m.1c(\'a\',H,{1u:\'1F\'},m.22);q(1q a.5u==\'z\')D 2O;2d{24 m.4Z(a,2O,3F);D 1f}1W(e){D J}},a4:z(C,4F,U){u 1i=C.2L(4F);K(u i=0;i<1i.S;i++){q((24 5X(U)).19(1i[i].U)){D 1i[i]}}D H},a7:z(s){s=s.2j(/\\s/g,\' \');u 1T=/{m\\.18\\.([^}]+)\\}/g,4S=s.2H(1T),18;q(4S)K(u i=0;i<4S.S;i++){18=4S[i].2j(1T,"$1");q(1q m.18[18]!=\'1C\')s=s.2j(4S[i],m.18[18])}D s},9w:z(){u 7J=0,6j=-1,W=m.W,A,1r;K(u i=0;i<W.S;i++){A=W[i];q(A){1r=A.Q.G.1r;q(1r&&1r>7J){7J=1r;6j=i}}}q(6j==-1)m.3v=-1;I W[6j].43()},5h:z(a,5p){a.5u=a.2G;u p=a.5u?a.5u():H;a.5u=H;D(p&&1q p[5p]!=\'1C\')?p[5p]:(1q m[5p]!=\'1C\'?m[5p]:H)},73:z(a){u 1G=m.5h(a,\'1G\');q(1G)D 1G;D a.1Y},4W:z(1M){u 3w=m.$(1M),45=m.7I[1M],a={};q(!3w&&!45)D H;q(!45){45=3w.7j(J);45.1M=\'\';m.7I[1M]=45;D 3w}I{D 45.7j(J)}},3H:z(d){q(d)m.8j.2E(d);m.8j.2R=\'\'},1m:z(A){q(!m.2a){7E=J;m.2a=m.1c(\'X\',{U:\'L-bk L-1Z-B\',4x:\'\',2G:z(){m.26()}},{1e:\'1D\',1n:0},m.22,J);q(/(bm|bt|bo|br)/.19(4B.5r)){u 3x=R.3x;z 7H(){m.V(m.2a,{M:3x.bA+\'F\',1b:3x.b5+\'F\'})}7H();m.1Q(1A,\'3O\',7H)}}m.2a.G.1u=\'\';u 7E=m.2a.4x==\'\';m.2a.4x+=\'|\'+A.P;q(7E){q(m.5Z&&m.9q)m.V(m.2a,{9e:\'5O(\'+m.4p+\'bh.97)\',1n:1});I m.2b(m.2a,{1n:A.3I},m.7G)}},7Q:z(P){q(!m.2a)D;q(1q P!=\'1C\')m.2a.4x=m.2a.4x.2j(\'|\'+P,\'\');q((1q P!=\'1C\'&&m.2a.4x!=\'\')||(m.1U&&m.5h(m.1U,\'3I\')))D;q(m.5Z&&m.9q)m.2a.G.1u=\'1F\';I m.2b(m.2a,{1n:0},m.7G,H,z(){m.2a.G.1u=\'1F\'})},83:z(6n,A){u Y=A||m.2h();A=Y;q(m.1U)D 1f;I m.Y=Y;m.49(R,1A.3q?\'5P\':\'5Q\',m.4N);2d{m.1U=6n;6n.2G()}1W(e){m.Y=m.1U=H}2d{q(!6n||A.2Z[1]!=\'3Y\')A.26()}1W(e){}D 1f},6d:z(C,1P){u A=m.2h(C);q(A)D m.83(A.7b(1P),A);I D 1f},3c:z(C){D m.6d(C,-1)},1p:z(C){D m.6d(C,1)},4N:z(e){q(!e)e=1A.29;q(!e.2i)e.2i=e.7l;q(1q e.2i.9x!=\'1C\')D J;u A=m.2h();u 1P=H;8Y(e.cq){1I 70:q(A)A.6k();D J;1I 32:1P=2;5B;1I 34:1I 39:1I 40:1P=1;5B;1I 8:1I 33:1I 37:1I 38:1P=-1;5B;1I 27:1I 13:1P=0}q(1P!==H){q(1P!=2)m.49(R,1A.3q?\'5P\':\'5Q\',m.4N);q(!m.8V)D J;q(e.4D)e.4D();I e.9W=1f;q(A){q(1P==0){A.26()}I q(1P==2){q(A.1g)A.1g.ad()}I{q(A.1g)A.1g.2S();m.6d(A.P,1P)}D 1f}}D J},d5:z(O){m.2p(m.1x,m.3b(O,{1H:\'1H\'+m.4V++}))},d4:z(1h){u 2C=1h.2t;q(1q 2C==\'6q\'){K(u i=0;i<2C.S;i++){u o={};K(u x 2T 1h)o[x]=1h[x];o.2t=2C[i];m.2p(m.4U,o)}}I{m.2p(m.4U,1h)}},86:z(7N,65){u C,1T=/^L-Q-([0-9]+)$/;C=7N;4o(C.1O){q(C.5F!==1C)D C.5F;q(C.1M&&1T.19(C.1M))D C.1M.2j(1T,"$1");C=C.1O}q(!65){C=7N;4o(C.1O){q(C.4F&&m.5L(C)){K(u P=0;P<m.W.S;P++){u A=m.W[P];q(A&&A.a==C)D P}}C=C.1O}}D H},2h:z(C,65){q(1q C==\'1C\')D m.W[m.3v]||H;q(1q C==\'3n\')D m.W[C]||H;q(1q C==\'8q\')C=m.$(C);D m.W[m.86(C,65)]||H},5L:z(a){D(a.2G&&a.2G.aI().2j(/\\s/g,\' \').2H(/m.(d6|e)d7/))},ai:z(){K(u i=0;i<m.W.S;i++)q(m.W[i]&&m.W[i].55)m.9w()},87:z(e){q(!e)e=1A.29;q(e.d9>1)D J;q(!e.2i)e.2i=e.7l;u C=e.2i;4o(C.1O&&!(/L-(2M|3i|5W|3O)/.19(C.U))){C=C.1O}u A=m.2h(C);q(A&&(A.8c||!A.55))D J;q(A&&e.T==\'aH\'){q(e.2i.9x)D J;u 2H=C.U.2H(/L-(2M|3i|3O)/);q(2H){m.2I={A:A,T:2H[1],14:A.x.E,M:A.x.B,11:A.y.E,1b:A.y.B,9v:e.6c,9u:e.68};m.1Q(R,\'6o\',m.5V);q(e.4D)e.4D();q(/L-(2M|5W)-89/.19(A.17.U)){A.43();m.7R=J}D 1f}}I q(e.T==\'aA\'){m.49(R,\'6o\',m.5V);q(m.2I){q(m.4I&&m.2I.T==\'2M\')m.2I.A.17.G.46=m.4I;u 3y=m.2I.3y;q(!3y&&!m.7R&&!/(3i|3O)/.19(m.2I.T)){A.26()}I q(3y||(!3y&&m.d8)){m.2I.A.5s(\'1s\')}m.7R=1f;m.2I=H}I q(/L-2M-89/.19(C.U)){C.G.46=m.4I}}D 1f},5V:z(e){q(!m.2I)D J;q(!e)e=1A.29;u a=m.2I,A=a.A;a.5T=e.6c-a.9v;a.7o=e.68-a.9u;u 7s=1d.ck(1d.9r(a.5T,2)+1d.9r(a.7o,2));q(!a.3y)a.3y=(a.T!=\'2M\'&&7s>0)||(7s>(m.cX||5));q(a.3y&&e.6c>5&&e.68>5){q(a.T==\'3O\')A.3O(a);I{A.7C(a.14+a.5T,a.11+a.7o);q(a.T==\'2M\')A.17.G.46=\'3i\'}}D 1f},8Q:z(e){2d{q(!e)e=1A.29;u 6C=/cW/i.19(e.T);q(!e.2i)e.2i=e.7l;q(!e.6E)e.6E=6C?e.db:e.di;u A=m.2h(e.2i);q(!A.55)D;q(!A||!e.6E||m.2h(e.6E,J)==A||m.2I)D;K(u i=0;i<A.1x.S;i++)(z(){u o=m.$(\'1H\'+A.1x[i]);q(o&&o.69){q(6C)m.V(o,{1e:\'1D\',1u:\'\'});m.2b(o,{1n:6C?o.1n:0},o.3t)}})()}1W(e){}},1Q:z(C,29,3l){q(C==R&&29==\'3s\'){m.2p(m.5G,3l)}2d{C.1Q(29,3l,1f)}1W(e){2d{C.9s(\'54\'+29,3l);C.dn(\'54\'+29,3l)}1W(e){C[\'54\'+29]=3l}}},49:z(C,29,3l){2d{C.49(29,3l,1f)}1W(e){2d{C.9s(\'54\'+29,3l)}1W(e){C[\'54\'+29]=H}}},6A:z(i){q(m.6Z&&m.4X[i]&&m.4X[i]!=\'1C\'){u 1y=R.1c(\'1y\');1y.64=z(){1y=H;m.6A(i+1)};1y.1G=m.4X[i]}},9R:z(3n){q(3n&&1q 3n!=\'6q\')m.7A=3n;u 2o=m.60();K(u i=0;i<2o.4A.S&&i<m.7A;i++){m.2p(m.4X,m.73(2o.4A[i]))}q(m.1B)24 m.4O(m.1B,z(){m.6A(0)});I m.6A(0);q(m.5m)u 4y=m.1c(\'1y\',{1G:m.4p+m.5m})},71:z(){q(!m.22){m.3E=m.2m&&m.21<7;m.4d=m.2m&&m.21<9;m.6v();K(u x 2T m.5U){q(1q m[x]!=\'1C\')m.18[x]=m[x];I q(1q m.18[x]==\'1C\'&&1q m.5U[x]!=\'1C\')m.18[x]=m.5U[x]}m.22=m.1c(\'X\',{U:\'L-22\'},{1j:\'2v\',14:0,11:0,M:\'28%\',1r:m.4z,9F:\'9t\'},R.3x,J);m.1S=m.1c(\'a\',{U:\'L-1S\',1X:m.18.9g,2R:m.18.9f,1Y:\'av:;\'},{1j:\'2v\',11:\'-4P\',1n:m.91,1r:1},m.22);m.8j=m.1c(\'X\',H,{1u:\'1F\'},m.22);m.1Z=m.1c(\'X\',{U:\'L-1Z L-1Z-B\'},{1e:(m.4u&&m.21<6t)?\'1D\':\'1s\'},m.22,1);1d.de=z(t,b,c,d){D c*t/d+b};1d.93=z(t,b,c,d){D c*(t/=d)*t+b};1d.7n=z(t,b,c,d){D-c*(t/=d)*(t-2)+b};m.9U=m.3E;m.9z=((1A.3q&&m.21<9)||4B.cU==\'cV\'||(m.3E&&m.21<5.5))}},3s:z(){q(m.6I)D;m.6I=J;K(u i=0;i<m.5G.S;i++)m.5G[i]()},7O:z(){u C,1i,52=[],4A=[],2N={},1T;K(u i=0;i<m.8e.S;i++){1i=R.2L(m.8e[i]);K(u j=0;j<1i.S;j++){C=1i[j];1T=m.5L(C);q(1T){m.2p(52,C);q(1T[0]==\'m.2D\')m.2p(4A,C);u g=m.5h(C,\'2t\')||\'1F\';q(!2N[g])2N[g]=[];m.2p(2N[g],C)}}}m.3R={52:52,2N:2N,4A:4A};D m.3R},60:z(){D m.3R||m.7O()},26:z(C){u A=m.2h(C);q(A)A.26();D 1f}};m.1E=z(2F,1h,Z){k.1h=1h;k.2F=2F;k.Z=Z;q(!1h.8Z)1h.8Z={}};m.1E.5o={8a:z(){(m.1E.3k[k.Z]||m.1E.3k.96)(k);q(k.1h.3k)k.1h.3k.95(k.2F,k.4c,k)},3F:z(72,1L,47){k.80=(24 8X()).94();k.41=72;k.4v=1L;k.47=47;k.4c=k.41;k.E=k.7X=0;u 5J=k;z t(5N){D 5J.3k(5N)}t.2F=k.2F;q(t()&&m.3u.2p(t)==1){m.8W=cx(z(){u 3u=m.3u;K(u i=0;i<3u.S;i++)q(!3u[i]())3u.cw(i--,1);q(!3u.S){cv(m.8W)}},13)}},3k:z(5N){u t=(24 8X()).94();q(5N||t>=k.1h.3J+k.80){k.4c=k.4v;k.E=k.7X=1;k.8a();k.1h.5S[k.Z]=J;u 8d=J;K(u i 2T k.1h.5S)q(k.1h.5S[i]!==J)8d=1f;q(8d){q(k.1h.63)k.1h.63.95(k.2F)}D 1f}I{u n=t-k.80;k.7X=n/k.1h.3J;k.E=k.1h.2r(n,0,1,k.1h.3J);k.4c=k.41+((k.4v-k.41)*k.E);k.8a()}D J}};m.3b(m.1E,{3k:{1n:z(1E){m.V(1E.2F,{1n:1E.4c})},96:z(1E){2d{q(1E.2F.G&&1E.2F.G[1E.Z]!=H)1E.2F.G[1E.Z]=1E.4c+1E.47;I 1E.2F[1E.Z]=1E.4c}1W(e){}}}});m.4O=z(1B,3V){k.3V=3V;k.1B=1B;u v=m.21,3L;k.7h=m.2m&&m.21<7;q(!1B){q(3V)3V();D}m.71();k.1V=m.1c(\'1V\',{cr:0},{1e:\'1s\',1j:\'2v\',cC:\'cD\',M:0},m.22,J);u 4a=m.1c(\'4a\',H,H,k.1V,1);k.2e=[];K(u i=0;i<=8;i++){q(i%3==0)3L=m.1c(\'3L\',H,{1b:\'2n\'},4a,J);k.2e[i]=m.1c(\'2e\',H,H,3L,J);u G=i!=4?{cP:0,cO:0}:{1j:\'8i\'};m.V(k.2e[i],G)}k.2e[4].U=1B+\' L-16\';k.98()};m.4O.5o={98:z(){u 1G=m.4p+(m.cN||"cQ/")+k.1B+".97";u 9a=m.4u&&m.21<6t?m.22:H;k.3d=m.1c(\'1y\',H,{1j:\'2v\',11:\'-4P\'},9a,J);u 7T=k;k.3d.64=z(){7T.9b()};k.3d.1G=1G},9b:z(){u o=k.1k=k.3d.M/4,E=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],1m={1b:(2*o)+\'F\',M:(2*o)+\'F\'};K(u i=0;i<=8;i++){q(E[i]){q(k.7h){u w=(i==1||i==7)?\'28%\':k.3d.M+\'F\';u X=m.1c(\'X\',H,{M:\'28%\',1b:\'28%\',1j:\'8i\',3a:\'1s\'},k.2e[i],J);m.1c(\'X\',H,{5j:"cL:cG.cF.cE(cH=cI, 1G=\'"+k.3d.1G+"\')",1j:\'2v\',M:w,1b:k.3d.1b+\'F\',14:(E[i][0]*o)+\'F\',11:(E[i][1]*o)+\'F\'},X,J)}I{m.V(k.2e[i],{9e:\'5O(\'+k.3d.1G+\') \'+(E[i][0]*o)+\'F \'+(E[i][1]*o)+\'F\'})}q(1A.3q&&(i==3||i==5))m.1c(\'X\',H,1m,k.2e[i],J);m.V(k.2e[i],1m)}}k.3d=H;q(m.48[k.1B])m.48[k.1B].5x();m.48[k.1B]=k;q(k.3V)k.3V()},3Z:z(E,1k,9d,3t,2r){u A=k.A,cK=A.Q.G,1k=1k||0,E=E||{x:A.x.E+1k,y:A.y.E+1k,w:A.x.N(\'1N\')-2*1k,h:A.y.N(\'1N\')-2*1k};q(9d)k.1V.G.1e=(E.h>=4*k.1k)?\'1D\':\'1s\';m.V(k.1V,{14:(E.x-k.1k)+\'F\',11:(E.y-k.1k)+\'F\',M:(E.w+2*k.1k)+\'F\'});E.w-=2*k.1k;E.h-=2*k.1k;m.V(k.2e[4],{M:E.w>=0?E.w+\'F\':0,1b:E.h>=0?E.h+\'F\':0});q(k.7h)k.2e[3].G.1b=k.2e[5].G.1b=k.2e[4].G.1b},5x:z(9c){q(9c)k.1V.G.1e=\'1s\';I m.3H(k.1V)}};m.6r=z(A,1m){k.A=A;k.1m=1m;k.3m=1m==\'x\'?\'ah\':\'au\';k.3G=k.3m.5Y();k.4M=1m==\'x\'?\'af\':\'ag\';k.6B=k.4M.5Y();k.7d=1m==\'x\'?\'a5\':\'a8\';k.90=k.7d.5Y();k.1o=k.2z=0};m.6r.5o={N:z(P){8Y(P){1I\'78\':D k.1K+k.3o+(k.t-m.1S[\'1k\'+k.3m])/2;1I\'6Q\':D k.E+k.cb+k.1o+(k.B-m.1S[\'1k\'+k.3m])/2;1I\'1N\':D k.B+2*k.cb+k.1o+k.2z;1I\'4n\':D k.3W-k.2P-k.3X;1I\'7a\':D k.N(\'4n\')-2*k.cb-k.1o-k.2z;1I\'5t\':D k.E-(k.A.16?k.A.16.1k:0);1I\'7M\':D k.N(\'1N\')+(k.A.16?2*k.A.16.1k:0);1I\'2f\':D k.1z?1d.2y((k.B-k.1z)/2):0}},74:z(){k.cb=(k.A.17[\'1k\'+k.3m]-k.t)/2;k.3X=m[\'6S\'+k.7d]},6X:z(){k.t=k.A.C[k.3G]?7L(k.A.C[k.3G]):k.A.C[\'1k\'+k.3m];k.1K=k.A.1K[k.1m];k.3o=(k.A.C[\'1k\'+k.3m]-k.t)/2;q(k.1K==0||k.1K==-1){k.1K=(m.3S[k.3G]/2)+m.3S[\'1J\'+k.4M]}},6P:z(){u A=k.A;k.2k=\'2n\';q(A.6H==\'4i\')k.2k=\'4i\';I q(24 5X(k.6B).19(A.3Q))k.2k=H;I q(24 5X(k.90).19(A.3Q))k.2k=\'56\';k.E=k.1K-k.cb+k.3o;q(k.6R&&k.1m==\'x\')A.6F=1d.2X(A.6F||k.1a,A.6R*k.1a/A.y.1a);k.B=1d.2X(k.1a,A[\'56\'+k.3m]||k.1a);k.2q=A.5q?1d.2X(A[\'2X\'+k.3m],k.1a):k.1a;q(A.3A&&A.30){k.B=A[k.3G];k.1z=k.1a}q(k.1m==\'x\'&&m.4R)k.2q=A.5c;k.2i=A[\'2i\'+k.1m.92()];k.2P=m[\'6S\'+k.4M];k.1J=m.3S[\'1J\'+k.4M];k.3W=m.3S[k.3G]},82:z(i){u A=k.A;q(A.3A&&(A.30||m.4R)){k.1z=i;k.B=1d.56(k.B,k.1z);A.17.G[k.6B]=k.N(\'2f\')+\'F\'}I k.B=i;A.17.G[k.3G]=i+\'F\';A.Q.G[k.3G]=k.N(\'1N\')+\'F\';q(A.16)A.16.3Z();q(k.1m==\'x\'&&A.1l)A.4K(J);q(k.1m==\'x\'&&A.1g&&A.3A){q(i==k.1a)A.1g.4J(\'1a-2D\');I A.1g.3T(\'1a-2D\')}},7Z:z(i){k.E=i;k.A.Q.G[k.6B]=i+\'F\';q(k.A.16)k.A.16.3Z()}};m.4Z=z(a,2O,3F,2Q){q(R.cs&&m.2m&&!m.6I){m.1Q(R,\'3s\',z(){24 m.4Z(a,2O,3F,2Q)});D}k.a=a;k.3F=3F;k.2Q=2Q||\'2M\';k.3A=!k.cp;m.6Z=1f;k.1x=[];k.Y=m.Y;m.Y=H;m.71();u P=k.P=m.W.S;K(u i=0;i<m.6V.S;i++){u 35=m.6V[i];k[35]=2O&&1q 2O[35]!=\'1C\'?2O[35]:m[35]}q(!k.1G)k.1G=a.1Y;u C=(2O&&2O.7y)?m.$(2O.7y):a;C=k.9p=C.2L(\'1y\')[0]||C;k.6x=C.1M||a.1M;K(u i=0;i<m.W.S;i++){q(m.W[i]&&m.W[i].a==a&&!(k.Y&&k.2Z[1]==\'3Y\')){m.W[i].43();D 1f}}q(!m.cm)K(u i=0;i<m.W.S;i++){q(m.W[i]&&m.W[i].9p!=C&&!m.W[i].6G){m.W[i].5K()}}m.W[P]=k;q(!m.9j&&!m.1U){q(m.W[P-1])m.W[P-1].26();q(1q m.3v!=\'1C\'&&m.W[m.3v])m.W[m.3v].26()}k.C=C;k.1K=k.9i||m.6g(C);m.6v();u x=k.x=24 m.6r(k,\'x\');x.6X();u y=k.y=24 m.6r(k,\'y\');y.6X();k.Q=m.1c(\'X\',{1M:\'L-Q-\'+k.P,U:\'L-Q \'+k.7B},{1e:\'1s\',1j:\'2v\',1r:m.4z+=2},H,J);k.Q.cu=k.Q.cB=m.8Q;q(k.2Q==\'2M\'&&k.3B==2)k.3B=0;q(!k.1B||(k.Y&&k.3A&&k.2Z[1]==\'3Y\')){k[k.2Q+\'6J\']()}I q(m.48[k.1B]){k.6L();k[k.2Q+\'6J\']()}I{k.6U();u A=k;24 m.4O(k.1B,z(){A.6L();A[A.2Q+\'6J\']()})}D J};m.4Z.5o={7D:z(e){q(m.dm)dk(\'do \'+e.d0+\': \'+e.d1);I 1A.cZ.1Y=k.1G},6L:z(){u 16=k.16=m.48[k.1B];16.A=k;16.1V.G.1r=k.Q.G.1r-1;m.48[k.1B]=H},6U:z(){q(k.6G||k.1S)D;k.1S=m.1S;u A=k;k.1S.2G=z(){A.5K()};u A=k,l=k.x.N(\'78\')+\'F\',t=k.y.N(\'78\')+\'F\';q(!2l&&k.Y&&k.2Z[1]==\'3Y\')u 2l=k.Y;q(2l){l=2l.x.N(\'6Q\')+\'F\';t=2l.y.N(\'6Q\')+\'F\';k.1S.G.1r=m.4z++}4r(z(){q(A.1S)m.V(A.1S,{14:l,11:t,1r:m.4z++})},28)},da:z(){u A=k;u 1y=R.1c(\'1y\');k.17=1y;1y.64=z(){q(m.W[A.P])A.8K()};q(m.cY)1y.dj=z(){D 1f};1y.U=\'L-2M\';m.V(1y,{1e:\'1s\',1u:\'4H\',1j:\'2v\',6F:\'4P\',1r:3});1y.1X=m.18.84;q(m.4u&&m.21<6t)m.22.2E(1y);q(m.2m&&m.dc)1y.1G=H;1y.1G=k.1G;k.6U()},8K:z(){2d{q(!k.17)D;k.17.64=H;q(k.6G)D;I k.6G=J;u x=k.x,y=k.y;q(k.1S){m.V(k.1S,{11:\'-4P\'});k.1S=H}x.1a=k.17.M;y.1a=k.17.1b;m.V(k.17,{M:x.t+\'F\',1b:y.t+\'F\'});k.Q.2E(k.17);m.22.2E(k.Q);x.74();y.74();m.V(k.Q,{14:(x.1K+x.3o-x.cb)+\'F\',11:(y.1K+x.3o-y.cb)+\'F\'});k.aB();k.9J();u 2x=x.1a/y.1a;x.6P();k.2k(x);y.6P();k.2k(y);q(k.1l)k.4K(0,1);q(k.5q){k.aZ(2x);u 1v=k.1g;q(1v&&k.Y&&1v.2B&&1v.ar){u E=1v.aC.1j||\'\',p;K(u 1m 2T m.7q)K(u i=0;i<5;i++){p=k[1m];q(E.2H(m.7q[1m][i])){p.E=k.Y[1m].E+(k.Y[1m].1o-p.1o)+(k.Y[1m].B-p.B)*[0,0,.5,1,1][i];q(1v.ar==\'dg\'){q(p.E+p.B+p.1o+p.2z>p.1J+p.3W-p.3X)p.E=p.1J+p.3W-p.B-p.2P-p.3X-p.1o-p.2z;q(p.E<p.1J+p.2P)p.E=p.1J+p.2P}}}}q(k.3A&&k.x.1a>(k.x.1z||k.x.B)){k.ap();q(k.1x.S==1)k.4K()}}k.aG()}1W(e){k.7D(e)}},2k:z(p,4C){u 4b,2l=p.2i,1m=p==k.x?\'x\':\'y\';q(2l&&2l.2H(/ /)){4b=2l.dh(\' \');2l=4b[0]}q(2l&&m.$(2l)){p.E=m.6g(m.$(2l))[1m];q(4b&&4b[1]&&4b[1].2H(/^[-]?[0-9]+F$/))p.E+=7L(4b[1]);q(p.B<p.2q)p.B=p.2q}I q(p.2k==\'2n\'||p.2k==\'4i\'){u 79=1f;u 4q=p.A.5q;q(p.2k==\'4i\')p.E=1d.2y(p.1J+(p.3W+p.2P-p.3X-p.N(\'1N\'))/2);I p.E=1d.2y(p.E-((p.N(\'1N\')-p.t)/2));q(p.E<p.1J+p.2P){p.E=p.1J+p.2P;79=J}q(!4C&&p.B<p.2q){p.B=p.2q;4q=1f}q(p.E+p.N(\'1N\')>p.1J+p.3W-p.3X){q(!4C&&79&&4q){p.B=1d.2X(p.B,p.N(1m==\'y\'?\'4n\':\'7a\'))}I q(p.N(\'1N\')<p.N(\'4n\')){p.E=p.1J+p.3W-p.3X-p.N(\'1N\')}I{p.E=p.1J+p.2P;q(!4C&&4q)p.B=p.N(1m==\'y\'?\'4n\':\'7a\')}}q(!4C&&p.B<p.2q){p.B=p.2q;4q=1f}}I q(p.2k==\'56\'){p.E=1d.df(p.E-p.B+p.t)}q(p.E<p.2P){u aU=p.E;p.E=p.2P;q(4q&&!4C)p.B=p.B-(p.E-aU)}},aZ:z(2x){u x=k.x,y=k.y,3e=1f,2A=1d.2X(x.1a,x.B),2Y=1d.2X(y.1a,y.B),30=(k.30||m.4R);q(2A/2Y>2x){ 2A=2Y*2x;q(2A<x.2q){2A=x.2q;2Y=2A/2x}3e=J}I q(2A/2Y<2x){ 2Y=2A/2x;3e=J}q(m.4R&&x.1a<x.2q){x.1z=x.1a;y.B=y.1z=y.1a}I q(k.30){x.1z=2A;y.1z=2Y}I{x.B=2A;y.B=2Y}3e=k.aY(k.30?H:2x,3e);q(30&&y.B<y.1z){y.1z=y.B;x.1z=y.B*2x}q(3e||30){x.E=x.1K-x.cb+x.3o;x.2q=x.B;k.2k(x,J);y.E=y.1K-y.cb+y.3o;y.2q=y.B;k.2k(y,J);q(k.1l)k.4K()}},aY:z(2x,3e){u x=k.x,y=k.y;q(k.1l){4o(y.B>k.5w&&x.B>k.5c&&y.N(\'1N\')>y.N(\'4n\')){y.B-=10;q(2x)x.B=y.B*2x;k.4K(0,1);3e=J}}D 3e},aG:z(){u x=k.x,y=k.y;k.5s(\'1s\');q(k.1g&&k.1g.2g)k.1g.2g.4G();k.8f(1,{Q:{M:x.N(\'1N\'),1b:y.N(\'1N\'),14:x.E,11:y.E},17:{14:x.1o+x.N(\'2f\'),11:y.1o+y.N(\'2f\'),M:x.1z||x.B,1b:y.1z||y.B}},m.7f)},8f:z(1t,1L,3t){u 5k=k.2Z,6M=1t?(k.Y?k.Y.a:H):m.1U,t=(5k[1]&&6M&&m.5h(6M,\'2Z\')[1]==5k[1])?5k[1]:5k[0];q(k[t]&&t!=\'2D\'){k[t](1t,1L);D}q(k.16&&!k.3B){q(1t)k.16.3Z();I k.16.5x()}q(!1t)k.67();u A=k,x=A.x,y=A.y,2r=k.2r;q(!1t)2r=k.aT||2r;u ay=1t?z(){q(A.16)A.16.1V.G.1e="1D";4r(z(){A.62()},50)}:z(){A.5v()};q(1t)m.V(k.Q,{M:x.t+\'F\',1b:y.t+\'F\'});q(k.aD){m.V(k.Q,{1n:1t?0:1});m.3b(1L.Q,{1n:1t})}m.2b(k.Q,1L.Q,{3J:3t,2r:2r,3k:z(3j,36){q(A.16&&A.3B&&36.Z==\'11\'){u 4Q=1t?36.E:1-36.E;u E={w:x.t+(x.N(\'1N\')-x.t)*4Q,h:y.t+(y.N(\'1N\')-y.t)*4Q,x:x.1K+(x.E-x.1K)*4Q,y:y.1K+(y.E-y.1K)*4Q};A.16.3Z(E,0,1)}}});m.2b(k.17,1L.17,3t,2r,ay);q(1t){k.Q.G.1e=\'1D\';k.17.G.1e=\'1D\';k.a.U+=\' L-42-3Q\'}},5n:z(1t,1L){k.3B=1f;u A=k,t=1t?m.7f:0;q(1t){m.2b(k.Q,1L.Q,0);m.V(k.Q,{1n:0,1e:\'1D\'});m.2b(k.17,1L.17,0);k.17.G.1e=\'1D\';m.2b(k.Q,{1n:1},t,H,z(){A.62()})}q(k.16){k.16.1V.G.1r=k.Q.G.1r;u 5D=1t||-1,1k=k.16.1k,7c=1t?3:1k,6Y=1t?1k:3;K(u i=7c;5D*i<=5D*6Y;i+=5D,t+=25){(z(){u o=1t?6Y-i:7c-i;4r(z(){A.16.3Z(0,o,1)},t)})()}}q(1t){}I{4r(z(){q(A.16)A.16.5x(A.cz);A.67();m.2b(A.Q,{1n:0},m.8p,H,z(){A.5v()})},t)}},3Y:z(1t,1L,72){q(!1t)D;u A=k,Y=k.Y,x=k.x,y=k.y,2W=Y.x,2U=Y.y,Q=k.Q,17=k.17,1l=k.1l;m.49(R,\'6o\',m.5V);m.V(17,{M:(x.1z||x.B)+\'F\',1b:(y.1z||y.B)+\'F\'});q(1l)1l.G.3a=\'1D\';k.16=Y.16;q(k.16)k.16.A=A;Y.16=H;u 4s=m.1c(\'X\',{U:\'L-\'+k.2Q},{1j:\'2v\',1r:4,3a:\'1s\',1u:\'1F\'});u 77={aO:Y,aR:k};K(u n 2T 77){k[n]=77[n].17.7j(1);m.V(k[n],{1j:\'2v\',aM:0,1e:\'1D\'});4s.2E(k[n])}Q.2E(4s);q(1l){1l.U=\'\';Q.2E(1l)}4s.G.1u=\'\';Y.17.G.1u=\'1F\';q(m.4u&&m.21<6t){k.Q.G.1e=\'1D\'}m.2b(Q,{M:x.B},{3J:m.aL,3k:z(3j,36){u E=36.E,3U=1-E;u Z,B={},6N=[\'E\',\'B\',\'1o\',\'2z\'];K(u n 2T 6N){Z=6N[n];B[\'x\'+Z]=1d.2y(3U*2W[Z]+E*x[Z]);B[\'y\'+Z]=1d.2y(3U*2U[Z]+E*y[Z]);B.aJ=1d.2y(3U*(2W.1z||2W.B)+E*(x.1z||x.B));B.6p=1d.2y(3U*2W.N(\'2f\')+E*x.N(\'2f\'));B.aN=1d.2y(3U*(2U.1z||2U.B)+E*(y.1z||y.B));B.6f=1d.2y(3U*2U.N(\'2f\')+E*y.N(\'2f\'))}q(A.16)A.16.3Z({x:B.2K,y:B.2J,w:B.58+B.3C+B.6O+2*x.cb,h:B.5a+B.3z+B.6W+2*y.cb});Y.Q.G.ct=\'cn(\'+(B.2J-2U.E)+\'F, \'+(B.58+B.3C+B.6O+B.2K+2*2W.cb-2W.E)+\'F, \'+(B.5a+B.3z+B.6W+B.2J+2*2U.cb-2U.E)+\'F, \'+(B.2K-2W.E)+\'F)\';m.V(17,{11:(B.3z+y.N(\'2f\'))+\'F\',14:(B.3C+x.N(\'2f\'))+\'F\',4j:(y.E-B.2J)+\'F\',4L:(x.E-B.2K)+\'F\'});m.V(Q,{11:B.2J+\'F\',14:B.2K+\'F\',M:(B.3C+B.6O+B.58+2*x.cb)+\'F\',1b:(B.3z+B.6W+B.5a+2*y.cb)+\'F\'});m.V(4s,{M:(B.aJ||B.58)+\'F\',1b:(B.aN||B.5a)+\'F\',14:(B.3C+B.6p)+\'F\',11:(B.3z+B.6f)+\'F\',1e:\'1D\'});m.V(A.aO,{11:(2U.E-B.2J+2U.1o-B.3z+2U.N(\'2f\')-B.6f)+\'F\',14:(2W.E-B.2K+2W.1o-B.3C+2W.N(\'2f\')-B.6p)+\'F\'});m.V(A.aR,{1n:E,11:(y.E-B.2J+y.1o-B.3z+y.N(\'2f\')-B.6f)+\'F\',14:(x.E-B.2K+x.1o-B.3C+x.N(\'2f\')-B.6p)+\'F\'});q(1l)m.V(1l,{M:B.58+\'F\',1b:B.5a+\'F\',14:(B.3C+x.cb)+\'F\',11:(B.3z+y.cb)+\'F\'})},63:z(){Q.G.1e=17.G.1e=\'1D\';17.G.1u=\'4H\';m.3H(4s);A.62();Y.5v();A.Y=H}})},9E:z(o,C){q(!k.Y)D 1f;K(u i=0;i<k.Y.1x.S;i++){u 61=m.$(\'1H\'+k.Y.1x[i]);q(61&&61.1H==o.1H){k.7z();61.cl=k.P;m.2p(k.1x,k.Y.1x[i]);D J}}D 1f},62:z(){k.55=J;k.43();q(k.3I)m.1m(k);q(m.1U&&m.1U==k.a)m.1U=H;k.aQ();u p=m.3S,7i=m.66.x+p.5l,7e=m.66.y+p.5i;k.7m=k.x.E<7i&&7i<k.x.E+k.x.N(\'1N\')&&k.y.E<7e&&7e<k.y.E+k.y.N(\'1N\');q(k.1l)k.ak()},aQ:z(){u P=k.P;u 1B=k.1B;24 m.4O(1B,z(){2d{m.W[P].aP()}1W(e){}})},aP:z(){u 1p=k.7b(1);q(1p&&1p.2G.aI().2H(/m\\.2D/))u 1y=m.1c(\'1y\',{1G:m.73(1p)})},7b:z(1P){u 7g=k.6e(),as=m.3R.2N[k.2t||\'1F\'];q(as&&!as[7g+1P]&&k.1g&&k.1g.ab){q(1P==1)D as[0];I q(1P==-1)D as[as.S-1]}D(as&&as[7g+1P])||H},6e:z(){u 2o=m.60().2N[k.2t||\'1F\'];q(2o)K(u i=0;i<2o.S;i++){q(2o[i]==k.a)D i}D H},a3:z(){q(k[k.5b]){u 2o=m.3R.2N[k.2t||\'1F\'];q(2o){u s=m.18.3n.2j(\'%1\',k.6e()+1).2j(\'%2\',2o.S);k[k.5b].2R=\'<X 2s="L-3n">\'+s+\'</X>\'+k[k.5b].2R}}},aB:z(){q(!k.Y){K(u i=0;i<m.4U.S;i++){u 1v=m.4U[i],2C=1v.2t;q(1q 2C==\'1C\'||2C===H||2C===k.2t)k.1g=24 m.7S(k.P,1v)}}I{k.1g=k.Y.1g}u 1v=k.1g;q(!1v)D;u P=1v.3N=k.P;1v.aa();1v.4J(\'1a-2D\');q(1v.2B){k.4h(m.3b(1v.aC||{},{44:1v.2B,1H:\'2B\',1r:5}))}q(1v.2g)1v.2g.6s(k);q(!k.Y&&k.3D)1v.3r(J);q(1v.3D){1v.3D=4r(z(){m.1p(P)},(1v.cT||cS))}},5K:z(){m.3H(k.Q);m.W[k.P]=H;q(m.1U==k.a)m.1U=H;m.7Q(k.P);q(k.1S)m.1S.G.14=\'-4P\'},am:z(){q(k.4Y)D;k.4Y=m.1c(\'a\',{1Y:m.aF,2i:m.aE,U:\'L-4Y\',2R:m.18.aS,1X:m.18.b0});k.4h({44:k.4Y,1j:k.aW||\'11 14\',1H:\'4Y\'})},a2:z(76,aw){K(u i=0;i<76.S;i++){u T=76[i],s=H;q(!k[T+\'4t\']&&k.6x)k[T+\'4t\']=T+\'-K-\'+k.6x;q(k[T+\'4t\'])k[T]=m.4W(k[T+\'4t\']);q(!k[T]&&!k[T+\'6K\']&&k[T+\'aX\'])2d{s=cJ(k[T+\'aX\'])}1W(e){}q(!k[T]&&k[T+\'6K\']){s=k[T+\'6K\']}q(!k[T]&&!s){k[T]=m.4W(k.a[\'aV\'+T+\'4t\']);q(!k[T]){u 1p=k.a.b1;4o(1p&&!m.5L(1p)){q((24 5X(\'L-\'+T)).19(1p.U||H)){q(!1p.1M)k.a[\'aV\'+T+\'4t\']=1p.1M=\'1H\'+m.4V++;k[T]=m.4W(1p.1M);5B}1p=1p.b1}}}q(!k[T]&&!s&&k.5b==T)s=\'\\n\';q(!k[T]&&s)k[T]=m.1c(\'X\',{U:\'L-\'+T,2R:s});q(aw&&k[T]){u o={1j:(T==\'6z\')?\'4T\':\'6D\'};K(u x 2T k[T+\'9T\'])o[x]=k[T+\'9T\'][x];o.44=k[T];k.4h(o)}}},5s:z(1e){q(m.9U)k.5I(\'cM\',1e);q(m.9z)k.5I(\'cR\',1e);q(m.5Z)k.5I(\'*\',1e)},5I:z(4F,1e){u 1i=R.2L(4F);u Z=4F==\'*\'?\'3a\':\'1e\';K(u i=0;i<1i.S;i++){q(Z==\'1e\'||(R.6T.9P(1i[i],"").9Q(\'3a\')==\'2n\'||1i[i].a1(\'1s-by\')!=H)){u 2u=1i[i].a1(\'1s-by\');q(1e==\'1D\'&&2u){2u=2u.2j(\'[\'+k.P+\']\',\'\');1i[i].5A(\'1s-by\',2u);q(!2u)1i[i].G[Z]=1i[i].88}I q(1e==\'1s\'){u 3g=m.6g(1i[i]);3g.w=1i[i].2c;3g.h=1i[i].3f;q(!k.3I){u ax=(3g.x+3g.w<k.x.N(\'5t\')||3g.x>k.x.N(\'5t\')+k.x.N(\'7M\'));u 9Z=(3g.y+3g.h<k.y.N(\'5t\')||3g.y>k.y.N(\'5t\')+k.y.N(\'7M\'))}u 5H=m.86(1i[i]);q(!ax&&!9Z&&5H!=k.P){q(!2u){1i[i].5A(\'1s-by\',\'[\'+k.P+\']\');1i[i].88=1i[i].G[Z];1i[i].G[Z]=\'1s\'}I q(2u.9X(\'[\'+k.P+\']\')==-1){1i[i].5A(\'1s-by\',2u+\'[\'+k.P+\']\')}}I q((2u==\'[\'+k.P+\']\'||m.3v==5H)&&5H!=k.P){1i[i].5A(\'1s-by\',\'\');1i[i].G[Z]=1i[i].88||\'\'}I q(2u&&2u.9X(\'[\'+k.P+\']\')>-1){1i[i].5A(\'1s-by\',2u.2j(\'[\'+k.P+\']\',\'\'))}}}}},43:z(){k.Q.G.1r=m.4z+=2;K(u i=0;i<m.W.S;i++){q(m.W[i]&&i==m.3v){u 5g=m.W[i];5g.17.U+=\' L-\'+5g.2Q+\'-89\';5g.17.G.46=m.3E?\'9O\':\'5R\';5g.17.1X=m.18.9Y}}q(k.16)k.16.1V.G.1r=k.Q.G.1r-1;k.17.U=\'L-\'+k.2Q;k.17.1X=m.18.84;q(m.5m){m.4I=1A.3q?\'5R\':\'5O(\'+m.4p+m.5m+\'), 5R\';q(m.3E&&m.21<6)m.4I=\'9O\';k.17.G.46=m.4I}m.3v=k.P;m.1Q(R,1A.3q?\'5P\':\'5Q\',m.4N)},7C:z(x,y){k.x.7Z(x);k.y.7Z(y)},3O:z(e){u w,h,r=e.M/e.1b;w=1d.56(e.M+e.5T,1d.2X(k.5c,k.x.1a));q(k.3A&&1d.co(w-k.x.1a)<12)w=k.x.1a;h=w/r;q(h<1d.2X(k.5w,k.y.1a)){h=1d.2X(k.5w,k.y.1a);q(k.3A)w=h*r}k.7k(w,h)},7k:z(w,h){k.y.82(h);k.x.82(w);k.Q.G.1b=k.y.N(\'1N\')+\'F\'},26:z(){q(k.8c||!k.55)D;q(k.2Z[1]==\'3Y\'&&m.1U){m.2h(m.1U).5K();m.1U=H}k.8c=J;q(k.1g&&!m.1U)k.1g.2S();m.49(R,1A.3q?\'5P\':\'5Q\',m.4N);2d{k.17.G.46=\'cA\';k.8f(0,{Q:{M:k.x.t,1b:k.y.t,14:k.x.1K-k.x.cb+k.x.3o,11:k.y.1K-k.y.cb+k.y.3o},17:{14:0,11:0,M:k.x.t,1b:k.y.t}},m.8p)}1W(e){k.5v()}},4h:z(o){u C=o.44,4E=(o.9A==\'1Z\'&&!/6w$/.19(o.1j));q(1q C==\'8q\')C=m.4W(C);q(o.5W)C=m.1c(\'X\',{2R:o.5W});q(!C||1q C==\'8q\')D;C.G.1u=\'4H\';o.1H=o.1H||o.44;q(k.2Z[1]==\'3Y\'&&k.9E(o,C))D;k.7z();u M=o.M&&/^[0-9]+(F|%)$/.19(o.M)?o.M:\'2n\';q(/^(14|2V)6w$/.19(o.1j)&&!/^[0-9]+F$/.19(o.M))M=\'cy\';u O=m.1c(\'X\',{1M:\'1H\'+m.4V++,1H:o.1H},{1j:\'2v\',1e:\'1s\',M:M,9F:m.18.9C||\'\',1n:0},4E?m.1Z:k.1l,J);q(4E)O.5F=k.P;O.2E(C);m.3b(O,{1n:1,9B:0,9G:0,3t:(o.5n===0||o.5n===1f||(o.5n==2&&m.2m))?0:53});m.3b(O,o);q(k.al){k.5y(O);q(!O.69||k.7m)m.2b(O,{1n:O.1n},O.3t)}m.2p(k.1x,m.4V-1)},5y:z(O){u p=O.1j||\'8h 4i\',4E=(O.9A==\'1Z\'),5E=O.9B,5C=O.9G;q(4E){m.1Z.G.1u=\'4H\';O.5F=k.P;q(O.2c>O.1O.2c)O.G.M=\'28%\'}I q(O.1O!=k.1l)k.1l.2E(O);q(/14$/.19(p))O.G.14=5E+\'F\';q(/4i$/.19(p))m.V(O,{14:\'50%\',4L:(5E-1d.2y(O.2c/2))+\'F\'});q(/2V$/.19(p))O.G.2V=-5E+\'F\';q(/^9H$/.19(p)){m.V(O,{2V:\'28%\',9M:k.x.cb+\'F\',11:-k.y.cb+\'F\',4g:-k.y.cb+\'F\',3a:\'2n\'});k.x.1o=O.2c}I q(/^9L$/.19(p)){m.V(O,{14:\'28%\',4L:k.x.cb+\'F\',11:-k.y.cb+\'F\',4g:-k.y.cb+\'F\',3a:\'2n\'});k.x.2z=O.2c}u 8g=O.1O.3f;O.G.1b=\'2n\';q(4E&&O.3f>8g)O.G.1b=m.3E?8g+\'F\':\'28%\';q(/^11/.19(p))O.G.11=5C+\'F\';q(/^8h/.19(p))m.V(O,{11:\'50%\',4j:(5C-1d.2y(O.3f/2))+\'F\'});q(/^4g/.19(p))O.G.4g=-5C+\'F\';q(/^4T$/.19(p)){m.V(O,{14:(-k.x.1o-k.x.cb)+\'F\',2V:(-k.x.2z-k.x.cb)+\'F\',4g:\'28%\',9K:k.y.cb+\'F\',M:\'2n\'});k.y.1o=O.3f}I q(/^6D$/.19(p)){m.V(O,{1j:\'8i\',14:(-k.x.1o-k.x.cb)+\'F\',2V:(-k.x.2z-k.x.cb)+\'F\',11:\'28%\',4j:k.y.cb+\'F\',M:\'2n\'});k.y.2z=O.3f;O.G.1j=\'2v\'}},9J:z(){k.a2([\'6z\',\'dd\'],J);k.a3();q(k.6z&&k.7v)k.6z.U+=\' L-3i\';q(m.an)k.am();K(u i=0;i<m.1x.S;i++){u o=m.1x[i],6y=o.7y,2C=o.2t;q((!6y&&!2C)||(6y&&6y==k.6x)||(2C&&2C===k.2t)){k.4h(o)}}u 6u=[];K(u i=0;i<k.1x.S;i++){u o=m.$(\'1H\'+k.1x[i]);q(/6w$/.19(o.1j))k.5y(o);I m.2p(6u,o)}K(u i=0;i<6u.S;i++)k.5y(6u[i]);k.al=J},7z:z(){q(!k.1l)k.1l=m.1c(\'X\',{U:k.7B},{1j:\'2v\',M:(k.x.B||(k.30?k.M:H)||k.x.1a)+\'F\',1b:(k.y.B||k.y.1a)+\'F\',1e:\'1s\',3a:\'1s\',1r:m.2m?4:\'2n\'},m.22,J)},4K:z(7t,aj){u 1l=k.1l,x=k.x,y=k.y;m.V(1l,{M:x.B+\'F\',1b:y.B+\'F\'});q(7t||aj){K(u i=0;i<k.1x.S;i++){u o=m.$(\'1H\'+k.1x[i]);u 7u=(m.3E||R.6i==\'7P\');q(o&&/^(4T|6D)$/.19(o.1j)){q(7u){o.G.M=(1l.2c+2*x.cb+x.1o+x.2z)+\'F\'}y[o.1j==\'4T\'?\'1o\':\'2z\']=o.3f}q(o&&7u&&/^(14|2V)6w$/.19(o.1j)){o.G.1b=(1l.3f+2*y.cb)+\'F\'}}}q(7t){m.V(k.17,{11:y.1o+\'F\'});m.V(1l,{11:(y.1o+y.cb)+\'F\'})}},ak:z(){u b=k.1l;b.U=\'\';m.V(b,{11:(k.y.1o+k.y.cb)+\'F\',14:(k.x.1o+k.x.cb)+\'F\',3a:\'1D\'});q(m.4u)b.G.1e=\'1D\';k.Q.2E(b);K(u i=0;i<k.1x.S;i++){u o=m.$(\'1H\'+k.1x[i]);o.G.1r=o.1r||4;q(!o.69||k.7m){o.G.1e=\'1D\';m.V(o,{1e:\'1D\',1u:\'\'});m.2b(o,{1n:o.1n},o.3t)}}},67:z(){q(!k.1x.S)D;q(k.1g){u c=k.1g.2B;q(c&&m.2h(c)==k)c.1O.dl(c)}K(u i=0;i<k.1x.S;i++){u o=m.$(\'1H\'+k.1x[i]);q(o&&o.1O==m.1Z&&m.2h(o)==k)m.3H(o)}m.3H(k.1l)},ap:z(){q(k.1g&&k.1g.2B){k.1g.3T(\'1a-2D\');D}k.6a=m.1c(\'a\',{1Y:\'av:m.W[\'+k.P+\'].6k();\',1X:m.18.7p,U:\'L-1a-2D\'});k.4h({44:k.6a,1j:m.at,69:J,1n:m.aq})},6k:z(){2d{q(k.6a)m.3H(k.6a);k.43();u 2A=k.x.B,2Y=k.y.B;k.7k(k.x.1a,k.y.1a);u 2K=k.x.E-(k.x.B-2A)/2;q(2K<m.4L)2K=m.4L;u 2J=k.y.E-(k.y.B-2Y)/2;q(2J<m.4j)2J=m.4j;k.7C(2K,2J);k.5s(\'1s\')}1W(e){k.7D(e)}},5v:z(){k.a.U=k.a.U.2j(\'L-42-3Q\',\'\');k.5s(\'1D\');q(k.16&&k.3B)k.16.5x();m.3H(k.Q);k.67();q(!m.1Z.6l.S)m.1Z.G.1u=\'1F\';q(k.3I)m.7Q(k.P);m.W[k.P]=H;m.ai()}};m.7S=z(3N,1h){q(m.d2!==1f)m.7O();k.3N=3N;K(u x 2T 1h)k[x]=1h[x];q(k.d3)k.a9();q(k.2g)k.2g=m.ae(k)};m.7S.5o={a9:z(){k.2B=m.1c(\'X\',{2R:m.a7(m.a6.2B)},H,m.22);u 59=[\'3r\',\'2S\',\'3c\',\'1p\',\'3i\',\'1a-2D\',\'26\'];k.1w={};u 7T=k;K(u i=0;i<59.S;i++){k.1w[59[i]]=m.a4(k.2B,\'1R\',\'L-\'+59[i]);k.3T(59[i])}k.1w.2S.G.1u=\'1F\'},aa:z(){q(k.ab||!k.2B)D;u A=m.W[k.3N],4y=A.6e(),1T=/6m$/;q(4y==0)k.4J(\'3c\');I q(1T.19(k.1w.3c.2L(\'a\')[0].U))k.3T(\'3c\');q(4y+1==m.3R.2N[A.2t||\'1F\'].S){k.4J(\'1p\');k.4J(\'3r\')}I q(1T.19(k.1w.1p.2L(\'a\')[0].U)){k.3T(\'1p\');k.3T(\'3r\')}},3T:z(1w){q(!k.1w)D;u a0=k,a=k.1w[1w].2L(\'a\')[0],1T=/6m$/;a.2G=z(){a0[1w]();D 1f};q(1T.19(a.U))a.U=a.U.2j(1T,\'\')},4J:z(1w){q(!k.1w)D;u a=k.1w[1w].2L(\'a\')[0];a.2G=z(){D 1f};q(!/6m$/.19(a.U))a.U+=\' 6m\'},ad:z(){q(k.3D)k.2S();I k.3r()},3r:z(ac){q(k.1w){k.1w.3r.G.1u=\'1F\';k.1w.2S.G.1u=\'\'}k.3D=J;q(!ac)m.1p(k.3N)},2S:z(){q(k.1w){k.1w.2S.G.1u=\'1F\';k.1w.3r.G.1u=\'\'}b8(k.3D);k.3D=H},3c:z(){k.2S();m.3c(k.1w.3c)},1p:z(){k.2S();m.1p(k.1w.1p)},3i:z(){},\'1a-2D\':z(){m.2h().6k()},26:z(){m.26(k.1w.26)}};m.ae=z(1g){z 6s(A){m.3b(1h||{},{44:4e,1H:\'2g\',U:\'L-2g-\'+4m+\'-O \'+(1h.U||\'\')});q(m.3E)1h.5n=0;A.4h(1h);m.V(4e.1O,{3a:\'1s\'})};z 1J(3h){4G(1C,1d.2y(3h*4e[3p?\'2c\':\'3f\']*0.7))};z 4G(i,7K){q(i===1C)K(u j=0;j<51.S;j++){q(51[j]==m.W[1g.3N].a){i=j;5B}}q(i===1C)D;u as=4e.2L(\'a\'),42=as[i],3M=42.1O,14=3p?\'af\':\'ag\',2V=3p?\'a5\':\'a8\',M=3p?\'ah\':\'au\',4f=\'1k\'+14,2c=\'1k\'+M,6h=X.1O.1O[2c],4w=6h-1V[2c],5z=7L(1V.G[3p?\'14\':\'11\'])||0,2w=5z,bs=20;q(7K!==1C){2w=5z-7K;q(4w>0)4w=0;q(2w>0)2w=0;q(2w<4w)2w=4w}I{K(u j=0;j<as.S;j++)as[j].U=\'\';42.U=\'L-42-3Q\';u 7F=i>0?as[i-1].1O[4f]:3M[4f],7x=3M[4f]+3M[2c]+(as[i+1]?as[i+1].1O[2c]:0);q(7x>6h-5z)2w=6h-7x;I q(7F<-5z)2w=-7F}u 7r=3M[4f]+(3M[2c]-6b[2c])/2+2w;m.2b(1V,3p?{14:2w}:{11:2w},H,\'7n\');m.2b(6b,3p?{14:7r}:{11:7r},H,\'7n\');7Y.G.1u=2w<0?\'4H\':\'1F\';85.G.1u=(2w>4w)?\'4H\':\'1F\'};u 51=m.3R.2N[m.W[1g.3N].2t||\'1F\'],1h=1g.2g,4m=1h.4m||\'ao\',81=(4m==\'bi\'),3K=81?[\'X\',\'7V\',\'1R\',\'23\']:[\'1V\',\'4a\',\'3L\',\'2e\'],3p=(4m==\'ao\'),4e=m.1c(\'X\',{U:\'L-2g L-2g-\'+4m,2R:\'<X 2s="L-2g-b4">\'+\'<\'+3K[0]+\'><\'+3K[1]+\'></\'+3K[1]+\'></\'+3K[0]+\'></X>\'+\'<X 2s="L-1J-1t"><X></X></X>\'+\'<X 2s="L-1J-b6"><X></X></X>\'+\'<X 2s="L-6b"><X></X></X>\'},{1u:\'1F\'},m.22),57=4e.6l,X=57[0],7Y=57[1],85=57[2],6b=57[3],1V=X.b7,4a=4e.2L(3K[1])[0],3L;K(u i=0;i<51.S;i++){q(i==0||!3p)3L=m.1c(3K[2],H,H,4a);(z(){u a=51[i],3M=m.1c(3K[3],H,H,3L),cj=i;m.1c(\'a\',{1Y:a.1Y,1X:a.1X,2G:z(){q(/L-42-3Q/.19(k.U))D 1f;m.2h(k).43();D m.83(a)},2R:m.9I?m.9I(a):a.2R},H,3M)})()}q(!81){7Y.2G=z(){1J(-1)};85.2G=z(){1J(1)};m.1Q(4a,R.c3!==1C?\'bB\':\'bZ\',z(e){u 3h=0;e=e||1A.29;q(e.9D){3h=e.9D/ch;q(m.3q)3h=-3h}I q(e.9N){3h=-e.9N/3}q(3h)1J(-3h*0.2);q(e.4D)e.4D();e.9W=1f})}D{6s:6s,4G:4G}};m.5U=m.18;u bC=m.4Z;q(m.2m&&1A==1A.11){(z(){2d{R.4l.bD(\'14\')}1W(e){4r(9V.bF,50);D}m.3s()})()}m.1Q(R,\'bL\',m.3s);m.1Q(1A,\'az\',m.3s);m.1Q(R,\'3s\',z(){q(m.5M||m.3I){u G=m.1c(\'G\',{T:\'bM/7U\'},H,R.2L(\'bT\')[0]),8k=R.6i==\'7P\';z 5e(7w,7W){q(m.2m&&(m.21<9||8k)){u Y=R.9S[R.9S.S-1];q(1q(Y.5e)=="6q")Y.5e(7w,7W)}I{G.2E(R.bU(7w+" {"+7W+"}"))}}z 5f(Z){D\'bV( ( ( bN = R.4l.\'+Z+\' ? R.4l.\'+Z+\' : R.3x.\'+Z+\' ) ) + \\\'F\\\' );\'}q(m.5M)5e(\'.L 1y\',\'46: 5O(\'+m.4p+m.5M+\'), 5R !c8;\');5e(\'.L-1Z-B\',m.2m&&(m.21<7||8k)?\'1j: 2v; \'+\'14:\'+5f(\'5l\')+\'11:\'+5f(\'5i\')+\'M:\'+5f(\'8m\')+\'1b:\'+5f(\'aK\'):\'1j: bc; M: 28%; 1b: 28%; 14: 0; 11: 0\')}});m.1Q(1A,\'3O\',z(){m.6v();q(m.1Z)K(u i=0;i<m.1Z.6l.S;i++){u 3w=m.1Z.6l[i],A=m.2h(3w);A.5y(3w);q(3w.1H==\'2g\')A.1g.2g.4G()}});m.1Q(R,\'6o\',z(e){m.66={x:e.6c,y:e.68}});m.1Q(R,\'aH\',m.87);m.1Q(R,\'aA\',m.87);m.1Q(R,\'3s\',m.60);m.1Q(1A,\'az\',m.9R)}',62,831,'||||||||||||||||||||this||hs||||if||||var|||||function|exp|size|el|return|pos|px|style|null|else|true|for|highslide|width|get|overlay|key|wrapper|document|length|type|className|setStyles|expanders|div|last|prop||top|||left||outline|content|lang|test|full|height|createElement|Math|visibility|false|slideshow|options|els|position|offset|overlayBox|dim|opacity|p1|next|typeof|zIndex|hidden|up|display|ss|btn|overlays|img|imgSize|window|outlineType|undefined|visible|fx|none|src|hsId|case|scroll|tpos|to|id|wsize|parentNode|op|addEventListener|li|loading|re|upcoming|table|catch|title|href|viewport||uaVersion|container|span|new||close||100|event|dimmer|animate|offsetWidth|try|td|imgPad|thumbstrip|getExpander|target|replace|justify|tgt|ie|auto|arr|push|minSize|easing|class|slideshowGroup|hiddenBy|absolute|tblPos|ratio|round|p2|xSize|controls|sg|expand|appendChild|elem|onclick|match|dragArgs|ypos|xpos|getElementsByTagName|image|groups|params|marginMin|contentType|innerHTML|pause|in|lastY|right|lastX|min|ySize|transitions|useBox|opt||||name|args||||overflow|extend|previous|graphic|changed|offsetHeight|elPos|delta|move|val|step|func|ucwh|number|tb|isX|opera|play|ready|dur|timers|focusKey|node|body|hasDragged|yp1|isImage|outlineWhileAnimating|xp1|autoplay|ieLt7|custom|wh|discardElement|dimmingOpacity|duration|tree|tr|cell|expKey|resize|styles|anchor|anchors|page|enable|invPos|onLoad|clientSize|marginMax|crossfade|setPosition||start|active|focus|overlayId|clone|cursor|unit|pendingOutlines|removeEventListener|tbody|tgtArr|now|ieLt9|dom|offsetLeft|bottom|createOverlay|center|marginTop|attribs|documentElement|mode|fitsize|while|graphicsDir|allowReduce|setTimeout|fadeBox|Id|safari|end|minTblPos|owner|cur|zIndexCounter|images|navigator|moveOnly|preventDefault|relToVP|tagName|selectThumb|block|styleRestoreCursor|disable|sizeOverlayBox|marginLeft|uclt|keyHandler|Outline|9999px|fac|padToMinWidth|matches|above|slideshows|idCounter|getNode|preloadTheseImages|credits|Expander||group|all|250|on|isExpanded|max|domCh|xsize|buttons|ysize|numberPosition|minWidth|iebody|addRule|fix|blurExp|getParam|scrollTop|filter|trans|scrollLeft|restoreCursor|fade|prototype|param|allowSizeReduction|userAgent|doShowHide|opos|getParams|afterClose|minHeight|destroy|positionOverlay|curTblPos|setAttribute|break|offY|dir|offX|hsKey|onReady|wrapperKey|showHideElements|self|cancelLoading|isHsAnchor|expandCursor|gotoEnd|url|keypress|keydown|pointer|curAnim|dX|langDefaults|dragHandler|html|RegExp|toLowerCase|geckoMac|getAnchors|oDiv|afterExpand|complete|onload|expOnly|mouse|destroyOverlays|clientY|hideOnMouseOut|fullExpandLabel|marker|clientX|previousOrNext|getAnchorIndex|yimgPad|getPosition|overlayWidth|compatMode|topmostKey|doFullExpand|childNodes|disabled|adj|mousemove|ximgPad|object|Dimension|add|525|os|getPageSize|panel|thumbsUserSetId|tId|heading|preloadFullImage|lt|over|below|relatedTarget|maxWidth|onLoadStarted|align|isReady|Create|Text|connectOutline|other|props|xp2|calcExpanded|loadingPosXfade|maxHeight|margin|defaultView|showLoading|overrides|yp2|calcThumb|endOff|continuePreloading||init|from|getSrc|calcBorders||types|names|loadingPos|hasMovedMin|maxsize|getAdjacentAnchor|startOff|ucrb|mY|expandDuration|current|hasAlphaImageLoader|mX|cloneNode|resizeTo|srcElement|mouseIsOver|easeOutQuad|dY|fullExpandTitle|oPos|markerPos|distance|doWrapper|ie6|dragByHeading|sel|activeRight|thumbnailId|genOverlayBox|numberOfImagesToPreload|wrapperClassName|moveTo|error|isNew|activeLeft|dimmingDuration|pixDimmerSize|clones|topZ|scrollBy|parseInt|osize|element|updateAnchors|BackCompat|undim|hasFocused|Slideshow|pThis|css|ul|dec|state|scrollUp|setPos|startTime|floatMode|setSize|transit|restoreTitle|scrollDown|getWrapperKey|mouseClickHandler|origProp|blur|update|parent|isClosing|done|openerTagNames|changeSize|parOff|middle|relative|garbageBin|backCompat|arrow|clientWidth|parseFloat|Click|restoreDuration|string|fullExpandText|moveTitle|closeTitle|captionOverlay|closeText|moveText|targetY|targetX|headingOverlay|playTitle|spacebar|Previous|Next|Move|Pause|Play|Highslide|JS|Close|contentLoaded|and|pauseTitle|pauseText|nextTitle|playText|wrapperMouseHandler|200|previousTitle|previousText|nextText|enableKeyListener|timerId|Date|switch|orig|rb|loadingOpacity|toUpperCase|easeInQuad|getTime|call|_default|png|preloadGraphic||appendTo|onGraphicLoad|hide|vis|background|loadingText|loadingTitle|offsetTop|pageOrigin|allowMultipleInstances|offsetParent|pageXOffset|tag|nopad|alpha|thumb|dimmingGeckoFix|pow|detachEvent|ltr|clickY|clickX|focusTopmost|form|rv|hideIframes|relativeTo|offsetX|cssDirection|wheelDelta|reuseOverlay|direction|offsetY|leftpanel|stripItemFormatter|getOverlays|marginBottom|rightpanel|marginRight|detail|hand|getComputedStyle|getPropertyValue|preloadImages|styleSheets|Overlay|hideSelects|arguments|returnValue|indexOf|focusTitle|clearsY|sls|getAttribute|getInline|getNumber|getElementByClass|Right|skin|replaceLang|Bottom|getControls|checkFirstAndLast|repeat|wait|hitSpace|Thumbstrip|Left|Top|Width|reOrder|doPanels|showOverlays|gotOverlays|writeCredits|showCredits|horizontal|createFullExpand|fullExpandOpacity|fixedControls||fullExpandPosition|Height|javascript|addOverlay|clearsX|after|load|mouseup|initSlideshow|overlayOptions|fadeInOut|creditsTarget|creditsHref|show|mousedown|toString|ximgSize|clientHeight|transitionDuration|border|yimgSize|oldImg|preloadNext|prepareNextOutline|newImg|creditsText|easingClose|tmpMin|_|creditsPosition|Eval|fitOverlayBox|correctRatio|creditsTitle|nextSibling|innerWidth|innerHeight|inner|scrollHeight|down|firstChild|clearTimeout|Image|cancel|Loading|fixed|bring|pageYOffset|currentStyle|Resize|geckodimmer|float|the|dimming|actual|Android|Go|iPhone|Powered|of|iPod|mgnRight|iPad|resizeTitle|esc|front|Expand||homepage|scrollWidth|mousewheel|HsExpander|doScroll|1001|callee|captionId|captionText|zoomin|captionEval|zoomout|DOMContentLoaded|text|ignoreMe|_self|outlineStartOffset|http|drop|shadow|HEAD|createTextNode|expression|headingId|graphics|padding|DOMMouseScroll|Use|keys|com|onmousewheel|click|removeAttribute|drag|getElementById|important|it|Trident||headingEval|headingText|ra|Safari|Gecko|120|Macintosh|pI|sqrt|reuse|allowSimultaneousLoading|rect|abs|isHtml|keyCode|cellSpacing|readyState|clip|onmouseover|clearInterval|splice|setInterval|200px|preserveContent|default|onmouseout|borderCollapse|collapse|AlphaImageLoader|Microsoft|DXImageTransform|sizingMethod|scale|eval|stl|progid|SELECT|outlinesDir|fontSize|lineHeight|outlines|IFRAME|500|interval|vendor|KDE|mouseover|dragSensitivity|blockRightClick|location|lineNumber|message|dynamicallyUpdateAnchors|useControls|addSlideshow|registerOverlay|htmlE|xpand|hasHtmlExpanders|button|imageCreate|fromElement|flushImgSize|caption|linearTween|floor|fit|split|toElement|oncontextmenu|alert|removeChild|debug|attachEvent|Line'.split('|'),0,{})) diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.js index c53d877f8f27f0f32bebc8632d60696a1ad8c763..1234cbde25b383ef05217cbb2d760e9ff27a6223 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.js @@ -1,1033 +1,1033 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) * Config: default +inline +ajax +iframe +flash - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ -if (!hs) { var hs = { -// Language strings -lang : { - cssDirection: 'ltr', - loadingText : 'Loading...', - loadingTitle : 'Click to cancel', - focusTitle : 'Click to bring to front', - fullExpandTitle : 'Expand to actual size (f)', - creditsText : 'Powered by <i>Highslide JS</i>', - creditsTitle : 'Go to the Highslide JS homepage', - previousText : 'Previous', - nextText : 'Next', - moveText : 'Move', - closeText : 'Close', - closeTitle : 'Close (esc)', - resizeTitle : 'Resize', - playText : 'Play', - playTitle : 'Play slideshow (spacebar)', - pauseText : 'Pause', - pauseTitle : 'Pause slideshow (spacebar)', - previousTitle : 'Previous (arrow left)', - nextTitle : 'Next (arrow right)', - moveTitle : 'Move', - fullExpandText : '1:1', - restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' -}, -// See http://highslide.com/ref for examples of settings -graphicsDir : 'highslide/graphics/', -expandCursor : 'zoomin.cur', // null disables -restoreCursor : 'zoomout.cur', // null disables -expandDuration : 250, // milliseconds -restoreDuration : 250, -marginLeft : 15, -marginRight : 15, -marginTop : 15, -marginBottom : 15, -zIndexCounter : 1001, // adjust to other absolutely positioned elements -loadingOpacity : 0.75, -allowMultipleInstances: true, -numberOfImagesToPreload : 5, -outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only -outlineStartOffset : 3, // ends at 10 -padToMinWidth : false, // pad the popup width to make room for wide caption -fullExpandPosition : 'bottom right', -fullExpandOpacity : 1, -showCredits : true, // you can set this to false if you want -creditsHref : 'http://highslide.com/', -creditsTarget : '_self', -enableKeyListener : true, -openerTagNames : ['a'], // Add more to allow slideshow indexing - -allowWidthReduction : false, -allowHeightReduction : true, -preserveContent : true, // Preserve changes made to the content and position of HTML popups. -objectLoadTime : 'before', // Load iframes 'before' or 'after' expansion. -cacheAjax : true, // Cache ajax popups for instant display. Can be overridden for each popup. -dragByHeading: true, -minWidth: 200, -minHeight: 200, -allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ +if (!hs) { var hs = { +// Language strings +lang : { + cssDirection: 'ltr', + loadingText : 'Loading...', + loadingTitle : 'Click to cancel', + focusTitle : 'Click to bring to front', + fullExpandTitle : 'Expand to actual size (f)', + creditsText : 'Powered by <i>Highslide JS</i>', + creditsTitle : 'Go to the Highslide JS homepage', + previousText : 'Previous', + nextText : 'Next', + moveText : 'Move', + closeText : 'Close', + closeTitle : 'Close (esc)', + resizeTitle : 'Resize', + playText : 'Play', + playTitle : 'Play slideshow (spacebar)', + pauseText : 'Pause', + pauseTitle : 'Pause slideshow (spacebar)', + previousTitle : 'Previous (arrow left)', + nextTitle : 'Next (arrow right)', + moveTitle : 'Move', + fullExpandText : '1:1', + restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' +}, +// See http://highslide.com/ref for examples of settings +graphicsDir : 'highslide/graphics/', +expandCursor : 'zoomin.cur', // null disables +restoreCursor : 'zoomout.cur', // null disables +expandDuration : 250, // milliseconds +restoreDuration : 250, +marginLeft : 15, +marginRight : 15, +marginTop : 15, +marginBottom : 15, +zIndexCounter : 1001, // adjust to other absolutely positioned elements +loadingOpacity : 0.75, +allowMultipleInstances: true, +numberOfImagesToPreload : 5, +outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only +outlineStartOffset : 3, // ends at 10 +padToMinWidth : false, // pad the popup width to make room for wide caption +fullExpandPosition : 'bottom right', +fullExpandOpacity : 1, +showCredits : true, // you can set this to false if you want +creditsHref : 'http://highslide.com/', +creditsTarget : '_self', +enableKeyListener : true, +openerTagNames : ['a'], // Add more to allow slideshow indexing + +allowWidthReduction : false, +allowHeightReduction : true, +preserveContent : true, // Preserve changes made to the content and position of HTML popups. +objectLoadTime : 'before', // Load iframes 'before' or 'after' expansion. +cacheAjax : true, // Cache ajax popups for instant display. Can be overridden for each popup. +dragByHeading: true, +minWidth: 200, +minHeight: 200, +allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight outlineType : 'drop-shadow', // set null to disable outlines -skin : { - contentWrapper: - '<div class="highslide-header"><ul>'+ - '<li class="highslide-previous">'+ - '<a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)">'+ - '<span>{hs.lang.previousText}</span></a>'+ - '</li>'+ - '<li class="highslide-next">'+ - '<a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)">'+ - '<span>{hs.lang.nextText}</span></a>'+ - '</li>'+ - '<li class="highslide-move">'+ - '<a href="#" title="{hs.lang.moveTitle}" onclick="return false">'+ - '<span>{hs.lang.moveText}</span></a>'+ - '</li>'+ - '<li class="highslide-close">'+ - '<a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)">'+ - '<span>{hs.lang.closeText}</span></a>'+ - '</li>'+ - '</ul></div>'+ - '<div class="highslide-body"></div>'+ - '<div class="highslide-footer"><div>'+ - '<span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span>'+ - '</div></div>' -}, -// END OF YOUR SETTINGS - - -// declare internal properties -preloadTheseImages : [], -continuePreloading: true, -expanders : [], -overrides : [ - 'allowSizeReduction', - 'useBox', - 'outlineType', - 'outlineWhileAnimating', - 'captionId', - 'captionText', - 'captionEval', - 'captionOverlay', - 'headingId', - 'headingText', - 'headingEval', - 'headingOverlay', - 'creditsPosition', - 'dragByHeading', - - 'width', - 'height', - - 'contentId', - 'allowWidthReduction', - 'allowHeightReduction', - 'preserveContent', - 'maincontentId', - 'maincontentText', - 'maincontentEval', - 'objectType', - 'cacheAjax', - 'objectWidth', - 'objectHeight', - 'objectLoadTime', - 'swfOptions', - 'wrapperClassName', - 'minWidth', - 'minHeight', - 'maxWidth', - 'maxHeight', - 'pageOrigin', - 'slideshowGroup', - 'easing', - 'easingClose', - 'fadeInOut', - 'src' -], -overlays : [], -idCounter : 0, -oPos : { - x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], - y: ['above', 'top', 'middle', 'bottom', 'below'] -}, -mouse: {}, -headingOverlay: {}, -captionOverlay: {}, -swfOptions: { flashvars: {}, params: {}, attributes: {} }, -timers : [], - -pendingOutlines : {}, -sleeping : [], -preloadTheseAjax : [], -cacheBindings : [], -cachedGets : {}, -clones : {}, -onReady: [], +skin : { + contentWrapper: + '<div class="highslide-header"><ul>'+ + '<li class="highslide-previous">'+ + '<a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)">'+ + '<span>{hs.lang.previousText}</span></a>'+ + '</li>'+ + '<li class="highslide-next">'+ + '<a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)">'+ + '<span>{hs.lang.nextText}</span></a>'+ + '</li>'+ + '<li class="highslide-move">'+ + '<a href="#" title="{hs.lang.moveTitle}" onclick="return false">'+ + '<span>{hs.lang.moveText}</span></a>'+ + '</li>'+ + '<li class="highslide-close">'+ + '<a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)">'+ + '<span>{hs.lang.closeText}</span></a>'+ + '</li>'+ + '</ul></div>'+ + '<div class="highslide-body"></div>'+ + '<div class="highslide-footer"><div>'+ + '<span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span>'+ + '</div></div>' +}, +// END OF YOUR SETTINGS + + +// declare internal properties +preloadTheseImages : [], +continuePreloading: true, +expanders : [], +overrides : [ + 'allowSizeReduction', + 'useBox', + 'outlineType', + 'outlineWhileAnimating', + 'captionId', + 'captionText', + 'captionEval', + 'captionOverlay', + 'headingId', + 'headingText', + 'headingEval', + 'headingOverlay', + 'creditsPosition', + 'dragByHeading', + + 'width', + 'height', + + 'contentId', + 'allowWidthReduction', + 'allowHeightReduction', + 'preserveContent', + 'maincontentId', + 'maincontentText', + 'maincontentEval', + 'objectType', + 'cacheAjax', + 'objectWidth', + 'objectHeight', + 'objectLoadTime', + 'swfOptions', + 'wrapperClassName', + 'minWidth', + 'minHeight', + 'maxWidth', + 'maxHeight', + 'pageOrigin', + 'slideshowGroup', + 'easing', + 'easingClose', + 'fadeInOut', + 'src' +], +overlays : [], +idCounter : 0, +oPos : { + x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], + y: ['above', 'top', 'middle', 'bottom', 'below'] +}, +mouse: {}, +headingOverlay: {}, +captionOverlay: {}, +swfOptions: { flashvars: {}, params: {}, attributes: {} }, +timers : [], + +pendingOutlines : {}, +sleeping : [], +preloadTheseAjax : [], +cacheBindings : [], +cachedGets : {}, +clones : {}, +onReady: [], uaVersion: /Trident\/4\.0/.test(navigator.userAgent) ? 8 : - parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), -ie : (document.all && !window.opera), -//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? -safari : /Safari/.test(navigator.userAgent), -geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), - -$ : function (id) { - if (id) return document.getElementById(id); -}, - -push : function (arr, val) { - arr[arr.length] = val; -}, - -createElement : function (tag, attribs, styles, parent, nopad) { - var el = document.createElement(tag); - if (attribs) hs.extend(el, attribs); - if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); - if (styles) hs.setStyles(el, styles); - if (parent) parent.appendChild(el); - return el; -}, - -extend : function (el, attribs) { - for (var x in attribs) el[x] = attribs[x]; - return el; -}, - -setStyles : function (el, styles) { - for (var x in styles) { - if (hs.ieLt9 && x == 'opacity') { + parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), +ie : (document.all && !window.opera), +//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? +safari : /Safari/.test(navigator.userAgent), +geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), + +$ : function (id) { + if (id) return document.getElementById(id); +}, + +push : function (arr, val) { + arr[arr.length] = val; +}, + +createElement : function (tag, attribs, styles, parent, nopad) { + var el = document.createElement(tag); + if (attribs) hs.extend(el, attribs); + if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); + if (styles) hs.setStyles(el, styles); + if (parent) parent.appendChild(el); + return el; +}, + +extend : function (el, attribs) { + for (var x in attribs) el[x] = attribs[x]; + return el; +}, + +setStyles : function (el, styles) { + for (var x in styles) { + if (hs.ieLt9 && x == 'opacity') { if (styles[x] > 0.99) el.style.removeAttribute('filter'); - else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; - } - else el.style[x] = styles[x]; - } + else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; + } + else el.style[x] = styles[x]; + } }, animate: function(el, prop, opt) { - var start, - end, - unit; - if (typeof opt != 'object' || opt === null) { - var args = arguments; - opt = { - duration: args[2], - easing: args[3], - complete: args[4] - }; - } - if (typeof opt.duration != 'number') opt.duration = 250; - opt.easing = Math[opt.easing] || Math.easeInQuad; + var start, + end, + unit; + if (typeof opt != 'object' || opt === null) { + var args = arguments; + opt = { + duration: args[2], + easing: args[3], + complete: args[4] + }; + } + if (typeof opt.duration != 'number') opt.duration = 250; + opt.easing = Math[opt.easing] || Math.easeInQuad; opt.curAnim = hs.extend({}, prop); - for (var name in prop) { - var e = new hs.fx(el, opt , name ); - - start = parseFloat(hs.css(el, name)) || 0; - end = parseFloat(prop[name]); + for (var name in prop) { + var e = new hs.fx(el, opt , name ); + + start = parseFloat(hs.css(el, name)) || 0; + end = parseFloat(prop[name]); unit = name != 'opacity' ? 'px' : ''; - - e.custom( start, end, unit ); - } + + e.custom( start, end, unit ); + } }, -css: function(el, prop) { +css: function(el, prop) { if (el.style[prop]) { - return el.style[prop]; + return el.style[prop]; } else if (document.defaultView) { - return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); - + return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); + } else { - if (prop == 'opacity') prop = 'filter'; - var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; - if (prop == 'filter') - val = val.replace(/alpha\(opacity=([0-9]+)\)/, - function (a, b) { return b / 100 }); - return val === '' ? 1 : val; - } -}, - -getPageSize : function () { - var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' - ? d.documentElement : d.body, - ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); - - var width = ieLt9 ? iebody.clientWidth : - (d.documentElement.clientWidth || self.innerWidth), - height = ieLt9 ? iebody.clientHeight : self.innerHeight; - hs.page = { - width: width, - height: height, - scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, - scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset - }; - return hs.page; -}, - -getPosition : function(el) { - var p = { x: el.offsetLeft, y: el.offsetTop }; - while (el.offsetParent) { - el = el.offsetParent; - p.x += el.offsetLeft; - p.y += el.offsetTop; - if (el != document.body && el != document.documentElement) { - p.x -= el.scrollLeft; - p.y -= el.scrollTop; - } - } - return p; -}, - -expand : function(a, params, custom, type) { - if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); - if (typeof a.getParams == 'function') return params; - if (type == 'html') { - for (var i = 0; i < hs.sleeping.length; i++) { - if (hs.sleeping[i] && hs.sleeping[i].a == a) { - hs.sleeping[i].awake(); - hs.sleeping[i] = null; - return false; - } - } - hs.hasHtmlExpanders = true; - } - try { - new hs.Expander(a, params, custom, type); - return false; - } catch (e) { return true; } -}, - -htmlExpand : function(a, params, custom) { - return hs.expand(a, params, custom, 'html'); -}, - -getSelfRendered : function() { - return hs.createElement('div', { - className: 'highslide-html-content', - innerHTML: hs.replaceLang(hs.skin.contentWrapper) - }); -}, -getElementByClass : function (el, tagName, className) { - var els = el.getElementsByTagName(tagName); - for (var i = 0; i < els.length; i++) { - if ((new RegExp(className)).test(els[i].className)) { - return els[i]; - } - } - return null; -}, -replaceLang : function(s) { - s = s.replace(/\s/g, ' '); - var re = /{hs\.lang\.([^}]+)\}/g, - matches = s.match(re), - lang; - if (matches) for (var i = 0; i < matches.length; i++) { - lang = matches[i].replace(re, "$1"); - if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]); - } - return s; -}, - - -getCacheBinding : function (a) { - for (var i = 0; i < hs.cacheBindings.length; i++) { - if (hs.cacheBindings[i][0] == a) { - var c = hs.cacheBindings[i][1]; - hs.cacheBindings[i][1] = c.cloneNode(1); - return c; - } - } - return null; -}, - -preloadAjax : function (e) { - var arr = hs.getAnchors(); - for (var i = 0; i < arr.htmls.length; i++) { - var a = arr.htmls[i]; - if (hs.getParam(a, 'objectType') == 'ajax' && hs.getParam(a, 'cacheAjax')) - hs.push(hs.preloadTheseAjax, a); - } - - hs.preloadAjaxElement(0); -}, - -preloadAjaxElement : function (i) { - if (!hs.preloadTheseAjax[i]) return; - var a = hs.preloadTheseAjax[i]; - var cache = hs.getNode(hs.getParam(a, 'contentId')); - if (!cache) cache = hs.getSelfRendered(); - var ajax = new hs.Ajax(a, cache, 1); - ajax.onError = function () { }; - ajax.onLoad = function () { - hs.push(hs.cacheBindings, [a, cache]); - hs.preloadAjaxElement(i + 1); - }; - ajax.run(); -}, - -focusTopmost : function() { - var topZ = 0, - topmostKey = -1, - expanders = hs.expanders, - exp, - zIndex; - for (var i = 0; i < expanders.length; i++) { - exp = expanders[i]; - if (exp) { - zIndex = exp.wrapper.style.zIndex; - if (zIndex && zIndex > topZ) { - topZ = zIndex; - topmostKey = i; - } - } - } - if (topmostKey == -1) hs.focusKey = -1; - else expanders[topmostKey].focus(); -}, - -getParam : function (a, param) { - a.getParams = a.onclick; - var p = a.getParams ? a.getParams() : null; - a.getParams = null; - - return (p && typeof p[param] != 'undefined') ? p[param] : + if (prop == 'opacity') prop = 'filter'; + var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; + if (prop == 'filter') + val = val.replace(/alpha\(opacity=([0-9]+)\)/, + function (a, b) { return b / 100 }); + return val === '' ? 1 : val; + } +}, + +getPageSize : function () { + var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' + ? d.documentElement : d.body, + ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); + + var width = ieLt9 ? iebody.clientWidth : + (d.documentElement.clientWidth || self.innerWidth), + height = ieLt9 ? iebody.clientHeight : self.innerHeight; + hs.page = { + width: width, + height: height, + scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, + scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset + }; + return hs.page; +}, + +getPosition : function(el) { + var p = { x: el.offsetLeft, y: el.offsetTop }; + while (el.offsetParent) { + el = el.offsetParent; + p.x += el.offsetLeft; + p.y += el.offsetTop; + if (el != document.body && el != document.documentElement) { + p.x -= el.scrollLeft; + p.y -= el.scrollTop; + } + } + return p; +}, + +expand : function(a, params, custom, type) { + if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); + if (typeof a.getParams == 'function') return params; + if (type == 'html') { + for (var i = 0; i < hs.sleeping.length; i++) { + if (hs.sleeping[i] && hs.sleeping[i].a == a) { + hs.sleeping[i].awake(); + hs.sleeping[i] = null; + return false; + } + } + hs.hasHtmlExpanders = true; + } + try { + new hs.Expander(a, params, custom, type); + return false; + } catch (e) { return true; } +}, + +htmlExpand : function(a, params, custom) { + return hs.expand(a, params, custom, 'html'); +}, + +getSelfRendered : function() { + return hs.createElement('div', { + className: 'highslide-html-content', + innerHTML: hs.replaceLang(hs.skin.contentWrapper) + }); +}, +getElementByClass : function (el, tagName, className) { + var els = el.getElementsByTagName(tagName); + for (var i = 0; i < els.length; i++) { + if ((new RegExp(className)).test(els[i].className)) { + return els[i]; + } + } + return null; +}, +replaceLang : function(s) { + s = s.replace(/\s/g, ' '); + var re = /{hs\.lang\.([^}]+)\}/g, + matches = s.match(re), + lang; + if (matches) for (var i = 0; i < matches.length; i++) { + lang = matches[i].replace(re, "$1"); + if (typeof hs.lang[lang] != 'undefined') s = s.replace(matches[i], hs.lang[lang]); + } + return s; +}, + + +getCacheBinding : function (a) { + for (var i = 0; i < hs.cacheBindings.length; i++) { + if (hs.cacheBindings[i][0] == a) { + var c = hs.cacheBindings[i][1]; + hs.cacheBindings[i][1] = c.cloneNode(1); + return c; + } + } + return null; +}, + +preloadAjax : function (e) { + var arr = hs.getAnchors(); + for (var i = 0; i < arr.htmls.length; i++) { + var a = arr.htmls[i]; + if (hs.getParam(a, 'objectType') == 'ajax' && hs.getParam(a, 'cacheAjax')) + hs.push(hs.preloadTheseAjax, a); + } + + hs.preloadAjaxElement(0); +}, + +preloadAjaxElement : function (i) { + if (!hs.preloadTheseAjax[i]) return; + var a = hs.preloadTheseAjax[i]; + var cache = hs.getNode(hs.getParam(a, 'contentId')); + if (!cache) cache = hs.getSelfRendered(); + var ajax = new hs.Ajax(a, cache, 1); + ajax.onError = function () { }; + ajax.onLoad = function () { + hs.push(hs.cacheBindings, [a, cache]); + hs.preloadAjaxElement(i + 1); + }; + ajax.run(); +}, + +focusTopmost : function() { + var topZ = 0, + topmostKey = -1, + expanders = hs.expanders, + exp, + zIndex; + for (var i = 0; i < expanders.length; i++) { + exp = expanders[i]; + if (exp) { + zIndex = exp.wrapper.style.zIndex; + if (zIndex && zIndex > topZ) { + topZ = zIndex; + topmostKey = i; + } + } + } + if (topmostKey == -1) hs.focusKey = -1; + else expanders[topmostKey].focus(); +}, + +getParam : function (a, param) { + a.getParams = a.onclick; + var p = a.getParams ? a.getParams() : null; + a.getParams = null; + + return (p && typeof p[param] != 'undefined') ? p[param] : (typeof hs[param] != 'undefined' ? hs[param] : null); -}, - -getSrc : function (a) { - var src = hs.getParam(a, 'src'); - if (src) return src; - return a.href; -}, - -getNode : function (id) { - var node = hs.$(id), clone = hs.clones[id], a = {}; - if (!node && !clone) return null; - if (!clone) { - clone = node.cloneNode(true); - clone.id = ''; - hs.clones[id] = clone; - return node; - } else { - return clone.cloneNode(true); - } -}, - +}, + +getSrc : function (a) { + var src = hs.getParam(a, 'src'); + if (src) return src; + return a.href; +}, + +getNode : function (id) { + var node = hs.$(id), clone = hs.clones[id], a = {}; + if (!node && !clone) return null; + if (!clone) { + clone = node.cloneNode(true); + clone.id = ''; + hs.clones[id] = clone; + return node; + } else { + return clone.cloneNode(true); + } +}, + discardElement : function(d) { - if (d) hs.garbageBin.appendChild(d); - hs.garbageBin.innerHTML = ''; -}, -transit : function (adj, exp) { - var last = exp || hs.getExpander(); - exp = last; - if (hs.upcoming) return false; - else hs.last = last; - hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - try { - hs.upcoming = adj; - adj.onclick(); - } catch (e){ - hs.last = hs.upcoming = null; - } - try { - exp.close(); - } catch (e) {} - return false; -}, - -previousOrNext : function (el, op) { - var exp = hs.getExpander(el); - if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); - else return false; -}, - -previous : function (el) { - return hs.previousOrNext(el, -1); -}, - -next : function (el) { - return hs.previousOrNext(el, 1); -}, - -keyHandler : function(e) { - if (!e) e = window.event; - if (!e.target) e.target = e.srcElement; // ie - if (typeof e.target.form != 'undefined') return true; // form element has focus - var exp = hs.getExpander(); - - var op = null; - switch (e.keyCode) { - case 70: // f - if (exp) exp.doFullExpand(); - return true; - case 32: // Space - case 34: // Page Down - case 39: // Arrow right - case 40: // Arrow down - op = 1; - break; - case 8: // Backspace - case 33: // Page Up - case 37: // Arrow left - case 38: // Arrow up - op = -1; - break; - case 27: // Escape - case 13: // Enter - op = 0; - } - if (op !== null) {hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - if (!hs.enableKeyListener) return true; - - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - if (exp) { - if (op == 0) { - exp.close(); - } else { - hs.previousOrNext(exp.key, op); - } - return false; - } - } - return true; -}, - - -registerOverlay : function (overlay) { - hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); -}, - - -getWrapperKey : function (element, expOnly) { - var el, re = /^highslide-wrapper-([0-9]+)$/; - // 1. look in open expanders - el = element; - while (el.parentNode) { - if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); - el = el.parentNode; - } - // 2. look in thumbnail - if (!expOnly) { - el = element; - while (el.parentNode) { - if (el.tagName && hs.isHsAnchor(el)) { - for (var key = 0; key < hs.expanders.length; key++) { - var exp = hs.expanders[key]; - if (exp && exp.a == el) return key; - } - } - el = el.parentNode; - } - } - return null; -}, - -getExpander : function (el, expOnly) { - if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; - if (typeof el == 'number') return hs.expanders[el] || null; - if (typeof el == 'string') el = hs.$(el); - return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; -}, - -isHsAnchor : function (a) { - return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); -}, - -reOrder : function () { - for (var i = 0; i < hs.expanders.length; i++) - if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); -}, - -mouseClickHandler : function(e) -{ - if (!e) e = window.event; - if (e.button > 1) return true; - if (!e.target) e.target = e.srcElement; - - var el = e.target; - while (el.parentNode - && !(/highslide-(image|move|html|resize)/.test(el.className))) - { - el = el.parentNode; - } - var exp = hs.getExpander(el); - if (exp && (exp.isClosing || !exp.isExpanded)) return true; - - if (exp && e.type == 'mousedown') { - if (e.target.form) return true; - var match = el.className.match(/highslide-(image|move|resize)/); - if (match) { - hs.dragArgs = { - exp: exp , - type: match[1], - left: exp.x.pos, - width: exp.x.size, - top: exp.y.pos, - height: exp.y.size, - clickX: e.clientX, - clickY: e.clientY - }; - - - hs.addEventListener(document, 'mousemove', hs.dragHandler); - if (e.preventDefault) e.preventDefault(); // FF - - if (/highslide-(image|html)-blur/.test(exp.content.className)) { - exp.focus(); - hs.hasFocused = true; - } - return false; - } - else if (/highslide-html/.test(el.className) && hs.focusKey != exp.key) { - exp.focus(); - exp.doShowHide('hidden'); - } - } else if (e.type == 'mouseup') { - - hs.removeEventListener(document, 'mousemove', hs.dragHandler); - - if (hs.dragArgs) { - if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') - hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; - var hasDragged = hs.dragArgs.hasDragged; - - if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { - exp.close(); - } - else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { - hs.dragArgs.exp.doShowHide('hidden'); - } - - if (hs.dragArgs.exp.releaseMask) - hs.dragArgs.exp.releaseMask.style.display = 'none'; - hs.hasFocused = false; - hs.dragArgs = null; - - } else if (/highslide-image-blur/.test(el.className)) { - el.style.cursor = hs.styleRestoreCursor; - } - } - return false; -}, - -dragHandler : function(e) -{ - if (!hs.dragArgs) return true; - if (!e) e = window.event; - var a = hs.dragArgs, exp = a.exp; - if (exp.iframe) { - if (!exp.releaseMask) exp.releaseMask = hs.createElement('div', null, - { position: 'absolute', width: exp.x.size+'px', height: exp.y.size+'px', - left: exp.x.cb+'px', top: exp.y.cb+'px', zIndex: 4, background: (hs.ieLt9 ? 'white' : 'none'), - opacity: 0.01 }, - exp.wrapper, true); - if (exp.releaseMask.style.display == 'none') - exp.releaseMask.style.display = ''; - } - - a.dX = e.clientX - a.clickX; - a.dY = e.clientY - a.clickY; - - var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); - if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) - || (distance > (hs.dragSensitivity || 5)); - - if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { - - if (a.type == 'resize') exp.resize(a); - else { - exp.moveTo(a.left + a.dX, a.top + a.dY); - if (a.type == 'image') exp.content.style.cursor = 'move'; - } - } - return false; -}, - -wrapperMouseHandler : function (e) { - try { - if (!e) e = window.event; - var over = /mouseover/i.test(e.type); - if (!e.target) e.target = e.srcElement; // ie - if (!e.relatedTarget) e.relatedTarget = - over ? e.fromElement : e.toElement; // ie - var exp = hs.getExpander(e.target); - if (!exp.isExpanded) return; - if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp - || hs.dragArgs) return; - for (var i = 0; i < exp.overlays.length; i++) (function() { - var o = hs.$('hsId'+ exp.overlays[i]); - if (o && o.hideOnMouseOut) { - if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); - hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); - } - })(); - } catch (e) {} -}, -addEventListener : function (el, event, func) { - if (el == document && event == 'ready') { - hs.push(hs.onReady, func); - } + if (d) hs.garbageBin.appendChild(d); + hs.garbageBin.innerHTML = ''; +}, +transit : function (adj, exp) { + var last = exp || hs.getExpander(); + exp = last; + if (hs.upcoming) return false; + else hs.last = last; + hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + try { + hs.upcoming = adj; + adj.onclick(); + } catch (e){ + hs.last = hs.upcoming = null; + } + try { + exp.close(); + } catch (e) {} + return false; +}, + +previousOrNext : function (el, op) { + var exp = hs.getExpander(el); + if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); + else return false; +}, + +previous : function (el) { + return hs.previousOrNext(el, -1); +}, + +next : function (el) { + return hs.previousOrNext(el, 1); +}, + +keyHandler : function(e) { + if (!e) e = window.event; + if (!e.target) e.target = e.srcElement; // ie + if (typeof e.target.form != 'undefined') return true; // form element has focus + var exp = hs.getExpander(); + + var op = null; + switch (e.keyCode) { + case 70: // f + if (exp) exp.doFullExpand(); + return true; + case 32: // Space + case 34: // Page Down + case 39: // Arrow right + case 40: // Arrow down + op = 1; + break; + case 8: // Backspace + case 33: // Page Up + case 37: // Arrow left + case 38: // Arrow up + op = -1; + break; + case 27: // Escape + case 13: // Enter + op = 0; + } + if (op !== null) {hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + if (!hs.enableKeyListener) return true; + + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + if (exp) { + if (op == 0) { + exp.close(); + } else { + hs.previousOrNext(exp.key, op); + } + return false; + } + } + return true; +}, + + +registerOverlay : function (overlay) { + hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); +}, + + +getWrapperKey : function (element, expOnly) { + var el, re = /^highslide-wrapper-([0-9]+)$/; + // 1. look in open expanders + el = element; + while (el.parentNode) { + if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); + el = el.parentNode; + } + // 2. look in thumbnail + if (!expOnly) { + el = element; + while (el.parentNode) { + if (el.tagName && hs.isHsAnchor(el)) { + for (var key = 0; key < hs.expanders.length; key++) { + var exp = hs.expanders[key]; + if (exp && exp.a == el) return key; + } + } + el = el.parentNode; + } + } + return null; +}, + +getExpander : function (el, expOnly) { + if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; + if (typeof el == 'number') return hs.expanders[el] || null; + if (typeof el == 'string') el = hs.$(el); + return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; +}, + +isHsAnchor : function (a) { + return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); +}, + +reOrder : function () { + for (var i = 0; i < hs.expanders.length; i++) + if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); +}, + +mouseClickHandler : function(e) +{ + if (!e) e = window.event; + if (e.button > 1) return true; + if (!e.target) e.target = e.srcElement; + + var el = e.target; + while (el.parentNode + && !(/highslide-(image|move|html|resize)/.test(el.className))) + { + el = el.parentNode; + } + var exp = hs.getExpander(el); + if (exp && (exp.isClosing || !exp.isExpanded)) return true; + + if (exp && e.type == 'mousedown') { + if (e.target.form) return true; + var match = el.className.match(/highslide-(image|move|resize)/); + if (match) { + hs.dragArgs = { + exp: exp , + type: match[1], + left: exp.x.pos, + width: exp.x.size, + top: exp.y.pos, + height: exp.y.size, + clickX: e.clientX, + clickY: e.clientY + }; + + + hs.addEventListener(document, 'mousemove', hs.dragHandler); + if (e.preventDefault) e.preventDefault(); // FF + + if (/highslide-(image|html)-blur/.test(exp.content.className)) { + exp.focus(); + hs.hasFocused = true; + } + return false; + } + else if (/highslide-html/.test(el.className) && hs.focusKey != exp.key) { + exp.focus(); + exp.doShowHide('hidden'); + } + } else if (e.type == 'mouseup') { + + hs.removeEventListener(document, 'mousemove', hs.dragHandler); + + if (hs.dragArgs) { + if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') + hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; + var hasDragged = hs.dragArgs.hasDragged; + + if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { + exp.close(); + } + else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { + hs.dragArgs.exp.doShowHide('hidden'); + } + + if (hs.dragArgs.exp.releaseMask) + hs.dragArgs.exp.releaseMask.style.display = 'none'; + hs.hasFocused = false; + hs.dragArgs = null; + + } else if (/highslide-image-blur/.test(el.className)) { + el.style.cursor = hs.styleRestoreCursor; + } + } + return false; +}, + +dragHandler : function(e) +{ + if (!hs.dragArgs) return true; + if (!e) e = window.event; + var a = hs.dragArgs, exp = a.exp; + if (exp.iframe) { + if (!exp.releaseMask) exp.releaseMask = hs.createElement('div', null, + { position: 'absolute', width: exp.x.size+'px', height: exp.y.size+'px', + left: exp.x.cb+'px', top: exp.y.cb+'px', zIndex: 4, background: (hs.ieLt9 ? 'white' : 'none'), + opacity: 0.01 }, + exp.wrapper, true); + if (exp.releaseMask.style.display == 'none') + exp.releaseMask.style.display = ''; + } + + a.dX = e.clientX - a.clickX; + a.dY = e.clientY - a.clickY; + + var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); + if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) + || (distance > (hs.dragSensitivity || 5)); + + if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { + + if (a.type == 'resize') exp.resize(a); + else { + exp.moveTo(a.left + a.dX, a.top + a.dY); + if (a.type == 'image') exp.content.style.cursor = 'move'; + } + } + return false; +}, + +wrapperMouseHandler : function (e) { try { - el.addEventListener(event, func, false); - } catch (e) { - try { - el.detachEvent('on'+ event, func); - el.attachEvent('on'+ event, func); - } catch (e) { - el['on'+ event] = func; - } - } -}, - -removeEventListener : function (el, event, func) { - try { - el.removeEventListener(event, func, false); - } catch (e) { - try { - el.detachEvent('on'+ event, func); - } catch (e) { - el['on'+ event] = null; - } - } -}, - -preloadFullImage : function (i) { - if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { - var img = document.createElement('img'); - img.onload = function() { + if (!e) e = window.event; + var over = /mouseover/i.test(e.type); + if (!e.target) e.target = e.srcElement; // ie + if (!e.relatedTarget) e.relatedTarget = + over ? e.fromElement : e.toElement; // ie + var exp = hs.getExpander(e.target); + if (!exp.isExpanded) return; + if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp + || hs.dragArgs) return; + for (var i = 0; i < exp.overlays.length; i++) (function() { + var o = hs.$('hsId'+ exp.overlays[i]); + if (o && o.hideOnMouseOut) { + if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); + hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); + } + })(); + } catch (e) {} +}, +addEventListener : function (el, event, func) { + if (el == document && event == 'ready') { + hs.push(hs.onReady, func); + } + try { + el.addEventListener(event, func, false); + } catch (e) { + try { + el.detachEvent('on'+ event, func); + el.attachEvent('on'+ event, func); + } catch (e) { + el['on'+ event] = func; + } + } +}, + +removeEventListener : function (el, event, func) { + try { + el.removeEventListener(event, func, false); + } catch (e) { + try { + el.detachEvent('on'+ event, func); + } catch (e) { + el['on'+ event] = null; + } + } +}, + +preloadFullImage : function (i) { + if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { + var img = document.createElement('img'); + img.onload = function() { img = null; - hs.preloadFullImage(i + 1); - }; - img.src = hs.preloadTheseImages[i]; - } -}, -preloadImages : function (number) { - if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; - - var arr = hs.getAnchors(); - for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { - hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); - } - - // preload outlines - if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); - else - - hs.preloadFullImage(0); - - // preload cursor - if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); -}, - - -init : function () { - if (!hs.container) { - - hs.ieLt7 = hs.ie && hs.uaVersion < 7; - hs.ieLt9 = hs.ie && hs.uaVersion < 9; - - hs.getPageSize(); + hs.preloadFullImage(i + 1); + }; + img.src = hs.preloadTheseImages[i]; + } +}, +preloadImages : function (number) { + if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; + + var arr = hs.getAnchors(); + for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { + hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); + } + + // preload outlines + if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); + else + + hs.preloadFullImage(0); + + // preload cursor + if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); +}, + + +init : function () { + if (!hs.container) { + + hs.ieLt7 = hs.ie && hs.uaVersion < 7; + hs.ieLt9 = hs.ie && hs.uaVersion < 9; + + hs.getPageSize(); hs.ie6SSL = hs.ieLt7 && location.protocol == 'https:'; - for (var x in hs.langDefaults) { - if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; - else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') - hs.lang[x] = hs.langDefaults[x]; - } - - hs.container = hs.createElement('div', { - className: 'highslide-container' - }, { - position: 'absolute', - left: 0, - top: 0, - width: '100%', - zIndex: hs.zIndexCounter, - direction: 'ltr' - }, - document.body, - true - ); - hs.loading = hs.createElement('a', { - className: 'highslide-loading', - title: hs.lang.loadingTitle, - innerHTML: hs.lang.loadingText, - href: 'javascript:;' - }, { - position: 'absolute', - top: '-9999px', - opacity: hs.loadingOpacity, - zIndex: 1 - }, hs.container - ); - hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); - hs.clearing = hs.createElement('div', null, - { clear: 'both', paddingTop: '1px' }, null, true); - - // http://www.robertpenner.com/easing/ - Math.linearTween = function (t, b, c, d) { - return c*t/d + b; - }; - Math.easeInQuad = function (t, b, c, d) { - return c*(t/=d)*t + b; - }; - - hs.hideSelects = hs.ieLt7; - hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' - || (hs.ieLt7 && hs.uaVersion < 5.5)); - } -}, -ready : function() { - if (hs.isReady) return; - hs.isReady = true; - for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); -}, - -updateAnchors : function() { - var el, els, all = [], images = [], htmls = [],groups = {}, re; - + for (var x in hs.langDefaults) { + if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; + else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') + hs.lang[x] = hs.langDefaults[x]; + } + + hs.container = hs.createElement('div', { + className: 'highslide-container' + }, { + position: 'absolute', + left: 0, + top: 0, + width: '100%', + zIndex: hs.zIndexCounter, + direction: 'ltr' + }, + document.body, + true + ); + hs.loading = hs.createElement('a', { + className: 'highslide-loading', + title: hs.lang.loadingTitle, + innerHTML: hs.lang.loadingText, + href: 'javascript:;' + }, { + position: 'absolute', + top: '-9999px', + opacity: hs.loadingOpacity, + zIndex: 1 + }, hs.container + ); + hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); + hs.clearing = hs.createElement('div', null, + { clear: 'both', paddingTop: '1px' }, null, true); + + // http://www.robertpenner.com/easing/ + Math.linearTween = function (t, b, c, d) { + return c*t/d + b; + }; + Math.easeInQuad = function (t, b, c, d) { + return c*(t/=d)*t + b; + }; + + hs.hideSelects = hs.ieLt7; + hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' + || (hs.ieLt7 && hs.uaVersion < 5.5)); + } +}, +ready : function() { + if (hs.isReady) return; + hs.isReady = true; + for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); +}, + +updateAnchors : function() { + var el, els, all = [], images = [], htmls = [],groups = {}, re; + for (var i = 0; i < hs.openerTagNames.length; i++) { - els = document.getElementsByTagName(hs.openerTagNames[i]); + els = document.getElementsByTagName(hs.openerTagNames[i]); for (var j = 0; j < els.length; j++) { - el = els[j]; - re = hs.isHsAnchor(el); - if (re) { + el = els[j]; + re = hs.isHsAnchor(el); + if (re) { hs.push(all, el); if (re[0] == 'hs.expand') hs.push(images, el); else if (re[0] == 'hs.htmlExpand') hs.push(htmls, el); - var g = hs.getParam(el, 'slideshowGroup') || 'none'; - if (!groups[g]) groups[g] = []; - hs.push(groups[g], el); - } - } - } - hs.anchors = { all: all, groups: groups, images: images, htmls: htmls }; - return hs.anchors; - -}, - -getAnchors : function() { - return hs.anchors || hs.updateAnchors(); -}, - - -close : function(el) { - var exp = hs.getExpander(el); - if (exp) exp.close(); - return false; -} + var g = hs.getParam(el, 'slideshowGroup') || 'none'; + if (!groups[g]) groups[g] = []; + hs.push(groups[g], el); + } + } + } + hs.anchors = { all: all, groups: groups, images: images, htmls: htmls }; + return hs.anchors; + +}, + +getAnchors : function() { + return hs.anchors || hs.updateAnchors(); +}, + + +close : function(el) { + var exp = hs.getExpander(el); + if (exp) exp.close(); + return false; +} }; // end hs object -hs.fx = function( elem, options, prop ){ - this.options = options; - this.elem = elem; - this.prop = prop; - - if (!options.orig) options.orig = {}; -}; +hs.fx = function( elem, options, prop ){ + this.options = options; + this.elem = elem; + this.prop = prop; + + if (!options.orig) options.orig = {}; +}; hs.fx.prototype = { update: function(){ - (hs.fx.step[this.prop] || hs.fx.step._default)(this); - - if (this.options.step) - this.options.step.call(this.elem, this.now, this); - + (hs.fx.step[this.prop] || hs.fx.step._default)(this); + + if (this.options.step) + this.options.step.call(this.elem, this.now, this); + }, - custom: function(from, to, unit){ - this.startTime = (new Date()).getTime(); - this.start = from; - this.end = to; - this.unit = unit;// || this.unit || "px"; - this.now = this.start; - this.pos = this.state = 0; - - var self = this; - function t(gotoEnd){ - return self.step(gotoEnd); - } - - t.elem = this.elem; - - if ( t() && hs.timers.push(t) == 1 ) { - hs.timerId = setInterval(function(){ - var timers = hs.timers; - - for ( var i = 0; i < timers.length; i++ ) - if ( !timers[i]() ) - timers.splice(i--, 1); - - if ( !timers.length ) { - clearInterval(hs.timerId); - } - }, 13); - } + custom: function(from, to, unit){ + this.startTime = (new Date()).getTime(); + this.start = from; + this.end = to; + this.unit = unit;// || this.unit || "px"; + this.now = this.start; + this.pos = this.state = 0; + + var self = this; + function t(gotoEnd){ + return self.step(gotoEnd); + } + + t.elem = this.elem; + + if ( t() && hs.timers.push(t) == 1 ) { + hs.timerId = setInterval(function(){ + var timers = hs.timers; + + for ( var i = 0; i < timers.length; i++ ) + if ( !timers[i]() ) + timers.splice(i--, 1); + + if ( !timers.length ) { + clearInterval(hs.timerId); + } + }, 13); + } }, - step: function(gotoEnd){ - var t = (new Date()).getTime(); - if ( gotoEnd || t >= this.options.duration + this.startTime ) { - this.now = this.end; - this.pos = this.state = 1; - this.update(); - - this.options.curAnim[ this.prop ] = true; - - var done = true; - for ( var i in this.options.curAnim ) - if ( this.options.curAnim[i] !== true ) - done = false; - + step: function(gotoEnd){ + var t = (new Date()).getTime(); + if ( gotoEnd || t >= this.options.duration + this.startTime ) { + this.now = this.end; + this.pos = this.state = 1; + this.update(); + + this.options.curAnim[ this.prop ] = true; + + var done = true; + for ( var i in this.options.curAnim ) + if ( this.options.curAnim[i] !== true ) + done = false; + if ( done ) { - if (this.options.complete) this.options.complete.call(this.elem); - } - return false; - } else { - var n = t - this.startTime; + if (this.options.complete) this.options.complete.call(this.elem); + } + return false; + } else { + var n = t - this.startTime; this.state = n / this.options.duration; - this.pos = this.options.easing(n, 0, 1, this.options.duration); + this.pos = this.options.easing(n, 0, 1, this.options.duration); this.now = this.start + ((this.end - this.start) * this.pos); - this.update(); - } - return true; - } - -}; - -hs.extend( hs.fx, { - step: { - - opacity: function(fx){ - hs.setStyles(fx.elem, { opacity: fx.now }); - }, - - _default: function(fx){ + this.update(); + } + return true; + } + +}; + +hs.extend( hs.fx, { + step: { + + opacity: function(fx){ + hs.setStyles(fx.elem, { opacity: fx.now }); + }, + + _default: function(fx){ try { - if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) - fx.elem.style[ fx.prop ] = fx.now + fx.unit; - else - fx.elem[ fx.prop ] = fx.now; - } catch (e) {} - } - } -}); - -hs.Outline = function (outlineType, onLoad) { - this.onLoad = onLoad; - this.outlineType = outlineType; - var v = hs.uaVersion, tr; - - this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; - if (!outlineType) { - if (onLoad) onLoad(); - return; - } - - hs.init(); - this.table = hs.createElement( - 'table', { - cellSpacing: 0 - }, { - visibility: 'hidden', - position: 'absolute', - borderCollapse: 'collapse', - width: 0 - }, - hs.container, - true - ); - var tbody = hs.createElement('tbody', null, null, this.table, 1); - - this.td = []; - for (var i = 0; i <= 8; i++) { - if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); - this.td[i] = hs.createElement('td', null, null, tr, true); - var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; - hs.setStyles(this.td[i], style); - } - this.td[4].className = outlineType +' highslide-outline'; - - this.preloadGraphic(); -}; - -hs.Outline.prototype = { -preloadGraphic : function () { - var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; - - var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; - this.graphic = hs.createElement('img', null, { position: 'absolute', - top: '-9999px' }, appendTo, true); // for onload trigger - - var pThis = this; - this.graphic.onload = function() { pThis.onGraphicLoad(); }; - - this.graphic.src = src; -}, - -onGraphicLoad : function () { - var o = this.offset = this.graphic.width / 4, - pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], - dim = { height: (2*o) +'px', width: (2*o) +'px' }; - for (var i = 0; i <= 8; i++) { - if (pos[i]) { - if (this.hasAlphaImageLoader) { - var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; - var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); - hs.createElement ('div', null, { - filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", - position: 'absolute', - width: w, - height: this.graphic.height +'px', - left: (pos[i][0]*o)+'px', - top: (pos[i][1]*o)+'px' - }, - div, - true); - } else { - hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); - } - - if (window.opera && (i == 3 || i ==5)) - hs.createElement('div', null, dim, this.td[i], true); - - hs.setStyles (this.td[i], dim); - } - } - this.graphic = null; - if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); - hs.pendingOutlines[this.outlineType] = this; - if (this.onLoad) this.onLoad(); -}, - -setPosition : function (pos, offset, vis, dur, easing) { - var exp = this.exp, - stl = exp.wrapper.style, - offset = offset || 0, - pos = pos || { - x: exp.x.pos + offset, - y: exp.y.pos + offset, - w: exp.x.get('wsize') - 2 * offset, - h: exp.y.get('wsize') - 2 * offset - }; - if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) - ? 'visible' : 'hidden'; - hs.setStyles(this.table, { - left: (pos.x - this.offset) +'px', - top: (pos.y - this.offset) +'px', - width: (pos.w + 2 * this.offset) +'px' - }); - - pos.w -= 2 * this.offset; - pos.h -= 2 * this.offset; - hs.setStyles (this.td[4], { - width: pos.w >= 0 ? pos.w +'px' : 0, - height: pos.h >= 0 ? pos.h +'px' : 0 - }); - if (this.hasAlphaImageLoader) this.td[3].style.height - = this.td[5].style.height = this.td[4].style.height; - -}, - -destroy : function(hide) { - if (hide) this.table.style.visibility = 'hidden'; - else hs.discardElement(this.table); -} -}; - -hs.Dimension = function(exp, dim) { - this.exp = exp; - this.dim = dim; + if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) + fx.elem.style[ fx.prop ] = fx.now + fx.unit; + else + fx.elem[ fx.prop ] = fx.now; + } catch (e) {} + } + } +}); + +hs.Outline = function (outlineType, onLoad) { + this.onLoad = onLoad; + this.outlineType = outlineType; + var v = hs.uaVersion, tr; + + this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; + if (!outlineType) { + if (onLoad) onLoad(); + return; + } + + hs.init(); + this.table = hs.createElement( + 'table', { + cellSpacing: 0 + }, { + visibility: 'hidden', + position: 'absolute', + borderCollapse: 'collapse', + width: 0 + }, + hs.container, + true + ); + var tbody = hs.createElement('tbody', null, null, this.table, 1); + + this.td = []; + for (var i = 0; i <= 8; i++) { + if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); + this.td[i] = hs.createElement('td', null, null, tr, true); + var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; + hs.setStyles(this.td[i], style); + } + this.td[4].className = outlineType +' highslide-outline'; + + this.preloadGraphic(); +}; + +hs.Outline.prototype = { +preloadGraphic : function () { + var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; + + var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; + this.graphic = hs.createElement('img', null, { position: 'absolute', + top: '-9999px' }, appendTo, true); // for onload trigger + + var pThis = this; + this.graphic.onload = function() { pThis.onGraphicLoad(); }; + + this.graphic.src = src; +}, + +onGraphicLoad : function () { + var o = this.offset = this.graphic.width / 4, + pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], + dim = { height: (2*o) +'px', width: (2*o) +'px' }; + for (var i = 0; i <= 8; i++) { + if (pos[i]) { + if (this.hasAlphaImageLoader) { + var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; + var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); + hs.createElement ('div', null, { + filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", + position: 'absolute', + width: w, + height: this.graphic.height +'px', + left: (pos[i][0]*o)+'px', + top: (pos[i][1]*o)+'px' + }, + div, + true); + } else { + hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); + } + + if (window.opera && (i == 3 || i ==5)) + hs.createElement('div', null, dim, this.td[i], true); + + hs.setStyles (this.td[i], dim); + } + } + this.graphic = null; + if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); + hs.pendingOutlines[this.outlineType] = this; + if (this.onLoad) this.onLoad(); +}, + +setPosition : function (pos, offset, vis, dur, easing) { + var exp = this.exp, + stl = exp.wrapper.style, + offset = offset || 0, + pos = pos || { + x: exp.x.pos + offset, + y: exp.y.pos + offset, + w: exp.x.get('wsize') - 2 * offset, + h: exp.y.get('wsize') - 2 * offset + }; + if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) + ? 'visible' : 'hidden'; + hs.setStyles(this.table, { + left: (pos.x - this.offset) +'px', + top: (pos.y - this.offset) +'px', + width: (pos.w + 2 * this.offset) +'px' + }); + + pos.w -= 2 * this.offset; + pos.h -= 2 * this.offset; + hs.setStyles (this.td[4], { + width: pos.w >= 0 ? pos.w +'px' : 0, + height: pos.h >= 0 ? pos.h +'px' : 0 + }); + if (this.hasAlphaImageLoader) this.td[3].style.height + = this.td[5].style.height = this.td[4].style.height; + +}, + +destroy : function(hide) { + if (hide) this.table.style.visibility = 'hidden'; + else hs.discardElement(this.table); +} +}; + +hs.Dimension = function(exp, dim) { + this.exp = exp; + this.dim = dim; this.ucwh = dim == 'x' ? 'Width' : 'Height'; this.wh = this.ucwh.toLowerCase(); this.uclt = dim == 'x' ? 'Left' : 'Top'; @@ -1035,1447 +1035,1447 @@ hs.Dimension = function(exp, dim) { this.ucrb = dim == 'x' ? 'Right' : 'Bottom'; this.rb = this.ucrb.toLowerCase(); this.p1 = this.p2 = 0; -}; -hs.Dimension.prototype = { -get : function(key) { - switch (key) { - case 'loadingPos': - return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; +}; +hs.Dimension.prototype = { +get : function(key) { + switch (key) { + case 'loadingPos': + return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; case 'wsize': - return this.size + 2 * this.cb + this.p1 + this.p2; + return this.size + 2 * this.cb + this.p1 + this.p2; case 'fitsize': - return this.clientSize - this.marginMin - this.marginMax; + return this.clientSize - this.marginMin - this.marginMax; case 'maxsize': - return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; + return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; case 'opos': - return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); + return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); case 'osize': - return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); + return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); case 'imgPad': - return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; - - } -}, -calcBorders: function() { - // correct for borders + return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; + + } +}, +calcBorders: function() { + // correct for borders this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2; - - this.marginMax = hs['margin'+ this.ucrb]; -}, -calcThumb: function() { - this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : + + this.marginMax = hs['margin'+ this.ucrb]; +}, +calcThumb: function() { + this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : this.exp.el['offset'+ this.ucwh]; this.tpos = this.exp.tpos[this.dim]; this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2; if (this.tpos == 0 || this.tpos == -1) { - this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; - }; -}, -calcExpanded: function() { - var exp = this.exp; - this.justify = 'auto'; - - - // size and position + this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; + }; +}, +calcExpanded: function() { + var exp = this.exp; + this.justify = 'auto'; + + + // size and position this.pos = this.tpos - this.cb + this.tb; - + if (this.maxHeight && this.dim == 'x') - exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); - - this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); - this.minSize = exp.allowSizeReduction ? - Math.min(exp['min'+ this.ucwh], this.full) :this.full; - if (exp.isImage && exp.useBox) { - this.size = exp[this.wh]; - this.imgSize = this.full; - } - if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; - this.marginMin = hs['margin'+ this.uclt]; - this.scroll = hs.page['scroll'+ this.uclt]; - this.clientSize = hs.page[this.wh]; -}, -setSize: function(i) { - var exp = this.exp; - if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { - this.imgSize = i; - this.size = Math.max(this.size, this.imgSize); - exp.content.style[this.lt] = this.get('imgPad')+'px'; - } else - this.size = i; - - exp.content.style[this.wh] = i +'px'; - exp.wrapper.style[this.wh] = this.get('wsize') +'px'; - if (exp.outline) exp.outline.setPosition(); - if (exp.releaseMask) exp.releaseMask.style[this.wh] = i +'px'; - if (this.dim == 'y' && exp.iDoc && exp.body.style.height != 'auto') try { + exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); + + this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); + this.minSize = exp.allowSizeReduction ? + Math.min(exp['min'+ this.ucwh], this.full) :this.full; + if (exp.isImage && exp.useBox) { + this.size = exp[this.wh]; + this.imgSize = this.full; + } + if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; + this.marginMin = hs['margin'+ this.uclt]; + this.scroll = hs.page['scroll'+ this.uclt]; + this.clientSize = hs.page[this.wh]; +}, +setSize: function(i) { + var exp = this.exp; + if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { + this.imgSize = i; + this.size = Math.max(this.size, this.imgSize); + exp.content.style[this.lt] = this.get('imgPad')+'px'; + } else + this.size = i; + + exp.content.style[this.wh] = i +'px'; + exp.wrapper.style[this.wh] = this.get('wsize') +'px'; + if (exp.outline) exp.outline.setPosition(); + if (exp.releaseMask) exp.releaseMask.style[this.wh] = i +'px'; + if (this.dim == 'y' && exp.iDoc && exp.body.style.height != 'auto') try { exp.iDoc.body.style.overflow = 'auto'; - } catch (e) {} - if (exp.isHtml) { - var d = exp.scrollerDiv; - if (this.sizeDiff === undefined) - this.sizeDiff = exp.innerContent['offset'+ this.ucwh] - d['offset'+ this.ucwh]; - d.style[this.wh] = (this.size - this.sizeDiff) +'px'; - + } catch (e) {} + if (exp.isHtml) { + var d = exp.scrollerDiv; + if (this.sizeDiff === undefined) + this.sizeDiff = exp.innerContent['offset'+ this.ucwh] - d['offset'+ this.ucwh]; + d.style[this.wh] = (this.size - this.sizeDiff) +'px'; + if (this.dim == 'x') exp.mediumContent.style.width = 'auto'; - if (exp.body) exp.body.style[this.wh] = 'auto'; - } - if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); -}, -setPos: function(i) { - this.pos = i; - this.exp.wrapper.style[this.lt] = i +'px'; - - if (this.exp.outline) this.exp.outline.setPosition(); - -} -}; - -hs.Expander = function(a, params, custom, contentType) { - if (document.readyState && hs.ie && !hs.isReady) { - hs.addEventListener(document, 'ready', function() { - new hs.Expander(a, params, custom, contentType); - }); - return; - } - this.a = a; - this.custom = custom; - this.contentType = contentType || 'image'; - this.isHtml = (contentType == 'html'); - this.isImage = !this.isHtml; - - hs.continuePreloading = false; - this.overlays = []; - hs.init(); - var key = this.key = hs.expanders.length; - // override inline parameters - for (var i = 0; i < hs.overrides.length; i++) { - var name = hs.overrides[i]; - this[name] = params && typeof params[name] != 'undefined' ? - params[name] : hs[name]; - } - if (!this.src) this.src = a.href; - - // get thumb - var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; - el = this.thumb = el.getElementsByTagName('img')[0] || el; - this.thumbsUserSetId = el.id || a.id; - - // check if already open - for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && hs.expanders[i].a == a) { - hs.expanders[i].focus(); - return false; - } - } - - // cancel other - if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { - hs.expanders[i].cancelLoading(); - } - } - hs.expanders[key] = this; - if (!hs.allowMultipleInstances && !hs.upcoming) { - if (hs.expanders[key-1]) hs.expanders[key-1].close(); - if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) + if (exp.body) exp.body.style[this.wh] = 'auto'; + } + if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); +}, +setPos: function(i) { + this.pos = i; + this.exp.wrapper.style[this.lt] = i +'px'; + + if (this.exp.outline) this.exp.outline.setPosition(); + +} +}; + +hs.Expander = function(a, params, custom, contentType) { + if (document.readyState && hs.ie && !hs.isReady) { + hs.addEventListener(document, 'ready', function() { + new hs.Expander(a, params, custom, contentType); + }); + return; + } + this.a = a; + this.custom = custom; + this.contentType = contentType || 'image'; + this.isHtml = (contentType == 'html'); + this.isImage = !this.isHtml; + + hs.continuePreloading = false; + this.overlays = []; + hs.init(); + var key = this.key = hs.expanders.length; + // override inline parameters + for (var i = 0; i < hs.overrides.length; i++) { + var name = hs.overrides[i]; + this[name] = params && typeof params[name] != 'undefined' ? + params[name] : hs[name]; + } + if (!this.src) this.src = a.href; + + // get thumb + var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; + el = this.thumb = el.getElementsByTagName('img')[0] || el; + this.thumbsUserSetId = el.id || a.id; + + // check if already open + for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && hs.expanders[i].a == a) { + hs.expanders[i].focus(); + return false; + } + } + + // cancel other + if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { + hs.expanders[i].cancelLoading(); + } + } + hs.expanders[key] = this; + if (!hs.allowMultipleInstances && !hs.upcoming) { + if (hs.expanders[key-1]) hs.expanders[key-1].close(); + if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) hs.expanders[hs.focusKey].close(); - } - - // initiate metrics - this.el = el; - this.tpos = this.pageOrigin || hs.getPosition(el); - hs.getPageSize(); - var x = this.x = new hs.Dimension(this, 'x'); - x.calcThumb(); - var y = this.y = new hs.Dimension(this, 'y'); + } + + // initiate metrics + this.el = el; + this.tpos = this.pageOrigin || hs.getPosition(el); + hs.getPageSize(); + var x = this.x = new hs.Dimension(this, 'x'); + x.calcThumb(); + var y = this.y = new hs.Dimension(this, 'y'); y.calcThumb(); - this.wrapper = hs.createElement( - 'div', { - id: 'highslide-wrapper-'+ this.key, - className: 'highslide-wrapper '+ this.wrapperClassName - }, { - visibility: 'hidden', - position: 'absolute', - zIndex: hs.zIndexCounter += 2 - }, null, true ); - - this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; - if (this.contentType == 'image' && this.outlineWhileAnimating == 2) - this.outlineWhileAnimating = 0; - - // get the outline - if (!this.outlineType) { - this[this.contentType +'Create'](); - - } else if (hs.pendingOutlines[this.outlineType]) { - this.connectOutline(); - this[this.contentType +'Create'](); - - } else { - this.showLoading(); - var exp = this; - new hs.Outline(this.outlineType, - function () { - exp.connectOutline(); - exp[exp.contentType +'Create'](); - } - ); - } + this.wrapper = hs.createElement( + 'div', { + id: 'highslide-wrapper-'+ this.key, + className: 'highslide-wrapper '+ this.wrapperClassName + }, { + visibility: 'hidden', + position: 'absolute', + zIndex: hs.zIndexCounter += 2 + }, null, true ); + + this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; + if (this.contentType == 'image' && this.outlineWhileAnimating == 2) + this.outlineWhileAnimating = 0; + + // get the outline + if (!this.outlineType) { + this[this.contentType +'Create'](); + + } else if (hs.pendingOutlines[this.outlineType]) { + this.connectOutline(); + this[this.contentType +'Create'](); + + } else { + this.showLoading(); + var exp = this; + new hs.Outline(this.outlineType, + function () { + exp.connectOutline(); + exp[exp.contentType +'Create'](); + } + ); + } return true; -}; - -hs.Expander.prototype = { -error : function(e) { - if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); - else window.location.href = this.src; -}, - -connectOutline : function() { - var outline = this.outline = hs.pendingOutlines[this.outlineType]; - outline.exp = this; - outline.table.style.zIndex = this.wrapper.style.zIndex - 1; - hs.pendingOutlines[this.outlineType] = null; -}, - -showLoading : function() { - if (this.onLoadStarted || this.loading) return; - - this.loading = hs.loading; - var exp = this; - this.loading.onclick = function() { - exp.cancelLoading(); - }; - var exp = this, - l = this.x.get('loadingPos') +'px', - t = this.y.get('loadingPos') +'px'; - setTimeout(function () { - if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} - , 100); -}, - -imageCreate : function() { - var exp = this; - - var img = document.createElement('img'); - this.content = img; - img.onload = function () { - if (hs.expanders[exp.key]) exp.contentLoaded(); - }; - if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; - img.className = 'highslide-image'; - hs.setStyles(img, { +}; + +hs.Expander.prototype = { +error : function(e) { + if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); + else window.location.href = this.src; +}, + +connectOutline : function() { + var outline = this.outline = hs.pendingOutlines[this.outlineType]; + outline.exp = this; + outline.table.style.zIndex = this.wrapper.style.zIndex - 1; + hs.pendingOutlines[this.outlineType] = null; +}, + +showLoading : function() { + if (this.onLoadStarted || this.loading) return; + + this.loading = hs.loading; + var exp = this; + this.loading.onclick = function() { + exp.cancelLoading(); + }; + var exp = this, + l = this.x.get('loadingPos') +'px', + t = this.y.get('loadingPos') +'px'; + setTimeout(function () { + if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} + , 100); +}, + +imageCreate : function() { + var exp = this; + + var img = document.createElement('img'); + this.content = img; + img.onload = function () { + if (hs.expanders[exp.key]) exp.contentLoaded(); + }; + if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; + img.className = 'highslide-image'; + hs.setStyles(img, { visibility: 'hidden', - display: 'block', - position: 'absolute', - maxWidth: '9999px', - zIndex: 3 - }); - img.title = hs.lang.restoreTitle; - if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); - if (hs.ie && hs.flushImgSize) img.src = null; - img.src = this.src; - - this.showLoading(); -}, - -htmlCreate : function () { - - this.content = hs.getCacheBinding(this.a); - if (!this.content) - this.content = hs.getNode(this.contentId); - if (!this.content) + display: 'block', + position: 'absolute', + maxWidth: '9999px', + zIndex: 3 + }); + img.title = hs.lang.restoreTitle; + if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); + if (hs.ie && hs.flushImgSize) img.src = null; + img.src = this.src; + + this.showLoading(); +}, + +htmlCreate : function () { + + this.content = hs.getCacheBinding(this.a); + if (!this.content) + this.content = hs.getNode(this.contentId); + if (!this.content) this.content = hs.getSelfRendered(); - this.getInline(['maincontent']); - if (this.maincontent) { - var body = hs.getElementByClass(this.content, 'div', 'highslide-body'); - if (body) body.appendChild(this.maincontent); - this.maincontent.style.display = 'block'; - } - - var innerContent = this.innerContent = this.content; - - if (/(swf|iframe)/.test(this.objectType)) this.setObjContainerSize(innerContent); - - // the content tree - hs.container.appendChild(this.wrapper); - hs.setStyles( this.wrapper, { - position: 'static', - padding: '0 '+ hs.marginRight +'px 0 '+ hs.marginLeft +'px' - }); - this.content = hs.createElement( - 'div', { - className: 'highslide-html' - }, { - position: 'relative', - zIndex: 3, - height: 0, - overflow: 'hidden' - }, - this.wrapper - ); - this.mediumContent = hs.createElement('div', null, null, this.content, 1); - this.mediumContent.appendChild(innerContent); - - hs.setStyles (innerContent, { - position: 'relative', - display: 'block', - direction: hs.lang.cssDirection || '' - }); - if (this.width) innerContent.style.width = this.width +'px'; - if (this.height) hs.setStyles(innerContent, { - height: this.height +'px', + this.getInline(['maincontent']); + if (this.maincontent) { + var body = hs.getElementByClass(this.content, 'div', 'highslide-body'); + if (body) body.appendChild(this.maincontent); + this.maincontent.style.display = 'block'; + } + + var innerContent = this.innerContent = this.content; + + if (/(swf|iframe)/.test(this.objectType)) this.setObjContainerSize(innerContent); + + // the content tree + hs.container.appendChild(this.wrapper); + hs.setStyles( this.wrapper, { + position: 'static', + padding: '0 '+ hs.marginRight +'px 0 '+ hs.marginLeft +'px' + }); + this.content = hs.createElement( + 'div', { + className: 'highslide-html' + }, { + position: 'relative', + zIndex: 3, + height: 0, + overflow: 'hidden' + }, + this.wrapper + ); + this.mediumContent = hs.createElement('div', null, null, this.content, 1); + this.mediumContent.appendChild(innerContent); + + hs.setStyles (innerContent, { + position: 'relative', + display: 'block', + direction: hs.lang.cssDirection || '' + }); + if (this.width) innerContent.style.width = this.width +'px'; + if (this.height) hs.setStyles(innerContent, { + height: this.height +'px', overflow: 'hidden' - }); - if (innerContent.offsetWidth < this.minWidth) - innerContent.style.width = this.minWidth +'px'; - - - - if (this.objectType == 'ajax' && !hs.getCacheBinding(this.a)) { - this.showLoading(); - var exp = this; - var ajax = new hs.Ajax(this.a, innerContent); - ajax.src = this.src; - ajax.onLoad = function () { if (hs.expanders[exp.key]) exp.contentLoaded(); }; - ajax.onError = function () { location.href = exp.src; }; - ajax.run(); - } - else - - if (this.objectType == 'iframe' && this.objectLoadTime == 'before') { - this.writeExtendedContent(); - } - else - this.contentLoaded(); -}, - -contentLoaded : function() { - try { - if (!this.content) return; + }); + if (innerContent.offsetWidth < this.minWidth) + innerContent.style.width = this.minWidth +'px'; + + + + if (this.objectType == 'ajax' && !hs.getCacheBinding(this.a)) { + this.showLoading(); + var exp = this; + var ajax = new hs.Ajax(this.a, innerContent); + ajax.src = this.src; + ajax.onLoad = function () { if (hs.expanders[exp.key]) exp.contentLoaded(); }; + ajax.onError = function () { location.href = exp.src; }; + ajax.run(); + } + else + + if (this.objectType == 'iframe' && this.objectLoadTime == 'before') { + this.writeExtendedContent(); + } + else + this.contentLoaded(); +}, + +contentLoaded : function() { + try { + if (!this.content) return; this.content.onload = null; if (this.onLoadStarted) return; - else this.onLoadStarted = true; - - var x = this.x, y = this.y; - - if (this.loading) { - hs.setStyles(this.loading, { top: '-9999px' }); - this.loading = null; - } - if (this.isImage) { - x.full = this.content.width; - y.full = this.content.height; - - hs.setStyles(this.content, { - width: x.t +'px', - height: y.t +'px' - }); - this.wrapper.appendChild(this.content); - hs.container.appendChild(this.wrapper); - } else if (this.htmlGetSize) this.htmlGetSize(); - - x.calcBorders(); - y.calcBorders(); - + else this.onLoadStarted = true; + + var x = this.x, y = this.y; + + if (this.loading) { + hs.setStyles(this.loading, { top: '-9999px' }); + this.loading = null; + } + if (this.isImage) { + x.full = this.content.width; + y.full = this.content.height; + + hs.setStyles(this.content, { + width: x.t +'px', + height: y.t +'px' + }); + this.wrapper.appendChild(this.content); + hs.container.appendChild(this.wrapper); + } else if (this.htmlGetSize) this.htmlGetSize(); + + x.calcBorders(); + y.calcBorders(); + hs.setStyles (this.wrapper, { - left: (x.tpos + x.tb - x.cb) +'px', - top: (y.tpos + x.tb - y.cb) +'px' + left: (x.tpos + x.tb - x.cb) +'px', + top: (y.tpos + x.tb - y.cb) +'px' }); - this.getOverlays(); - - var ratio = x.full / y.full; - x.calcExpanded(); - this.justify(x); - - y.calcExpanded(); - this.justify(y); - if (this.isHtml) this.htmlSizeOperations(); - if (this.overlayBox) this.sizeOverlayBox(0, 1); - - - if (this.allowSizeReduction) { - if (this.isImage) - this.correctRatio(ratio); - else this.fitOverlayBox(); - if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { - this.createFullExpand(); - if (this.overlays.length == 1) this.sizeOverlayBox(); - } - } - this.show(); - - } catch (e) { - this.error(e); - } -}, - - -setObjContainerSize : function(parent, auto) { - var c = hs.getElementByClass(parent, 'DIV', 'highslide-body'); - if (/(iframe|swf)/.test(this.objectType)) { - if (this.objectWidth) c.style.width = this.objectWidth +'px'; - if (this.objectHeight) c.style.height = this.objectHeight +'px'; - } -}, - -writeExtendedContent : function () { - if (this.hasExtendedContent) return; - var exp = this; - this.body = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); - if (this.objectType == 'iframe') { - this.showLoading(); - var ruler = hs.clearing.cloneNode(1); - this.body.appendChild(ruler); - this.newWidth = this.innerContent.offsetWidth; - if (!this.objectWidth) this.objectWidth = ruler.offsetWidth; - var hDiff = this.innerContent.offsetHeight - this.body.offsetHeight, - h = this.objectHeight || hs.page.height - hDiff - hs.marginTop - hs.marginBottom, - onload = this.objectLoadTime == 'before' ? - ' onload="if (hs.expanders['+ this.key +']) hs.expanders['+ this.key +'].contentLoaded()" ' : ''; - this.body.innerHTML += '<iframe name="hs'+ (new Date()).getTime() +'" frameborder="0" key="'+ this.key +'" ' - +' style="width:'+ this.objectWidth +'px; height:'+ h +'px" ' - + onload +' src="'+ this.src +'" ></iframe>'; - this.ruler = this.body.getElementsByTagName('div')[0]; - this.iframe = this.body.getElementsByTagName('iframe')[0]; - - if (this.objectLoadTime == 'after') this.correctIframeSize(); - - } - if (this.objectType == 'swf') { - this.body.id = this.body.id || 'hs-flash-id-' + this.key; - var a = this.swfOptions; - if (!a.params) a.params = {}; - if (typeof a.params.wmode == 'undefined') a.params.wmode = 'transparent'; - if (swfobject) swfobject.embedSWF(this.src, this.body.id, this.objectWidth, this.objectHeight, - a.version || '7', a.expressInstallSwfurl, a.flashvars, a.params, a.attributes); - } - this.hasExtendedContent = true; -}, -htmlGetSize : function() { - if (this.iframe && !this.objectHeight) { // loadtime before - this.iframe.style.height = this.body.style.height = this.getIframePageHeight() +'px'; - } - this.innerContent.appendChild(hs.clearing); - if (!this.x.full) this.x.full = this.innerContent.offsetWidth; - this.y.full = this.innerContent.offsetHeight; - this.innerContent.removeChild(hs.clearing); - if (hs.ie && this.newHeight > parseInt(this.innerContent.currentStyle.height)) { // ie css bug - this.newHeight = parseInt(this.innerContent.currentStyle.height); - } - hs.setStyles( this.wrapper, { position: 'absolute', padding: '0'}); - hs.setStyles( this.content, { width: this.x.t +'px', height: this.y.t +'px'}); - -}, - -getIframePageHeight : function() { - var h; - try { - var doc = this.iDoc = this.iframe.contentDocument || this.iframe.contentWindow.document; - var clearing = doc.createElement('div'); - clearing.style.clear = 'both'; - doc.body.appendChild(clearing); - h = clearing.offsetTop; - if (hs.ie) h += parseInt(doc.body.currentStyle.marginTop) - + parseInt(doc.body.currentStyle.marginBottom) - 1; - } catch (e) { // other domain - h = 300; - } - return h; -}, -correctIframeSize : function () { - var wDiff = this.innerContent.offsetWidth - this.ruler.offsetWidth; - hs.discardElement(this.ruler); - if (wDiff < 0) wDiff = 0; - - var hDiff = this.innerContent.offsetHeight - this.iframe.offsetHeight; - if (this.iDoc && !this.objectHeight && !this.height && this.y.size == this.y.full) try { + this.getOverlays(); + + var ratio = x.full / y.full; + x.calcExpanded(); + this.justify(x); + + y.calcExpanded(); + this.justify(y); + if (this.isHtml) this.htmlSizeOperations(); + if (this.overlayBox) this.sizeOverlayBox(0, 1); + + + if (this.allowSizeReduction) { + if (this.isImage) + this.correctRatio(ratio); + else this.fitOverlayBox(); + if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { + this.createFullExpand(); + if (this.overlays.length == 1) this.sizeOverlayBox(); + } + } + this.show(); + + } catch (e) { + this.error(e); + } +}, + + +setObjContainerSize : function(parent, auto) { + var c = hs.getElementByClass(parent, 'DIV', 'highslide-body'); + if (/(iframe|swf)/.test(this.objectType)) { + if (this.objectWidth) c.style.width = this.objectWidth +'px'; + if (this.objectHeight) c.style.height = this.objectHeight +'px'; + } +}, + +writeExtendedContent : function () { + if (this.hasExtendedContent) return; + var exp = this; + this.body = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); + if (this.objectType == 'iframe') { + this.showLoading(); + var ruler = hs.clearing.cloneNode(1); + this.body.appendChild(ruler); + this.newWidth = this.innerContent.offsetWidth; + if (!this.objectWidth) this.objectWidth = ruler.offsetWidth; + var hDiff = this.innerContent.offsetHeight - this.body.offsetHeight, + h = this.objectHeight || hs.page.height - hDiff - hs.marginTop - hs.marginBottom, + onload = this.objectLoadTime == 'before' ? + ' onload="if (hs.expanders['+ this.key +']) hs.expanders['+ this.key +'].contentLoaded()" ' : ''; + this.body.innerHTML += '<iframe name="hs'+ (new Date()).getTime() +'" frameborder="0" key="'+ this.key +'" ' + +' style="width:'+ this.objectWidth +'px; height:'+ h +'px" ' + + onload +' src="'+ this.src +'" ></iframe>'; + this.ruler = this.body.getElementsByTagName('div')[0]; + this.iframe = this.body.getElementsByTagName('iframe')[0]; + + if (this.objectLoadTime == 'after') this.correctIframeSize(); + + } + if (this.objectType == 'swf') { + this.body.id = this.body.id || 'hs-flash-id-' + this.key; + var a = this.swfOptions; + if (!a.params) a.params = {}; + if (typeof a.params.wmode == 'undefined') a.params.wmode = 'transparent'; + if (swfobject) swfobject.embedSWF(this.src, this.body.id, this.objectWidth, this.objectHeight, + a.version || '7', a.expressInstallSwfurl, a.flashvars, a.params, a.attributes); + } + this.hasExtendedContent = true; +}, +htmlGetSize : function() { + if (this.iframe && !this.objectHeight) { // loadtime before + this.iframe.style.height = this.body.style.height = this.getIframePageHeight() +'px'; + } + this.innerContent.appendChild(hs.clearing); + if (!this.x.full) this.x.full = this.innerContent.offsetWidth; + this.y.full = this.innerContent.offsetHeight; + this.innerContent.removeChild(hs.clearing); + if (hs.ie && this.newHeight > parseInt(this.innerContent.currentStyle.height)) { // ie css bug + this.newHeight = parseInt(this.innerContent.currentStyle.height); + } + hs.setStyles( this.wrapper, { position: 'absolute', padding: '0'}); + hs.setStyles( this.content, { width: this.x.t +'px', height: this.y.t +'px'}); + +}, + +getIframePageHeight : function() { + var h; + try { + var doc = this.iDoc = this.iframe.contentDocument || this.iframe.contentWindow.document; + var clearing = doc.createElement('div'); + clearing.style.clear = 'both'; + doc.body.appendChild(clearing); + h = clearing.offsetTop; + if (hs.ie) h += parseInt(doc.body.currentStyle.marginTop) + + parseInt(doc.body.currentStyle.marginBottom) - 1; + } catch (e) { // other domain + h = 300; + } + return h; +}, +correctIframeSize : function () { + var wDiff = this.innerContent.offsetWidth - this.ruler.offsetWidth; + hs.discardElement(this.ruler); + if (wDiff < 0) wDiff = 0; + + var hDiff = this.innerContent.offsetHeight - this.iframe.offsetHeight; + if (this.iDoc && !this.objectHeight && !this.height && this.y.size == this.y.full) try { this.iDoc.body.style.overflow = 'hidden'; - } catch (e) {} - hs.setStyles(this.iframe, { - width: Math.abs(this.x.size - wDiff) +'px', - height: Math.abs(this.y.size - hDiff) +'px' - }); - hs.setStyles(this.body, { - width: this.iframe.style.width, - height: this.iframe.style.height - }); - - this.scrollingContent = this.iframe; - this.scrollerDiv = this.scrollingContent; - -}, -htmlSizeOperations : function () { - - this.setObjContainerSize(this.innerContent); - - - if (this.objectType == 'swf' && this.objectLoadTime == 'before') this.writeExtendedContent(); - - // handle minimum size - if (this.x.size < this.x.full && !this.allowWidthReduction) this.x.size = this.x.full; - if (this.y.size < this.y.full && !this.allowHeightReduction) this.y.size = this.y.full; - this.scrollerDiv = this.innerContent; - hs.setStyles(this.mediumContent, { - position: 'relative', - width: this.x.size +'px' - }); - hs.setStyles(this.innerContent, { - border: 'none', - width: 'auto', - height: 'auto' - }); - var node = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); - if (node && !/(iframe|swf)/.test(this.objectType)) { - var cNode = node; // wrap to get true size - node = hs.createElement(cNode.nodeName, null, {overflow: 'hidden'}, null, true); - cNode.parentNode.insertBefore(node, cNode); - node.appendChild(hs.clearing); // IE6 - node.appendChild(cNode); - - var wDiff = this.innerContent.offsetWidth - node.offsetWidth; - var hDiff = this.innerContent.offsetHeight - node.offsetHeight; - node.removeChild(hs.clearing); - - var kdeBugCorr = hs.safari || navigator.vendor == 'KDE' ? 1 : 0; // KDE repainting bug - hs.setStyles(node, { - width: (this.x.size - wDiff - kdeBugCorr) +'px', - height: (this.y.size - hDiff) +'px', - overflow: 'auto', - position: 'relative' - } - ); - if (kdeBugCorr && cNode.offsetHeight > node.offsetHeight) { - node.style.width = (parseInt(node.style.width) + kdeBugCorr) + 'px'; - } - this.scrollingContent = node; - this.scrollerDiv = this.scrollingContent; - } - if (this.iframe && this.objectLoadTime == 'before') this.correctIframeSize(); - if (!this.scrollingContent && this.y.size < this.mediumContent.offsetHeight) this.scrollerDiv = this.content; - - if (this.scrollerDiv == this.content && !this.allowWidthReduction && !/(iframe|swf)/.test(this.objectType)) { - this.x.size += 17; // room for scrollbars - } - if (this.scrollerDiv && this.scrollerDiv.offsetHeight > this.scrollerDiv.parentNode.offsetHeight) { - setTimeout("try { hs.expanders["+ this.key +"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}", - hs.expandDuration); - } -}, - -justify : function (p, moveOnly) { - var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; - - var hasMovedMin = false; - + } catch (e) {} + hs.setStyles(this.iframe, { + width: Math.abs(this.x.size - wDiff) +'px', + height: Math.abs(this.y.size - hDiff) +'px' + }); + hs.setStyles(this.body, { + width: this.iframe.style.width, + height: this.iframe.style.height + }); + + this.scrollingContent = this.iframe; + this.scrollerDiv = this.scrollingContent; + +}, +htmlSizeOperations : function () { + + this.setObjContainerSize(this.innerContent); + + + if (this.objectType == 'swf' && this.objectLoadTime == 'before') this.writeExtendedContent(); + + // handle minimum size + if (this.x.size < this.x.full && !this.allowWidthReduction) this.x.size = this.x.full; + if (this.y.size < this.y.full && !this.allowHeightReduction) this.y.size = this.y.full; + this.scrollerDiv = this.innerContent; + hs.setStyles(this.mediumContent, { + position: 'relative', + width: this.x.size +'px' + }); + hs.setStyles(this.innerContent, { + border: 'none', + width: 'auto', + height: 'auto' + }); + var node = hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body'); + if (node && !/(iframe|swf)/.test(this.objectType)) { + var cNode = node; // wrap to get true size + node = hs.createElement(cNode.nodeName, null, {overflow: 'hidden'}, null, true); + cNode.parentNode.insertBefore(node, cNode); + node.appendChild(hs.clearing); // IE6 + node.appendChild(cNode); + + var wDiff = this.innerContent.offsetWidth - node.offsetWidth; + var hDiff = this.innerContent.offsetHeight - node.offsetHeight; + node.removeChild(hs.clearing); + + var kdeBugCorr = hs.safari || navigator.vendor == 'KDE' ? 1 : 0; // KDE repainting bug + hs.setStyles(node, { + width: (this.x.size - wDiff - kdeBugCorr) +'px', + height: (this.y.size - hDiff) +'px', + overflow: 'auto', + position: 'relative' + } + ); + if (kdeBugCorr && cNode.offsetHeight > node.offsetHeight) { + node.style.width = (parseInt(node.style.width) + kdeBugCorr) + 'px'; + } + this.scrollingContent = node; + this.scrollerDiv = this.scrollingContent; + } + if (this.iframe && this.objectLoadTime == 'before') this.correctIframeSize(); + if (!this.scrollingContent && this.y.size < this.mediumContent.offsetHeight) this.scrollerDiv = this.content; + + if (this.scrollerDiv == this.content && !this.allowWidthReduction && !/(iframe|swf)/.test(this.objectType)) { + this.x.size += 17; // room for scrollbars + } + if (this.scrollerDiv && this.scrollerDiv.offsetHeight > this.scrollerDiv.parentNode.offsetHeight) { + setTimeout("try { hs.expanders["+ this.key +"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}", + hs.expandDuration); + } +}, + +justify : function (p, moveOnly) { + var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; + + var hasMovedMin = false; + var allowReduce = p.exp.allowSizeReduction; p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2)); - if (p.pos < p.scroll + p.marginMin) { - p.pos = p.scroll + p.marginMin; - hasMovedMin = true; + if (p.pos < p.scroll + p.marginMin) { + p.pos = p.scroll + p.marginMin; + hasMovedMin = true; } - if (!moveOnly && p.size < p.minSize) { - p.size = p.minSize; - allowReduce = false; + if (!moveOnly && p.size < p.minSize) { + p.size = p.minSize; + allowReduce = false; } if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) { if (!moveOnly && hasMovedMin && allowReduce) { p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize')); - } else if (p.get('wsize') < p.get('fitsize')) { + } else if (p.get('wsize') < p.get('fitsize')) { p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize'); - } else { // image larger than viewport - p.pos = p.scroll + p.marginMin; - if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); - } - } - - if (!moveOnly && p.size < p.minSize) { - p.size = p.minSize; - allowReduce = false; + } else { // image larger than viewport + p.pos = p.scroll + p.marginMin; + if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); + } } - - - - if (p.pos < p.marginMin) { - var tmpMin = p.pos; - p.pos = p.marginMin; - - if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); - - } -}, - -correctRatio : function(ratio) { - var x = this.x, - y = this.y, + + if (!moveOnly && p.size < p.minSize) { + p.size = p.minSize; + allowReduce = false; + } + + + + if (p.pos < p.marginMin) { + var tmpMin = p.pos; + p.pos = p.marginMin; + + if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); + + } +}, + +correctRatio : function(ratio) { + var x = this.x, + y = this.y, changed = false, - xSize = Math.min(x.full, x.size), - ySize = Math.min(y.full, y.size), - useBox = (this.useBox || hs.padToMinWidth); - - if (xSize / ySize > ratio) { // width greater - xSize = ySize * ratio; - if (xSize < x.minSize) { // below minWidth - xSize = x.minSize; - ySize = xSize / ratio; - } - changed = true; - - } else if (xSize / ySize < ratio) { // height greater - ySize = xSize / ratio; - changed = true; - } - - if (hs.padToMinWidth && x.full < x.minSize) { - x.imgSize = x.full; - y.size = y.imgSize = y.full; - } else if (this.useBox) { - x.imgSize = xSize; - y.imgSize = ySize; - } else { - x.size = xSize; - y.size = ySize; - } + xSize = Math.min(x.full, x.size), + ySize = Math.min(y.full, y.size), + useBox = (this.useBox || hs.padToMinWidth); + + if (xSize / ySize > ratio) { // width greater + xSize = ySize * ratio; + if (xSize < x.minSize) { // below minWidth + xSize = x.minSize; + ySize = xSize / ratio; + } + changed = true; + + } else if (xSize / ySize < ratio) { // height greater + ySize = xSize / ratio; + changed = true; + } + + if (hs.padToMinWidth && x.full < x.minSize) { + x.imgSize = x.full; + y.size = y.imgSize = y.full; + } else if (this.useBox) { + x.imgSize = xSize; + y.imgSize = ySize; + } else { + x.size = xSize; + y.size = ySize; + } changed = this.fitOverlayBox(this.useBox ? null : ratio, changed); - if (useBox && y.size < y.imgSize) { - y.imgSize = y.size; - x.imgSize = y.size * ratio; - } - if (changed || useBox) { - x.pos = x.tpos - x.cb + x.tb; - x.minSize = x.size; - this.justify(x, true); - - y.pos = y.tpos - y.cb + y.tb; - y.minSize = y.size; - this.justify(y, true); - if (this.overlayBox) this.sizeOverlayBox(); - } - - -}, -fitOverlayBox : function(ratio, changed) { - var x = this.x, y = this.y; - if (this.overlayBox && (this.isImage || this.allowHeightReduction)) { - while (y.size > this.minHeight && x.size > this.minWidth - && y.get('wsize') > y.get('fitsize')) { - y.size -= 10; - if (ratio) x.size = y.size * ratio; - this.sizeOverlayBox(0, 1); - changed = true; - } - } - return changed; -}, - -show : function () { + if (useBox && y.size < y.imgSize) { + y.imgSize = y.size; + x.imgSize = y.size * ratio; + } + if (changed || useBox) { + x.pos = x.tpos - x.cb + x.tb; + x.minSize = x.size; + this.justify(x, true); + + y.pos = y.tpos - y.cb + y.tb; + y.minSize = y.size; + this.justify(y, true); + if (this.overlayBox) this.sizeOverlayBox(); + } + + +}, +fitOverlayBox : function(ratio, changed) { var x = this.x, y = this.y; - this.doShowHide('hidden'); - - // Apply size change - this.changeSize( - 1, { - wrapper: { - width : x.get('wsize'), - height : y.get('wsize'), - left: x.pos, - top: y.pos - }, - content: { - left: x.p1 + x.get('imgPad'), - top: y.p1 + y.get('imgPad'), - width:x.imgSize ||x.size, - height:y.imgSize ||y.size - } - }, - hs.expandDuration - ); -}, - -changeSize : function(up, to, dur) { - - if (this.outline && !this.outlineWhileAnimating) { - if (up) this.outline.setPosition(); - else this.outline.destroy( - (this.isHtml && this.preserveContent)); - } - - - if (!up) this.destroyOverlays(); - - var exp = this, - x = exp.x, - y = exp.y, - easing = this.easing; + if (this.overlayBox && (this.isImage || this.allowHeightReduction)) { + while (y.size > this.minHeight && x.size > this.minWidth + && y.get('wsize') > y.get('fitsize')) { + y.size -= 10; + if (ratio) x.size = y.size * ratio; + this.sizeOverlayBox(0, 1); + changed = true; + } + } + return changed; +}, + +show : function () { + var x = this.x, y = this.y; + this.doShowHide('hidden'); + + // Apply size change + this.changeSize( + 1, { + wrapper: { + width : x.get('wsize'), + height : y.get('wsize'), + left: x.pos, + top: y.pos + }, + content: { + left: x.p1 + x.get('imgPad'), + top: y.p1 + y.get('imgPad'), + width:x.imgSize ||x.size, + height:y.imgSize ||y.size + } + }, + hs.expandDuration + ); +}, + +changeSize : function(up, to, dur) { + + if (this.outline && !this.outlineWhileAnimating) { + if (up) this.outline.setPosition(); + else this.outline.destroy( + (this.isHtml && this.preserveContent)); + } + + + if (!up) this.destroyOverlays(); + + var exp = this, + x = exp.x, + y = exp.y, + easing = this.easing; if (!up) easing = this.easingClose || easing; - var after = up ? - function() { - - if (exp.outline) exp.outline.table.style.visibility = "visible"; - setTimeout(function() { - exp.afterExpand(); - }, 50); - } : - function() { - exp.afterClose(); + var after = up ? + function() { + + if (exp.outline) exp.outline.table.style.visibility = "visible"; + setTimeout(function() { + exp.afterExpand(); + }, 50); + } : + function() { + exp.afterClose(); }; - if (up) hs.setStyles( this.wrapper, { - width: x.t +'px', - height: y.t +'px' + if (up) hs.setStyles( this.wrapper, { + width: x.t +'px', + height: y.t +'px' }); - if (up && this.isHtml) { - hs.setStyles(this.wrapper, { - left: (x.tpos - x.cb + x.tb) +'px', - top: (y.tpos - y.cb + y.tb) +'px' - }); - } - if (this.fadeInOut) { - hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); + if (up && this.isHtml) { + hs.setStyles(this.wrapper, { + left: (x.tpos - x.cb + x.tb) +'px', + top: (y.tpos - y.cb + y.tb) +'px' + }); + } + if (this.fadeInOut) { + hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); hs.extend(to.wrapper, { opacity: up }); - } - hs.animate( this.wrapper, to.wrapper, { - duration: dur, - easing: easing, - step: function(val, args) { - if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { - var fac = up ? args.pos : 1 - args.pos; - var pos = { - w: x.t + (x.get('wsize') - x.t) * fac, - h: y.t + (y.get('wsize') - y.t) * fac, - x: x.tpos + (x.pos - x.tpos) * fac, - y: y.tpos + (y.pos - y.tpos) * fac - }; - exp.outline.setPosition(pos, 0, 1); - } - if (exp.isHtml) { - if (args.prop == 'left') - exp.mediumContent.style.left = (x.pos - val) +'px'; - if (args.prop == 'top') - exp.mediumContent.style.top = (y.pos - val) +'px'; - } - } + } + hs.animate( this.wrapper, to.wrapper, { + duration: dur, + easing: easing, + step: function(val, args) { + if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { + var fac = up ? args.pos : 1 - args.pos; + var pos = { + w: x.t + (x.get('wsize') - x.t) * fac, + h: y.t + (y.get('wsize') - y.t) * fac, + x: x.tpos + (x.pos - x.tpos) * fac, + y: y.tpos + (y.pos - y.tpos) * fac + }; + exp.outline.setPosition(pos, 0, 1); + } + if (exp.isHtml) { + if (args.prop == 'left') + exp.mediumContent.style.left = (x.pos - val) +'px'; + if (args.prop == 'top') + exp.mediumContent.style.top = (y.pos - val) +'px'; + } + } }); hs.animate( this.content, to.content, dur, easing, after); - if (up) { - this.wrapper.style.visibility = 'visible'; - this.content.style.visibility = 'visible'; - if (this.isHtml) this.innerContent.style.visibility = 'visible'; - this.a.className += ' highslide-active-anchor'; - } -}, - - - - -afterExpand : function() { - this.isExpanded = true; - this.focus(); - - if (this.isHtml && this.objectLoadTime == 'after') this.writeExtendedContent(); - if (this.iframe) { - try { - var exp = this, - doc = this.iframe.contentDocument || this.iframe.contentWindow.document; - hs.addEventListener(doc, 'mousedown', function () { - if (hs.focusKey != exp.key) exp.focus(); - }); - } catch(e) {} - if (hs.ie && typeof this.isClosing != 'boolean') // first open - this.iframe.style.width = (this.objectWidth - 1) +'px'; // hasLayout - } + if (up) { + this.wrapper.style.visibility = 'visible'; + this.content.style.visibility = 'visible'; + if (this.isHtml) this.innerContent.style.visibility = 'visible'; + this.a.className += ' highslide-active-anchor'; + } +}, + + + + +afterExpand : function() { + this.isExpanded = true; + this.focus(); + + if (this.isHtml && this.objectLoadTime == 'after') this.writeExtendedContent(); + if (this.iframe) { + try { + var exp = this, + doc = this.iframe.contentDocument || this.iframe.contentWindow.document; + hs.addEventListener(doc, 'mousedown', function () { + if (hs.focusKey != exp.key) exp.focus(); + }); + } catch(e) {} + if (hs.ie && typeof this.isClosing != 'boolean') // first open + this.iframe.style.width = (this.objectWidth - 1) +'px'; // hasLayout + } if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null; this.prepareNextOutline(); - var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; - this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') - && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); - if (this.overlayBox) this.showOverlays(); - -}, - - -prepareNextOutline : function() { - var key = this.key; - var outlineType = this.outlineType; - new hs.Outline(outlineType, - function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); -}, - - -preloadNext : function() { - var next = this.getAdjacentAnchor(1); - if (next && next.onclick.toString().match(/hs\.expand/)) - var img = hs.createElement('img', { src: hs.getSrc(next) }); -}, - - -getAdjacentAnchor : function(op) { - var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; - return (as && as[current + op]) || null; -}, - -getAnchorIndex : function() { - var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; - if (arr) for (var i = 0; i < arr.length; i++) { - if (arr[i] == this.a) return i; - } - return null; -}, - - -cancelLoading : function() { - hs.discardElement (this.wrapper); - hs.expanders[this.key] = null; - if (this.loading) hs.loading.style.left = '-9999px'; -}, - -writeCredits : function () { - this.credits = hs.createElement('a', { - href: hs.creditsHref, - target: hs.creditsTarget, - className: 'highslide-credits', - innerHTML: hs.lang.creditsText, - title: hs.lang.creditsTitle - }); - this.createOverlay({ - overlayId: this.credits, - position: this.creditsPosition || 'top left' - }); -}, - -getInline : function(types, addOverlay) { - for (var i = 0; i < types.length; i++) { + var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; + this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') + && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); + if (this.overlayBox) this.showOverlays(); + +}, + + +prepareNextOutline : function() { + var key = this.key; + var outlineType = this.outlineType; + new hs.Outline(outlineType, + function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); +}, + + +preloadNext : function() { + var next = this.getAdjacentAnchor(1); + if (next && next.onclick.toString().match(/hs\.expand/)) + var img = hs.createElement('img', { src: hs.getSrc(next) }); +}, + + +getAdjacentAnchor : function(op) { + var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; + return (as && as[current + op]) || null; +}, + +getAnchorIndex : function() { + var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; + if (arr) for (var i = 0; i < arr.length; i++) { + if (arr[i] == this.a) return i; + } + return null; +}, + + +cancelLoading : function() { + hs.discardElement (this.wrapper); + hs.expanders[this.key] = null; + if (this.loading) hs.loading.style.left = '-9999px'; +}, + +writeCredits : function () { + this.credits = hs.createElement('a', { + href: hs.creditsHref, + target: hs.creditsTarget, + className: 'highslide-credits', + innerHTML: hs.lang.creditsText, + title: hs.lang.creditsTitle + }); + this.createOverlay({ + overlayId: this.credits, + position: this.creditsPosition || 'top left' + }); +}, + +getInline : function(types, addOverlay) { + for (var i = 0; i < types.length; i++) { var type = types[i], s = null; - if (!this[type +'Id'] && this.thumbsUserSetId) + if (!this[type +'Id'] && this.thumbsUserSetId) this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId; if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']); - if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { - s = eval(this[type +'Eval']); + if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { + s = eval(this[type +'Eval']); } catch (e) {} - if (!this[type] && this[type +'Text']) { - s = this[type +'Text']; + if (!this[type] && this[type +'Text']) { + s = this[type +'Text']; } - if (!this[type] && !s) { + if (!this[type] && !s) { this[type] = hs.getNode(this.a['_'+ type + 'Id']); if (!this[type]) { - var next = this.a.nextSibling; - while (next && !hs.isHsAnchor(next)) { - if ((new RegExp('highslide-'+ type)).test(next.className || null)) { - if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; - this[type] = hs.getNode(next.id); - break; - } - next = next.nextSibling; - } - } - } - - if (!this[type] && s) this[type] = hs.createElement('div', - { className: 'highslide-'+ type, innerHTML: s } ); - - if (addOverlay && this[type]) { + var next = this.a.nextSibling; + while (next && !hs.isHsAnchor(next)) { + if ((new RegExp('highslide-'+ type)).test(next.className || null)) { + if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; + this[type] = hs.getNode(next.id); + break; + } + next = next.nextSibling; + } + } + } + + if (!this[type] && s) this[type] = hs.createElement('div', + { className: 'highslide-'+ type, innerHTML: s } ); + + if (addOverlay && this[type]) { var o = { position: (type == 'heading') ? 'above' : 'below' }; - for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; - o.overlayId = this[type]; - this.createOverlay(o); - } - } -}, - - -// on end move and resize -doShowHide : function(visibility) { - if (hs.hideSelects) this.showHideElements('SELECT', visibility); - if (hs.hideIframes) this.showHideElements('IFRAME', visibility); - if (hs.geckoMac) this.showHideElements('*', visibility); -}, -showHideElements : function (tagName, visibility) { - var els = document.getElementsByTagName(tagName); - var prop = tagName == '*' ? 'overflow' : 'visibility'; - for (var i = 0; i < els.length; i++) { - if (prop == 'visibility' || (document.defaultView.getComputedStyle( - els[i], "").getPropertyValue('overflow') == 'auto' - || els[i].getAttribute('hidden-by') != null)) { - var hiddenBy = els[i].getAttribute('hidden-by'); - if (visibility == 'visible' && hiddenBy) { - hiddenBy = hiddenBy.replace('['+ this.key +']', ''); - els[i].setAttribute('hidden-by', hiddenBy); - if (!hiddenBy) els[i].style[prop] = els[i].origProp; - } else if (visibility == 'hidden') { // hide if behind - var elPos = hs.getPosition(els[i]); - elPos.w = els[i].offsetWidth; - elPos.h = els[i].offsetHeight; - - - var clearsX = (elPos.x + elPos.w < this.x.get('opos') - || elPos.x > this.x.get('opos') + this.x.get('osize')); - var clearsY = (elPos.y + elPos.h < this.y.get('opos') - || elPos.y > this.y.get('opos') + this.y.get('osize')); - var wrapperKey = hs.getWrapperKey(els[i]); - if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image - if (!hiddenBy) { - els[i].setAttribute('hidden-by', '['+ this.key +']'); - els[i].origProp = els[i].style[prop]; - els[i].style[prop] = 'hidden'; - - } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { - els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); - } - } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) - && wrapperKey != this.key) { // on move - els[i].setAttribute('hidden-by', ''); - els[i].style[prop] = els[i].origProp || ''; - } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { - els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); - } - - } - } - } -}, - -focus : function() { - this.wrapper.style.zIndex = hs.zIndexCounter += 2; - // blur others - for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && i == hs.focusKey) { - var blurExp = hs.expanders[i]; - blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; - if (blurExp.isImage) { - blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; - blurExp.content.title = hs.lang.focusTitle; - } - } - } - - // focus this - if (this.outline) this.outline.table.style.zIndex - = this.wrapper.style.zIndex - 1; - this.content.className = 'highslide-'+ this.contentType; - if (this.isImage) { - this.content.title = hs.lang.restoreTitle; - - if (hs.restoreCursor) { - hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; - if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; - this.content.style.cursor = hs.styleRestoreCursor; - } - } - hs.focusKey = this.key; - hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); -}, -moveTo: function(x, y) { - this.x.setPos(x); - this.y.setPos(y); -}, -resize : function (e) { + for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; + o.overlayId = this[type]; + this.createOverlay(o); + } + } +}, + + +// on end move and resize +doShowHide : function(visibility) { + if (hs.hideSelects) this.showHideElements('SELECT', visibility); + if (hs.hideIframes) this.showHideElements('IFRAME', visibility); + if (hs.geckoMac) this.showHideElements('*', visibility); +}, +showHideElements : function (tagName, visibility) { + var els = document.getElementsByTagName(tagName); + var prop = tagName == '*' ? 'overflow' : 'visibility'; + for (var i = 0; i < els.length; i++) { + if (prop == 'visibility' || (document.defaultView.getComputedStyle( + els[i], "").getPropertyValue('overflow') == 'auto' + || els[i].getAttribute('hidden-by') != null)) { + var hiddenBy = els[i].getAttribute('hidden-by'); + if (visibility == 'visible' && hiddenBy) { + hiddenBy = hiddenBy.replace('['+ this.key +']', ''); + els[i].setAttribute('hidden-by', hiddenBy); + if (!hiddenBy) els[i].style[prop] = els[i].origProp; + } else if (visibility == 'hidden') { // hide if behind + var elPos = hs.getPosition(els[i]); + elPos.w = els[i].offsetWidth; + elPos.h = els[i].offsetHeight; + + + var clearsX = (elPos.x + elPos.w < this.x.get('opos') + || elPos.x > this.x.get('opos') + this.x.get('osize')); + var clearsY = (elPos.y + elPos.h < this.y.get('opos') + || elPos.y > this.y.get('opos') + this.y.get('osize')); + var wrapperKey = hs.getWrapperKey(els[i]); + if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image + if (!hiddenBy) { + els[i].setAttribute('hidden-by', '['+ this.key +']'); + els[i].origProp = els[i].style[prop]; + els[i].style[prop] = 'hidden'; + + } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { + els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); + } + } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) + && wrapperKey != this.key) { // on move + els[i].setAttribute('hidden-by', ''); + els[i].style[prop] = els[i].origProp || ''; + } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { + els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); + } + + } + } + } +}, + +focus : function() { + this.wrapper.style.zIndex = hs.zIndexCounter += 2; + // blur others + for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && i == hs.focusKey) { + var blurExp = hs.expanders[i]; + blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; + if (blurExp.isImage) { + blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; + blurExp.content.title = hs.lang.focusTitle; + } + } + } + + // focus this + if (this.outline) this.outline.table.style.zIndex + = this.wrapper.style.zIndex - 1; + this.content.className = 'highslide-'+ this.contentType; + if (this.isImage) { + this.content.title = hs.lang.restoreTitle; + + if (hs.restoreCursor) { + hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; + if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; + this.content.style.cursor = hs.styleRestoreCursor; + } + } + hs.focusKey = this.key; + hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); +}, +moveTo: function(x, y) { + this.x.setPos(x); + this.y.setPos(y); +}, +resize : function (e) { var w, h, r = e.width / e.height; - w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); + w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full; h = this.isHtml ? e.height + e.dY : w / r; - if (h < Math.min(this.minHeight, this.y.full)) { - h = Math.min(this.minHeight, this.y.full); - if (this.isImage) w = h * r; - } - this.resizeTo(w, h); -}, -resizeTo: function(w, h) { + if (h < Math.min(this.minHeight, this.y.full)) { + h = Math.min(this.minHeight, this.y.full); + if (this.isImage) w = h * r; + } + this.resizeTo(w, h); +}, +resizeTo: function(w, h) { this.y.setSize(h); - this.x.setSize(w); + this.x.setSize(w); this.wrapper.style.height = this.y.get('wsize') +'px'; -}, - -close : function() { - if (this.isClosing || !this.isExpanded) return; - this.isClosing = true; - - hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - - try { - if (this.isHtml) this.htmlPrepareClose(); - this.content.style.cursor = 'default'; - this.changeSize( - 0, { - wrapper: { - width : this.x.t, - height : this.y.t, - left: this.x.tpos - this.x.cb + this.x.tb, - top: this.y.tpos - this.y.cb + this.y.tb - }, - content: { - left: 0, - top: 0, - width: this.x.t, - height: this.y.t - } - }, hs.restoreDuration - ); - } catch (e) { this.afterClose(); } -}, - -htmlPrepareClose : function() { - if (hs.geckoMac) { // bad redraws - if (!hs.mask) hs.mask = hs.createElement('div', null, - { position: 'absolute' }, hs.container); - hs.setStyles(hs.mask, { width: this.x.size +'px', height: this.y.size +'px', - left: this.x.pos +'px', top: this.y.pos +'px', display: 'block' }); - } - if (this.objectType == 'swf') try { hs.$(this.body.id).StopPlay(); } catch (e) {} - - if (this.objectLoadTime == 'after' && !this.preserveContent) this.destroyObject(); - if (this.scrollerDiv && this.scrollerDiv != this.scrollingContent) - this.scrollerDiv.style.overflow = 'hidden'; -}, - -destroyObject : function () { - if (hs.ie && this.iframe) - try { this.iframe.contentWindow.document.body.innerHTML = ''; } catch (e) {} - if (this.objectType == 'swf') swfobject.removeSWF(this.body.id); - this.body.innerHTML = ''; -}, - -sleep : function() { - if (this.outline) this.outline.table.style.display = 'none'; - this.releaseMask = null; - this.wrapper.style.display = 'none'; - this.isExpanded = false; - hs.push(hs.sleeping, this); -}, - -awake : function() {try { - - hs.expanders[this.key] = this; - - if (!hs.allowMultipleInstances &&hs.focusKey != this.key) { - try { hs.expanders[hs.focusKey].close(); } catch (e){} - } - - var z = hs.zIndexCounter++, stl = { display: '', zIndex: z }; - hs.setStyles (this.wrapper, stl); - this.isClosing = false; - - var o = this.outline || 0; - if (o) { - if (!this.outlineWhileAnimating) stl.visibility = 'hidden'; - hs.setStyles (o.table, stl); - } - - this.show(); -} catch (e) {} - - -}, - -createOverlay : function (o) { - var el = o.overlayId; - if (typeof el == 'string') el = hs.getNode(el); - if (o.html) el = hs.createElement('div', { innerHTML: o.html }); - if (!el || typeof el == 'string') return; - el.style.display = 'block'; - this.genOverlayBox(); +}, + +close : function() { + if (this.isClosing || !this.isExpanded) return; + this.isClosing = true; + + hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + + try { + if (this.isHtml) this.htmlPrepareClose(); + this.content.style.cursor = 'default'; + this.changeSize( + 0, { + wrapper: { + width : this.x.t, + height : this.y.t, + left: this.x.tpos - this.x.cb + this.x.tb, + top: this.y.tpos - this.y.cb + this.y.tb + }, + content: { + left: 0, + top: 0, + width: this.x.t, + height: this.y.t + } + }, hs.restoreDuration + ); + } catch (e) { this.afterClose(); } +}, + +htmlPrepareClose : function() { + if (hs.geckoMac) { // bad redraws + if (!hs.mask) hs.mask = hs.createElement('div', null, + { position: 'absolute' }, hs.container); + hs.setStyles(hs.mask, { width: this.x.size +'px', height: this.y.size +'px', + left: this.x.pos +'px', top: this.y.pos +'px', display: 'block' }); + } + if (this.objectType == 'swf') try { hs.$(this.body.id).StopPlay(); } catch (e) {} + + if (this.objectLoadTime == 'after' && !this.preserveContent) this.destroyObject(); + if (this.scrollerDiv && this.scrollerDiv != this.scrollingContent) + this.scrollerDiv.style.overflow = 'hidden'; +}, + +destroyObject : function () { + if (hs.ie && this.iframe) + try { this.iframe.contentWindow.document.body.innerHTML = ''; } catch (e) {} + if (this.objectType == 'swf') swfobject.removeSWF(this.body.id); + this.body.innerHTML = ''; +}, + +sleep : function() { + if (this.outline) this.outline.table.style.display = 'none'; + this.releaseMask = null; + this.wrapper.style.display = 'none'; + this.isExpanded = false; + hs.push(hs.sleeping, this); +}, + +awake : function() {try { + + hs.expanders[this.key] = this; + + if (!hs.allowMultipleInstances &&hs.focusKey != this.key) { + try { hs.expanders[hs.focusKey].close(); } catch (e){} + } + + var z = hs.zIndexCounter++, stl = { display: '', zIndex: z }; + hs.setStyles (this.wrapper, stl); + this.isClosing = false; + + var o = this.outline || 0; + if (o) { + if (!this.outlineWhileAnimating) stl.visibility = 'hidden'; + hs.setStyles (o.table, stl); + } + + this.show(); +} catch (e) {} + + +}, + +createOverlay : function (o) { + var el = o.overlayId; + if (typeof el == 'string') el = hs.getNode(el); + if (o.html) el = hs.createElement('div', { innerHTML: o.html }); + if (!el || typeof el == 'string') return; + el.style.display = 'block'; + this.genOverlayBox(); var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto'; - if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; - var overlay = hs.createElement( - 'div', { - id: 'hsId'+ hs.idCounter++, - hsId: o.hsId - }, { - position: 'absolute', - visibility: 'hidden', - width: width, - direction: hs.lang.cssDirection || '', - opacity: 0 - },this.overlayBox, - true - ); - - overlay.appendChild(el); + if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; + var overlay = hs.createElement( + 'div', { + id: 'hsId'+ hs.idCounter++, + hsId: o.hsId + }, { + position: 'absolute', + visibility: 'hidden', + width: width, + direction: hs.lang.cssDirection || '', + opacity: 0 + },this.overlayBox, + true + ); + + overlay.appendChild(el); hs.extend(overlay, { - opacity: 1, - offsetX: 0, - offsetY: 0, - dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 - }); + opacity: 1, + offsetX: 0, + offsetY: 0, + dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 + }); hs.extend(overlay, o); - - + + if (this.gotOverlays) { - this.positionOverlay(overlay); - if (!overlay.hideOnMouseOut || this.mouseIsOver) - hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); - } - hs.push(this.overlays, hs.idCounter - 1); -}, -positionOverlay : function(overlay) { - var p = overlay.position || 'middle center', - offX = overlay.offsetX, + this.positionOverlay(overlay); + if (!overlay.hideOnMouseOut || this.mouseIsOver) + hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); + } + hs.push(this.overlays, hs.idCounter - 1); +}, +positionOverlay : function(overlay) { + var p = overlay.position || 'middle center', + offX = overlay.offsetX, offY = overlay.offsetY; if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay); - if (/left$/.test(p)) overlay.style.left = offX +'px'; - - if (/center$/.test(p)) hs.setStyles (overlay, { - left: '50%', - marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' - }); - - if (/right$/.test(p)) overlay.style.right = - offX +'px'; - - if (/^leftpanel$/.test(p)) { - hs.setStyles(overlay, { - right: '100%', - marginRight: this.x.cb +'px', - top: - this.y.cb +'px', - bottom: - this.y.cb +'px', - overflow: 'auto' - }); - this.x.p1 = overlay.offsetWidth; - - } else if (/^rightpanel$/.test(p)) { - hs.setStyles(overlay, { - left: '100%', - marginLeft: this.x.cb +'px', - top: - this.y.cb +'px', - bottom: - this.y.cb +'px', - overflow: 'auto' - }); - this.x.p2 = overlay.offsetWidth; - } - - if (/^top/.test(p)) overlay.style.top = offY +'px'; - if (/^middle/.test(p)) hs.setStyles (overlay, { - top: '50%', - marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' - }); + if (/left$/.test(p)) overlay.style.left = offX +'px'; + + if (/center$/.test(p)) hs.setStyles (overlay, { + left: '50%', + marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' + }); + + if (/right$/.test(p)) overlay.style.right = - offX +'px'; + + if (/^leftpanel$/.test(p)) { + hs.setStyles(overlay, { + right: '100%', + marginRight: this.x.cb +'px', + top: - this.y.cb +'px', + bottom: - this.y.cb +'px', + overflow: 'auto' + }); + this.x.p1 = overlay.offsetWidth; + + } else if (/^rightpanel$/.test(p)) { + hs.setStyles(overlay, { + left: '100%', + marginLeft: this.x.cb +'px', + top: - this.y.cb +'px', + bottom: - this.y.cb +'px', + overflow: 'auto' + }); + this.x.p2 = overlay.offsetWidth; + } + + if (/^top/.test(p)) overlay.style.top = offY +'px'; + if (/^middle/.test(p)) hs.setStyles (overlay, { + top: '50%', + marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' + }); if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px'; - if (/^above$/.test(p)) { - hs.setStyles(overlay, { - left: (- this.x.p1 - this.x.cb) +'px', - right: (- this.x.p2 - this.x.cb) +'px', - bottom: '100%', - marginBottom: this.y.cb +'px', - width: 'auto' - }); - this.y.p1 = overlay.offsetHeight; - - } else if (/^below$/.test(p)) { - hs.setStyles(overlay, { - position: 'relative', - left: (- this.x.p1 - this.x.cb) +'px', - right: (- this.x.p2 - this.x.cb) +'px', - top: '100%', - marginTop: this.y.cb +'px', - width: 'auto' - }); - this.y.p2 = overlay.offsetHeight; + if (/^above$/.test(p)) { + hs.setStyles(overlay, { + left: (- this.x.p1 - this.x.cb) +'px', + right: (- this.x.p2 - this.x.cb) +'px', + bottom: '100%', + marginBottom: this.y.cb +'px', + width: 'auto' + }); + this.y.p1 = overlay.offsetHeight; + + } else if (/^below$/.test(p)) { + hs.setStyles(overlay, { + position: 'relative', + left: (- this.x.p1 - this.x.cb) +'px', + right: (- this.x.p2 - this.x.cb) +'px', + top: '100%', + marginTop: this.y.cb +'px', + width: 'auto' + }); + this.y.p2 = overlay.offsetHeight; overlay.style.position = 'absolute'; - } -}, - -getOverlays : function() { - this.getInline(['heading', 'caption'], true); - if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move'; - if (hs.showCredits) this.writeCredits(); - for (var i = 0; i < hs.overlays.length; i++) { - var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; - if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) - || (sg && sg === this.slideshowGroup)) { - if (this.isImage || (this.isHtml && o.useOnHtml)) - this.createOverlay(o); - } - } - var os = []; - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - if (/panel$/.test(o.position)) this.positionOverlay(o); - else hs.push(os, o); - } - for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); - this.gotOverlays = true; -}, -genOverlayBox : function() { - if (!this.overlayBox) this.overlayBox = hs.createElement ( - 'div', { + } +}, + +getOverlays : function() { + this.getInline(['heading', 'caption'], true); + if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move'; + if (hs.showCredits) this.writeCredits(); + for (var i = 0; i < hs.overlays.length; i++) { + var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; + if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) + || (sg && sg === this.slideshowGroup)) { + if (this.isImage || (this.isHtml && o.useOnHtml)) + this.createOverlay(o); + } + } + var os = []; + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + if (/panel$/.test(o.position)) this.positionOverlay(o); + else hs.push(os, o); + } + for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); + this.gotOverlays = true; +}, +genOverlayBox : function() { + if (!this.overlayBox) this.overlayBox = hs.createElement ( + 'div', { className: this.wrapperClassName - }, { - position : 'absolute', - width: (this.x.size || (this.useBox ? this.width : null) + }, { + position : 'absolute', + width: (this.x.size || (this.useBox ? this.width : null) || this.x.full) +'px', height: (this.y.size || this.y.full) +'px', - visibility : 'hidden', + visibility : 'hidden', overflow : 'hidden', - zIndex : hs.ie ? 4 : 'auto' - }, - hs.container, - true - ); -}, -sizeOverlayBox : function(doWrapper, doPanels) { - var overlayBox = this.overlayBox, - x = this.x, - y = this.y; - hs.setStyles( overlayBox, { - width: x.size +'px', - height: y.size +'px' - }); - if (doWrapper || doPanels) { - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); + zIndex : hs.ie ? 4 : 'auto' + }, + hs.container, + true + ); +}, +sizeOverlayBox : function(doWrapper, doPanels) { + var overlayBox = this.overlayBox, + x = this.x, + y = this.y; + hs.setStyles( overlayBox, { + width: x.size +'px', + height: y.size +'px' + }); + if (doWrapper || doPanels) { + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); if (o && /^(above|below)$/.test(o.position)) { - if (ie6) { - o.style.width = (overlayBox.offsetWidth + 2 * x.cb - + x.p1 + x.p2) +'px'; + if (ie6) { + o.style.width = (overlayBox.offsetWidth + 2 * x.cb + + x.p1 + x.p2) +'px'; } - y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; + y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; } - if (o && ie6 && /^(left|right)panel$/.test(o.position)) { - o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; - } - } - } - if (doWrapper) { - hs.setStyles(this.content, { - top: y.p1 +'px' - }); - hs.setStyles(overlayBox, { - top: (y.p1 + y.cb) +'px' - }); - } -}, - + if (o && ie6 && /^(left|right)panel$/.test(o.position)) { + o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; + } + } + } + if (doWrapper) { + hs.setStyles(this.content, { + top: y.p1 +'px' + }); + hs.setStyles(overlayBox, { + top: (y.p1 + y.cb) +'px' + }); + } +}, + showOverlays : function() { - var b = this.overlayBox; - b.className = ''; - hs.setStyles(b, { - top: (this.y.p1 + this.y.cb) +'px', - left: (this.x.p1 + this.x.cb) +'px', - overflow : 'visible' - }); - if (hs.safari) b.style.visibility = 'visible'; + var b = this.overlayBox; + b.className = ''; + hs.setStyles(b, { + top: (this.y.p1 + this.y.cb) +'px', + left: (this.x.p1 + this.x.cb) +'px', + overflow : 'visible' + }); + if (hs.safari) b.style.visibility = 'visible'; this.wrapper.appendChild (b); - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - o.style.zIndex = o.zIndex || 4; - if (!o.hideOnMouseOut || this.mouseIsOver) { - o.style.visibility = 'visible'; - hs.setStyles(o, { visibility: 'visible', display: '' }); - hs.animate(o, { opacity: o.opacity }, o.dur); - } - } -}, - -destroyOverlays : function() { - if (!this.overlays.length) return; - if (this.isHtml && this.preserveContent) { - this.overlayBox.style.top = '-9999px'; - hs.container.appendChild(this.overlayBox); - } else - hs.discardElement(this.overlayBox); -}, - - - -createFullExpand : function () { - this.fullExpandLabel = hs.createElement( - 'a', { - href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', - title: hs.lang.fullExpandTitle, - className: 'highslide-full-expand' - } - ); - - this.createOverlay({ - overlayId: this.fullExpandLabel, - position: hs.fullExpandPosition, - hideOnMouseOut: true, - opacity: hs.fullExpandOpacity - }); -}, - -doFullExpand : function () { - try { - if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); - - this.focus(); - var xSize = this.x.size, - ySize = this.y.size; - this.resizeTo(this.x.full, this.y.full); - - var xpos = this.x.pos - (this.x.size - xSize) / 2; - if (xpos < hs.marginLeft) xpos = hs.marginLeft; - - var ypos = this.y.pos - (this.y.size - ySize) / 2; - if (ypos < hs.marginTop) ypos = hs.marginTop; - - this.moveTo(xpos, ypos); - this.doShowHide('hidden'); - - } catch (e) { - this.error(e); - } -}, - - -afterClose : function () { - this.a.className = this.a.className.replace('highslide-active-anchor', ''); - - this.doShowHide('visible'); - - if (this.isHtml && this.preserveContent) { - this.sleep(); - } else { - if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); - - hs.discardElement(this.wrapper); - } - if (hs.mask) hs.mask.style.display = 'none'; - - hs.expanders[this.key] = null; - hs.reOrder(); -} - -}; - - -// hs.Ajax object prototype -hs.Ajax = function (a, content, pre) { - this.a = a; - this.content = content; + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + o.style.zIndex = o.zIndex || 4; + if (!o.hideOnMouseOut || this.mouseIsOver) { + o.style.visibility = 'visible'; + hs.setStyles(o, { visibility: 'visible', display: '' }); + hs.animate(o, { opacity: o.opacity }, o.dur); + } + } +}, + +destroyOverlays : function() { + if (!this.overlays.length) return; + if (this.isHtml && this.preserveContent) { + this.overlayBox.style.top = '-9999px'; + hs.container.appendChild(this.overlayBox); + } else + hs.discardElement(this.overlayBox); +}, + + + +createFullExpand : function () { + this.fullExpandLabel = hs.createElement( + 'a', { + href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', + title: hs.lang.fullExpandTitle, + className: 'highslide-full-expand' + } + ); + + this.createOverlay({ + overlayId: this.fullExpandLabel, + position: hs.fullExpandPosition, + hideOnMouseOut: true, + opacity: hs.fullExpandOpacity + }); +}, + +doFullExpand : function () { + try { + if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); + + this.focus(); + var xSize = this.x.size, + ySize = this.y.size; + this.resizeTo(this.x.full, this.y.full); + + var xpos = this.x.pos - (this.x.size - xSize) / 2; + if (xpos < hs.marginLeft) xpos = hs.marginLeft; + + var ypos = this.y.pos - (this.y.size - ySize) / 2; + if (ypos < hs.marginTop) ypos = hs.marginTop; + + this.moveTo(xpos, ypos); + this.doShowHide('hidden'); + + } catch (e) { + this.error(e); + } +}, + + +afterClose : function () { + this.a.className = this.a.className.replace('highslide-active-anchor', ''); + + this.doShowHide('visible'); + + if (this.isHtml && this.preserveContent) { + this.sleep(); + } else { + if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); + + hs.discardElement(this.wrapper); + } + if (hs.mask) hs.mask.style.display = 'none'; + + hs.expanders[this.key] = null; + hs.reOrder(); +} + +}; + + +// hs.Ajax object prototype +hs.Ajax = function (a, content, pre) { + this.a = a; + this.content = content; this.pre = pre; -}; - -hs.Ajax.prototype = { -run : function () { - var xhr; - if (!this.src) this.src = hs.getSrc(this.a); - if (this.src.match('#')) { - var arr = this.src.split('#'); - this.src = arr[0]; - this.id = arr[1]; - } - if (hs.cachedGets[this.src]) { - this.cachedGet = hs.cachedGets[this.src]; - if (this.id) this.getElementContent(); - else this.loadHTML(); - return; - } - try { xhr = new XMLHttpRequest(); } - catch (e) { - try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } - catch (e) { - try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } - catch (e) { this.onError(); } - } - } - var pThis = this; - xhr.onreadystatechange = function() { - if(pThis.xhr.readyState == 4) { - if (pThis.id) pThis.getElementContent(); - else pThis.loadHTML(); - } - }; - var src = this.src; - this.xhr = xhr; - if (hs.forceAjaxReload) - src = src.replace(/$/, (/\?/.test(src) ? '&' : '?') +'dummy='+ (new Date()).getTime()); - xhr.open('GET', src, true); - xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); +}; + +hs.Ajax.prototype = { +run : function () { + var xhr; + if (!this.src) this.src = hs.getSrc(this.a); + if (this.src.match('#')) { + var arr = this.src.split('#'); + this.src = arr[0]; + this.id = arr[1]; + } + if (hs.cachedGets[this.src]) { + this.cachedGet = hs.cachedGets[this.src]; + if (this.id) this.getElementContent(); + else this.loadHTML(); + return; + } + try { xhr = new XMLHttpRequest(); } + catch (e) { + try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } + catch (e) { + try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } + catch (e) { this.onError(); } + } + } + var pThis = this; + xhr.onreadystatechange = function() { + if(pThis.xhr.readyState == 4) { + if (pThis.id) pThis.getElementContent(); + else pThis.loadHTML(); + } + }; + var src = this.src; + this.xhr = xhr; + if (hs.forceAjaxReload) + src = src.replace(/$/, (/\?/.test(src) ? '&' : '?') +'dummy='+ (new Date()).getTime()); + xhr.open('GET', src, true); + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.send(null); -}, - -getElementContent : function() { - hs.init(); + xhr.send(null); +}, + +getElementContent : function() { + hs.init(); var attribs = window.opera || hs.ie6SSL ? { src: 'about:blank' } : null; - - this.iframe = hs.createElement('iframe', attribs, - { position: 'absolute', top: '-9999px' }, hs.container); - - this.loadHTML(); -}, - -loadHTML : function() { - var s = this.cachedGet || this.xhr.responseText, - regBody; - if (this.pre) hs.cachedGets[this.src] = s; - if (!hs.ie || hs.uaVersion >= 5.5) { - s = s.replace(new RegExp('<link[^>]*>', 'gi'), '') - .replace(new RegExp('<script[^>]*>.*?</script>', 'gi'), ''); - if (this.iframe) { - var doc = this.iframe.contentDocument; - if (!doc && this.iframe.contentWindow) doc = this.iframe.contentWindow.document; - if (!doc) { // Opera - var pThis = this; - setTimeout(function() { pThis.loadHTML(); }, 25); - return; - } - doc.open(); - doc.write(s); - doc.close(); - try { s = doc.getElementById(this.id).innerHTML; } catch (e) { - try { s = this.iframe.document.getElementById(this.id).innerHTML; } catch (e) {} // opera - } - hs.discardElement(this.iframe); - } else { - regBody = /(<body[^>]*>|<\/body>)/ig; + + this.iframe = hs.createElement('iframe', attribs, + { position: 'absolute', top: '-9999px' }, hs.container); + + this.loadHTML(); +}, + +loadHTML : function() { + var s = this.cachedGet || this.xhr.responseText, + regBody; + if (this.pre) hs.cachedGets[this.src] = s; + if (!hs.ie || hs.uaVersion >= 5.5) { + s = s.replace(new RegExp('<link[^>]*>', 'gi'), '') + .replace(new RegExp('<script[^>]*>.*?</script>', 'gi'), ''); + if (this.iframe) { + var doc = this.iframe.contentDocument; + if (!doc && this.iframe.contentWindow) doc = this.iframe.contentWindow.document; + if (!doc) { // Opera + var pThis = this; + setTimeout(function() { pThis.loadHTML(); }, 25); + return; + } + doc.open(); + doc.write(s); + doc.close(); + try { s = doc.getElementById(this.id).innerHTML; } catch (e) { + try { s = this.iframe.document.getElementById(this.id).innerHTML; } catch (e) {} // opera + } + hs.discardElement(this.iframe); + } else { + regBody = /(<body[^>]*>|<\/body>)/ig; if (regBody.test(s)) s = s.split(regBody)[hs.ieLt9 ? 1 : 2]; - - } - } - hs.getElementByClass(this.content, 'DIV', 'highslide-body').innerHTML = s; - this.onLoad(); + + } + } + hs.getElementByClass(this.content, 'DIV', 'highslide-body').innerHTML = s; + this.onLoad(); for (var x in this) this[x] = null; -} +} }; -hs.langDefaults = hs.lang; -// history +hs.langDefaults = hs.lang; +// history var HsExpander = hs.Expander; if (hs.ie && window == window.top) { - (function () { - try { - document.documentElement.doScroll('left'); - } catch (e) { - setTimeout(arguments.callee, 50); - return; - } - hs.ready(); - })(); -} + (function () { + try { + document.documentElement.doScroll('left'); + } catch (e) { + setTimeout(arguments.callee, 50); + return; + } + hs.ready(); + })(); +} hs.addEventListener(document, 'DOMContentLoaded', hs.ready); hs.addEventListener(window, 'load', hs.ready); - + // set handlers -hs.addEventListener(document, 'ready', function() { - if (hs.expandCursor) { - var style = hs.createElement('style', { type: 'text/css' }, null, - document.getElementsByTagName('HEAD')[0]), - backCompat = document.compatMode == 'BackCompat'; - - - function addRule(sel, dec) { - if (hs.ie && (hs.uaVersion < 9 || backCompat)) { - var last = document.styleSheets[document.styleSheets.length - 1]; - if (typeof(last.addRule) == "object") last.addRule(sel, dec); - } else { - style.appendChild(document.createTextNode(sel + " {" + dec + "}")); - } +hs.addEventListener(document, 'ready', function() { + if (hs.expandCursor) { + var style = hs.createElement('style', { type: 'text/css' }, null, + document.getElementsByTagName('HEAD')[0]), + backCompat = document.compatMode == 'BackCompat'; + + + function addRule(sel, dec) { + if (hs.ie && (hs.uaVersion < 9 || backCompat)) { + var last = document.styleSheets[document.styleSheets.length - 1]; + if (typeof(last.addRule) == "object") last.addRule(sel, dec); + } else { + style.appendChild(document.createTextNode(sel + " {" + dec + "}")); + } + } + function fix(prop) { + return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + + ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; } - function fix(prop) { - return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + - ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; - } - if (hs.expandCursor) addRule ('.highslide img', - 'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); - } -}); -hs.addEventListener(window, 'resize', function() { - hs.getPageSize(); -}); -hs.addEventListener(document, 'mousemove', function(e) { - hs.mouse = { x: e.clientX, y: e.clientY }; -}); -hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); -hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); - -hs.addEventListener(document, 'ready', hs.getAnchors); -hs.addEventListener(window, 'load', hs.preloadImages); -hs.addEventListener(window, 'load', hs.preloadAjax); -} + if (hs.expandCursor) addRule ('.highslide img', + 'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); + } +}); +hs.addEventListener(window, 'resize', function() { + hs.getPageSize(); +}); +hs.addEventListener(document, 'mousemove', function(e) { + hs.mouse = { x: e.clientX, y: e.clientY }; +}); +hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); +hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); + +hs.addEventListener(document, 'ready', hs.getAnchors); +hs.addEventListener(window, 'load', hs.preloadImages); +hs.addEventListener(window, 'load', hs.preloadAjax); +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.min.js index aa2119ff6b75124663e973ffdf206114a3b538e8..7b4a3b8a82efc4675abe72a3002f265c6bd1806b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.min.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.min.js @@ -1,9 +1,9 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) * Config: default +inline +ajax +iframe +flash - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ if(!hs){var hs={lang:{cssDirection:"ltr",loadingText:"Loading...",loadingTitle:"Click to cancel",focusTitle:"Click to bring to front",fullExpandTitle:"Expand to actual size (f)",creditsText:"Powered by <i>Highslide JS</i>",creditsTitle:"Go to the Highslide JS homepage",previousText:"Previous",nextText:"Next",moveText:"Move",closeText:"Close",closeTitle:"Close (esc)",resizeTitle:"Resize",playText:"Play",playTitle:"Play slideshow (spacebar)",pauseText:"Pause",pauseTitle:"Pause slideshow (spacebar)",previousTitle:"Previous (arrow left)",nextTitle:"Next (arrow right)",moveTitle:"Move",fullExpandText:"1:1",restoreTitle:"Click to close image, click and drag to move. Use arrow keys for next and previous."},graphicsDir:"highslide/graphics/",expandCursor:"zoomin.cur",restoreCursor:"zoomout.cur",expandDuration:250,restoreDuration:250,marginLeft:15,marginRight:15,marginTop:15,marginBottom:15,zIndexCounter:1001,loadingOpacity:0.75,allowMultipleInstances:true,numberOfImagesToPreload:5,outlineWhileAnimating:2,outlineStartOffset:3,padToMinWidth:false,fullExpandPosition:"bottom right",fullExpandOpacity:1,showCredits:true,creditsHref:"http://highslide.com/",creditsTarget:"_self",enableKeyListener:true,openerTagNames:["a"],allowWidthReduction:false,allowHeightReduction:true,preserveContent:true,objectLoadTime:"before",cacheAjax:true,dragByHeading:true,minWidth:200,minHeight:200,allowSizeReduction:true,outlineType:"drop-shadow",skin:{contentWrapper:'<div class="highslide-header"><ul><li class="highslide-previous"><a href="#" title="{hs.lang.previousTitle}" onclick="return hs.previous(this)"><span>{hs.lang.previousText}</span></a></li><li class="highslide-next"><a href="#" title="{hs.lang.nextTitle}" onclick="return hs.next(this)"><span>{hs.lang.nextText}</span></a></li><li class="highslide-move"><a href="#" title="{hs.lang.moveTitle}" onclick="return false"><span>{hs.lang.moveText}</span></a></li><li class="highslide-close"><a href="#" title="{hs.lang.closeTitle}" onclick="return hs.close(this)"><span>{hs.lang.closeText}</span></a></li></ul></div><div class="highslide-body"></div><div class="highslide-footer"><div><span class="highslide-resize" title="{hs.lang.resizeTitle}"><span></span></span></div></div>'},preloadTheseImages:[],continuePreloading:true,expanders:[],overrides:["allowSizeReduction","useBox","outlineType","outlineWhileAnimating","captionId","captionText","captionEval","captionOverlay","headingId","headingText","headingEval","headingOverlay","creditsPosition","dragByHeading","width","height","contentId","allowWidthReduction","allowHeightReduction","preserveContent","maincontentId","maincontentText","maincontentEval","objectType","cacheAjax","objectWidth","objectHeight","objectLoadTime","swfOptions","wrapperClassName","minWidth","minHeight","maxWidth","maxHeight","pageOrigin","slideshowGroup","easing","easingClose","fadeInOut","src"],overlays:[],idCounter:0,oPos:{x:["leftpanel","left","center","right","rightpanel"],y:["above","top","middle","bottom","below"]},mouse:{},headingOverlay:{},captionOverlay:{},swfOptions:{flashvars:{},params:{},attributes:{}},timers:[],pendingOutlines:{},sleeping:[],preloadTheseAjax:[],cacheBindings:[],cachedGets:{},clones:{},onReady:[],uaVersion:/Trident\/4\.0/.test(navigator.userAgent)?8:parseFloat((navigator.userAgent.toLowerCase().match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1]),ie:(document.all&&!window.opera),safari:/Safari/.test(navigator.userAgent),geckoMac:/Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent),$:function(a){if(a){return document.getElementById(a)}},push:function(a,b){a[a.length]=b},createElement:function(a,f,e,d,c){var b=document.createElement(a);if(f){hs.extend(b,f)}if(c){hs.setStyles(b,{padding:0,border:"none",margin:0})}if(e){hs.setStyles(b,e)}if(d){d.appendChild(b)}return b},extend:function(b,c){for(var a in c){b[a]=c[a]}return b},setStyles:function(b,c){for(var a in c){if(hs.ieLt9&&a=="opacity"){if(c[a]>0.99){b.style.removeAttribute("filter")}else{b.style.filter="alpha(opacity="+(c[a]*100)+")"}}else{b.style[a]=c[a]}}},animate:function(f,a,d){var c,g,j;if(typeof d!="object"||d===null){var i=arguments;d={duration:i[2],easing:i[3],complete:i[4]}}if(typeof d.duration!="number"){d.duration=250}d.easing=Math[d.easing]||Math.easeInQuad;d.curAnim=hs.extend({},a);for(var b in a){var h=new hs.fx(f,d,b);c=parseFloat(hs.css(f,b))||0;g=parseFloat(a[b]);j=b!="opacity"?"px":"";h.custom(c,g,j)}},css:function(a,c){if(a.style[c]){return a.style[c]}else{if(document.defaultView){return document.defaultView.getComputedStyle(a,null).getPropertyValue(c)}else{if(c=="opacity"){c="filter"}var b=a.currentStyle[c.replace(/\-(\w)/g,function(e,d){return d.toUpperCase()})];if(c=="filter"){b=b.replace(/alpha\(opacity=([0-9]+)\)/,function(e,d){return d/100})}return b===""?1:b}}},getPageSize:function(){var f=document,b=window,e=f.compatMode&&f.compatMode!="BackCompat"?f.documentElement:f.body,g=hs.ie&&(hs.uaVersion<9||typeof pageXOffset=="undefined");var c=g?e.clientWidth:(f.documentElement.clientWidth||self.innerWidth),a=g?e.clientHeight:self.innerHeight;hs.page={width:c,height:a,scrollLeft:g?e.scrollLeft:pageXOffset,scrollTop:g?e.scrollTop:pageYOffset};return hs.page},getPosition:function(a){var b={x:a.offsetLeft,y:a.offsetTop};while(a.offsetParent){a=a.offsetParent;b.x+=a.offsetLeft;b.y+=a.offsetTop;if(a!=document.body&&a!=document.documentElement){b.x-=a.scrollLeft;b.y-=a.scrollTop}}return b},expand:function(b,h,f,d){if(!b){b=hs.createElement("a",null,{display:"none"},hs.container)}if(typeof b.getParams=="function"){return h}if(d=="html"){for(var c=0;c<hs.sleeping.length;c++){if(hs.sleeping[c]&&hs.sleeping[c].a==b){hs.sleeping[c].awake();hs.sleeping[c]=null;return false}}hs.hasHtmlExpanders=true}try{new hs.Expander(b,h,f,d);return false}catch(g){return true}},htmlExpand:function(b,d,c){return hs.expand(b,d,c,"html")},getSelfRendered:function(){return hs.createElement("div",{className:"highslide-html-content",innerHTML:hs.replaceLang(hs.skin.contentWrapper)})},getElementByClass:function(e,c,d){var b=e.getElementsByTagName(c);for(var a=0;a<b.length;a++){if((new RegExp(d)).test(b[a].className)){return b[a]}}return null},replaceLang:function(c){c=c.replace(/\s/g," ");var b=/{hs\.lang\.([^}]+)\}/g,d=c.match(b),e;if(d){for(var a=0;a<d.length;a++){e=d[a].replace(b,"$1");if(typeof hs.lang[e]!="undefined"){c=c.replace(d[a],hs.lang[e])}}}return c},getCacheBinding:function(b){for(var d=0;d<hs.cacheBindings.length;d++){if(hs.cacheBindings[d][0]==b){var e=hs.cacheBindings[d][1];hs.cacheBindings[d][1]=e.cloneNode(1);return e}}return null},preloadAjax:function(f){var b=hs.getAnchors();for(var d=0;d<b.htmls.length;d++){var c=b.htmls[d];if(hs.getParam(c,"objectType")=="ajax"&&hs.getParam(c,"cacheAjax")){hs.push(hs.preloadTheseAjax,c)}}hs.preloadAjaxElement(0)},preloadAjaxElement:function(d){if(!hs.preloadTheseAjax[d]){return}var b=hs.preloadTheseAjax[d];var c=hs.getNode(hs.getParam(b,"contentId"));if(!c){c=hs.getSelfRendered()}var e=new hs.Ajax(b,c,1);e.onError=function(){};e.onLoad=function(){hs.push(hs.cacheBindings,[b,c]);hs.preloadAjaxElement(d+1)};e.run()},focusTopmost:function(){var c=0,b=-1,a=hs.expanders,e,f;for(var d=0;d<a.length;d++){e=a[d];if(e){f=e.wrapper.style.zIndex;if(f&&f>c){c=f;b=d}}}if(b==-1){hs.focusKey=-1}else{a[b].focus()}},getParam:function(b,d){b.getParams=b.onclick;var c=b.getParams?b.getParams():null;b.getParams=null;return(c&&typeof c[d]!="undefined")?c[d]:(typeof hs[d]!="undefined"?hs[d]:null)},getSrc:function(b){var c=hs.getParam(b,"src");if(c){return c}return b.href},getNode:function(e){var c=hs.$(e),d=hs.clones[e],b={};if(!c&&!d){return null}if(!d){d=c.cloneNode(true);d.id="";hs.clones[e]=d;return c}else{return d.cloneNode(true)}},discardElement:function(a){if(a){hs.garbageBin.appendChild(a)}hs.garbageBin.innerHTML=""},transit:function(a,d){var b=d||hs.getExpander();d=b;if(hs.upcoming){return false}else{hs.last=b}hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{hs.upcoming=a;a.onclick()}catch(c){hs.last=hs.upcoming=null}try{d.close()}catch(c){}return false},previousOrNext:function(a,c){var b=hs.getExpander(a);if(b){return hs.transit(b.getAdjacentAnchor(c),b)}else{return false}},previous:function(a){return hs.previousOrNext(a,-1)},next:function(a){return hs.previousOrNext(a,1)},keyHandler:function(a){if(!a){a=window.event}if(!a.target){a.target=a.srcElement}if(typeof a.target.form!="undefined"){return true}var b=hs.getExpander();var c=null;switch(a.keyCode){case 70:if(b){b.doFullExpand()}return true;case 32:case 34:case 39:case 40:c=1;break;case 8:case 33:case 37:case 38:c=-1;break;case 27:case 13:c=0}if(c!==null){hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);if(!hs.enableKeyListener){return true}if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}if(b){if(c==0){b.close()}else{hs.previousOrNext(b.key,c)}return false}}return true},registerOverlay:function(a){hs.push(hs.overlays,hs.extend(a,{hsId:"hsId"+hs.idCounter++}))},getWrapperKey:function(c,b){var e,d=/^highslide-wrapper-([0-9]+)$/;e=c;while(e.parentNode){if(e.id&&d.test(e.id)){return e.id.replace(d,"$1")}e=e.parentNode}if(!b){e=c;while(e.parentNode){if(e.tagName&&hs.isHsAnchor(e)){for(var a=0;a<hs.expanders.length;a++){var f=hs.expanders[a];if(f&&f.a==e){return a}}}e=e.parentNode}}return null},getExpander:function(b,a){if(typeof b=="undefined"){return hs.expanders[hs.focusKey]||null}if(typeof b=="number"){return hs.expanders[b]||null}if(typeof b=="string"){b=hs.$(b)}return hs.expanders[hs.getWrapperKey(b,a)]||null},isHsAnchor:function(b){return(b.onclick&&b.onclick.toString().replace(/\s/g," ").match(/hs.(htmlE|e)xpand/))},reOrder:function(){for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&hs.expanders[a].isExpanded){hs.focusTopmost()}}},mouseClickHandler:function(d){if(!d){d=window.event}if(d.button>1){return true}if(!d.target){d.target=d.srcElement}var b=d.target;while(b.parentNode&&!(/highslide-(image|move|html|resize)/.test(b.className))){b=b.parentNode}var f=hs.getExpander(b);if(f&&(f.isClosing||!f.isExpanded)){return true}if(f&&d.type=="mousedown"){if(d.target.form){return true}var a=b.className.match(/highslide-(image|move|resize)/);if(a){hs.dragArgs={exp:f,type:a[1],left:f.x.pos,width:f.x.size,top:f.y.pos,height:f.y.size,clickX:d.clientX,clickY:d.clientY};hs.addEventListener(document,"mousemove",hs.dragHandler);if(d.preventDefault){d.preventDefault()}if(/highslide-(image|html)-blur/.test(f.content.className)){f.focus();hs.hasFocused=true}return false}else{if(/highslide-html/.test(b.className)&&hs.focusKey!=f.key){f.focus();f.doShowHide("hidden")}}}else{if(d.type=="mouseup"){hs.removeEventListener(document,"mousemove",hs.dragHandler);if(hs.dragArgs){if(hs.styleRestoreCursor&&hs.dragArgs.type=="image"){hs.dragArgs.exp.content.style.cursor=hs.styleRestoreCursor}var c=hs.dragArgs.hasDragged;if(!c&&!hs.hasFocused&&!/(move|resize)/.test(hs.dragArgs.type)){f.close()}else{if(c||(!c&&hs.hasHtmlExpanders)){hs.dragArgs.exp.doShowHide("hidden")}}if(hs.dragArgs.exp.releaseMask){hs.dragArgs.exp.releaseMask.style.display="none"}hs.hasFocused=false;hs.dragArgs=null}else{if(/highslide-image-blur/.test(b.className)){b.style.cursor=hs.styleRestoreCursor}}}}return false},dragHandler:function(c){if(!hs.dragArgs){return true}if(!c){c=window.event}var b=hs.dragArgs,d=b.exp;if(d.iframe){if(!d.releaseMask){d.releaseMask=hs.createElement("div",null,{position:"absolute",width:d.x.size+"px",height:d.y.size+"px",left:d.x.cb+"px",top:d.y.cb+"px",zIndex:4,background:(hs.ieLt9?"white":"none"),opacity:0.01},d.wrapper,true)}if(d.releaseMask.style.display=="none"){d.releaseMask.style.display=""}}b.dX=c.clientX-b.clickX;b.dY=c.clientY-b.clickY;var f=Math.sqrt(Math.pow(b.dX,2)+Math.pow(b.dY,2));if(!b.hasDragged){b.hasDragged=(b.type!="image"&&f>0)||(f>(hs.dragSensitivity||5))}if(b.hasDragged&&c.clientX>5&&c.clientY>5){if(b.type=="resize"){d.resize(b)}else{d.moveTo(b.left+b.dX,b.top+b.dY);if(b.type=="image"){d.content.style.cursor="move"}}}return false},wrapperMouseHandler:function(c){try{if(!c){c=window.event}var b=/mouseover/i.test(c.type);if(!c.target){c.target=c.srcElement}if(!c.relatedTarget){c.relatedTarget=b?c.fromElement:c.toElement}var d=hs.getExpander(c.target);if(!d.isExpanded){return}if(!d||!c.relatedTarget||hs.getExpander(c.relatedTarget,true)==d||hs.dragArgs){return}for(var a=0;a<d.overlays.length;a++){(function(){var e=hs.$("hsId"+d.overlays[a]);if(e&&e.hideOnMouseOut){if(b){hs.setStyles(e,{visibility:"visible",display:""})}hs.animate(e,{opacity:b?e.opacity:0},e.dur)}})()}}catch(c){}},addEventListener:function(a,c,b){if(a==document&&c=="ready"){hs.push(hs.onReady,b)}try{a.addEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b);a.attachEvent("on"+c,b)}catch(d){a["on"+c]=b}}},removeEventListener:function(a,c,b){try{a.removeEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b)}catch(d){a["on"+c]=null}}},preloadFullImage:function(b){if(hs.continuePreloading&&hs.preloadTheseImages[b]&&hs.preloadTheseImages[b]!="undefined"){var a=document.createElement("img");a.onload=function(){a=null;hs.preloadFullImage(b+1)};a.src=hs.preloadTheseImages[b]}},preloadImages:function(c){if(c&&typeof c!="object"){hs.numberOfImagesToPreload=c}var a=hs.getAnchors();for(var b=0;b<a.images.length&&b<hs.numberOfImagesToPreload;b++){hs.push(hs.preloadTheseImages,hs.getSrc(a.images[b]))}if(hs.outlineType){new hs.Outline(hs.outlineType,function(){hs.preloadFullImage(0)})}else{hs.preloadFullImage(0)}if(hs.restoreCursor){var d=hs.createElement("img",{src:hs.graphicsDir+hs.restoreCursor})}},init:function(){if(!hs.container){hs.ieLt7=hs.ie&&hs.uaVersion<7;hs.ieLt9=hs.ie&&hs.uaVersion<9;hs.getPageSize();hs.ie6SSL=hs.ieLt7&&location.protocol=="https:";for(var a in hs.langDefaults){if(typeof hs[a]!="undefined"){hs.lang[a]=hs[a]}else{if(typeof hs.lang[a]=="undefined"&&typeof hs.langDefaults[a]!="undefined"){hs.lang[a]=hs.langDefaults[a]}}}hs.container=hs.createElement("div",{className:"highslide-container"},{position:"absolute",left:0,top:0,width:"100%",zIndex:hs.zIndexCounter,direction:"ltr"},document.body,true);hs.loading=hs.createElement("a",{className:"highslide-loading",title:hs.lang.loadingTitle,innerHTML:hs.lang.loadingText,href:"javascript:;"},{position:"absolute",top:"-9999px",opacity:hs.loadingOpacity,zIndex:1},hs.container);hs.garbageBin=hs.createElement("div",null,{display:"none"},hs.container);hs.clearing=hs.createElement("div",null,{clear:"both",paddingTop:"1px"},null,true);Math.linearTween=function(f,e,h,g){return h*f/g+e};Math.easeInQuad=function(f,e,h,g){return h*(f/=g)*f+e};hs.hideSelects=hs.ieLt7;hs.hideIframes=((window.opera&&hs.uaVersion<9)||navigator.vendor=="KDE"||(hs.ieLt7&&hs.uaVersion<5.5))}},ready:function(){if(hs.isReady){return}hs.isReady=true;for(var a=0;a<hs.onReady.length;a++){hs.onReady[a]()}},updateAnchors:function(){var a,d,l=[],h=[],k=[],b={},m;for(var e=0;e<hs.openerTagNames.length;e++){d=document.getElementsByTagName(hs.openerTagNames[e]);for(var c=0;c<d.length;c++){a=d[c];m=hs.isHsAnchor(a);if(m){hs.push(l,a);if(m[0]=="hs.expand"){hs.push(h,a)}else{if(m[0]=="hs.htmlExpand"){hs.push(k,a)}}var f=hs.getParam(a,"slideshowGroup")||"none";if(!b[f]){b[f]=[]}hs.push(b[f],a)}}}hs.anchors={all:l,groups:b,images:h,htmls:k};return hs.anchors},getAnchors:function(){return hs.anchors||hs.updateAnchors()},close:function(a){var b=hs.getExpander(a);if(b){b.close()}return false}};hs.fx=function(b,a,c){this.options=a;this.elem=b;this.prop=c;if(!a.orig){a.orig={}}};hs.fx.prototype={update:function(){(hs.fx.step[this.prop]||hs.fx.step._default)(this);if(this.options.step){this.options.step.call(this.elem,this.now,this)}},custom:function(e,d,c){this.startTime=(new Date()).getTime();this.start=e;this.end=d;this.unit=c;this.now=this.start;this.pos=this.state=0;var a=this;function b(f){return a.step(f)}b.elem=this.elem;if(b()&&hs.timers.push(b)==1){hs.timerId=setInterval(function(){var g=hs.timers;for(var f=0;f<g.length;f++){if(!g[f]()){g.splice(f--,1)}}if(!g.length){clearInterval(hs.timerId)}},13)}},step:function(d){var c=(new Date()).getTime();if(d||c>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var a=true;for(var b in this.options.curAnim){if(this.options.curAnim[b]!==true){a=false}}if(a){if(this.options.complete){this.options.complete.call(this.elem)}}return false}else{var e=c-this.startTime;this.state=e/this.options.duration;this.pos=this.options.easing(e,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};hs.extend(hs.fx,{step:{opacity:function(a){hs.setStyles(a.elem,{opacity:a.now})},_default:function(a){try{if(a.elem.style&&a.elem.style[a.prop]!=null){a.elem.style[a.prop]=a.now+a.unit}else{a.elem[a.prop]=a.now}}catch(b){}}}});hs.Outline=function(g,e){this.onLoad=e;this.outlineType=g;var a=hs.uaVersion,f;this.hasAlphaImageLoader=hs.ie&&hs.uaVersion<7;if(!g){if(e){e()}return}hs.init();this.table=hs.createElement("table",{cellSpacing:0},{visibility:"hidden",position:"absolute",borderCollapse:"collapse",width:0},hs.container,true);var b=hs.createElement("tbody",null,null,this.table,1);this.td=[];for(var c=0;c<=8;c++){if(c%3==0){f=hs.createElement("tr",null,{height:"auto"},b,true)}this.td[c]=hs.createElement("td",null,null,f,true);var d=c!=4?{lineHeight:0,fontSize:0}:{position:"relative"};hs.setStyles(this.td[c],d)}this.td[4].className=g+" highslide-outline";this.preloadGraphic()};hs.Outline.prototype={preloadGraphic:function(){var b=hs.graphicsDir+(hs.outlinesDir||"outlines/")+this.outlineType+".png";var a=hs.safari&&hs.uaVersion<525?hs.container:null;this.graphic=hs.createElement("img",null,{position:"absolute",top:"-9999px"},a,true);var c=this;this.graphic.onload=function(){c.onGraphicLoad()};this.graphic.src=b},onGraphicLoad:function(){var d=this.offset=this.graphic.width/4,f=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],c={height:(2*d)+"px",width:(2*d)+"px"};for(var b=0;b<=8;b++){if(f[b]){if(this.hasAlphaImageLoader){var a=(b==1||b==7)?"100%":this.graphic.width+"px";var e=hs.createElement("div",null,{width:"100%",height:"100%",position:"relative",overflow:"hidden"},this.td[b],true);hs.createElement("div",null,{filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+this.graphic.src+"')",position:"absolute",width:a,height:this.graphic.height+"px",left:(f[b][0]*d)+"px",top:(f[b][1]*d)+"px"},e,true)}else{hs.setStyles(this.td[b],{background:"url("+this.graphic.src+") "+(f[b][0]*d)+"px "+(f[b][1]*d)+"px"})}if(window.opera&&(b==3||b==5)){hs.createElement("div",null,c,this.td[b],true)}hs.setStyles(this.td[b],c)}}this.graphic=null;if(hs.pendingOutlines[this.outlineType]){hs.pendingOutlines[this.outlineType].destroy()}hs.pendingOutlines[this.outlineType]=this;if(this.onLoad){this.onLoad()}},setPosition:function(g,e,c,b,f){var d=this.exp,a=d.wrapper.style,e=e||0,g=g||{x:d.x.pos+e,y:d.y.pos+e,w:d.x.get("wsize")-2*e,h:d.y.get("wsize")-2*e};if(c){this.table.style.visibility=(g.h>=4*this.offset)?"visible":"hidden"}hs.setStyles(this.table,{left:(g.x-this.offset)+"px",top:(g.y-this.offset)+"px",width:(g.w+2*this.offset)+"px"});g.w-=2*this.offset;g.h-=2*this.offset;hs.setStyles(this.td[4],{width:g.w>=0?g.w+"px":0,height:g.h>=0?g.h+"px":0});if(this.hasAlphaImageLoader){this.td[3].style.height=this.td[5].style.height=this.td[4].style.height}},destroy:function(a){if(a){this.table.style.visibility="hidden"}else{hs.discardElement(this.table)}}};hs.Dimension=function(b,a){this.exp=b;this.dim=a;this.ucwh=a=="x"?"Width":"Height";this.wh=this.ucwh.toLowerCase();this.uclt=a=="x"?"Left":"Top";this.lt=this.uclt.toLowerCase();this.ucrb=a=="x"?"Right":"Bottom";this.rb=this.ucrb.toLowerCase();this.p1=this.p2=0};hs.Dimension.prototype={get:function(a){switch(a){case"loadingPos":return this.tpos+this.tb+(this.t-hs.loading["offset"+this.ucwh])/2;case"wsize":return this.size+2*this.cb+this.p1+this.p2;case"fitsize":return this.clientSize-this.marginMin-this.marginMax;case"maxsize":return this.get("fitsize")-2*this.cb-this.p1-this.p2;case"opos":return this.pos-(this.exp.outline?this.exp.outline.offset:0);case"osize":return this.get("wsize")+(this.exp.outline?2*this.exp.outline.offset:0);case"imgPad":return this.imgSize?Math.round((this.size-this.imgSize)/2):0}},calcBorders:function(){this.cb=(this.exp.content["offset"+this.ucwh]-this.t)/2;this.marginMax=hs["margin"+this.ucrb]},calcThumb:function(){this.t=this.exp.el[this.wh]?parseInt(this.exp.el[this.wh]):this.exp.el["offset"+this.ucwh];this.tpos=this.exp.tpos[this.dim];this.tb=(this.exp.el["offset"+this.ucwh]-this.t)/2;if(this.tpos==0||this.tpos==-1){this.tpos=(hs.page[this.wh]/2)+hs.page["scroll"+this.uclt]}},calcExpanded:function(){var a=this.exp;this.justify="auto";this.pos=this.tpos-this.cb+this.tb;if(this.maxHeight&&this.dim=="x"){a.maxWidth=Math.min(a.maxWidth||this.full,a.maxHeight*this.full/a.y.full)}this.size=Math.min(this.full,a["max"+this.ucwh]||this.full);this.minSize=a.allowSizeReduction?Math.min(a["min"+this.ucwh],this.full):this.full;if(a.isImage&&a.useBox){this.size=a[this.wh];this.imgSize=this.full}if(this.dim=="x"&&hs.padToMinWidth){this.minSize=a.minWidth}this.marginMin=hs["margin"+this.uclt];this.scroll=hs.page["scroll"+this.uclt];this.clientSize=hs.page[this.wh]},setSize:function(a){var f=this.exp;if(f.isImage&&(f.useBox||hs.padToMinWidth)){this.imgSize=a;this.size=Math.max(this.size,this.imgSize);f.content.style[this.lt]=this.get("imgPad")+"px"}else{this.size=a}f.content.style[this.wh]=a+"px";f.wrapper.style[this.wh]=this.get("wsize")+"px";if(f.outline){f.outline.setPosition()}if(f.releaseMask){f.releaseMask.style[this.wh]=a+"px"}if(this.dim=="y"&&f.iDoc&&f.body.style.height!="auto"){try{f.iDoc.body.style.overflow="auto"}catch(b){}}if(f.isHtml){var c=f.scrollerDiv;if(this.sizeDiff===undefined){this.sizeDiff=f.innerContent["offset"+this.ucwh]-c["offset"+this.ucwh]}c.style[this.wh]=(this.size-this.sizeDiff)+"px";if(this.dim=="x"){f.mediumContent.style.width="auto"}if(f.body){f.body.style[this.wh]="auto"}}if(this.dim=="x"&&f.overlayBox){f.sizeOverlayBox(true)}},setPos:function(a){this.pos=a;this.exp.wrapper.style[this.lt]=a+"px";if(this.exp.outline){this.exp.outline.setPosition()}}};hs.Expander=function(k,f,b,l){if(document.readyState&&hs.ie&&!hs.isReady){hs.addEventListener(document,"ready",function(){new hs.Expander(k,f,b,l)});return}this.a=k;this.custom=b;this.contentType=l||"image";this.isHtml=(l=="html");this.isImage=!this.isHtml;hs.continuePreloading=false;this.overlays=[];hs.init();var m=this.key=hs.expanders.length;for(var g=0;g<hs.overrides.length;g++){var c=hs.overrides[g];this[c]=f&&typeof f[c]!="undefined"?f[c]:hs[c]}if(!this.src){this.src=k.href}var d=(f&&f.thumbnailId)?hs.$(f.thumbnailId):k;d=this.thumb=d.getElementsByTagName("img")[0]||d;this.thumbsUserSetId=d.id||k.id;for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].a==k){hs.expanders[g].focus();return false}}if(!hs.allowSimultaneousLoading){for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].thumb!=d&&!hs.expanders[g].onLoadStarted){hs.expanders[g].cancelLoading()}}}hs.expanders[m]=this;if(!hs.allowMultipleInstances&&!hs.upcoming){if(hs.expanders[m-1]){hs.expanders[m-1].close()}if(typeof hs.focusKey!="undefined"&&hs.expanders[hs.focusKey]){hs.expanders[hs.focusKey].close()}}this.el=d;this.tpos=this.pageOrigin||hs.getPosition(d);hs.getPageSize();var j=this.x=new hs.Dimension(this,"x");j.calcThumb();var h=this.y=new hs.Dimension(this,"y");h.calcThumb();this.wrapper=hs.createElement("div",{id:"highslide-wrapper-"+this.key,className:"highslide-wrapper "+this.wrapperClassName},{visibility:"hidden",position:"absolute",zIndex:hs.zIndexCounter+=2},null,true);this.wrapper.onmouseover=this.wrapper.onmouseout=hs.wrapperMouseHandler;if(this.contentType=="image"&&this.outlineWhileAnimating==2){this.outlineWhileAnimating=0}if(!this.outlineType){this[this.contentType+"Create"]()}else{if(hs.pendingOutlines[this.outlineType]){this.connectOutline();this[this.contentType+"Create"]()}else{this.showLoading();var e=this;new hs.Outline(this.outlineType,function(){e.connectOutline();e[e.contentType+"Create"]()})}}return true};hs.Expander.prototype={error:function(a){if(hs.debug){alert("Line "+a.lineNumber+": "+a.message)}else{window.location.href=this.src}},connectOutline:function(){var a=this.outline=hs.pendingOutlines[this.outlineType];a.exp=this;a.table.style.zIndex=this.wrapper.style.zIndex-1;hs.pendingOutlines[this.outlineType]=null},showLoading:function(){if(this.onLoadStarted||this.loading){return}this.loading=hs.loading;var c=this;this.loading.onclick=function(){c.cancelLoading()};var c=this,a=this.x.get("loadingPos")+"px",b=this.y.get("loadingPos")+"px";setTimeout(function(){if(c.loading){hs.setStyles(c.loading,{left:a,top:b,zIndex:hs.zIndexCounter++})}},100)},imageCreate:function(){var b=this;var a=document.createElement("img");this.content=a;a.onload=function(){if(hs.expanders[b.key]){b.contentLoaded()}};if(hs.blockRightClick){a.oncontextmenu=function(){return false}}a.className="highslide-image";hs.setStyles(a,{visibility:"hidden",display:"block",position:"absolute",maxWidth:"9999px",zIndex:3});a.title=hs.lang.restoreTitle;if(hs.safari&&hs.uaVersion<525){hs.container.appendChild(a)}if(hs.ie&&hs.flushImgSize){a.src=null}a.src=this.src;this.showLoading()},htmlCreate:function(){this.content=hs.getCacheBinding(this.a);if(!this.content){this.content=hs.getNode(this.contentId)}if(!this.content){this.content=hs.getSelfRendered()}this.getInline(["maincontent"]);if(this.maincontent){var a=hs.getElementByClass(this.content,"div","highslide-body");if(a){a.appendChild(this.maincontent)}this.maincontent.style.display="block"}var d=this.innerContent=this.content;if(/(swf|iframe)/.test(this.objectType)){this.setObjContainerSize(d)}hs.container.appendChild(this.wrapper);hs.setStyles(this.wrapper,{position:"static",padding:"0 "+hs.marginRight+"px 0 "+hs.marginLeft+"px"});this.content=hs.createElement("div",{className:"highslide-html"},{position:"relative",zIndex:3,height:0,overflow:"hidden"},this.wrapper);this.mediumContent=hs.createElement("div",null,null,this.content,1);this.mediumContent.appendChild(d);hs.setStyles(d,{position:"relative",display:"block",direction:hs.lang.cssDirection||""});if(this.width){d.style.width=this.width+"px"}if(this.height){hs.setStyles(d,{height:this.height+"px",overflow:"hidden"})}if(d.offsetWidth<this.minWidth){d.style.width=this.minWidth+"px"}if(this.objectType=="ajax"&&!hs.getCacheBinding(this.a)){this.showLoading();var c=this;var b=new hs.Ajax(this.a,d);b.src=this.src;b.onLoad=function(){if(hs.expanders[c.key]){c.contentLoaded()}};b.onError=function(){location.href=c.src};b.run()}else{if(this.objectType=="iframe"&&this.objectLoadTime=="before"){this.writeExtendedContent()}else{this.contentLoaded()}}},contentLoaded:function(){try{if(!this.content){return}this.content.onload=null;if(this.onLoadStarted){return}else{this.onLoadStarted=true}var a=this.x,d=this.y;if(this.loading){hs.setStyles(this.loading,{top:"-9999px"});this.loading=null}if(this.isImage){a.full=this.content.width;d.full=this.content.height;hs.setStyles(this.content,{width:a.t+"px",height:d.t+"px"});this.wrapper.appendChild(this.content);hs.container.appendChild(this.wrapper)}else{if(this.htmlGetSize){this.htmlGetSize()}}a.calcBorders();d.calcBorders();hs.setStyles(this.wrapper,{left:(a.tpos+a.tb-a.cb)+"px",top:(d.tpos+a.tb-d.cb)+"px"});this.getOverlays();var b=a.full/d.full;a.calcExpanded();this.justify(a);d.calcExpanded();this.justify(d);if(this.isHtml){this.htmlSizeOperations()}if(this.overlayBox){this.sizeOverlayBox(0,1)}if(this.allowSizeReduction){if(this.isImage){this.correctRatio(b)}else{this.fitOverlayBox()}if(this.isImage&&this.x.full>(this.x.imgSize||this.x.size)){this.createFullExpand();if(this.overlays.length==1){this.sizeOverlayBox()}}}this.show()}catch(c){this.error(c)}},setObjContainerSize:function(a,d){var b=hs.getElementByClass(a,"DIV","highslide-body");if(/(iframe|swf)/.test(this.objectType)){if(this.objectWidth){b.style.width=this.objectWidth+"px"}if(this.objectHeight){b.style.height=this.objectHeight+"px"}}},writeExtendedContent:function(){if(this.hasExtendedContent){return}var f=this;this.body=hs.getElementByClass(this.innerContent,"DIV","highslide-body");if(this.objectType=="iframe"){this.showLoading();var g=hs.clearing.cloneNode(1);this.body.appendChild(g);this.newWidth=this.innerContent.offsetWidth;if(!this.objectWidth){this.objectWidth=g.offsetWidth}var c=this.innerContent.offsetHeight-this.body.offsetHeight,d=this.objectHeight||hs.page.height-c-hs.marginTop-hs.marginBottom,e=this.objectLoadTime=="before"?' onload="if (hs.expanders['+this.key+"]) hs.expanders["+this.key+'].contentLoaded()" ':"";this.body.innerHTML+='<iframe name="hs'+(new Date()).getTime()+'" frameborder="0" key="'+this.key+'" style="width:'+this.objectWidth+"px; height:"+d+'px" '+e+' src="'+this.src+'" ></iframe>';this.ruler=this.body.getElementsByTagName("div")[0];this.iframe=this.body.getElementsByTagName("iframe")[0];if(this.objectLoadTime=="after"){this.correctIframeSize()}}if(this.objectType=="swf"){this.body.id=this.body.id||"hs-flash-id-"+this.key;var b=this.swfOptions;if(!b.params){b.params={}}if(typeof b.params.wmode=="undefined"){b.params.wmode="transparent"}if(swfobject){swfobject.embedSWF(this.src,this.body.id,this.objectWidth,this.objectHeight,b.version||"7",b.expressInstallSwfurl,b.flashvars,b.params,b.attributes)}}this.hasExtendedContent=true},htmlGetSize:function(){if(this.iframe&&!this.objectHeight){this.iframe.style.height=this.body.style.height=this.getIframePageHeight()+"px"}this.innerContent.appendChild(hs.clearing);if(!this.x.full){this.x.full=this.innerContent.offsetWidth}this.y.full=this.innerContent.offsetHeight;this.innerContent.removeChild(hs.clearing);if(hs.ie&&this.newHeight>parseInt(this.innerContent.currentStyle.height)){this.newHeight=parseInt(this.innerContent.currentStyle.height)}hs.setStyles(this.wrapper,{position:"absolute",padding:"0"});hs.setStyles(this.content,{width:this.x.t+"px",height:this.y.t+"px"})},getIframePageHeight:function(){var a;try{var d=this.iDoc=this.iframe.contentDocument||this.iframe.contentWindow.document;var b=d.createElement("div");b.style.clear="both";d.body.appendChild(b);a=b.offsetTop;if(hs.ie){a+=parseInt(d.body.currentStyle.marginTop)+parseInt(d.body.currentStyle.marginBottom)-1}}catch(c){a=300}return a},correctIframeSize:function(){var b=this.innerContent.offsetWidth-this.ruler.offsetWidth;hs.discardElement(this.ruler);if(b<0){b=0}var a=this.innerContent.offsetHeight-this.iframe.offsetHeight;if(this.iDoc&&!this.objectHeight&&!this.height&&this.y.size==this.y.full){try{this.iDoc.body.style.overflow="hidden"}catch(c){}}hs.setStyles(this.iframe,{width:Math.abs(this.x.size-b)+"px",height:Math.abs(this.y.size-a)+"px"});hs.setStyles(this.body,{width:this.iframe.style.width,height:this.iframe.style.height});this.scrollingContent=this.iframe;this.scrollerDiv=this.scrollingContent},htmlSizeOperations:function(){this.setObjContainerSize(this.innerContent);if(this.objectType=="swf"&&this.objectLoadTime=="before"){this.writeExtendedContent()}if(this.x.size<this.x.full&&!this.allowWidthReduction){this.x.size=this.x.full}if(this.y.size<this.y.full&&!this.allowHeightReduction){this.y.size=this.y.full}this.scrollerDiv=this.innerContent;hs.setStyles(this.mediumContent,{position:"relative",width:this.x.size+"px"});hs.setStyles(this.innerContent,{border:"none",width:"auto",height:"auto"});var e=hs.getElementByClass(this.innerContent,"DIV","highslide-body");if(e&&!/(iframe|swf)/.test(this.objectType)){var b=e;e=hs.createElement(b.nodeName,null,{overflow:"hidden"},null,true);b.parentNode.insertBefore(e,b);e.appendChild(hs.clearing);e.appendChild(b);var c=this.innerContent.offsetWidth-e.offsetWidth;var a=this.innerContent.offsetHeight-e.offsetHeight;e.removeChild(hs.clearing);var d=hs.safari||navigator.vendor=="KDE"?1:0;hs.setStyles(e,{width:(this.x.size-c-d)+"px",height:(this.y.size-a)+"px",overflow:"auto",position:"relative"});if(d&&b.offsetHeight>e.offsetHeight){e.style.width=(parseInt(e.style.width)+d)+"px"}this.scrollingContent=e;this.scrollerDiv=this.scrollingContent}if(this.iframe&&this.objectLoadTime=="before"){this.correctIframeSize()}if(!this.scrollingContent&&this.y.size<this.mediumContent.offsetHeight){this.scrollerDiv=this.content}if(this.scrollerDiv==this.content&&!this.allowWidthReduction&&!/(iframe|swf)/.test(this.objectType)){this.x.size+=17}if(this.scrollerDiv&&this.scrollerDiv.offsetHeight>this.scrollerDiv.parentNode.offsetHeight){setTimeout("try { hs.expanders["+this.key+"].scrollerDiv.style.overflow = 'auto'; } catch(e) {}",hs.expandDuration)}},justify:function(f,b){var g,h=f.target,e=f==this.x?"x":"y";var d=false;var a=f.exp.allowSizeReduction;f.pos=Math.round(f.pos-((f.get("wsize")-f.t)/2));if(f.pos<f.scroll+f.marginMin){f.pos=f.scroll+f.marginMin;d=true}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}if(f.pos+f.get("wsize")>f.scroll+f.clientSize-f.marginMax){if(!b&&d&&a){f.size=Math.min(f.size,f.get(e=="y"?"fitsize":"maxsize"))}else{if(f.get("wsize")<f.get("fitsize")){f.pos=f.scroll+f.clientSize-f.marginMax-f.get("wsize")}else{f.pos=f.scroll+f.marginMin;if(!b&&a){f.size=f.get(e=="y"?"fitsize":"maxsize")}}}}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}if(f.pos<f.marginMin){var c=f.pos;f.pos=f.marginMin;if(a&&!b){f.size=f.size-(f.pos-c)}}},correctRatio:function(c){var a=this.x,g=this.y,e=false,d=Math.min(a.full,a.size),b=Math.min(g.full,g.size),f=(this.useBox||hs.padToMinWidth);if(d/b>c){d=b*c;if(d<a.minSize){d=a.minSize;b=d/c}e=true}else{if(d/b<c){b=d/c;e=true}}if(hs.padToMinWidth&&a.full<a.minSize){a.imgSize=a.full;g.size=g.imgSize=g.full}else{if(this.useBox){a.imgSize=d;g.imgSize=b}else{a.size=d;g.size=b}}e=this.fitOverlayBox(this.useBox?null:c,e);if(f&&g.size<g.imgSize){g.imgSize=g.size;a.imgSize=g.size*c}if(e||f){a.pos=a.tpos-a.cb+a.tb;a.minSize=a.size;this.justify(a,true);g.pos=g.tpos-g.cb+g.tb;g.minSize=g.size;this.justify(g,true);if(this.overlayBox){this.sizeOverlayBox()}}},fitOverlayBox:function(b,c){var a=this.x,d=this.y;if(this.overlayBox&&(this.isImage||this.allowHeightReduction)){while(d.size>this.minHeight&&a.size>this.minWidth&&d.get("wsize")>d.get("fitsize")){d.size-=10;if(b){a.size=d.size*b}this.sizeOverlayBox(0,1);c=true}}return c},show:function(){var a=this.x,b=this.y;this.doShowHide("hidden");this.changeSize(1,{wrapper:{width:a.get("wsize"),height:b.get("wsize"),left:a.pos,top:b.pos},content:{left:a.p1+a.get("imgPad"),top:b.p1+b.get("imgPad"),width:a.imgSize||a.size,height:b.imgSize||b.size}},hs.expandDuration)},changeSize:function(b,h,c){if(this.outline&&!this.outlineWhileAnimating){if(b){this.outline.setPosition()}else{this.outline.destroy((this.isHtml&&this.preserveContent))}}if(!b){this.destroyOverlays()}var e=this,a=e.x,g=e.y,f=this.easing;if(!b){f=this.easingClose||f}var d=b?function(){if(e.outline){e.outline.table.style.visibility="visible"}setTimeout(function(){e.afterExpand()},50)}:function(){e.afterClose()};if(b){hs.setStyles(this.wrapper,{width:a.t+"px",height:g.t+"px"})}if(b&&this.isHtml){hs.setStyles(this.wrapper,{left:(a.tpos-a.cb+a.tb)+"px",top:(g.tpos-g.cb+g.tb)+"px"})}if(this.fadeInOut){hs.setStyles(this.wrapper,{opacity:b?0:1});hs.extend(h.wrapper,{opacity:b})}hs.animate(this.wrapper,h.wrapper,{duration:c,easing:f,step:function(k,i){if(e.outline&&e.outlineWhileAnimating&&i.prop=="top"){var j=b?i.pos:1-i.pos;var l={w:a.t+(a.get("wsize")-a.t)*j,h:g.t+(g.get("wsize")-g.t)*j,x:a.tpos+(a.pos-a.tpos)*j,y:g.tpos+(g.pos-g.tpos)*j};e.outline.setPosition(l,0,1)}if(e.isHtml){if(i.prop=="left"){e.mediumContent.style.left=(a.pos-k)+"px"}if(i.prop=="top"){e.mediumContent.style.top=(g.pos-k)+"px"}}}});hs.animate(this.content,h.content,c,f,d);if(b){this.wrapper.style.visibility="visible";this.content.style.visibility="visible";if(this.isHtml){this.innerContent.style.visibility="visible"}this.a.className+=" highslide-active-anchor"}},afterExpand:function(){this.isExpanded=true;this.focus();if(this.isHtml&&this.objectLoadTime=="after"){this.writeExtendedContent()}if(this.iframe){try{var g=this,f=this.iframe.contentDocument||this.iframe.contentWindow.document;hs.addEventListener(f,"mousedown",function(){if(hs.focusKey!=g.key){g.focus()}})}catch(d){}if(hs.ie&&typeof this.isClosing!="boolean"){this.iframe.style.width=(this.objectWidth-1)+"px"}}if(hs.upcoming&&hs.upcoming==this.a){hs.upcoming=null}this.prepareNextOutline();var c=hs.page,b=hs.mouse.x+c.scrollLeft,a=hs.mouse.y+c.scrollTop;this.mouseIsOver=this.x.pos<b&&b<this.x.pos+this.x.get("wsize")&&this.y.pos<a&&a<this.y.pos+this.y.get("wsize");if(this.overlayBox){this.showOverlays()}},prepareNextOutline:function(){var a=this.key;var b=this.outlineType;new hs.Outline(b,function(){try{hs.expanders[a].preloadNext()}catch(c){}})},preloadNext:function(){var b=this.getAdjacentAnchor(1);if(b&&b.onclick.toString().match(/hs\.expand/)){var a=hs.createElement("img",{src:hs.getSrc(b)})}},getAdjacentAnchor:function(c){var b=this.getAnchorIndex(),a=hs.anchors.groups[this.slideshowGroup||"none"];return(a&&a[b+c])||null},getAnchorIndex:function(){var a=hs.getAnchors().groups[this.slideshowGroup||"none"];if(a){for(var b=0;b<a.length;b++){if(a[b]==this.a){return b}}}return null},cancelLoading:function(){hs.discardElement(this.wrapper);hs.expanders[this.key]=null;if(this.loading){hs.loading.style.left="-9999px"}},writeCredits:function(){this.credits=hs.createElement("a",{href:hs.creditsHref,target:hs.creditsTarget,className:"highslide-credits",innerHTML:hs.lang.creditsText,title:hs.lang.creditsTitle});this.createOverlay({overlayId:this.credits,position:this.creditsPosition||"top left"})},getInline:function(types,addOverlay){for(var i=0;i<types.length;i++){var type=types[i],s=null;if(!this[type+"Id"]&&this.thumbsUserSetId){this[type+"Id"]=type+"-for-"+this.thumbsUserSetId}if(this[type+"Id"]){this[type]=hs.getNode(this[type+"Id"])}if(!this[type]&&!this[type+"Text"]&&this[type+"Eval"]){try{s=eval(this[type+"Eval"])}catch(e){}}if(!this[type]&&this[type+"Text"]){s=this[type+"Text"]}if(!this[type]&&!s){this[type]=hs.getNode(this.a["_"+type+"Id"]);if(!this[type]){var next=this.a.nextSibling;while(next&&!hs.isHsAnchor(next)){if((new RegExp("highslide-"+type)).test(next.className||null)){if(!next.id){this.a["_"+type+"Id"]=next.id="hsId"+hs.idCounter++}this[type]=hs.getNode(next.id);break}next=next.nextSibling}}}if(!this[type]&&s){this[type]=hs.createElement("div",{className:"highslide-"+type,innerHTML:s})}if(addOverlay&&this[type]){var o={position:(type=="heading")?"above":"below"};for(var x in this[type+"Overlay"]){o[x]=this[type+"Overlay"][x]}o.overlayId=this[type];this.createOverlay(o)}}},doShowHide:function(a){if(hs.hideSelects){this.showHideElements("SELECT",a)}if(hs.hideIframes){this.showHideElements("IFRAME",a)}if(hs.geckoMac){this.showHideElements("*",a)}},showHideElements:function(c,b){var e=document.getElementsByTagName(c);var a=c=="*"?"overflow":"visibility";for(var f=0;f<e.length;f++){if(a=="visibility"||(document.defaultView.getComputedStyle(e[f],"").getPropertyValue("overflow")=="auto"||e[f].getAttribute("hidden-by")!=null)){var h=e[f].getAttribute("hidden-by");if(b=="visible"&&h){h=h.replace("["+this.key+"]","");e[f].setAttribute("hidden-by",h);if(!h){e[f].style[a]=e[f].origProp}}else{if(b=="hidden"){var k=hs.getPosition(e[f]);k.w=e[f].offsetWidth;k.h=e[f].offsetHeight;var j=(k.x+k.w<this.x.get("opos")||k.x>this.x.get("opos")+this.x.get("osize"));var g=(k.y+k.h<this.y.get("opos")||k.y>this.y.get("opos")+this.y.get("osize"));var d=hs.getWrapperKey(e[f]);if(!j&&!g&&d!=this.key){if(!h){e[f].setAttribute("hidden-by","["+this.key+"]");e[f].origProp=e[f].style[a];e[f].style[a]="hidden"}else{if(h.indexOf("["+this.key+"]")==-1){e[f].setAttribute("hidden-by",h+"["+this.key+"]")}}}else{if((h=="["+this.key+"]"||hs.focusKey==d)&&d!=this.key){e[f].setAttribute("hidden-by","");e[f].style[a]=e[f].origProp||""}else{if(h&&h.indexOf("["+this.key+"]")>-1){e[f].setAttribute("hidden-by",h.replace("["+this.key+"]",""))}}}}}}}},focus:function(){this.wrapper.style.zIndex=hs.zIndexCounter+=2;for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&a==hs.focusKey){var b=hs.expanders[a];b.content.className+=" highslide-"+b.contentType+"-blur";if(b.isImage){b.content.style.cursor=hs.ieLt7?"hand":"pointer";b.content.title=hs.lang.focusTitle}}}if(this.outline){this.outline.table.style.zIndex=this.wrapper.style.zIndex-1}this.content.className="highslide-"+this.contentType;if(this.isImage){this.content.title=hs.lang.restoreTitle;if(hs.restoreCursor){hs.styleRestoreCursor=window.opera?"pointer":"url("+hs.graphicsDir+hs.restoreCursor+"), pointer";if(hs.ieLt7&&hs.uaVersion<6){hs.styleRestoreCursor="hand"}this.content.style.cursor=hs.styleRestoreCursor}}hs.focusKey=this.key;hs.addEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler)},moveTo:function(a,b){this.x.setPos(a);this.y.setPos(b)},resize:function(d){var a,b,c=d.width/d.height;a=Math.max(d.width+d.dX,Math.min(this.minWidth,this.x.full));if(this.isImage&&Math.abs(a-this.x.full)<12){a=this.x.full}b=this.isHtml?d.height+d.dY:a/c;if(b<Math.min(this.minHeight,this.y.full)){b=Math.min(this.minHeight,this.y.full);if(this.isImage){a=b*c}}this.resizeTo(a,b)},resizeTo:function(a,b){this.y.setSize(b);this.x.setSize(a);this.wrapper.style.height=this.y.get("wsize")+"px"},close:function(){if(this.isClosing||!this.isExpanded){return}this.isClosing=true;hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{if(this.isHtml){this.htmlPrepareClose()}this.content.style.cursor="default";this.changeSize(0,{wrapper:{width:this.x.t,height:this.y.t,left:this.x.tpos-this.x.cb+this.x.tb,top:this.y.tpos-this.y.cb+this.y.tb},content:{left:0,top:0,width:this.x.t,height:this.y.t}},hs.restoreDuration)}catch(a){this.afterClose()}},htmlPrepareClose:function(){if(hs.geckoMac){if(!hs.mask){hs.mask=hs.createElement("div",null,{position:"absolute"},hs.container)}hs.setStyles(hs.mask,{width:this.x.size+"px",height:this.y.size+"px",left:this.x.pos+"px",top:this.y.pos+"px",display:"block"})}if(this.objectType=="swf"){try{hs.$(this.body.id).StopPlay()}catch(a){}}if(this.objectLoadTime=="after"&&!this.preserveContent){this.destroyObject()}if(this.scrollerDiv&&this.scrollerDiv!=this.scrollingContent){this.scrollerDiv.style.overflow="hidden"}},destroyObject:function(){if(hs.ie&&this.iframe){try{this.iframe.contentWindow.document.body.innerHTML=""}catch(a){}}if(this.objectType=="swf"){swfobject.removeSWF(this.body.id)}this.body.innerHTML=""},sleep:function(){if(this.outline){this.outline.table.style.display="none"}this.releaseMask=null;this.wrapper.style.display="none";this.isExpanded=false;hs.push(hs.sleeping,this)},awake:function(){try{hs.expanders[this.key]=this;if(!hs.allowMultipleInstances&&hs.focusKey!=this.key){try{hs.expanders[hs.focusKey].close()}catch(b){}}var d=hs.zIndexCounter++,a={display:"",zIndex:d};hs.setStyles(this.wrapper,a);this.isClosing=false;var c=this.outline||0;if(c){if(!this.outlineWhileAnimating){a.visibility="hidden"}hs.setStyles(c.table,a)}this.show()}catch(b){}},createOverlay:function(d){var c=d.overlayId;if(typeof c=="string"){c=hs.getNode(c)}if(d.html){c=hs.createElement("div",{innerHTML:d.html})}if(!c||typeof c=="string"){return}c.style.display="block";this.genOverlayBox();var b=d.width&&/^[0-9]+(px|%)$/.test(d.width)?d.width:"auto";if(/^(left|right)panel$/.test(d.position)&&!/^[0-9]+px$/.test(d.width)){b="200px"}var a=hs.createElement("div",{id:"hsId"+hs.idCounter++,hsId:d.hsId},{position:"absolute",visibility:"hidden",width:b,direction:hs.lang.cssDirection||"",opacity:0},this.overlayBox,true);a.appendChild(c);hs.extend(a,{opacity:1,offsetX:0,offsetY:0,dur:(d.fade===0||d.fade===false||(d.fade==2&&hs.ie))?0:250});hs.extend(a,d);if(this.gotOverlays){this.positionOverlay(a);if(!a.hideOnMouseOut||this.mouseIsOver){hs.animate(a,{opacity:a.opacity},a.dur)}}hs.push(this.overlays,hs.idCounter-1)},positionOverlay:function(c){var d=c.position||"middle center",b=c.offsetX,a=c.offsetY;if(c.parentNode!=this.overlayBox){this.overlayBox.appendChild(c)}if(/left$/.test(d)){c.style.left=b+"px"}if(/center$/.test(d)){hs.setStyles(c,{left:"50%",marginLeft:(b-Math.round(c.offsetWidth/2))+"px"})}if(/right$/.test(d)){c.style.right=-b+"px"}if(/^leftpanel$/.test(d)){hs.setStyles(c,{right:"100%",marginRight:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p1=c.offsetWidth}else{if(/^rightpanel$/.test(d)){hs.setStyles(c,{left:"100%",marginLeft:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p2=c.offsetWidth}}if(/^top/.test(d)){c.style.top=a+"px"}if(/^middle/.test(d)){hs.setStyles(c,{top:"50%",marginTop:(a-Math.round(c.offsetHeight/2))+"px"})}if(/^bottom/.test(d)){c.style.bottom=-a+"px"}if(/^above$/.test(d)){hs.setStyles(c,{left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",bottom:"100%",marginBottom:this.y.cb+"px",width:"auto"});this.y.p1=c.offsetHeight}else{if(/^below$/.test(d)){hs.setStyles(c,{position:"relative",left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",top:"100%",marginTop:this.y.cb+"px",width:"auto"});this.y.p2=c.offsetHeight;c.style.position="absolute"}}},getOverlays:function(){this.getInline(["heading","caption"],true);if(this.heading&&this.dragByHeading){this.heading.className+=" highslide-move"}if(hs.showCredits){this.writeCredits()}for(var a=0;a<hs.overlays.length;a++){var d=hs.overlays[a],e=d.thumbnailId,b=d.slideshowGroup;if((!e&&!b)||(e&&e==this.thumbsUserSetId)||(b&&b===this.slideshowGroup)){if(this.isImage||(this.isHtml&&d.useOnHtml)){this.createOverlay(d)}}}var c=[];for(var a=0;a<this.overlays.length;a++){var d=hs.$("hsId"+this.overlays[a]);if(/panel$/.test(d.position)){this.positionOverlay(d)}else{hs.push(c,d)}}for(var a=0;a<c.length;a++){this.positionOverlay(c[a])}this.gotOverlays=true},genOverlayBox:function(){if(!this.overlayBox){this.overlayBox=hs.createElement("div",{className:this.wrapperClassName},{position:"absolute",width:(this.x.size||(this.useBox?this.width:null)||this.x.full)+"px",height:(this.y.size||this.y.full)+"px",visibility:"hidden",overflow:"hidden",zIndex:hs.ie?4:"auto"},hs.container,true)}},sizeOverlayBox:function(f,d){var c=this.overlayBox,a=this.x,h=this.y;hs.setStyles(c,{width:a.size+"px",height:h.size+"px"});if(f||d){for(var e=0;e<this.overlays.length;e++){var g=hs.$("hsId"+this.overlays[e]);var b=(hs.ieLt7||document.compatMode=="BackCompat");if(g&&/^(above|below)$/.test(g.position)){if(b){g.style.width=(c.offsetWidth+2*a.cb+a.p1+a.p2)+"px"}h[g.position=="above"?"p1":"p2"]=g.offsetHeight}if(g&&b&&/^(left|right)panel$/.test(g.position)){g.style.height=(c.offsetHeight+2*h.cb)+"px"}}}if(f){hs.setStyles(this.content,{top:h.p1+"px"});hs.setStyles(c,{top:(h.p1+h.cb)+"px"})}},showOverlays:function(){var a=this.overlayBox;a.className="";hs.setStyles(a,{top:(this.y.p1+this.y.cb)+"px",left:(this.x.p1+this.x.cb)+"px",overflow:"visible"});if(hs.safari){a.style.visibility="visible"}this.wrapper.appendChild(a);for(var c=0;c<this.overlays.length;c++){var d=hs.$("hsId"+this.overlays[c]);d.style.zIndex=d.zIndex||4;if(!d.hideOnMouseOut||this.mouseIsOver){d.style.visibility="visible";hs.setStyles(d,{visibility:"visible",display:""});hs.animate(d,{opacity:d.opacity},d.dur)}}},destroyOverlays:function(){if(!this.overlays.length){return}if(this.isHtml&&this.preserveContent){this.overlayBox.style.top="-9999px";hs.container.appendChild(this.overlayBox)}else{hs.discardElement(this.overlayBox)}},createFullExpand:function(){this.fullExpandLabel=hs.createElement("a",{href:"javascript:hs.expanders["+this.key+"].doFullExpand();",title:hs.lang.fullExpandTitle,className:"highslide-full-expand"});this.createOverlay({overlayId:this.fullExpandLabel,position:hs.fullExpandPosition,hideOnMouseOut:true,opacity:hs.fullExpandOpacity})},doFullExpand:function(){try{if(this.fullExpandLabel){hs.discardElement(this.fullExpandLabel)}this.focus();var c=this.x.size,a=this.y.size;this.resizeTo(this.x.full,this.y.full);var b=this.x.pos-(this.x.size-c)/2;if(b<hs.marginLeft){b=hs.marginLeft}var f=this.y.pos-(this.y.size-a)/2;if(f<hs.marginTop){f=hs.marginTop}this.moveTo(b,f);this.doShowHide("hidden")}catch(d){this.error(d)}},afterClose:function(){this.a.className=this.a.className.replace("highslide-active-anchor","");this.doShowHide("visible");if(this.isHtml&&this.preserveContent){this.sleep()}else{if(this.outline&&this.outlineWhileAnimating){this.outline.destroy()}hs.discardElement(this.wrapper)}if(hs.mask){hs.mask.style.display="none"}hs.expanders[this.key]=null;hs.reOrder()}};hs.Ajax=function(b,c,d){this.a=b;this.content=c;this.pre=d};hs.Ajax.prototype={run:function(){var d;if(!this.src){this.src=hs.getSrc(this.a)}if(this.src.match("#")){var a=this.src.split("#");this.src=a[0];this.id=a[1]}if(hs.cachedGets[this.src]){this.cachedGet=hs.cachedGets[this.src];if(this.id){this.getElementContent()}else{this.loadHTML()}return}try{d=new XMLHttpRequest()}catch(b){try{d=new ActiveXObject("Msxml2.XMLHTTP")}catch(b){try{d=new ActiveXObject("Microsoft.XMLHTTP")}catch(b){this.onError()}}}var f=this;d.onreadystatechange=function(){if(f.xhr.readyState==4){if(f.id){f.getElementContent()}else{f.loadHTML()}}};var c=this.src;this.xhr=d;if(hs.forceAjaxReload){c=c.replace(/$/,(/\?/.test(c)?"&":"?")+"dummy="+(new Date()).getTime())}d.open("GET",c,true);d.setRequestHeader("X-Requested-With","XMLHttpRequest");d.setRequestHeader("Content-Type","application/x-www-form-urlencoded");d.send(null)},getElementContent:function(){hs.init();var a=window.opera||hs.ie6SSL?{src:"about:blank"}:null;this.iframe=hs.createElement("iframe",a,{position:"absolute",top:"-9999px"},hs.container);this.loadHTML()},loadHTML:function(){var c=this.cachedGet||this.xhr.responseText,b;if(this.pre){hs.cachedGets[this.src]=c}if(!hs.ie||hs.uaVersion>=5.5){c=c.replace(new RegExp("<link[^>]*>","gi"),"").replace(new RegExp("<script[^>]*>.*?<\/script>","gi"),"");if(this.iframe){var f=this.iframe.contentDocument;if(!f&&this.iframe.contentWindow){f=this.iframe.contentWindow.document}if(!f){var g=this;setTimeout(function(){g.loadHTML()},25);return}f.open();f.write(c);f.close();try{c=f.getElementById(this.id).innerHTML}catch(d){try{c=this.iframe.document.getElementById(this.id).innerHTML}catch(d){}}hs.discardElement(this.iframe)}else{b=/(<body[^>]*>|<\/body>)/ig;if(b.test(c)){c=c.split(b)[hs.ieLt9?1:2]}}}hs.getElementByClass(this.content,"DIV","highslide-body").innerHTML=c;this.onLoad();for(var a in this){this[a]=null}}};hs.langDefaults=hs.lang;var HsExpander=hs.Expander;if(hs.ie&&window==window.top){(function(){try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,50);return}hs.ready()})()}hs.addEventListener(document,"DOMContentLoaded",hs.ready);hs.addEventListener(window,"load",hs.ready);hs.addEventListener(document,"ready",function(){if(hs.expandCursor){var d=hs.createElement("style",{type:"text/css"},null,document.getElementsByTagName("HEAD")[0]),c=document.compatMode=="BackCompat";function b(f,g){if(hs.ie&&(hs.uaVersion<9||c)){var e=document.styleSheets[document.styleSheets.length-1];if(typeof(e.addRule)=="object"){e.addRule(f,g)}}else{d.appendChild(document.createTextNode(f+" {"+g+"}"))}}function a(e){return"expression( ( ( ignoreMe = document.documentElement."+e+" ? document.documentElement."+e+" : document.body."+e+" ) ) + 'px' );"}if(hs.expandCursor){b(".highslide img","cursor: url("+hs.graphicsDir+hs.expandCursor+"), pointer !important;")}}});hs.addEventListener(window,"resize",function(){hs.getPageSize()});hs.addEventListener(document,"mousemove",function(a){hs.mouse={x:a.clientX,y:a.clientY}});hs.addEventListener(document,"mousedown",hs.mouseClickHandler);hs.addEventListener(document,"mouseup",hs.mouseClickHandler);hs.addEventListener(document,"ready",hs.getAnchors);hs.addEventListener(window,"load",hs.preloadImages);hs.addEventListener(window,"load",hs.preloadAjax)}; \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.packed.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.packed.js index 6febacff6cf333c90c23f393de9c5dfe8f856a5f..401c8e420229adb834f81d7b0650f342c9bf27a7 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.packed.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide-with-html.packed.js @@ -1,9 +1,9 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) * Config: default +inline +ajax +iframe +flash +packed - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?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}('q(!m){u m={1e:{89:\'8H\',8K:\'co...\',8G:\'6Q 2h cA\',9s:\'6Q 2h cB 2h c1\',9Y:\'bX 2h bT G (f)\',ag:\'c7 by <i>8g 8f</i>\',9F:\'d3 2h d6 8g 8f dg\',91:\'8n\',8W:\'8e\',8R:\'9g\',8V:\'8j\',8U:\'8j (di)\',93:\'dj\',dd:\'8h\',d2:\'8h 8m (8l)\',cM:\'8k\',bR:\'8k 8m (8l)\',90:\'8n (6L 1f)\',8X:\'8e (6L 2G)\',8S:\'9g\',b8:\'1:1\',7h:\'6Q 2h 28 2D, aR 8Y aL 2h 3I. aH 6L aT W 1M 8Y 5n.\'},56:\'U/aN/\',5v:\'bG.6E\',4E:\'bB.6E\',7c:6j,a7:6j,4j:15,6m:15,3N:15,6f:15,4l:bt,8N:0.75,7m:J,71:5,3g:2,aZ:3,4M:1h,9Z:\'3E 2G\',9U:1,a1:J,9y:\'b2://U.b4/\',9E:\'aO\',8C:J,7B:[\'a\'],5D:1h,5A:J,48:J,31:\'4K\',82:J,7b:J,3O:8Z,4s:8Z,4I:J,1x:\'aS-aP\',8A:{8B:\'<1i 3n="U-aU"><92>\'+\'<3u 3n="U-5n">\'+\'<a 2v="#" 2u="{m.1e.90}" 2M="D m.5n(k)">\'+\'<2p>{m.1e.91}</2p></a>\'+\'</3u>\'+\'<3u 3n="U-1M">\'+\'<a 2v="#" 2u="{m.1e.8X}" 2M="D m.1M(k)">\'+\'<2p>{m.1e.8W}</2p></a>\'+\'</3u>\'+\'<3u 3n="U-3I">\'+\'<a 2v="#" 2u="{m.1e.8S}" 2M="D 1h">\'+\'<2p>{m.1e.8R}</2p></a>\'+\'</3u>\'+\'<3u 3n="U-28">\'+\'<a 2v="#" 2u="{m.1e.8U}" 2M="D m.28(k)">\'+\'<2p>{m.1e.8V}</2p></a>\'+\'</3u>\'+\'</92></1i>\'+\'<1i 3n="U-V"></1i>\'+\'<1i 3n="U-b0"><1i>\'+\'<2p 3n="U-3q" 2u="{m.1e.93}"><2p></2p></2p>\'+\'</1i></1i>\'},4P:[],6n:J,P:[],6s:[\'4I\',\'2K\',\'1x\',\'3g\',\'b5\',\'bc\',\'aG\',\'9e\',\'aM\',\'b3\',\'bQ\',\'9c\',\'9K\',\'7b\',\'K\',\'M\',\'7f\',\'5D\',\'5A\',\'48\',\'bD\',\'bC\',\'bH\',\'2f\',\'82\',\'3i\',\'3J\',\'31\',\'7I\',\'78\',\'3O\',\'4s\',\'5X\',\'6N\',\'8d\',\'4h\',\'2g\',\'an\',\'am\',\'T\'],1Q:[],4y:0,bI:{x:[\'ad\',\'1f\',\'6H\',\'2G\',\'ac\'],y:[\'4U\',\'18\',\'6q\',\'3E\',\'6a\']},5R:{},9c:{},9e:{},7I:{al:{},1E:{},ay:{}},3t:[],3G:{},3C:[],5b:[],4o:[],5J:{},7k:{},6h:[],26:/bM\\/4\\.0/.16(46.5V)?8:6t((46.5V.5x().2Z(/.+(?:9f|bJ|bK|1L)[\\/: ]([\\d.]+)/)||[0,\'0\'])[1]),1L:(N.4F&&!1y.30),4X:/bL/.16(46.5V),7V:/bx.+9f:1\\.[0-8].+bi/.16(46.5V),$:B(1j){q(1j)D N.6F(1j)},20:B(1P,2R){1P[1P.1c]=2R},14:B(9b,3h,3l,4r,95){u C=N.14(9b);q(3h)m.3e(C,3h);q(95)m.Q(C,{6z:0,ap:\'24\',6V:0});q(3l)m.Q(C,3l);q(4r)4r.1G(C);D C},3e:B(C,3h){W(u x 3A 3h)C[x]=3h[x];D C},Q:B(C,3l){W(u x 3A 3l){q(m.2Y&&x==\'1B\'){q(3l[x]>0.99)C.F.bp(\'4C\');L C.F.4C=\'97(1B=\'+(3l[x]*2A)+\')\'}L C.F[x]=3l[x]}},41:B(C,1a,2P){u 3S,3Y,3P;q(1t 2P!=\'6W\'||2P===I){u 2S=aE;2P={3w:2S[2],2g:2S[3],83:2S[4]}}q(1t 2P.3w!=\'42\')2P.3w=6j;2P.2g=1r[2P.2g]||1r.8M;2P.5d=m.3e({},1a);W(u 2z 3A 1a){u e=1w m.1C(C,2P,2z);3S=6t(m.79(C,2z))||0;3Y=6t(1a[2z]);3P=2z!=\'1B\'?\'E\':\'\';e.2O(3S,3Y,3P)}},79:B(C,1a){q(C.F[1a]){D C.F[1a]}L q(N.87){D N.87.9k(C,I).9i(1a)}L{q(1a==\'1B\')1a=\'4C\';u 2R=C.4u[1a.2i(/\\-(\\w)/g,B(a,b){D b.bo()})];q(1a==\'4C\')2R=2R.2i(/97\\(1B=([0-9]+)\\)/,B(a,b){D b/2A});D 2R===\'\'?1:2R}},5y:B(){u d=N,w=1y,58=d.5G&&d.5G!=\'6M\'?d.44:d.V,2Y=m.1L&&(m.26<9||1t 8y==\'1X\');u K=2Y?58.8Q:(d.44.8Q||5o.bv),M=2Y?58.bu:5o.bm;m.3k={K:K,M:M,5T:2Y?58.5T:8y,5U:2Y?58.5U:bf};D m.3k},85:B(C){u p={x:C.8x,y:C.6G};3T(C.8p){C=C.8p;p.x+=C.8x;p.y+=C.6G;q(C!=N.V&&C!=N.44){p.x-=C.5T;p.y-=C.5U}}D p},53:B(a,1E,2O,R){q(!a)a=m.14(\'a\',I,{1O:\'24\'},m.1S);q(1t a.4V==\'B\')D 1E;q(R==\'2Q\'){W(u i=0;i<m.3C.1c;i++){q(m.3C[i]&&m.3C[i].a==a){m.3C[i].a8();m.3C[i]=I;D 1h}}m.8O=J}1m{1w m.4S(a,1E,2O,R);D 1h}1l(e){D J}},8D:B(a,1E,2O){D m.53(a,1E,2O,\'2Q\')},7E:B(){D m.14(\'1i\',{1p:\'U-2Q-O\',2n:m.8w(m.8A.8B)})},4d:B(C,4c,1p){u 1k=C.3x(4c);W(u i=0;i<1k.1c;i++){q((1w 5P(1p)).16(1k[i].1p)){D 1k[i]}}D I},8w:B(s){s=s.2i(/\\s/g,\' \');u 2t=/{m\\.1e\\.([^}]+)\\}/g,55=s.2Z(2t),1e;q(55)W(u i=0;i<55.1c;i++){1e=55[i].2i(2t,"$1");q(1t m.1e[1e]!=\'1X\')s=s.2i(55[i],m.1e[1e])}D s},7t:B(a){W(u i=0;i<m.4o.1c;i++){q(m.4o[i][0]==a){u c=m.4o[i][1];m.4o[i][1]=c.61(1);D c}}D I},af:B(e){u 1P=m.4Z();W(u i=0;i<1P.4q.1c;i++){u a=1P.4q[i];q(m.3U(a,\'2f\')==\'2x\'&&m.3U(a,\'82\'))m.20(m.5b,a)}m.7r(0)},7r:B(i){q(!m.5b[i])D;u a=m.5b[i];u 51=m.3z(m.3U(a,\'7f\'));q(!51)51=m.7E();u 2x=1w m.5j(a,51,1);2x.7v=B(){};2x.2J=B(){m.20(m.4o,[a,51]);m.7r(i+1)};2x.7y()},8L:B(){u 7n=0,5g=-1,P=m.P,A,1u;W(u i=0;i<P.1c;i++){A=P[i];q(A){1u=A.Y.F.1u;q(1u&&1u>7n){7n=1u;5g=i}}}q(5g==-1)m.2q=-1;L P[5g].3d()},3U:B(a,4R){a.4V=a.2M;u p=a.4V?a.4V():I;a.4V=I;D(p&&1t p[4R]!=\'1X\')?p[4R]:(1t m[4R]!=\'1X\'?m[4R]:I)},5m:B(a){u T=m.3U(a,\'T\');q(T)D T;D a.2v},3z:B(1j){u 1D=m.$(1j),3M=m.7k[1j],a={};q(!1D&&!3M)D I;q(!3M){3M=1D.61(J);3M.1j=\'\';m.7k[1j]=3M;D 1D}L{D 3M.61(J)}},3j:B(d){q(d)m.7g.1G(d);m.7g.2n=\'\'},8t:B(7F,A){u 3r=A||m.3v();A=3r;q(m.3B)D 1h;L m.3r=3r;m.4g(N,1y.30?\'5i\':\'5h\',m.4D);1m{m.3B=7F;7F.2M()}1l(e){m.3r=m.3B=I}1m{A.28()}1l(e){}D 1h},5k:B(C,2w){u A=m.3v(C);q(A)D m.8t(A.6B(2w),A);L D 1h},5n:B(C){D m.5k(C,-1)},1M:B(C){D m.5k(C,1)},4D:B(e){q(!e)e=1y.1Y;q(!e.2j)e.2j=e.6p;q(1t e.2j.7O!=\'1X\')D J;u A=m.3v();u 2w=I;8T(e.aI){1J 70:q(A)A.7i();D J;1J 32:1J 34:1J 39:1J 40:2w=1;7N;1J 8:1J 33:1J 37:1J 38:2w=-1;7N;1J 27:1J 13:2w=0}q(2w!==I){m.4g(N,1y.30?\'5i\':\'5h\',m.4D);q(!m.8C)D J;q(e.65)e.65();L e.aY=1h;q(A){q(2w==0){A.28()}L{m.5k(A.S,2w)}D 1h}}D J},b1:B(19){m.20(m.1Q,m.3e(19,{2F:\'2F\'+m.4y++}))},7S:B(7C,5M){u C,2t=/^U-Y-([0-9]+)$/;C=7C;3T(C.3a){q(C.1j&&2t.16(C.1j))D C.1j.2i(2t,"$1");C=C.3a}q(!5M){C=7C;3T(C.3a){q(C.4c&&m.5W(C)){W(u S=0;S<m.P.1c;S++){u A=m.P[S];q(A&&A.a==C)D S}}C=C.3a}}D I},3v:B(C,5M){q(1t C==\'1X\')D m.P[m.2q]||I;q(1t C==\'42\')D m.P[C]||I;q(1t C==\'7L\')C=m.$(C);D m.P[m.7S(C,5M)]||I},5W:B(a){D(a.2M&&a.2M.9C().2i(/\\s/g,\' \').2Z(/m.(aV|e)b7/))},ab:B(){W(u i=0;i<m.P.1c;i++)q(m.P[i]&&m.P[i].4e)m.8L()},7K:B(e){q(!e)e=1y.1Y;q(e.aJ>1)D J;q(!e.2j)e.2j=e.6p;u C=e.2j;3T(C.3a&&!(/U-(2D|3I|2Q|3q)/.16(C.1p))){C=C.3a}u A=m.3v(C);q(A&&(A.4z||!A.4e))D J;q(A&&e.R==\'7H\'){q(e.2j.7O)D J;u 2Z=C.1p.2Z(/U-(2D|3I|3q)/);q(2Z){m.2a={A:A,R:2Z[1],1f:A.x.H,K:A.x.G,18:A.y.H,M:A.y.G,8J:e.5Q,8F:e.5f};m.1R(N,\'6o\',m.8a);q(e.65)e.65();q(/U-(2D|2Q)-7s/.16(A.O.1p)){A.3d();m.7p=J}D 1h}L q(/U-2Q/.16(C.1p)&&m.2q!=A.S){A.3d();A.4a(\'1n\')}}L q(e.R==\'9t\'){m.4g(N,\'6o\',m.8a);q(m.2a){q(m.4i&&m.2a.R==\'2D\')m.2a.A.O.F.3L=m.4i;u 3f=m.2a.3f;q(!3f&&!m.7p&&!/(3I|3q)/.16(m.2a.R)){A.28()}L q(3f||(!3f&&m.8O)){m.2a.A.4a(\'1n\')}q(m.2a.A.2W)m.2a.A.2W.F.1O=\'24\';m.7p=1h;m.2a=I}L q(/U-2D-7s/.16(C.1p)){C.F.3L=m.4i}}D 1h},8a:B(e){q(!m.2a)D J;q(!e)e=1y.1Y;u a=m.2a,A=a.A;q(A.11){q(!A.2W)A.2W=m.14(\'1i\',I,{1d:\'22\',K:A.x.G+\'E\',M:A.y.G+\'E\',1f:A.x.cb+\'E\',18:A.y.cb+\'E\',1u:4,94:(m.2Y?\'bh\':\'24\'),1B:0.cD},A.Y,J);q(A.2W.F.1O==\'24\')A.2W.F.1O=\'\'}a.5q=e.5Q-a.8J;a.5r=e.5f-a.8F;u 6A=1r.cU(1r.8E(a.5q,2)+1r.8E(a.5r,2));q(!a.3f)a.3f=(a.R!=\'2D\'&&6A>0)||(6A>(m.cR||5));q(a.3f&&e.5Q>5&&e.5f>5){q(a.R==\'3q\')A.3q(a);L{A.7x(a.1f+a.5q,a.18+a.5r);q(a.R==\'2D\')A.O.F.3L=\'3I\'}}D 1h},8c:B(e){1m{q(!e)e=1y.1Y;u 67=/cW/i.16(e.R);q(!e.2j)e.2j=e.6p;q(!e.6l)e.6l=67?e.cZ:e.cY;u A=m.3v(e.2j);q(!A.4e)D;q(!A||!e.6l||m.3v(e.6l,J)==A||m.2a)D;W(u i=0;i<A.1Q.1c;i++)(B(){u o=m.$(\'2F\'+A.1Q[i]);q(o&&o.5Z){q(67)m.Q(o,{1q:\'2l\',1O:\'\'});m.41(o,{1B:67?o.1B:0},o.3b)}})()}1l(e){}},1R:B(C,1Y,35){q(C==N&&1Y==\'3p\'){m.20(m.6h,35)}1m{C.1R(1Y,35,1h)}1l(e){1m{C.8I(\'4Q\'+1Y,35);C.cX(\'4Q\'+1Y,35)}1l(e){C[\'4Q\'+1Y]=35}}},4g:B(C,1Y,35){1m{C.4g(1Y,35,1h)}1l(e){1m{C.8I(\'4Q\'+1Y,35)}1l(e){C[\'4Q\'+1Y]=I}}},68:B(i){q(m.6n&&m.4P[i]&&m.4P[i]!=\'1X\'){u 1v=N.14(\'1v\');1v.3H=B(){1v=I;m.68(i+1)};1v.T=m.4P[i]}},9u:B(42){q(42&&1t 42!=\'6W\')m.71=42;u 1P=m.4Z();W(u i=0;i<1P.3Z.1c&&i<m.71;i++){m.20(m.4P,m.5m(1P.3Z[i]))}q(m.1x)1w m.4L(m.1x,B(){m.68(0)});L m.68(0);q(m.4E)u 6E=m.14(\'1v\',{T:m.56+m.4E})},5N:B(){q(!m.1S){m.3F=m.1L&&m.26<7;m.2Y=m.1L&&m.26<9;m.5y();m.9z=m.3F&&7T.cI==\'cH:\';W(u x 3A m.5z){q(1t m[x]!=\'1X\')m.1e[x]=m[x];L q(1t m.1e[x]==\'1X\'&&1t m.5z[x]!=\'1X\')m.1e[x]=m.5z[x]}m.1S=m.14(\'1i\',{1p:\'U-1S\'},{1d:\'22\',1f:0,18:0,K:\'2A%\',1u:m.4l,8b:\'8H\'},N.V,J);m.21=m.14(\'a\',{1p:\'U-21\',2u:m.1e.8G,2n:m.1e.8K,2v:\'9X:;\'},{1d:\'22\',18:\'-3R\',1B:m.8N,1u:1},m.1S);m.7g=m.14(\'1i\',I,{1O:\'24\'},m.1S);m.2I=m.14(\'1i\',I,{ar:\'aw\',cF:\'cJ\'},I,J);1r.cK=B(t,b,c,d){D c*t/d+b};1r.8M=B(t,b,c,d){D c*(t/=d)*t+b};m.9m=m.3F;m.9l=((1y.30&&m.26<9)||46.ai==\'ah\'||(m.3F&&m.26<5.5))}},3p:B(){q(m.6Z)D;m.6Z=J;W(u i=0;i<m.6h.1c;i++)m.6h[i]()},8u:B(){u C,1k,4F=[],3Z=[],4q=[],3m={},2t;W(u i=0;i<m.7B.1c;i++){1k=N.3x(m.7B[i]);W(u j=0;j<1k.1c;j++){C=1k[j];2t=m.5W(C);q(2t){m.20(4F,C);q(2t[0]==\'m.53\')m.20(3Z,C);L q(2t[0]==\'m.8D\')m.20(4q,C);u g=m.3U(C,\'4h\')||\'24\';q(!3m[g])3m[g]=[];m.20(3m[g],C)}}}m.5K={4F:4F,3m:3m,3Z:3Z,4q:4q};D m.5K},4Z:B(){D m.5K||m.8u()},28:B(C){u A=m.3v(C);q(A)A.28();D 1h}};m.1C=B(2k,1N,1a){k.1N=1N;k.2k=2k;k.1a=1a;q(!1N.8s)1N.8s={}};m.1C.54={7Q:B(){(m.1C.3o[k.1a]||m.1C.3o.8z)(k);q(k.1N.3o)k.1N.3o.8v(k.2k,k.3Q,k)},2O:B(8q,2h,3P){k.84=(1w 5s()).59();k.3S=8q;k.3Y=2h;k.3P=3P;k.3Q=k.3S;k.H=k.80=0;u 5o=k;B t(5e){D 5o.3o(5e)}t.2k=k.2k;q(t()&&m.3t.20(t)==1){m.8r=dk(B(){u 3t=m.3t;W(u i=0;i<3t.1c;i++)q(!3t[i]())3t.dh(i--,1);q(!3t.1c){df(m.8r)}},13)}},3o:B(5e){u t=(1w 5s()).59();q(5e||t>=k.1N.3w+k.84){k.3Q=k.3Y;k.H=k.80=1;k.7Q();k.1N.5d[k.1a]=J;u 86=J;W(u i 3A k.1N.5d)q(k.1N.5d[i]!==J)86=1h;q(86){q(k.1N.83)k.1N.83.8v(k.2k)}D 1h}L{u n=t-k.84;k.80=n/k.1N.3w;k.H=k.1N.2g(n,0,1,k.1N.3w);k.3Q=k.3S+((k.3Y-k.3S)*k.H);k.7Q()}D J}};m.3e(m.1C,{3o:{1B:B(1C){m.Q(1C.2k,{1B:1C.3Q})},8z:B(1C){1m{q(1C.2k.F&&1C.2k.F[1C.1a]!=I)1C.2k.F[1C.1a]=1C.3Q+1C.3P;L 1C.2k[1C.1a]=1C.3Q}1l(e){}}}});m.4L=B(1x,2J){k.2J=2J;k.1x=1x;u v=m.26,5O;k.6C=m.1L&&m.26<7;q(!1x){q(2J)2J();D}m.5N();k.2m=m.14(\'2m\',{d7:0},{1q:\'1n\',1d:\'22\',d8:\'dc\',K:0},m.1S,J);u 7W=m.14(\'7W\',I,I,k.2m,1);k.29=[];W(u i=0;i<=8;i++){q(i%3==0)5O=m.14(\'5O\',I,{M:\'1H\'},7W,J);k.29[i]=m.14(\'29\',I,I,5O,J);u F=i!=4?{db:0,da:0}:{1d:\'3K\'};m.Q(k.29[i],F)}k.29[4].1p=1x+\' U-1o\';k.8P()};m.4L.54={8P:B(){u T=m.56+(m.d9||"cL/")+k.1x+".cE";u 98=m.4X&&m.26<8i?m.1S:I;k.2X=m.14(\'1v\',I,{1d:\'22\',18:\'-3R\'},98,J);u 36=k;k.2X.3H=B(){36.96()};k.2X.T=T},96:B(){u o=k.1s=k.2X.K/4,H=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],1F={M:(2*o)+\'E\',K:(2*o)+\'E\'};W(u i=0;i<=8;i++){q(H[i]){q(k.6C){u w=(i==1||i==7)?\'2A%\':k.2X.K+\'E\';u 1i=m.14(\'1i\',I,{K:\'2A%\',M:\'2A%\',1d:\'3K\',1W:\'1n\'},k.29[i],J);m.14(\'1i\',I,{4C:"c6:c5.9M.c4(c8=c9, T=\'"+k.2X.T+"\')",1d:\'22\',K:w,M:k.2X.M+\'E\',1f:(H[i][0]*o)+\'E\',18:(H[i][1]*o)+\'E\'},1i,J)}L{m.Q(k.29[i],{94:\'6X(\'+k.2X.T+\') \'+(H[i][0]*o)+\'E \'+(H[i][1]*o)+\'E\'})}q(1y.30&&(i==3||i==5))m.14(\'1i\',I,1F,k.29[i],J);m.Q(k.29[i],1F)}}k.2X=I;q(m.3G[k.1x])m.3G[k.1x].5l();m.3G[k.1x]=k;q(k.2J)k.2J()},4B:B(H,1s,9a,3b,2g){u A=k.A,4A=A.Y.F,1s=1s||0,H=H||{x:A.x.H+1s,y:A.y.H+1s,w:A.x.1b(\'1K\')-2*1s,h:A.y.1b(\'1K\')-2*1s};q(9a)k.2m.F.1q=(H.h>=4*k.1s)?\'2l\':\'1n\';m.Q(k.2m,{1f:(H.x-k.1s)+\'E\',18:(H.y-k.1s)+\'E\',K:(H.w+2*k.1s)+\'E\'});H.w-=2*k.1s;H.h-=2*k.1s;m.Q(k.29[4],{K:H.w>=0?H.w+\'E\':0,M:H.h>=0?H.h+\'E\':0});q(k.6C)k.29[3].F.M=k.29[5].F.M=k.29[4].F.M},5l:B(9d){q(9d)k.2m.F.1q=\'1n\';L m.3j(k.2m)}};m.5t=B(A,1F){k.A=A;k.1F=1F;k.2H=1F==\'x\'?\'cd\':\'cc\';k.2C=k.2H.5x();k.4J=1F==\'x\'?\'ca\':\'c3\';k.6J=k.4J.5x();k.6P=1F==\'x\'?\'c2\':\'bV\';k.bU=k.6P.5x();k.1V=k.2U=0};m.5t.54={1b:B(S){8T(S){1J\'7R\':D k.1A+k.2s+(k.t-m.21[\'1s\'+k.2H])/2;1J\'1K\':D k.G+2*k.cb+k.1V+k.2U;1J\'4b\':D k.5E-k.3y-k.5F;1J\'6K\':D k.1b(\'4b\')-2*k.cb-k.1V-k.2U;1J\'4w\':D k.H-(k.A.1o?k.A.1o.1s:0);1J\'88\':D k.1b(\'1K\')+(k.A.1o?2*k.A.1o.1s:0);1J\'5u\':D k.1T?1r.5Y((k.G-k.1T)/2):0}},6v:B(){k.cb=(k.A.O[\'1s\'+k.2H]-k.t)/2;k.5F=m[\'6V\'+k.6P]},6y:B(){k.t=k.A.C[k.2C]?49(k.A.C[k.2C]):k.A.C[\'1s\'+k.2H];k.1A=k.A.1A[k.1F];k.2s=(k.A.C[\'1s\'+k.2H]-k.t)/2;q(k.1A==0||k.1A==-1){k.1A=(m.3k[k.2C]/2)+m.3k[\'3s\'+k.4J]}},6u:B(){u A=k.A;k.3X=\'1H\';k.H=k.1A-k.cb+k.2s;q(k.6N&&k.1F==\'x\')A.5X=1r.2L(A.5X||k.Z,A.6N*k.Z/A.y.Z);k.G=1r.2L(k.Z,A[\'7l\'+k.2H]||k.Z);k.2E=A.4I?1r.2L(A[\'2L\'+k.2H],k.Z):k.Z;q(A.2o&&A.2K){k.G=A[k.2C];k.1T=k.Z}q(k.1F==\'x\'&&m.4M)k.2E=A.3O;k.3y=m[\'6V\'+k.4J];k.3s=m.3k[\'3s\'+k.4J];k.5E=m.3k[k.2C]},7J:B(i){u A=k.A;q(A.2o&&(A.2K||m.4M)){k.1T=i;k.G=1r.7l(k.G,k.1T);A.O.F[k.6J]=k.1b(\'5u\')+\'E\'}L k.G=i;A.O.F[k.2C]=i+\'E\';A.Y.F[k.2C]=k.1b(\'1K\')+\'E\';q(A.1o)A.1o.4B();q(A.2W)A.2W.F[k.2C]=i+\'E\';q(k.1F==\'y\'&&A.4v&&A.V.F.M!=\'1H\')1m{A.4v.V.F.1W=\'1H\'}1l(e){}q(A.1Z){u d=A.2c;q(k.7a===1X)k.7a=A.1g[\'1s\'+k.2H]-d[\'1s\'+k.2H];d.F[k.2C]=(k.G-k.7a)+\'E\';q(k.1F==\'x\')A.3D.F.K=\'1H\';q(A.V)A.V.F[k.2C]=\'1H\'}q(k.1F==\'x\'&&A.1z)A.4m(J)},7j:B(i){k.H=i;k.A.Y.F[k.6J]=i+\'E\';q(k.A.1o)k.A.1o.4B()}};m.4S=B(a,1E,2O,2B){q(N.9r&&m.1L&&!m.6Z){m.1R(N,\'3p\',B(){1w m.4S(a,1E,2O,2B)});D}k.a=a;k.2O=2O;k.2B=2B||\'2D\';k.1Z=(2B==\'2Q\');k.2o=!k.1Z;m.6n=1h;k.1Q=[];m.5N();u S=k.S=m.P.1c;W(u i=0;i<m.6s.1c;i++){u 2z=m.6s[i];k[2z]=1E&&1t 1E[2z]!=\'1X\'?1E[2z]:m[2z]}q(!k.T)k.T=a.2v;u C=(1E&&1E.6O)?m.$(1E.6O):a;C=k.8o=C.3x(\'1v\')[0]||C;k.6b=C.1j||a.1j;W(u i=0;i<m.P.1c;i++){q(m.P[i]&&m.P[i].a==a){m.P[i].3d();D 1h}}q(!m.cf)W(u i=0;i<m.P.1c;i++){q(m.P[i]&&m.P[i].8o!=C&&!m.P[i].6e){m.P[i].6w()}}m.P[S]=k;q(!m.7m&&!m.3B){q(m.P[S-1])m.P[S-1].28();q(1t m.2q!=\'1X\'&&m.P[m.2q])m.P[m.2q].28()}k.C=C;k.1A=k.8d||m.85(C);m.5y();u x=k.x=1w m.5t(k,\'x\');x.6y();u y=k.y=1w m.5t(k,\'y\');y.6y();k.Y=m.14(\'1i\',{1j:\'U-Y-\'+k.S,1p:\'U-Y \'+k.78},{1q:\'1n\',1d:\'22\',1u:m.4l+=2},I,J);k.Y.cg=k.Y.cw=m.8c;q(k.2B==\'2D\'&&k.3g==2)k.3g=0;q(!k.1x){k[k.2B+\'7P\']()}L q(m.3G[k.1x]){k.81();k[k.2B+\'7P\']()}L{k.4t();u A=k;1w m.4L(k.1x,B(){A.81();A[A.2B+\'7P\']()})}D J};m.4S.54={7w:B(e){q(m.cv)cu(\'ct \'+e.cx+\': \'+e.cy);L 1y.7T.2v=k.T},81:B(){u 1o=k.1o=m.3G[k.1x];1o.A=k;1o.2m.F.1u=k.Y.F.1u-1;m.3G[k.1x]=I},4t:B(){q(k.6e||k.21)D;k.21=m.21;u A=k;k.21.2M=B(){A.6w()};u A=k,l=k.x.1b(\'7R\')+\'E\',t=k.y.1b(\'7R\')+\'E\';4T(B(){q(A.21)m.Q(A.21,{1f:l,18:t,1u:m.4l++})},2A)},cz:B(){u A=k;u 1v=N.14(\'1v\');k.O=1v;1v.3H=B(){q(m.P[A.S])A.4x()};q(m.cs)1v.cr=B(){D 1h};1v.1p=\'U-2D\';m.Q(1v,{1q:\'1n\',1O:\'4H\',1d:\'22\',5X:\'3R\',1u:3});1v.2u=m.1e.7h;q(m.4X&&m.26<8i)m.1S.1G(1v);q(m.1L&&m.ch)1v.T=I;1v.T=k.T;k.4t()},cl:B(){k.O=m.7t(k.a);q(!k.O)k.O=m.3z(k.7f);q(!k.O)k.O=m.7E();k.77([\'6i\']);q(k.6i){u V=m.4d(k.O,\'1i\',\'U-V\');q(V)V.1G(k.6i);k.6i.F.1O=\'4H\'}u 1g=k.1g=k.O;q(/(3c|11)/.16(k.2f))k.7d(1g);m.1S.1G(k.Y);m.Q(k.Y,{1d:\'cp\',6z:\'0 \'+m.6m+\'E 0 \'+m.4j+\'E\'});k.O=m.14(\'1i\',{1p:\'U-2Q\'},{1d:\'3K\',1u:3,M:0,1W:\'1n\'},k.Y);k.3D=m.14(\'1i\',I,I,k.O,1);k.3D.1G(1g);m.Q(1g,{1d:\'3K\',1O:\'4H\',8b:m.1e.89||\'\'});q(k.K)1g.F.K=k.K+\'E\';q(k.M)m.Q(1g,{M:k.M+\'E\',1W:\'1n\'});q(1g.2e<k.3O)1g.F.K=k.3O+\'E\';q(k.2f==\'2x\'&&!m.7t(k.a)){k.4t();u A=k;u 2x=1w m.5j(k.a,1g);2x.T=k.T;2x.2J=B(){q(m.P[A.S])A.4x()};2x.7v=B(){7T.2v=A.T};2x.7y()}L q(k.2f==\'11\'&&k.31==\'4K\'){k.5S()}L k.4x()},4x:B(){1m{q(!k.O)D;k.O.3H=I;q(k.6e)D;L k.6e=J;u x=k.x,y=k.y;q(k.21){m.Q(k.21,{18:\'-3R\'});k.21=I}q(k.2o){x.Z=k.O.K;y.Z=k.O.M;m.Q(k.O,{K:x.t+\'E\',M:y.t+\'E\'});k.Y.1G(k.O);m.1S.1G(k.Y)}L q(k.76)k.76();x.6v();y.6v();m.Q(k.Y,{1f:(x.1A+x.2s-x.cb)+\'E\',18:(y.1A+x.2s-y.cb)+\'E\'});k.aa();u 2d=x.Z/y.Z;x.6u();k.3X(x);y.6u();k.3X(y);q(k.1Z)k.aq();q(k.1z)k.4m(0,1);q(k.4I){q(k.2o)k.aA(2d);L k.6Y();q(k.2o&&k.x.Z>(k.x.1T||k.x.G)){k.9W();q(k.1Q.1c==1)k.4m()}}k.7M()}1l(e){k.7w(e)}},7d:B(4r,1H){u c=m.4d(4r,\'5H\',\'U-V\');q(/(11|3c)/.16(k.2f)){q(k.3i)c.F.K=k.3i+\'E\';q(k.3J)c.F.M=k.3J+\'E\'}},5S:B(){q(k.av)D;u A=k;k.V=m.4d(k.1g,\'5H\',\'U-V\');q(k.2f==\'11\'){k.4t();u 4n=m.2I.61(1);k.V.1G(4n);k.cn=k.1g.2e;q(!k.3i)k.3i=4n.2e;u 45=k.1g.1I-k.V.1I,h=k.3J||m.3k.M-45-m.3N-m.6f,3H=k.31==\'4K\'?\' 3H="q (m.P[\'+k.S+\']) m.P[\'+k.S+\'].4x()" \':\'\';k.V.2n+=\'<11 2z="m\'+(1w 5s()).59()+\'" cq="0" S="\'+k.S+\'" \'+\' F="K:\'+k.3i+\'E; M:\'+h+\'E" \'+3H+\' T="\'+k.T+\'" ></11>\';k.4n=k.V.3x(\'1i\')[0];k.11=k.V.3x(\'11\')[0];q(k.31==\'4O\')k.6S()}q(k.2f==\'3c\'){k.V.1j=k.V.1j||\'m-cm-1j-\'+k.S;u a=k.7I;q(!a.1E)a.1E={};q(1t a.1E.aF==\'1X\')a.1E.aF=\'ci\';q(7D)7D.cj(k.T,k.V.1j,k.3i,k.3J,a.ck||\'7\',a.cC,a.al,a.1E,a.ay)}k.av=J},76:B(){q(k.11&&!k.3J){k.11.F.M=k.V.F.M=k.at()+\'E\'}k.1g.1G(m.2I);q(!k.x.Z)k.x.Z=k.1g.2e;k.y.Z=k.1g.1I;k.1g.aj(m.2I);q(m.1L&&k.au>49(k.1g.4u.M)){k.au=49(k.1g.4u.M)}m.Q(k.Y,{1d:\'22\',6z:\'0\'});m.Q(k.O,{K:k.x.t+\'E\',M:k.y.t+\'E\'})},at:B(){u h;1m{u 1U=k.4v=k.11.6r||k.11.52.N;u 2I=1U.14(\'1i\');2I.F.ar=\'aw\';1U.V.1G(2I);h=2I.6G;q(m.1L)h+=49(1U.V.4u.3N)+49(1U.V.4u.6f)-1}1l(e){h=bY}D h},6S:B(){u 4k=k.1g.2e-k.4n.2e;m.3j(k.4n);q(4k<0)4k=0;u 45=k.1g.1I-k.11.1I;q(k.4v&&!k.3J&&!k.M&&k.y.G==k.y.Z)1m{k.4v.V.F.1W=\'1n\'}1l(e){}m.Q(k.11,{K:1r.7u(k.x.G-4k)+\'E\',M:1r.7u(k.y.G-45)+\'E\'});m.Q(k.V,{K:k.11.F.K,M:k.11.F.M});k.4p=k.11;k.2c=k.4p},aq:B(){k.7d(k.1g);q(k.2f==\'3c\'&&k.31==\'4K\')k.5S();q(k.x.G<k.x.Z&&!k.5D)k.x.G=k.x.Z;q(k.y.G<k.y.Z&&!k.5A)k.y.G=k.y.Z;k.2c=k.1g;m.Q(k.3D,{1d:\'3K\',K:k.x.G+\'E\'});m.Q(k.1g,{ap:\'24\',K:\'1H\',M:\'1H\'});u 1D=m.4d(k.1g,\'5H\',\'U-V\');q(1D&&!/(11|3c)/.16(k.2f)){u 47=1D;1D=m.14(47.bZ,I,{1W:\'1n\'},I,J);47.3a.c0(1D,47);1D.1G(m.2I);1D.1G(47);u 4k=k.1g.2e-1D.2e;u 45=k.1g.1I-1D.1I;1D.aj(m.2I);u 5C=m.4X||46.ai==\'ah\'?1:0;m.Q(1D,{K:(k.x.G-4k-5C)+\'E\',M:(k.y.G-45)+\'E\',1W:\'1H\',1d:\'3K\'});q(5C&&47.1I>1D.1I){1D.F.K=(49(1D.F.K)+5C)+\'E\'}k.4p=1D;k.2c=k.4p}q(k.11&&k.31==\'4K\')k.6S();q(!k.4p&&k.y.G<k.3D.1I)k.2c=k.O;q(k.2c==k.O&&!k.5D&&!/(11|3c)/.16(k.2f)){k.x.G+=17}q(k.2c&&k.2c.1I>k.2c.3a.1I){4T("1m { m.P["+k.S+"].2c.F.1W = \'1H\'; } 1l(e) {}",m.7c)}},3X:B(p,3W){u bW,bS=p.2j,1F=p==k.x?\'x\':\'y\';u 6R=1h;u 3V=p.A.4I;p.H=1r.5Y(p.H-((p.1b(\'1K\')-p.t)/2));q(p.H<p.3s+p.3y){p.H=p.3s+p.3y;6R=J}q(!3W&&p.G<p.2E){p.G=p.2E;3V=1h}q(p.H+p.1b(\'1K\')>p.3s+p.5E-p.5F){q(!3W&&6R&&3V){p.G=1r.2L(p.G,p.1b(1F==\'y\'?\'4b\':\'6K\'))}L q(p.1b(\'1K\')<p.1b(\'4b\')){p.H=p.3s+p.5E-p.5F-p.1b(\'1K\')}L{p.H=p.3s+p.3y;q(!3W&&3V)p.G=p.1b(1F==\'y\'?\'4b\':\'6K\')}}q(!3W&&p.G<p.2E){p.G=p.2E;3V=1h}q(p.H<p.3y){u ao=p.H;p.H=p.3y;q(3V&&!3W)p.G=p.G-(p.H-ao)}},aA:B(2d){u x=k.x,y=k.y,2V=1h,2r=1r.2L(x.Z,x.G),2N=1r.2L(y.Z,y.G),2K=(k.2K||m.4M);q(2r/2N>2d){ 2r=2N*2d;q(2r<x.2E){2r=x.2E;2N=2r/2d}2V=J}L q(2r/2N<2d){ 2N=2r/2d;2V=J}q(m.4M&&x.Z<x.2E){x.1T=x.Z;y.G=y.1T=y.Z}L q(k.2K){x.1T=2r;y.1T=2N}L{x.G=2r;y.G=2N}2V=k.6Y(k.2K?I:2d,2V);q(2K&&y.G<y.1T){y.1T=y.G;x.1T=y.G*2d}q(2V||2K){x.H=x.1A-x.cb+x.2s;x.2E=x.G;k.3X(x,J);y.H=y.1A-y.cb+y.2s;y.2E=y.G;k.3X(y,J);q(k.1z)k.4m()}},6Y:B(2d,2V){u x=k.x,y=k.y;q(k.1z&&(k.2o||k.5A)){3T(y.G>k.4s&&x.G>k.3O&&y.1b(\'1K\')>y.1b(\'4b\')){y.G-=10;q(2d)x.G=y.G*2d;k.4m(0,1);2V=J}}D 2V},7M:B(){u x=k.x,y=k.y;k.4a(\'1n\');k.7z(1,{Y:{K:x.1b(\'1K\'),M:y.1b(\'1K\'),1f:x.H,18:y.H},O:{1f:x.1V+x.1b(\'5u\'),18:y.1V+y.1b(\'5u\'),K:x.1T||x.G,M:y.1T||y.G}},m.7c)},7z:B(2y,2h,3b){q(k.1o&&!k.3g){q(2y)k.1o.4B();L k.1o.5l((k.1Z&&k.48))}q(!2y)k.9V();u A=k,x=A.x,y=A.y,2g=k.2g;q(!2y)2g=k.an||2g;u 4O=2y?B(){q(A.1o)A.1o.2m.F.1q="2l";4T(B(){A.aC()},50)}:B(){A.7A()};q(2y)m.Q(k.Y,{K:x.t+\'E\',M:y.t+\'E\'});q(2y&&k.1Z){m.Q(k.Y,{1f:(x.1A-x.cb+x.2s)+\'E\',18:(y.1A-y.cb+y.2s)+\'E\'})}q(k.am){m.Q(k.Y,{1B:2y?0:1});m.3e(2h.Y,{1B:2y})}m.41(k.Y,2h.Y,{3w:3b,2g:2g,3o:B(2R,2S){q(A.1o&&A.3g&&2S.1a==\'18\'){u 4G=2y?2S.H:1-2S.H;u H={w:x.t+(x.1b(\'1K\')-x.t)*4G,h:y.t+(y.1b(\'1K\')-y.t)*4G,x:x.1A+(x.H-x.1A)*4G,y:y.1A+(y.H-y.1A)*4G};A.1o.4B(H,0,1)}q(A.1Z){q(2S.1a==\'1f\')A.3D.F.1f=(x.H-2R)+\'E\';q(2S.1a==\'18\')A.3D.F.18=(y.H-2R)+\'E\'}}});m.41(k.O,2h.O,3b,2g,4O);q(2y){k.Y.F.1q=\'2l\';k.O.F.1q=\'2l\';q(k.1Z)k.1g.F.1q=\'2l\';k.a.1p+=\' U-9T-9O\'}},aC:B(){k.4e=J;k.3d();q(k.1Z&&k.31==\'4O\')k.5S();q(k.11){1m{u A=k,1U=k.11.6r||k.11.52.N;m.1R(1U,\'7H\',B(){q(m.2q!=A.S)A.3d()})}1l(e){}q(m.1L&&1t k.4z!=\'ce\')k.11.F.K=(k.3i-1)+\'E\'}q(m.3B&&m.3B==k.a)m.3B=I;k.ax();u p=m.3k,6I=m.5R.x+p.5T,6D=m.5R.y+p.5U;k.6x=k.x.H<6I&&6I<k.x.H+k.x.1b(\'1K\')&&k.y.H<6D&&6D<k.y.H+k.y.1b(\'1K\');q(k.1z)k.9N()},ax:B(){u S=k.S;u 1x=k.1x;1w m.4L(1x,B(){1m{m.P[S].9h()}1l(e){}})},9h:B(){u 1M=k.6B(1);q(1M&&1M.2M.9C().2Z(/m\\.53/))u 1v=m.14(\'1v\',{T:m.5m(1M)})},6B:B(2w){u 9B=k.9A(),as=m.5K.3m[k.4h||\'24\'];D(as&&as[9B+2w])||I},9A:B(){u 1P=m.4Z().3m[k.4h||\'24\'];q(1P)W(u i=0;i<1P.1c;i++){q(1P[i]==k.a)D i}D I},6w:B(){m.3j(k.Y);m.P[k.S]=I;q(k.21)m.21.F.1f=\'-3R\'},a0:B(){k.7e=m.14(\'a\',{2v:m.9y,2j:m.9E,1p:\'U-7e\',2n:m.1e.ag,2u:m.1e.9F});k.4W({60:k.7e,1d:k.9K||\'18 1f\'})},77:B(7X,9x){W(u i=0;i<7X.1c;i++){u R=7X[i],s=I;q(!k[R+\'43\']&&k.6b)k[R+\'43\']=R+\'-W-\'+k.6b;q(k[R+\'43\'])k[R]=m.3z(k[R+\'43\']);q(!k[R]&&!k[R+\'7Z\']&&k[R+\'9I\'])1m{s=d4(k[R+\'9I\'])}1l(e){}q(!k[R]&&k[R+\'7Z\']){s=k[R+\'7Z\']}q(!k[R]&&!s){k[R]=m.3z(k.a[\'9G\'+R+\'43\']);q(!k[R]){u 1M=k.a.9H;3T(1M&&!m.5W(1M)){q((1w 5P(\'U-\'+R)).16(1M.1p||I)){q(!1M.1j)k.a[\'9G\'+R+\'43\']=1M.1j=\'2F\'+m.4y++;k[R]=m.3z(1M.1j);7N}1M=1M.9H}}}q(!k[R]&&s)k[R]=m.14(\'1i\',{1p:\'U-\'+R,2n:s});q(9x&&k[R]){u o={1d:(R==\'66\')?\'4U\':\'6a\'};W(u x 3A k[R+\'9w\'])o[x]=k[R+\'9w\'][x];o.60=k[R];k.4W(o)}}},4a:B(1q){q(m.9m)k.5a(\'d5\',1q);q(m.9l)k.5a(\'de\',1q);q(m.7V)k.5a(\'*\',1q)},5a:B(4c,1q){u 1k=N.3x(4c);u 1a=4c==\'*\'?\'1W\':\'1q\';W(u i=0;i<1k.1c;i++){q(1a==\'1q\'||(N.87.9k(1k[i],"").9i(\'1W\')==\'1H\'||1k[i].9j(\'1n-by\')!=I)){u 23=1k[i].9j(\'1n-by\');q(1q==\'2l\'&&23){23=23.2i(\'[\'+k.S+\']\',\'\');1k[i].4N(\'1n-by\',23);q(!23)1k[i].F[1a]=1k[i].7q}L q(1q==\'1n\'){u 2T=m.85(1k[i]);2T.w=1k[i].2e;2T.h=1k[i].1I;u 9o=(2T.x+2T.w<k.x.1b(\'4w\')||2T.x>k.x.1b(\'4w\')+k.x.1b(\'88\'));u 9p=(2T.y+2T.h<k.y.1b(\'4w\')||2T.y>k.y.1b(\'4w\')+k.y.1b(\'88\'));u 5c=m.7S(1k[i]);q(!9o&&!9p&&5c!=k.S){q(!23){1k[i].4N(\'1n-by\',\'[\'+k.S+\']\');1k[i].7q=1k[i].F[1a];1k[i].F[1a]=\'1n\'}L q(23.9v(\'[\'+k.S+\']\')==-1){1k[i].4N(\'1n-by\',23+\'[\'+k.S+\']\')}}L q((23==\'[\'+k.S+\']\'||m.2q==5c)&&5c!=k.S){1k[i].4N(\'1n-by\',\'\');1k[i].F[1a]=1k[i].7q||\'\'}L q(23&&23.9v(\'[\'+k.S+\']\')>-1){1k[i].4N(\'1n-by\',23.2i(\'[\'+k.S+\']\',\'\'))}}}}},3d:B(){k.Y.F.1u=m.4l+=2;W(u i=0;i<m.P.1c;i++){q(m.P[i]&&i==m.2q){u 4f=m.P[i];4f.O.1p+=\' U-\'+4f.2B+\'-7s\';q(4f.2o){4f.O.F.3L=m.3F?\'9q\':\'5w\';4f.O.2u=m.1e.9s}}}q(k.1o)k.1o.2m.F.1u=k.Y.F.1u-1;k.O.1p=\'U-\'+k.2B;q(k.2o){k.O.2u=m.1e.7h;q(m.4E){m.4i=1y.30?\'5w\':\'6X(\'+m.56+m.4E+\'), 5w\';q(m.3F&&m.26<6)m.4i=\'9q\';k.O.F.3L=m.4i}}m.2q=k.S;m.1R(N,1y.30?\'5i\':\'5h\',m.4D)},7x:B(x,y){k.x.7j(x);k.y.7j(y)},3q:B(e){u w,h,r=e.K/e.M;w=1r.7l(e.K+e.5q,1r.2L(k.3O,k.x.Z));q(k.2o&&1r.7u(w-k.x.Z)<12)w=k.x.Z;h=k.1Z?e.M+e.5r:w/r;q(h<1r.2L(k.4s,k.y.Z)){h=1r.2L(k.4s,k.y.Z);q(k.2o)w=h*r}k.7G(w,h)},7G:B(w,h){k.y.7J(h);k.x.7J(w);k.Y.F.M=k.y.1b(\'1K\')+\'E\'},28:B(){q(k.4z||!k.4e)D;k.4z=J;m.4g(N,1y.30?\'5i\':\'5h\',m.4D);1m{q(k.1Z)k.a5();k.O.F.3L=\'d1\';k.7z(0,{Y:{K:k.x.t,M:k.y.t,1f:k.x.1A-k.x.cb+k.x.2s,18:k.y.1A-k.y.cb+k.y.2s},O:{1f:0,18:0,K:k.x.t,M:k.y.t}},m.a7)}1l(e){k.7A()}},a5:B(){q(m.7V){q(!m.57)m.57=m.14(\'1i\',I,{1d:\'22\'},m.1S);m.Q(m.57,{K:k.x.G+\'E\',M:k.y.G+\'E\',1f:k.x.H+\'E\',18:k.y.H+\'E\',1O:\'4H\'})}q(k.2f==\'3c\')1m{m.$(k.V.1j).cN()}1l(e){}q(k.31==\'4O\'&&!k.48)k.a4();q(k.2c&&k.2c!=k.4p)k.2c.F.1W=\'1n\'},a4:B(){q(m.1L&&k.11)1m{k.11.52.N.V.2n=\'\'}1l(e){}q(k.2f==\'3c\')7D.cO(k.V.1j);k.V.2n=\'\'},9S:B(){q(k.1o)k.1o.2m.F.1O=\'24\';k.2W=I;k.Y.F.1O=\'24\';k.4e=1h;m.20(m.3C,k)},a8:B(){1m{m.P[k.S]=k;q(!m.7m&&m.2q!=k.S){1m{m.P[m.2q].28()}1l(e){}}u z=m.4l++,4A={1O:\'\',1u:z};m.Q(k.Y,4A);k.4z=1h;u o=k.1o||0;q(o){q(!k.3g)4A.1q=\'1n\';m.Q(o.2m,4A)}k.7M()}1l(e){}},4W:B(o){u C=o.60;q(1t C==\'7L\')C=m.3z(C);q(o.2Q)C=m.14(\'1i\',{2n:o.2Q});q(!C||1t C==\'7L\')D;C.F.1O=\'4H\';k.9Q();u K=o.K&&/^[0-9]+(E|%)$/.16(o.K)?o.K:\'1H\';q(/^(1f|2G)73$/.16(o.1d)&&!/^[0-9]+E$/.16(o.K))K=\'cG\';u 19=m.14(\'1i\',{1j:\'2F\'+m.4y++,2F:o.2F},{1d:\'22\',1q:\'1n\',K:K,8b:m.1e.89||\'\',1B:0},k.1z,J);19.1G(C);m.3e(19,{1B:1,a9:0,ae:0,3b:(o.7U===0||o.7U===1h||(o.7U==2&&m.1L))?0:6j});m.3e(19,o);q(k.9R){k.5p(19);q(!19.5Z||k.6x)m.41(19,{1B:19.1B},19.3b)}m.20(k.1Q,m.4y-1)},5p:B(19){u p=19.1d||\'6q 6H\',64=19.a9,62=19.ae;q(19.3a!=k.1z)k.1z.1G(19);q(/1f$/.16(p))19.F.1f=64+\'E\';q(/6H$/.16(p))m.Q(19,{1f:\'50%\',4j:(64-1r.5Y(19.2e/2))+\'E\'});q(/2G$/.16(p))19.F.2G=-64+\'E\';q(/^ad$/.16(p)){m.Q(19,{2G:\'2A%\',6m:k.x.cb+\'E\',18:-k.y.cb+\'E\',3E:-k.y.cb+\'E\',1W:\'1H\'});k.x.1V=19.2e}L q(/^ac$/.16(p)){m.Q(19,{1f:\'2A%\',4j:k.x.cb+\'E\',18:-k.y.cb+\'E\',3E:-k.y.cb+\'E\',1W:\'1H\'});k.x.2U=19.2e}q(/^18/.16(p))19.F.18=62+\'E\';q(/^6q/.16(p))m.Q(19,{18:\'50%\',3N:(62-1r.5Y(19.1I/2))+\'E\'});q(/^3E/.16(p))19.F.3E=-62+\'E\';q(/^4U$/.16(p)){m.Q(19,{1f:(-k.x.1V-k.x.cb)+\'E\',2G:(-k.x.2U-k.x.cb)+\'E\',3E:\'2A%\',6f:k.y.cb+\'E\',K:\'1H\'});k.y.1V=19.1I}L q(/^6a$/.16(p)){m.Q(19,{1d:\'3K\',1f:(-k.x.1V-k.x.cb)+\'E\',2G:(-k.x.2U-k.x.cb)+\'E\',18:\'2A%\',3N:k.y.cb+\'E\',K:\'1H\'});k.y.2U=19.1I;19.F.1d=\'22\'}},aa:B(){k.77([\'66\',\'cP\'],J);q(k.66&&k.7b)k.66.1p+=\' U-3I\';q(m.a1)k.a0();W(u i=0;i<m.1Q.1c;i++){u o=m.1Q[i],63=o.6O,6d=o.4h;q((!63&&!6d)||(63&&63==k.6b)||(6d&&6d===k.4h)){q(k.2o||(k.1Z&&o.cQ))k.4W(o)}}u 6g=[];W(u i=0;i<k.1Q.1c;i++){u o=m.$(\'2F\'+k.1Q[i]);q(/73$/.16(o.1d))k.5p(o);L m.20(6g,o)}W(u i=0;i<6g.1c;i++)k.5p(6g[i]);k.9R=J},9Q:B(){q(!k.1z)k.1z=m.14(\'1i\',{1p:k.78},{1d:\'22\',K:(k.x.G||(k.2K?k.K:I)||k.x.Z)+\'E\',M:(k.y.G||k.y.Z)+\'E\',1q:\'1n\',1W:\'1n\',1u:m.1L?4:\'1H\'},m.1S,J)},4m:B(74,9P){u 1z=k.1z,x=k.x,y=k.y;m.Q(1z,{K:x.G+\'E\',M:y.G+\'E\'});q(74||9P){W(u i=0;i<k.1Q.1c;i++){u o=m.$(\'2F\'+k.1Q[i]);u 72=(m.3F||N.5G==\'6M\');q(o&&/^(4U|6a)$/.16(o.1d)){q(72){o.F.K=(1z.2e+2*x.cb+x.1V+x.2U)+\'E\'}y[o.1d==\'4U\'?\'1V\':\'2U\']=o.1I}q(o&&72&&/^(1f|2G)73$/.16(o.1d)){o.F.M=(1z.1I+2*y.cb)+\'E\'}}}q(74){m.Q(k.O,{18:y.1V+\'E\'});m.Q(1z,{18:(y.1V+y.cb)+\'E\'})}},9N:B(){u b=k.1z;b.1p=\'\';m.Q(b,{18:(k.y.1V+k.y.cb)+\'E\',1f:(k.x.1V+k.x.cb)+\'E\',1W:\'2l\'});q(m.4X)b.F.1q=\'2l\';k.Y.1G(b);W(u i=0;i<k.1Q.1c;i++){u o=m.$(\'2F\'+k.1Q[i]);o.F.1u=o.1u||4;q(!o.5Z||k.6x){o.F.1q=\'2l\';m.Q(o,{1q:\'2l\',1O:\'\'});m.41(o,{1B:o.1B},o.3b)}}},9V:B(){q(!k.1Q.1c)D;q(k.1Z&&k.48){k.1z.F.18=\'-3R\';m.1S.1G(k.1z)}L m.3j(k.1z)},9W:B(){k.69=m.14(\'a\',{2v:\'9X:m.P[\'+k.S+\'].7i();\',2u:m.1e.9Y,1p:\'U-Z-53\'});k.4W({60:k.69,1d:m.9Z,5Z:J,1B:m.9U})},7i:B(){1m{q(k.69)m.3j(k.69);k.3d();u 2r=k.x.G,2N=k.y.G;k.7G(k.x.Z,k.y.Z);u 6k=k.x.H-(k.x.G-2r)/2;q(6k<m.4j)6k=m.4j;u 6c=k.y.H-(k.y.G-2N)/2;q(6c<m.3N)6c=m.3N;k.7x(6k,6c);k.4a(\'1n\')}1l(e){k.7w(e)}},7A:B(){k.a.1p=k.a.1p.2i(\'U-9T-9O\',\'\');k.4a(\'2l\');q(k.1Z&&k.48){k.9S()}L{q(k.1o&&k.3g)k.1o.5l();m.3j(k.Y)}q(m.57)m.57.F.1O=\'24\';m.P[k.S]=I;m.ab()}};m.5j=B(a,O,5L){k.a=a;k.O=O;k.5L=5L};m.5j.54={7y:B(){u 2b;q(!k.T)k.T=m.5m(k.a);q(k.T.2Z(\'#\')){u 1P=k.T.az(\'#\');k.T=1P[0];k.1j=1P[1]}q(m.5J[k.T]){k.9D=m.5J[k.T];q(k.1j)k.7Y();L k.4Y();D}1m{2b=1w 9n()}1l(e){1m{2b=1w a6("bE.9L")}1l(e){1m{2b=1w a6("9M.9L")}1l(e){k.7v()}}}u 36=k;2b.bF=B(){q(36.2b.9r==4){q(36.1j)36.7Y();L 36.4Y()}};u T=k.T;k.2b=2b;q(m.bd)T=T.2i(/$/,(/\\?/.16(T)?\'&\':\'?\')+\'bz=\'+(1w 5s()).59());2b.ak(\'bA\',T,J);2b.9J(\'X-bP-bN\',\'9n\');2b.9J(\'bw-bj\',\'bk/x-bl-7O-be\');2b.bg(I)},7Y:B(){m.5N();u 3h=1y.30||m.9z?{T:\'bs:br\'}:I;k.11=m.14(\'11\',3h,{1d:\'22\',18:\'-3R\'},m.1S);k.4Y()},4Y:B(){u s=k.9D||k.2b.bq,5I;q(k.5L)m.5J[k.T]=s;q(!m.1L||m.26>=5.5){s=s.2i(1w 5P(\'<bn[^>]*>\',\'aB\'),\'\').2i(1w 5P(\'<aD[^>]*>.*?</aD>\',\'aB\'),\'\');q(k.11){u 1U=k.11.6r;q(!1U&&k.11.52)1U=k.11.52.N;q(!1U){u 36=k;4T(B(){36.4Y()},25);D}1U.ak();1U.bO(s);1U.28();1m{s=1U.6F(k.1j).2n}1l(e){1m{s=k.11.N.6F(k.1j).2n}1l(e){}}m.3j(k.11)}L{5I=/(<V[^>]*>|<\\/V>)/ba;q(5I.16(s))s=s.az(5I)[m.2Y?1:2]}}m.4d(k.O,\'5H\',\'U-V\').2n=s;k.2J();W(u x 3A k)k[x]=I}};m.5z=m.1e;u b6=m.4S;q(m.1L&&1y==1y.18){(B(){1m{N.44.aW(\'1f\')}1l(e){4T(aE.aX,50);D}m.3p()})()}m.1R(N,\'b9\',m.3p);m.1R(1y,\'7o\',m.3p);m.1R(N,\'3p\',B(){q(m.5v){u F=m.14(\'F\',{R:\'aK/79\'},I,N.3x(\'aQ\')[0]),a2=N.5G==\'6M\';B 5B(6U,6T){q(m.1L&&(m.26<9||a2)){u 3r=N.a3[N.a3.1c-1];q(1t(3r.5B)=="6W")3r.5B(6U,6T)}L{F.1G(N.bb(6U+" {"+6T+"}"))}}B cT(1a){D\'cS( ( ( cV = N.44.\'+1a+\' ? N.44.\'+1a+\' : N.V.\'+1a+\' ) ) + \\\'E\\\' );\'}q(m.5v)5B(\'.U 1v\',\'3L: 6X(\'+m.56+m.5v+\'), 5w !d0;\')}});m.1R(1y,\'3q\',B(){m.5y()});m.1R(N,\'6o\',B(e){m.5R={x:e.5Q,y:e.5f}});m.1R(N,\'7H\',m.7K);m.1R(N,\'9t\',m.7K);m.1R(N,\'3p\',m.4Z);m.1R(1y,\'7o\',m.9u);m.1R(1y,\'7o\',m.af)}',62,827,'||||||||||||||||||||this||hs||||if||||var||||||exp|function|el|return|px|style|size|pos|null|true|width|else|height|document|content|expanders|setStyles|type|key|src|highslide|body|for||wrapper|full||iframe|||createElement||test||top|overlay|prop|get|length|position|lang|left|innerContent|false|div|id|els|catch|try|hidden|outline|className|visibility|Math|offset|typeof|zIndex|img|new|outlineType|window|overlayBox|tpos|opacity|fx|node|params|dim|appendChild|auto|offsetHeight|case|wsize|ie|next|options|display|arr|overlays|addEventListener|container|imgSize|doc|p1|overflow|undefined|event|isHtml|push|loading|absolute|hiddenBy|none||uaVersion||close|td|dragArgs|xhr|scrollerDiv|ratio|offsetWidth|objectType|easing|to|replace|target|elem|visible|table|innerHTML|isImage|span|focusKey|xSize|tb|re|title|href|op|ajax|up|name|100|contentType|wh|image|minSize|hsId|right|ucwh|clearing|onLoad|useBox|min|onclick|ySize|custom|opt|html|val|args|elPos|p2|changed|releaseMask|graphic|ieLt9|match|opera|objectLoadTime||||func|pThis||||parentNode|dur|swf|focus|extend|hasDragged|outlineWhileAnimating|attribs|objectWidth|discardElement|page|styles|groups|class|step|ready|resize|last|scroll|timers|li|getExpander|duration|getElementsByTagName|marginMin|getNode|in|upcoming|sleeping|mediumContent|bottom|ieLt7|pendingOutlines|onload|move|objectHeight|relative|cursor|clone|marginTop|minWidth|unit|now|9999px|start|while|getParam|allowReduce|moveOnly|justify|end|images||animate|number|Id|documentElement|hDiff|navigator|cNode|preserveContent|parseInt|doShowHide|fitsize|tagName|getElementByClass|isExpanded|blurExp|removeEventListener|slideshowGroup|styleRestoreCursor|marginLeft|wDiff|zIndexCounter|sizeOverlayBox|ruler|cacheBindings|scrollingContent|htmls|parent|minHeight|showLoading|currentStyle|iDoc|opos|contentLoaded|idCounter|isClosing|stl|setPosition|filter|keyHandler|restoreCursor|all|fac|block|allowSizeReduction|uclt|before|Outline|padToMinWidth|setAttribute|after|preloadTheseImages|on|param|Expander|setTimeout|above|getParams|createOverlay|safari|loadHTML|getAnchors||cache|contentWindow|expand|prototype|matches|graphicsDir|mask|iebody|getTime|showHideElements|preloadTheseAjax|wrapperKey|curAnim|gotoEnd|clientY|topmostKey|keydown|keypress|Ajax|previousOrNext|destroy|getSrc|previous|self|positionOverlay|dX|dY|Date|Dimension|imgPad|expandCursor|pointer|toLowerCase|getPageSize|langDefaults|allowHeightReduction|addRule|kdeBugCorr|allowWidthReduction|clientSize|marginMax|compatMode|DIV|regBody|cachedGets|anchors|pre|expOnly|init|tr|RegExp|clientX|mouse|writeExtendedContent|scrollLeft|scrollTop|userAgent|isHsAnchor|maxWidth|round|hideOnMouseOut|overlayId|cloneNode|offY|tId|offX|preventDefault|heading|over|preloadFullImage|fullExpandLabel|below|thumbsUserSetId|ypos|sg|onLoadStarted|marginBottom|os|onReady|maincontent|250|xpos|relatedTarget|marginRight|continuePreloading|mousemove|srcElement|middle|contentDocument|overrides|parseFloat|calcExpanded|calcBorders|cancelLoading|mouseIsOver|calcThumb|padding|distance|getAdjacentAnchor|hasAlphaImageLoader|mY|cur|getElementById|offsetTop|center|mX|lt|maxsize|arrow|BackCompat|maxHeight|thumbnailId|ucrb|Click|hasMovedMin|correctIframeSize|dec|sel|margin|object|url|fitOverlayBox|isReady||numberOfImagesToPreload|ie6|panel|doWrapper||htmlGetSize|getInline|wrapperClassName|css|sizeDiff|dragByHeading|expandDuration|setObjContainerSize|credits|contentId|garbageBin|restoreTitle|doFullExpand|setPos|clones|max|allowMultipleInstances|topZ|load|hasFocused|origProp|preloadAjaxElement|blur|getCacheBinding|abs|onError|error|moveTo|run|changeSize|afterClose|openerTagNames|element|swfobject|getSelfRendered|adj|resizeTo|mousedown|swfOptions|setSize|mouseClickHandler|string|show|break|form|Create|update|loadingPos|getWrapperKey|location|fade|geckoMac|tbody|types|getElementContent|Text|state|connectOutline|cacheAjax|complete|startTime|getPosition|done|defaultView|osize|cssDirection|dragHandler|direction|wrapperMouseHandler|pageOrigin|Next|JS|Highslide|Play|525|Close|Pause|spacebar|slideshow|Previous|thumb|offsetParent|from|timerId|orig|transit|updateAnchors|call|replaceLang|offsetLeft|pageXOffset|_default|skin|contentWrapper|enableKeyListener|htmlExpand|pow|clickY|loadingTitle|ltr|detachEvent|clickX|loadingText|focusTopmost|easeInQuad|loadingOpacity|hasHtmlExpanders|preloadGraphic|clientWidth|moveText|moveTitle|switch|closeTitle|closeText|nextText|nextTitle|and|200|previousTitle|previousText|ul|resizeTitle|background|nopad|onGraphicLoad|alpha|appendTo||vis|tag|headingOverlay|hide|captionOverlay|rv|Move|preloadNext|getPropertyValue|getAttribute|getComputedStyle|hideIframes|hideSelects|XMLHttpRequest|clearsX|clearsY|hand|readyState|focusTitle|mouseup|preloadImages|indexOf|Overlay|addOverlay|creditsHref|ie6SSL|getAnchorIndex|current|toString|cachedGet|creditsTarget|creditsTitle|_|nextSibling|Eval|setRequestHeader|creditsPosition|XMLHTTP|Microsoft|showOverlays|anchor|doPanels|genOverlayBox|gotOverlays|sleep|active|fullExpandOpacity|destroyOverlays|createFullExpand|javascript|fullExpandTitle|fullExpandPosition|writeCredits|showCredits|backCompat|styleSheets|destroyObject|htmlPrepareClose|ActiveXObject|restoreDuration|awake|offsetX|getOverlays|reOrder|rightpanel|leftpanel|offsetY|preloadAjax|creditsText|KDE|vendor|removeChild|open|flashvars|fadeInOut|easingClose|tmpMin|border|htmlSizeOperations|clear||getIframePageHeight|newHeight|hasExtendedContent|both|prepareNextOutline|attributes|split|correctRatio|gi|afterExpand|script|arguments|wmode|captionEval|Use|keyCode|button|text|drag|headingId|graphics|_self|shadow|HEAD|click|drop|keys|header|htmlE|doScroll|callee|returnValue|outlineStartOffset|footer|registerOverlay|http|headingText|com|captionId|HsExpander|xpand|fullExpandText|DOMContentLoaded|ig|createTextNode|captionText|forceAjaxReload|urlencoded|pageYOffset|send|white|Gecko|Type|application|www|innerHeight|link|toUpperCase|removeAttribute|responseText|blank|about|1001|clientHeight|innerWidth|Content|Macintosh||dummy|GET|zoomout|maincontentText|maincontentId|Msxml2|onreadystatechange|zoomin|maincontentEval|oPos|it|ra|Safari|Trident|With|write|Requested|headingEval|pauseTitle|tgt|actual|rb|Bottom|tgtArr|Expand|300|nodeName|insertBefore|front|Right|Top|AlphaImageLoader|DXImageTransform|progid|Powered|sizingMethod|scale|Left||Height|Width|boolean|allowSimultaneousLoading|onmouseover|flushImgSize|transparent|embedSWF|version|htmlCreate|flash|newWidth|Loading|static|frameborder|oncontextmenu|blockRightClick|Line|alert|debug|onmouseout|lineNumber|message|imageCreate|cancel|bring|expressInstallSwfurl|01|png|paddingTop|200px|https|protocol|1px|linearTween|outlines|pauseText|StopPlay|removeSWF|caption|useOnHtml|dragSensitivity|expression|fix|sqrt|ignoreMe|mouseover|attachEvent|toElement|fromElement|important|default|playTitle|Go|eval|SELECT|the|cellSpacing|borderCollapse|outlinesDir|fontSize|lineHeight|collapse|playText|IFRAME|clearInterval|homepage|splice|esc|Resize|setInterval'.split('|'),0,{})) diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.css index e4b60ee3f8141c8dbf29efd617128bedf2b297ad..171a23e0976bac5a1ddd700b886675630ca4899d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.css @@ -1,889 +1,889 @@ -/** -* @file: highslide.css -* @version: 4.1.13 -*/ -.highslide-container div { - font-family: Verdana, Helvetica; - font-size: 10pt; -} -.highslide-container table { - background: none; -} -.highslide { - outline: none; - text-decoration: none; -} -.highslide img { - border: 2px solid silver; -} -.highslide:hover img { - border-color: gray; -} -.highslide-active-anchor img { - visibility: hidden; -} -.highslide-gallery .highslide-active-anchor img { - border-color: black; - visibility: visible; - cursor: default; -} -.highslide-image { - border-width: 2px; - border-style: solid; - border-color: white; -} -.highslide-wrapper, .highslide-outline { - background: white; -} -.glossy-dark { - background: #111; -} - -.highslide-image-blur { -} -.highslide-number { - font-weight: bold; - color: gray; - font-size: .9em; -} -.highslide-caption { - display: none; - font-size: 1em; - padding: 5px; - /*background: white;*/ -} -.highslide-heading { - display: none; - font-weight: bold; - margin: 0.4em; -} -.highslide-dimming { - /*position: absolute;*/ - background: black; -} -a.highslide-full-expand { - background: url(graphics/fullexpand.gif) no-repeat; - display: block; - margin: 0 10px 10px 0; - width: 34px; - height: 34px; -} -.highslide-loading { - display: block; - color: black; - font-size: 9px; - font-weight: bold; - text-transform: uppercase; - text-decoration: none; - padding: 3px; - border: 1px solid white; - background-color: white; - padding-left: 22px; - background-image: url(graphics/loader.white.gif); - background-repeat: no-repeat; - background-position: 3px 1px; -} -a.highslide-credits, -a.highslide-credits i { - padding: 2px; - color: silver; - text-decoration: none; - font-size: 10px; -} -a.highslide-credits:hover, -a.highslide-credits:hover i { - color: white; - background-color: gray; -} -.highslide-move, .highslide-move * { - cursor: move; -} - -.highslide-viewport { - display: none; - position: fixed; - width: 100%; - height: 100%; - z-index: 10001; - background: none; - left: 0; - top: 0; -} -.highslide-overlay { - display: none; -} -.hidden-container { - display: none; -} -/* Example of a semitransparent, offset closebutton */ -.closebutton { - position: relative; - top: -15px; - left: 15px; - width: 30px; - height: 30px; - cursor: pointer; - background: url(graphics/close.png); - /* NOTE! For IE6, you also need to update the highslide-ie6.css file. */ -} - -/*****************************************************************************/ -/* Thumbnail boxes for the galleries. */ -/* Remove these if you are not using a gallery. */ -/*****************************************************************************/ -.highslide-gallery ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.highslide-gallery ul li { - display: block; - position: relative; - float: left; - width: 106px; - height: 106px; - border: 1px solid silver; - background: #ededed; - margin: 2px; - padding: 0; - line-height: 0; - overflow: hidden; -} -.highslide-gallery ul a { - position: absolute; - top: 50%; - left: 50%; -} -.highslide-gallery ul img { - position: relative; - top: -50%; - left: -50%; -} -html>/**/body .highslide-gallery ul li { - display: table; - text-align: center; -} -html>/**/body .highslide-gallery ul li { - text-align: center; -} -html>/**/body .highslide-gallery ul a { - position: static; - display: table-cell; - vertical-align: middle; -} -html>/**/body .highslide-gallery ul img { - position: static; -} - -/*****************************************************************************/ -/* Controls for the galleries. */ -/* Remove these if you are not using a gallery */ -/*****************************************************************************/ -.highslide-controls { - width: 195px; - height: 40px; - background: url(graphics/controlbar-white.gif) 0 -90px no-repeat; - margin: 20px 15px 10px 0; -} -.highslide-controls ul { - position: relative; - left: 15px; - height: 40px; - list-style: none; - margin: 0; - padding: 0; - background: url(graphics/controlbar-white.gif) right -90px no-repeat; - -} -.highslide-controls li { - float: left; - padding: 5px 0; - margin:0; - list-style: none; -} -.highslide-controls a { - background-image: url(graphics/controlbar-white.gif); - display: block; - float: left; - height: 30px; - width: 30px; - outline: none; -} -.highslide-controls a.disabled { - cursor: default; -} -.highslide-controls a.disabled span { - cursor: default; -} -.highslide-controls a span { - /* hide the text for these graphic buttons */ - display: none; - cursor: pointer; -} - - -/* The CSS sprites for the controlbar - see http://www.google.com/search?q=css+sprites */ -.highslide-controls .highslide-previous a { - background-position: 0 0; -} -.highslide-controls .highslide-previous a:hover { - background-position: 0 -30px; -} -.highslide-controls .highslide-previous a.disabled { - background-position: 0 -60px !important; -} -.highslide-controls .highslide-play a { - background-position: -30px 0; -} -.highslide-controls .highslide-play a:hover { - background-position: -30px -30px; -} -.highslide-controls .highslide-play a.disabled { - background-position: -30px -60px !important; -} -.highslide-controls .highslide-pause a { - background-position: -60px 0; -} -.highslide-controls .highslide-pause a:hover { - background-position: -60px -30px; -} -.highslide-controls .highslide-next a { - background-position: -90px 0; -} -.highslide-controls .highslide-next a:hover { - background-position: -90px -30px; -} -.highslide-controls .highslide-next a.disabled { - background-position: -90px -60px !important; -} -.highslide-controls .highslide-move a { - background-position: -120px 0; -} -.highslide-controls .highslide-move a:hover { - background-position: -120px -30px; -} -.highslide-controls .highslide-full-expand a { - background-position: -150px 0; -} -.highslide-controls .highslide-full-expand a:hover { - background-position: -150px -30px; -} -.highslide-controls .highslide-full-expand a.disabled { - background-position: -150px -60px !important; -} -.highslide-controls .highslide-close a { - background-position: -180px 0; -} -.highslide-controls .highslide-close a:hover { - background-position: -180px -30px; -} - -/*****************************************************************************/ -/* Styles for the HTML popups */ -/* Remove these if you are not using Highslide HTML */ -/*****************************************************************************/ -.highslide-maincontent { - display: none; -} -.highslide-html { - background-color: white; -} -.mobile .highslide-html { - border: 1px solid silver; -} -.highslide-html-content { - display: none; - width: 400px; - padding: 0 5px 5px 5px; -} -.highslide-header { - padding-bottom: 5px; -} -.highslide-header ul { - margin: 0; - padding: 0; - text-align: right; -} -.highslide-header ul li { - display: inline; - padding-left: 1em; -} -.highslide-header ul li.highslide-previous, .highslide-header ul li.highslide-next { - display: none; -} -.highslide-header a { - font-weight: bold; - color: gray; - text-transform: uppercase; - text-decoration: none; -} -.highslide-header a:hover { - color: black; -} -.highslide-header .highslide-move a { - cursor: move; -} -.highslide-footer { - height: 16px; -} -.highslide-footer .highslide-resize { - display: block; - float: right; - margin-top: 5px; - height: 11px; - width: 11px; - background: url(graphics/resize.gif) no-repeat; -} -.highslide-footer .highslide-resize span { - display: none; -} -.highslide-body { -} -.highslide-resize { - cursor: nw-resize; -} - -/*****************************************************************************/ -/* Styles for the Individual wrapper class names. */ -/* See www.highslide.com/ref/hs.wrapperClassName */ -/* You can safely remove the class name themes you don't use */ -/*****************************************************************************/ - -/* hs.wrapperClassName = 'draggable-header' */ -.draggable-header .highslide-header { - height: 18px; - border-bottom: 1px solid #dddddd; -} -.draggable-header .highslide-heading { - position: absolute; - margin: 2px 0.4em; -} - -.draggable-header .highslide-header .highslide-move { - cursor: move; - display: block; - height: 16px; - position: absolute; - right: 24px; - top: 0; - width: 100%; - z-index: 10001; -} -.draggable-header .highslide-header .highslide-move * { - display: none; -} -.draggable-header .highslide-header .highslide-close { - position: absolute; - right: 2px; - top: 2px; - z-index: 10005; - padding: 0; -} -.draggable-header .highslide-header .highslide-close a { - display: block; - height: 16px; - width: 16px; - background-image: url(graphics/closeX.png); -} -.draggable-header .highslide-header .highslide-close a:hover { - background-position: 0 16px; -} -.draggable-header .highslide-header .highslide-close span { - display: none; -} -.draggable-header .highslide-maincontent { - padding-top: 1em; -} - -/* hs.wrapperClassName = 'titlebar' */ -.titlebar .highslide-header { - height: 18px; - border-bottom: 1px solid #dddddd; -} -.titlebar .highslide-heading { - position: absolute; - width: 90%; - margin: 1px 0 1px 5px; - color: #666666; -} - -.titlebar .highslide-header .highslide-move { - cursor: move; - display: block; - height: 16px; - position: absolute; - right: 24px; - top: 0; - width: 100%; - z-index: 10001; -} -.titlebar .highslide-header .highslide-move * { - display: none; -} -.titlebar .highslide-header li { - position: relative; - top: 3px; - z-index: 10002; - padding: 0 0 0 1em; -} -.titlebar .highslide-maincontent { - padding-top: 1em; -} - -/* hs.wrapperClassName = 'no-footer' */ -.no-footer .highslide-footer { - display: none; -} - -/* hs.wrapperClassName = 'wide-border' */ -.wide-border { - background: white; -} -.wide-border .highslide-image { - border-width: 10px; -} -.wide-border .highslide-caption { - padding: 0 10px 10px 10px; -} - -/* hs.wrapperClassName = 'borderless' */ -.borderless .highslide-image { - border: none; -} -.borderless .highslide-caption { - border-bottom: 1px solid white; - border-top: 1px solid white; - background: silver; -} - -/* hs.wrapperClassName = 'outer-glow' */ -.outer-glow { - background: #444; -} -.outer-glow .highslide-image { - border: 5px solid #444444; -} -.outer-glow .highslide-caption { - border: 5px solid #444444; - border-top: none; - padding: 5px; - background-color: gray; -} - -/* hs.wrapperClassName = 'colored-border' */ -.colored-border { - background: white; -} -.colored-border .highslide-image { - border: 2px solid green; -} -.colored-border .highslide-caption { - border: 2px solid green; - border-top: none; -} - -/* hs.wrapperClassName = 'dark' */ -.dark { - background: #111; -} -.dark .highslide-image { - border-color: black black #202020 black; - background: gray; -} -.dark .highslide-caption { - color: white; - background: #111; -} -.dark .highslide-controls, -.dark .highslide-controls ul, -.dark .highslide-controls a { - background-image: url(graphics/controlbar-black-border.gif); -} - -/* hs.wrapperClassName = 'floating-caption' */ -.floating-caption .highslide-caption { - position: absolute; - padding: 1em 0 0 0; - background: none; - color: white; - border: none; - font-weight: bold; -} - -/* hs.wrapperClassName = 'controls-in-heading' */ -.controls-in-heading .highslide-heading { - color: gray; - font-weight: bold; - height: 20px; - overflow: hidden; - cursor: default; - padding: 0 0 0 22px; - margin: 0; - background: url(graphics/icon.gif) no-repeat 0 1px; -} -.controls-in-heading .highslide-controls { - width: 105px; - height: 20px; - position: relative; - margin: 0; - top: -23px; - left: 7px; - background: none; -} -.controls-in-heading .highslide-controls ul { - position: static; - height: 20px; - background: none; -} -.controls-in-heading .highslide-controls li { - padding: 0; -} -.controls-in-heading .highslide-controls a { - background-image: url(graphics/controlbar-white-small.gif); - height: 20px; - width: 20px; -} - -.controls-in-heading .highslide-controls .highslide-move { - display: none; -} - -.controls-in-heading .highslide-controls .highslide-previous a { - background-position: 0 0; -} -.controls-in-heading .highslide-controls .highslide-previous a:hover { - background-position: 0 -20px; -} -.controls-in-heading .highslide-controls .highslide-previous a.disabled { - background-position: 0 -40px !important; -} -.controls-in-heading .highslide-controls .highslide-play a { - background-position: -20px 0; -} -.controls-in-heading .highslide-controls .highslide-play a:hover { - background-position: -20px -20px; -} -.controls-in-heading .highslide-controls .highslide-play a.disabled { - background-position: -20px -40px !important; -} -.controls-in-heading .highslide-controls .highslide-pause a { - background-position: -40px 0; -} -.controls-in-heading .highslide-controls .highslide-pause a:hover { - background-position: -40px -20px; -} -.controls-in-heading .highslide-controls .highslide-next a { - background-position: -60px 0; -} -.controls-in-heading .highslide-controls .highslide-next a:hover { - background-position: -60px -20px; -} -.controls-in-heading .highslide-controls .highslide-next a.disabled { - background-position: -60px -40px !important; -} -.controls-in-heading .highslide-controls .highslide-full-expand a { - background-position: -100px 0; -} -.controls-in-heading .highslide-controls .highslide-full-expand a:hover { - background-position: -100px -20px; -} -.controls-in-heading .highslide-controls .highslide-full-expand a.disabled { - background-position: -100px -40px !important; -} -.controls-in-heading .highslide-controls .highslide-close a { - background-position: -120px 0; -} -.controls-in-heading .highslide-controls .highslide-close a:hover { - background-position: -120px -20px; -} - -/*****************************************************************************/ -/* Styles for text based controls. */ -/* You can safely remove this if you don't use text based controls */ -/*****************************************************************************/ - -.text-controls .highslide-controls { - width: auto; - height: auto; - margin: 0; - text-align: center; - background: none; -} -.text-controls ul { - position: static; - background: none; - height: auto; - left: 0; -} -.text-controls .highslide-move { - display: none; -} -.text-controls li { - background-image: url(graphics/controlbar-text-buttons.png); - background-position: right top !important; - padding: 0; - margin-left: 15px; - display: block; - width: auto; -} -.text-controls a { - background: url(graphics/controlbar-text-buttons.png) no-repeat; - background-position: left top !important; - position: relative; - left: -10px; - display: block; - width: auto; - height: auto; - text-decoration: none !important; -} -.text-controls a span { - background: url(graphics/controlbar-text-buttons.png) no-repeat; - margin: 1px 2px 1px 10px; - display: block; - min-width: 4em; - height: 18px; - line-height: 18px; - padding: 1px 0 1px 18px; - color: #333; - font-family: "Trebuchet MS", Arial, sans-serif; - font-size: 12px; - font-weight: bold; - white-space: nowrap; -} -.text-controls .highslide-next { - margin-right: 1em; -} -.text-controls .highslide-full-expand a span { - min-width: 0; - margin: 1px 0; - padding: 1px 0 1px 10px; -} -.text-controls .highslide-close a span { - min-width: 0; -} -.text-controls a:hover span { - color: black; -} -.text-controls a.disabled span { - color: #999; -} - -.text-controls .highslide-previous span { - background-position: 0 -40px; -} -.text-controls .highslide-previous a.disabled { - background-position: left top !important; -} -.text-controls .highslide-previous a.disabled span { - background-position: 0 -140px; -} -.text-controls .highslide-play span { - background-position: 0 -60px; -} -.text-controls .highslide-play a.disabled { - background-position: left top !important; -} -.text-controls .highslide-play a.disabled span { - background-position: 0 -160px; -} -.text-controls .highslide-pause span { - background-position: 0 -80px; -} -.text-controls .highslide-next span { - background-position: 0 -100px; -} -.text-controls .highslide-next a.disabled { - background-position: left top !important; -} -.text-controls .highslide-next a.disabled span { - background-position: 0 -200px; -} -.text-controls .highslide-full-expand span { - background: none; -} -.text-controls .highslide-full-expand a.disabled { - background-position: left top !important; -} -.text-controls .highslide-close span { - background-position: 0 -120px; -} - - -/*****************************************************************************/ -/* Styles for the thumbstrip. */ -/* See www.highslide.com/ref/hs.addSlideshow */ -/* You can safely remove this if you don't use a thumbstrip */ -/*****************************************************************************/ - -.highslide-thumbstrip { - height: 100%; - direction: ltr; -} -.highslide-thumbstrip div { - overflow: hidden; -} -.highslide-thumbstrip table { - position: relative; - padding: 0; - border-collapse: collapse; -} -.highslide-thumbstrip td { - padding: 1px; - /*text-align: center;*/ -} -.highslide-thumbstrip a { - outline: none; -} -.highslide-thumbstrip img { - display: block; - border: 1px solid gray; - margin: 0 auto; -} -.highslide-thumbstrip .highslide-active-anchor img { - visibility: visible; -} -.highslide-thumbstrip .highslide-marker { - position: absolute; - width: 0; - height: 0; - border-width: 0; - border-style: solid; - border-color: transparent; /* change this to actual background color in highslide-ie6.css */ -} -.highslide-thumbstrip-horizontal div { - width: auto; - /* width: 100% breaks in small strips in IE */ -} -.highslide-thumbstrip-horizontal .highslide-scroll-up { - display: none; - position: absolute; - top: 3px; - left: 3px; - width: 25px; - height: 42px; -} -.highslide-thumbstrip-horizontal .highslide-scroll-up div { - margin-bottom: 10px; - cursor: pointer; - background: url(graphics/scrollarrows.png) left center no-repeat; - height: 42px; -} -.highslide-thumbstrip-horizontal .highslide-scroll-down { - display: none; - position: absolute; - top: 3px; - right: 3px; - width: 25px; - height: 42px; -} -.highslide-thumbstrip-horizontal .highslide-scroll-down div { - margin-bottom: 10px; - cursor: pointer; - background: url(graphics/scrollarrows.png) center right no-repeat; - height: 42px; -} -.highslide-thumbstrip-horizontal table { - margin: 2px 0 10px 0; -} -.highslide-viewport .highslide-thumbstrip-horizontal table { - margin-left: 10px; -} -.highslide-thumbstrip-horizontal img { - width: auto; - height: 40px; -} -.highslide-thumbstrip-horizontal .highslide-marker { - top: 47px; - border-left-width: 6px; - border-right-width: 6px; - border-bottom: 6px solid gray; -} -.highslide-viewport .highslide-thumbstrip-horizontal .highslide-marker { - margin-left: 10px; -} -.dark .highslide-thumbstrip-horizontal .highslide-marker, .highslide-viewport .highslide-thumbstrip-horizontal .highslide-marker { - border-bottom-color: white !important; -} - -.highslide-thumbstrip-vertical-overlay { - overflow: hidden !important; -} -.highslide-thumbstrip-vertical div { - height: 100%; -} -.highslide-thumbstrip-vertical a { - display: block; -} -.highslide-thumbstrip-vertical .highslide-scroll-up { - display: none; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 25px; -} -.highslide-thumbstrip-vertical .highslide-scroll-up div { - margin-left: 10px; - cursor: pointer; - background: url(graphics/scrollarrows.png) top center no-repeat; - height: 25px; -} -.highslide-thumbstrip-vertical .highslide-scroll-down { - display: none; - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 25px; -} -.highslide-thumbstrip-vertical .highslide-scroll-down div { - margin-left: 10px; - cursor: pointer; - background: url(graphics/scrollarrows.png) bottom center no-repeat; - height: 25px; -} -.highslide-thumbstrip-vertical table { - margin: 10px 0 0 10px; -} -.highslide-thumbstrip-vertical img { - width: 60px; /* t=5481 */ -} -.highslide-thumbstrip-vertical .highslide-marker { - left: 0; - margin-top: 8px; - border-top-width: 6px; - border-bottom-width: 6px; - border-left: 6px solid gray; -} -.dark .highslide-thumbstrip-vertical .highslide-marker, .highslide-viewport .highslide-thumbstrip-vertical .highslide-marker { - border-left-color: white; -} - -.highslide-viewport .highslide-thumbstrip-float { - overflow: auto; -} -.highslide-thumbstrip-float ul { - margin: 2px 0; - padding: 0; -} -.highslide-thumbstrip-float li { - display: block; - height: 60px; - margin: 0 2px; - list-style: none; - float: left; -} -.highslide-thumbstrip-float img { - display: inline; - border-color: silver; - max-height: 56px; -} -.highslide-thumbstrip-float .highslide-active-anchor img { - border-color: black; -} -.highslide-thumbstrip-float .highslide-scroll-up div, .highslide-thumbstrip-float .highslide-scroll-down div { - display: none; -} -.highslide-thumbstrip-float .highslide-marker { - display: none; -} +/** +* @file: highslide.css +* @version: 4.1.13 +*/ +.highslide-container div { + font-family: Verdana, Helvetica; + font-size: 10pt; +} +.highslide-container table { + background: none; +} +.highslide { + outline: none; + text-decoration: none; +} +.highslide img { + border: 2px solid silver; +} +.highslide:hover img { + border-color: gray; +} +.highslide-active-anchor img { + visibility: hidden; +} +.highslide-gallery .highslide-active-anchor img { + border-color: black; + visibility: visible; + cursor: default; +} +.highslide-image { + border-width: 2px; + border-style: solid; + border-color: white; +} +.highslide-wrapper, .highslide-outline { + background: white; +} +.glossy-dark { + background: #111; +} + +.highslide-image-blur { +} +.highslide-number { + font-weight: bold; + color: gray; + font-size: .9em; +} +.highslide-caption { + display: none; + font-size: 1em; + padding: 5px; + /*background: white;*/ +} +.highslide-heading { + display: none; + font-weight: bold; + margin: 0.4em; +} +.highslide-dimming { + /*position: absolute;*/ + background: black; +} +a.highslide-full-expand { + background: url(graphics/fullexpand.gif) no-repeat; + display: block; + margin: 0 10px 10px 0; + width: 34px; + height: 34px; +} +.highslide-loading { + display: block; + color: black; + font-size: 9px; + font-weight: bold; + text-transform: uppercase; + text-decoration: none; + padding: 3px; + border: 1px solid white; + background-color: white; + padding-left: 22px; + background-image: url(graphics/loader.white.gif); + background-repeat: no-repeat; + background-position: 3px 1px; +} +a.highslide-credits, +a.highslide-credits i { + padding: 2px; + color: silver; + text-decoration: none; + font-size: 10px; +} +a.highslide-credits:hover, +a.highslide-credits:hover i { + color: white; + background-color: gray; +} +.highslide-move, .highslide-move * { + cursor: move; +} + +.highslide-viewport { + display: none; + position: fixed; + width: 100%; + height: 100%; + z-index: 10001; + background: none; + left: 0; + top: 0; +} +.highslide-overlay { + display: none; +} +.hidden-container { + display: none; +} +/* Example of a semitransparent, offset closebutton */ +.closebutton { + position: relative; + top: -15px; + left: 15px; + width: 30px; + height: 30px; + cursor: pointer; + background: url(graphics/close.png); + /* NOTE! For IE6, you also need to update the highslide-ie6.css file. */ +} + +/*****************************************************************************/ +/* Thumbnail boxes for the galleries. */ +/* Remove these if you are not using a gallery. */ +/*****************************************************************************/ +.highslide-gallery ul { + list-style-type: none; + margin: 0; + padding: 0; +} +.highslide-gallery ul li { + display: block; + position: relative; + float: left; + width: 106px; + height: 106px; + border: 1px solid silver; + background: #ededed; + margin: 2px; + padding: 0; + line-height: 0; + overflow: hidden; +} +.highslide-gallery ul a { + position: absolute; + top: 50%; + left: 50%; +} +.highslide-gallery ul img { + position: relative; + top: -50%; + left: -50%; +} +html>/**/body .highslide-gallery ul li { + display: table; + text-align: center; +} +html>/**/body .highslide-gallery ul li { + text-align: center; +} +html>/**/body .highslide-gallery ul a { + position: static; + display: table-cell; + vertical-align: middle; +} +html>/**/body .highslide-gallery ul img { + position: static; +} + +/*****************************************************************************/ +/* Controls for the galleries. */ +/* Remove these if you are not using a gallery */ +/*****************************************************************************/ +.highslide-controls { + width: 195px; + height: 40px; + background: url(graphics/controlbar-white.gif) 0 -90px no-repeat; + margin: 20px 15px 10px 0; +} +.highslide-controls ul { + position: relative; + left: 15px; + height: 40px; + list-style: none; + margin: 0; + padding: 0; + background: url(graphics/controlbar-white.gif) right -90px no-repeat; + +} +.highslide-controls li { + float: left; + padding: 5px 0; + margin:0; + list-style: none; +} +.highslide-controls a { + background-image: url(graphics/controlbar-white.gif); + display: block; + float: left; + height: 30px; + width: 30px; + outline: none; +} +.highslide-controls a.disabled { + cursor: default; +} +.highslide-controls a.disabled span { + cursor: default; +} +.highslide-controls a span { + /* hide the text for these graphic buttons */ + display: none; + cursor: pointer; +} + + +/* The CSS sprites for the controlbar - see http://www.google.com/search?q=css+sprites */ +.highslide-controls .highslide-previous a { + background-position: 0 0; +} +.highslide-controls .highslide-previous a:hover { + background-position: 0 -30px; +} +.highslide-controls .highslide-previous a.disabled { + background-position: 0 -60px !important; +} +.highslide-controls .highslide-play a { + background-position: -30px 0; +} +.highslide-controls .highslide-play a:hover { + background-position: -30px -30px; +} +.highslide-controls .highslide-play a.disabled { + background-position: -30px -60px !important; +} +.highslide-controls .highslide-pause a { + background-position: -60px 0; +} +.highslide-controls .highslide-pause a:hover { + background-position: -60px -30px; +} +.highslide-controls .highslide-next a { + background-position: -90px 0; +} +.highslide-controls .highslide-next a:hover { + background-position: -90px -30px; +} +.highslide-controls .highslide-next a.disabled { + background-position: -90px -60px !important; +} +.highslide-controls .highslide-move a { + background-position: -120px 0; +} +.highslide-controls .highslide-move a:hover { + background-position: -120px -30px; +} +.highslide-controls .highslide-full-expand a { + background-position: -150px 0; +} +.highslide-controls .highslide-full-expand a:hover { + background-position: -150px -30px; +} +.highslide-controls .highslide-full-expand a.disabled { + background-position: -150px -60px !important; +} +.highslide-controls .highslide-close a { + background-position: -180px 0; +} +.highslide-controls .highslide-close a:hover { + background-position: -180px -30px; +} + +/*****************************************************************************/ +/* Styles for the HTML popups */ +/* Remove these if you are not using Highslide HTML */ +/*****************************************************************************/ +.highslide-maincontent { + display: none; +} +.highslide-html { + background-color: white; +} +.mobile .highslide-html { + border: 1px solid silver; +} +.highslide-html-content { + display: none; + width: 400px; + padding: 0 5px 5px 5px; +} +.highslide-header { + padding-bottom: 5px; +} +.highslide-header ul { + margin: 0; + padding: 0; + text-align: right; +} +.highslide-header ul li { + display: inline; + padding-left: 1em; +} +.highslide-header ul li.highslide-previous, .highslide-header ul li.highslide-next { + display: none; +} +.highslide-header a { + font-weight: bold; + color: gray; + text-transform: uppercase; + text-decoration: none; +} +.highslide-header a:hover { + color: black; +} +.highslide-header .highslide-move a { + cursor: move; +} +.highslide-footer { + height: 16px; +} +.highslide-footer .highslide-resize { + display: block; + float: right; + margin-top: 5px; + height: 11px; + width: 11px; + background: url(graphics/resize.gif) no-repeat; +} +.highslide-footer .highslide-resize span { + display: none; +} +.highslide-body { +} +.highslide-resize { + cursor: nw-resize; +} + +/*****************************************************************************/ +/* Styles for the Individual wrapper class names. */ +/* See www.highslide.com/ref/hs.wrapperClassName */ +/* You can safely remove the class name themes you don't use */ +/*****************************************************************************/ + +/* hs.wrapperClassName = 'draggable-header' */ +.draggable-header .highslide-header { + height: 18px; + border-bottom: 1px solid #dddddd; +} +.draggable-header .highslide-heading { + position: absolute; + margin: 2px 0.4em; +} + +.draggable-header .highslide-header .highslide-move { + cursor: move; + display: block; + height: 16px; + position: absolute; + right: 24px; + top: 0; + width: 100%; + z-index: 10001; +} +.draggable-header .highslide-header .highslide-move * { + display: none; +} +.draggable-header .highslide-header .highslide-close { + position: absolute; + right: 2px; + top: 2px; + z-index: 10005; + padding: 0; +} +.draggable-header .highslide-header .highslide-close a { + display: block; + height: 16px; + width: 16px; + background-image: url(graphics/closeX.png); +} +.draggable-header .highslide-header .highslide-close a:hover { + background-position: 0 16px; +} +.draggable-header .highslide-header .highslide-close span { + display: none; +} +.draggable-header .highslide-maincontent { + padding-top: 1em; +} + +/* hs.wrapperClassName = 'titlebar' */ +.titlebar .highslide-header { + height: 18px; + border-bottom: 1px solid #dddddd; +} +.titlebar .highslide-heading { + position: absolute; + width: 90%; + margin: 1px 0 1px 5px; + color: #666666; +} + +.titlebar .highslide-header .highslide-move { + cursor: move; + display: block; + height: 16px; + position: absolute; + right: 24px; + top: 0; + width: 100%; + z-index: 10001; +} +.titlebar .highslide-header .highslide-move * { + display: none; +} +.titlebar .highslide-header li { + position: relative; + top: 3px; + z-index: 10002; + padding: 0 0 0 1em; +} +.titlebar .highslide-maincontent { + padding-top: 1em; +} + +/* hs.wrapperClassName = 'no-footer' */ +.no-footer .highslide-footer { + display: none; +} + +/* hs.wrapperClassName = 'wide-border' */ +.wide-border { + background: white; +} +.wide-border .highslide-image { + border-width: 10px; +} +.wide-border .highslide-caption { + padding: 0 10px 10px 10px; +} + +/* hs.wrapperClassName = 'borderless' */ +.borderless .highslide-image { + border: none; +} +.borderless .highslide-caption { + border-bottom: 1px solid white; + border-top: 1px solid white; + background: silver; +} + +/* hs.wrapperClassName = 'outer-glow' */ +.outer-glow { + background: #444; +} +.outer-glow .highslide-image { + border: 5px solid #444444; +} +.outer-glow .highslide-caption { + border: 5px solid #444444; + border-top: none; + padding: 5px; + background-color: gray; +} + +/* hs.wrapperClassName = 'colored-border' */ +.colored-border { + background: white; +} +.colored-border .highslide-image { + border: 2px solid green; +} +.colored-border .highslide-caption { + border: 2px solid green; + border-top: none; +} + +/* hs.wrapperClassName = 'dark' */ +.dark { + background: #111; +} +.dark .highslide-image { + border-color: black black #202020 black; + background: gray; +} +.dark .highslide-caption { + color: white; + background: #111; +} +.dark .highslide-controls, +.dark .highslide-controls ul, +.dark .highslide-controls a { + background-image: url(graphics/controlbar-black-border.gif); +} + +/* hs.wrapperClassName = 'floating-caption' */ +.floating-caption .highslide-caption { + position: absolute; + padding: 1em 0 0 0; + background: none; + color: white; + border: none; + font-weight: bold; +} + +/* hs.wrapperClassName = 'controls-in-heading' */ +.controls-in-heading .highslide-heading { + color: gray; + font-weight: bold; + height: 20px; + overflow: hidden; + cursor: default; + padding: 0 0 0 22px; + margin: 0; + background: url(graphics/icon.gif) no-repeat 0 1px; +} +.controls-in-heading .highslide-controls { + width: 105px; + height: 20px; + position: relative; + margin: 0; + top: -23px; + left: 7px; + background: none; +} +.controls-in-heading .highslide-controls ul { + position: static; + height: 20px; + background: none; +} +.controls-in-heading .highslide-controls li { + padding: 0; +} +.controls-in-heading .highslide-controls a { + background-image: url(graphics/controlbar-white-small.gif); + height: 20px; + width: 20px; +} + +.controls-in-heading .highslide-controls .highslide-move { + display: none; +} + +.controls-in-heading .highslide-controls .highslide-previous a { + background-position: 0 0; +} +.controls-in-heading .highslide-controls .highslide-previous a:hover { + background-position: 0 -20px; +} +.controls-in-heading .highslide-controls .highslide-previous a.disabled { + background-position: 0 -40px !important; +} +.controls-in-heading .highslide-controls .highslide-play a { + background-position: -20px 0; +} +.controls-in-heading .highslide-controls .highslide-play a:hover { + background-position: -20px -20px; +} +.controls-in-heading .highslide-controls .highslide-play a.disabled { + background-position: -20px -40px !important; +} +.controls-in-heading .highslide-controls .highslide-pause a { + background-position: -40px 0; +} +.controls-in-heading .highslide-controls .highslide-pause a:hover { + background-position: -40px -20px; +} +.controls-in-heading .highslide-controls .highslide-next a { + background-position: -60px 0; +} +.controls-in-heading .highslide-controls .highslide-next a:hover { + background-position: -60px -20px; +} +.controls-in-heading .highslide-controls .highslide-next a.disabled { + background-position: -60px -40px !important; +} +.controls-in-heading .highslide-controls .highslide-full-expand a { + background-position: -100px 0; +} +.controls-in-heading .highslide-controls .highslide-full-expand a:hover { + background-position: -100px -20px; +} +.controls-in-heading .highslide-controls .highslide-full-expand a.disabled { + background-position: -100px -40px !important; +} +.controls-in-heading .highslide-controls .highslide-close a { + background-position: -120px 0; +} +.controls-in-heading .highslide-controls .highslide-close a:hover { + background-position: -120px -20px; +} + +/*****************************************************************************/ +/* Styles for text based controls. */ +/* You can safely remove this if you don't use text based controls */ +/*****************************************************************************/ + +.text-controls .highslide-controls { + width: auto; + height: auto; + margin: 0; + text-align: center; + background: none; +} +.text-controls ul { + position: static; + background: none; + height: auto; + left: 0; +} +.text-controls .highslide-move { + display: none; +} +.text-controls li { + background-image: url(graphics/controlbar-text-buttons.png); + background-position: right top !important; + padding: 0; + margin-left: 15px; + display: block; + width: auto; +} +.text-controls a { + background: url(graphics/controlbar-text-buttons.png) no-repeat; + background-position: left top !important; + position: relative; + left: -10px; + display: block; + width: auto; + height: auto; + text-decoration: none !important; +} +.text-controls a span { + background: url(graphics/controlbar-text-buttons.png) no-repeat; + margin: 1px 2px 1px 10px; + display: block; + min-width: 4em; + height: 18px; + line-height: 18px; + padding: 1px 0 1px 18px; + color: #333; + font-family: "Trebuchet MS", Arial, sans-serif; + font-size: 12px; + font-weight: bold; + white-space: nowrap; +} +.text-controls .highslide-next { + margin-right: 1em; +} +.text-controls .highslide-full-expand a span { + min-width: 0; + margin: 1px 0; + padding: 1px 0 1px 10px; +} +.text-controls .highslide-close a span { + min-width: 0; +} +.text-controls a:hover span { + color: black; +} +.text-controls a.disabled span { + color: #999; +} + +.text-controls .highslide-previous span { + background-position: 0 -40px; +} +.text-controls .highslide-previous a.disabled { + background-position: left top !important; +} +.text-controls .highslide-previous a.disabled span { + background-position: 0 -140px; +} +.text-controls .highslide-play span { + background-position: 0 -60px; +} +.text-controls .highslide-play a.disabled { + background-position: left top !important; +} +.text-controls .highslide-play a.disabled span { + background-position: 0 -160px; +} +.text-controls .highslide-pause span { + background-position: 0 -80px; +} +.text-controls .highslide-next span { + background-position: 0 -100px; +} +.text-controls .highslide-next a.disabled { + background-position: left top !important; +} +.text-controls .highslide-next a.disabled span { + background-position: 0 -200px; +} +.text-controls .highslide-full-expand span { + background: none; +} +.text-controls .highslide-full-expand a.disabled { + background-position: left top !important; +} +.text-controls .highslide-close span { + background-position: 0 -120px; +} + + +/*****************************************************************************/ +/* Styles for the thumbstrip. */ +/* See www.highslide.com/ref/hs.addSlideshow */ +/* You can safely remove this if you don't use a thumbstrip */ +/*****************************************************************************/ + +.highslide-thumbstrip { + height: 100%; + direction: ltr; +} +.highslide-thumbstrip div { + overflow: hidden; +} +.highslide-thumbstrip table { + position: relative; + padding: 0; + border-collapse: collapse; +} +.highslide-thumbstrip td { + padding: 1px; + /*text-align: center;*/ +} +.highslide-thumbstrip a { + outline: none; +} +.highslide-thumbstrip img { + display: block; + border: 1px solid gray; + margin: 0 auto; +} +.highslide-thumbstrip .highslide-active-anchor img { + visibility: visible; +} +.highslide-thumbstrip .highslide-marker { + position: absolute; + width: 0; + height: 0; + border-width: 0; + border-style: solid; + border-color: transparent; /* change this to actual background color in highslide-ie6.css */ +} +.highslide-thumbstrip-horizontal div { + width: auto; + /* width: 100% breaks in small strips in IE */ +} +.highslide-thumbstrip-horizontal .highslide-scroll-up { + display: none; + position: absolute; + top: 3px; + left: 3px; + width: 25px; + height: 42px; +} +.highslide-thumbstrip-horizontal .highslide-scroll-up div { + margin-bottom: 10px; + cursor: pointer; + background: url(graphics/scrollarrows.png) left center no-repeat; + height: 42px; +} +.highslide-thumbstrip-horizontal .highslide-scroll-down { + display: none; + position: absolute; + top: 3px; + right: 3px; + width: 25px; + height: 42px; +} +.highslide-thumbstrip-horizontal .highslide-scroll-down div { + margin-bottom: 10px; + cursor: pointer; + background: url(graphics/scrollarrows.png) center right no-repeat; + height: 42px; +} +.highslide-thumbstrip-horizontal table { + margin: 2px 0 10px 0; +} +.highslide-viewport .highslide-thumbstrip-horizontal table { + margin-left: 10px; +} +.highslide-thumbstrip-horizontal img { + width: auto; + height: 40px; +} +.highslide-thumbstrip-horizontal .highslide-marker { + top: 47px; + border-left-width: 6px; + border-right-width: 6px; + border-bottom: 6px solid gray; +} +.highslide-viewport .highslide-thumbstrip-horizontal .highslide-marker { + margin-left: 10px; +} +.dark .highslide-thumbstrip-horizontal .highslide-marker, .highslide-viewport .highslide-thumbstrip-horizontal .highslide-marker { + border-bottom-color: white !important; +} + +.highslide-thumbstrip-vertical-overlay { + overflow: hidden !important; +} +.highslide-thumbstrip-vertical div { + height: 100%; +} +.highslide-thumbstrip-vertical a { + display: block; +} +.highslide-thumbstrip-vertical .highslide-scroll-up { + display: none; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 25px; +} +.highslide-thumbstrip-vertical .highslide-scroll-up div { + margin-left: 10px; + cursor: pointer; + background: url(graphics/scrollarrows.png) top center no-repeat; + height: 25px; +} +.highslide-thumbstrip-vertical .highslide-scroll-down { + display: none; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 25px; +} +.highslide-thumbstrip-vertical .highslide-scroll-down div { + margin-left: 10px; + cursor: pointer; + background: url(graphics/scrollarrows.png) bottom center no-repeat; + height: 25px; +} +.highslide-thumbstrip-vertical table { + margin: 10px 0 0 10px; +} +.highslide-thumbstrip-vertical img { + width: 60px; /* t=5481 */ +} +.highslide-thumbstrip-vertical .highslide-marker { + left: 0; + margin-top: 8px; + border-top-width: 6px; + border-bottom-width: 6px; + border-left: 6px solid gray; +} +.dark .highslide-thumbstrip-vertical .highslide-marker, .highslide-viewport .highslide-thumbstrip-vertical .highslide-marker { + border-left-color: white; +} + +.highslide-viewport .highslide-thumbstrip-float { + overflow: auto; +} +.highslide-thumbstrip-float ul { + margin: 2px 0; + padding: 0; +} +.highslide-thumbstrip-float li { + display: block; + height: 60px; + margin: 0 2px; + list-style: none; + float: left; +} +.highslide-thumbstrip-float img { + display: inline; + border-color: silver; + max-height: 56px; +} +.highslide-thumbstrip-float .highslide-active-anchor img { + border-color: black; +} +.highslide-thumbstrip-float .highslide-scroll-up div, .highslide-thumbstrip-float .highslide-scroll-down div { + display: none; +} +.highslide-thumbstrip-float .highslide-marker { + display: none; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.js index 9c543a0b0baf23094c0955e6346c3770b1b374af..f1d645b29782a44b05f87977368d249ede78503b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.js @@ -1,874 +1,874 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) * Config: default - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ -if (!hs) { var hs = { -// Language strings -lang : { - cssDirection: 'ltr', - loadingText : 'Loading...', - loadingTitle : 'Click to cancel', - focusTitle : 'Click to bring to front', - fullExpandTitle : 'Expand to actual size (f)', - creditsText : 'Powered by <i>Highslide JS</i>', - creditsTitle : 'Go to the Highslide JS homepage', - restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' -}, -// See http://highslide.com/ref for examples of settings -graphicsDir : 'highslide/graphics/', -expandCursor : 'zoomin.cur', // null disables -restoreCursor : 'zoomout.cur', // null disables -expandDuration : 250, // milliseconds -restoreDuration : 250, -marginLeft : 15, -marginRight : 15, -marginTop : 15, -marginBottom : 15, -zIndexCounter : 1001, // adjust to other absolutely positioned elements -loadingOpacity : 0.75, -allowMultipleInstances: true, -numberOfImagesToPreload : 5, -outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only -outlineStartOffset : 3, // ends at 10 -padToMinWidth : false, // pad the popup width to make room for wide caption -fullExpandPosition : 'bottom right', -fullExpandOpacity : 1, -showCredits : true, // you can set this to false if you want -creditsHref : 'http://highslide.com/', -creditsTarget : '_self', -enableKeyListener : true, -openerTagNames : ['a'], // Add more to allow slideshow indexing - -dragByHeading: true, -minWidth: 200, -minHeight: 200, -allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ +if (!hs) { var hs = { +// Language strings +lang : { + cssDirection: 'ltr', + loadingText : 'Loading...', + loadingTitle : 'Click to cancel', + focusTitle : 'Click to bring to front', + fullExpandTitle : 'Expand to actual size (f)', + creditsText : 'Powered by <i>Highslide JS</i>', + creditsTitle : 'Go to the Highslide JS homepage', + restoreTitle : 'Click to close image, click and drag to move. Use arrow keys for next and previous.' +}, +// See http://highslide.com/ref for examples of settings +graphicsDir : 'highslide/graphics/', +expandCursor : 'zoomin.cur', // null disables +restoreCursor : 'zoomout.cur', // null disables +expandDuration : 250, // milliseconds +restoreDuration : 250, +marginLeft : 15, +marginRight : 15, +marginTop : 15, +marginBottom : 15, +zIndexCounter : 1001, // adjust to other absolutely positioned elements +loadingOpacity : 0.75, +allowMultipleInstances: true, +numberOfImagesToPreload : 5, +outlineWhileAnimating : 2, // 0 = never, 1 = always, 2 = HTML only +outlineStartOffset : 3, // ends at 10 +padToMinWidth : false, // pad the popup width to make room for wide caption +fullExpandPosition : 'bottom right', +fullExpandOpacity : 1, +showCredits : true, // you can set this to false if you want +creditsHref : 'http://highslide.com/', +creditsTarget : '_self', +enableKeyListener : true, +openerTagNames : ['a'], // Add more to allow slideshow indexing + +dragByHeading: true, +minWidth: 200, +minHeight: 200, +allowSizeReduction: true, // allow the image to reduce to fit client size. If false, this overrides minWidth and minHeight outlineType : 'drop-shadow', // set null to disable outlines -// END OF YOUR SETTINGS - - -// declare internal properties -preloadTheseImages : [], -continuePreloading: true, -expanders : [], -overrides : [ - 'allowSizeReduction', - 'useBox', - 'outlineType', - 'outlineWhileAnimating', - 'captionId', - 'captionText', - 'captionEval', - 'captionOverlay', - 'headingId', - 'headingText', - 'headingEval', - 'headingOverlay', - 'creditsPosition', - 'dragByHeading', - - 'width', - 'height', - - 'wrapperClassName', - 'minWidth', - 'minHeight', - 'maxWidth', - 'maxHeight', - 'pageOrigin', - 'slideshowGroup', - 'easing', - 'easingClose', - 'fadeInOut', - 'src' -], -overlays : [], -idCounter : 0, -oPos : { - x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], - y: ['above', 'top', 'middle', 'bottom', 'below'] -}, -mouse: {}, -headingOverlay: {}, -captionOverlay: {}, -timers : [], - -pendingOutlines : {}, -clones : {}, -onReady: [], +// END OF YOUR SETTINGS + + +// declare internal properties +preloadTheseImages : [], +continuePreloading: true, +expanders : [], +overrides : [ + 'allowSizeReduction', + 'useBox', + 'outlineType', + 'outlineWhileAnimating', + 'captionId', + 'captionText', + 'captionEval', + 'captionOverlay', + 'headingId', + 'headingText', + 'headingEval', + 'headingOverlay', + 'creditsPosition', + 'dragByHeading', + + 'width', + 'height', + + 'wrapperClassName', + 'minWidth', + 'minHeight', + 'maxWidth', + 'maxHeight', + 'pageOrigin', + 'slideshowGroup', + 'easing', + 'easingClose', + 'fadeInOut', + 'src' +], +overlays : [], +idCounter : 0, +oPos : { + x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'], + y: ['above', 'top', 'middle', 'bottom', 'below'] +}, +mouse: {}, +headingOverlay: {}, +captionOverlay: {}, +timers : [], + +pendingOutlines : {}, +clones : {}, +onReady: [], uaVersion: /Trident\/4\.0/.test(navigator.userAgent) ? 8 : - parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), -ie : (document.all && !window.opera), -//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? -safari : /Safari/.test(navigator.userAgent), -geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), - -$ : function (id) { - if (id) return document.getElementById(id); -}, - -push : function (arr, val) { - arr[arr.length] = val; -}, - -createElement : function (tag, attribs, styles, parent, nopad) { - var el = document.createElement(tag); - if (attribs) hs.extend(el, attribs); - if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); - if (styles) hs.setStyles(el, styles); - if (parent) parent.appendChild(el); - return el; -}, - -extend : function (el, attribs) { - for (var x in attribs) el[x] = attribs[x]; - return el; -}, - -setStyles : function (el, styles) { - for (var x in styles) { - if (hs.ieLt9 && x == 'opacity') { + parseFloat((navigator.userAgent.toLowerCase().match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]), +ie : (document.all && !window.opera), +//ie : navigator && /MSIE [678]/.test(navigator.userAgent), // ie9 compliant? +safari : /Safari/.test(navigator.userAgent), +geckoMac : /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent), + +$ : function (id) { + if (id) return document.getElementById(id); +}, + +push : function (arr, val) { + arr[arr.length] = val; +}, + +createElement : function (tag, attribs, styles, parent, nopad) { + var el = document.createElement(tag); + if (attribs) hs.extend(el, attribs); + if (nopad) hs.setStyles(el, {padding: 0, border: 'none', margin: 0}); + if (styles) hs.setStyles(el, styles); + if (parent) parent.appendChild(el); + return el; +}, + +extend : function (el, attribs) { + for (var x in attribs) el[x] = attribs[x]; + return el; +}, + +setStyles : function (el, styles) { + for (var x in styles) { + if (hs.ieLt9 && x == 'opacity') { if (styles[x] > 0.99) el.style.removeAttribute('filter'); - else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; - } - else el.style[x] = styles[x]; - } + else el.style.filter = 'alpha(opacity='+ (styles[x] * 100) +')'; + } + else el.style[x] = styles[x]; + } }, animate: function(el, prop, opt) { - var start, - end, - unit; - if (typeof opt != 'object' || opt === null) { - var args = arguments; - opt = { - duration: args[2], - easing: args[3], - complete: args[4] - }; - } - if (typeof opt.duration != 'number') opt.duration = 250; - opt.easing = Math[opt.easing] || Math.easeInQuad; + var start, + end, + unit; + if (typeof opt != 'object' || opt === null) { + var args = arguments; + opt = { + duration: args[2], + easing: args[3], + complete: args[4] + }; + } + if (typeof opt.duration != 'number') opt.duration = 250; + opt.easing = Math[opt.easing] || Math.easeInQuad; opt.curAnim = hs.extend({}, prop); - for (var name in prop) { - var e = new hs.fx(el, opt , name ); - - start = parseFloat(hs.css(el, name)) || 0; - end = parseFloat(prop[name]); + for (var name in prop) { + var e = new hs.fx(el, opt , name ); + + start = parseFloat(hs.css(el, name)) || 0; + end = parseFloat(prop[name]); unit = name != 'opacity' ? 'px' : ''; - - e.custom( start, end, unit ); - } + + e.custom( start, end, unit ); + } }, -css: function(el, prop) { +css: function(el, prop) { if (el.style[prop]) { - return el.style[prop]; + return el.style[prop]; } else if (document.defaultView) { - return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); - + return document.defaultView.getComputedStyle(el, null).getPropertyValue(prop); + } else { - if (prop == 'opacity') prop = 'filter'; - var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; - if (prop == 'filter') - val = val.replace(/alpha\(opacity=([0-9]+)\)/, - function (a, b) { return b / 100 }); - return val === '' ? 1 : val; - } -}, - -getPageSize : function () { - var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' - ? d.documentElement : d.body, - ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); - - var width = ieLt9 ? iebody.clientWidth : - (d.documentElement.clientWidth || self.innerWidth), - height = ieLt9 ? iebody.clientHeight : self.innerHeight; - hs.page = { - width: width, - height: height, - scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, - scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset - }; - return hs.page; -}, - -getPosition : function(el) { - var p = { x: el.offsetLeft, y: el.offsetTop }; - while (el.offsetParent) { - el = el.offsetParent; - p.x += el.offsetLeft; - p.y += el.offsetTop; - if (el != document.body && el != document.documentElement) { - p.x -= el.scrollLeft; - p.y -= el.scrollTop; - } - } - return p; -}, - -expand : function(a, params, custom, type) { - if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); - if (typeof a.getParams == 'function') return params; - try { - new hs.Expander(a, params, custom); - return false; - } catch (e) { return true; } -}, - - -focusTopmost : function() { - var topZ = 0, - topmostKey = -1, - expanders = hs.expanders, - exp, - zIndex; - for (var i = 0; i < expanders.length; i++) { - exp = expanders[i]; - if (exp) { - zIndex = exp.wrapper.style.zIndex; - if (zIndex && zIndex > topZ) { - topZ = zIndex; - topmostKey = i; - } - } - } - if (topmostKey == -1) hs.focusKey = -1; - else expanders[topmostKey].focus(); -}, - -getParam : function (a, param) { - a.getParams = a.onclick; - var p = a.getParams ? a.getParams() : null; - a.getParams = null; - - return (p && typeof p[param] != 'undefined') ? p[param] : + if (prop == 'opacity') prop = 'filter'; + var val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b){ return b.toUpperCase(); })]; + if (prop == 'filter') + val = val.replace(/alpha\(opacity=([0-9]+)\)/, + function (a, b) { return b / 100 }); + return val === '' ? 1 : val; + } +}, + +getPageSize : function () { + var d = document, w = window, iebody = d.compatMode && d.compatMode != 'BackCompat' + ? d.documentElement : d.body, + ieLt9 = hs.ie && (hs.uaVersion < 9 || typeof pageXOffset == 'undefined'); + + var width = ieLt9 ? iebody.clientWidth : + (d.documentElement.clientWidth || self.innerWidth), + height = ieLt9 ? iebody.clientHeight : self.innerHeight; + hs.page = { + width: width, + height: height, + scrollLeft: ieLt9 ? iebody.scrollLeft : pageXOffset, + scrollTop: ieLt9 ? iebody.scrollTop : pageYOffset + }; + return hs.page; +}, + +getPosition : function(el) { + var p = { x: el.offsetLeft, y: el.offsetTop }; + while (el.offsetParent) { + el = el.offsetParent; + p.x += el.offsetLeft; + p.y += el.offsetTop; + if (el != document.body && el != document.documentElement) { + p.x -= el.scrollLeft; + p.y -= el.scrollTop; + } + } + return p; +}, + +expand : function(a, params, custom, type) { + if (!a) a = hs.createElement('a', null, { display: 'none' }, hs.container); + if (typeof a.getParams == 'function') return params; + try { + new hs.Expander(a, params, custom); + return false; + } catch (e) { return true; } +}, + + +focusTopmost : function() { + var topZ = 0, + topmostKey = -1, + expanders = hs.expanders, + exp, + zIndex; + for (var i = 0; i < expanders.length; i++) { + exp = expanders[i]; + if (exp) { + zIndex = exp.wrapper.style.zIndex; + if (zIndex && zIndex > topZ) { + topZ = zIndex; + topmostKey = i; + } + } + } + if (topmostKey == -1) hs.focusKey = -1; + else expanders[topmostKey].focus(); +}, + +getParam : function (a, param) { + a.getParams = a.onclick; + var p = a.getParams ? a.getParams() : null; + a.getParams = null; + + return (p && typeof p[param] != 'undefined') ? p[param] : (typeof hs[param] != 'undefined' ? hs[param] : null); -}, - -getSrc : function (a) { - var src = hs.getParam(a, 'src'); - if (src) return src; - return a.href; -}, - -getNode : function (id) { - var node = hs.$(id), clone = hs.clones[id], a = {}; - if (!node && !clone) return null; - if (!clone) { - clone = node.cloneNode(true); - clone.id = ''; - hs.clones[id] = clone; - return node; - } else { - return clone.cloneNode(true); - } -}, - +}, + +getSrc : function (a) { + var src = hs.getParam(a, 'src'); + if (src) return src; + return a.href; +}, + +getNode : function (id) { + var node = hs.$(id), clone = hs.clones[id], a = {}; + if (!node && !clone) return null; + if (!clone) { + clone = node.cloneNode(true); + clone.id = ''; + hs.clones[id] = clone; + return node; + } else { + return clone.cloneNode(true); + } +}, + discardElement : function(d) { - if (d) hs.garbageBin.appendChild(d); - hs.garbageBin.innerHTML = ''; -}, -transit : function (adj, exp) { - var last = exp || hs.getExpander(); - exp = last; - if (hs.upcoming) return false; - else hs.last = last; - hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - try { - hs.upcoming = adj; - adj.onclick(); - } catch (e){ - hs.last = hs.upcoming = null; - } + if (d) hs.garbageBin.appendChild(d); + hs.garbageBin.innerHTML = ''; +}, +transit : function (adj, exp) { + var last = exp || hs.getExpander(); + exp = last; + if (hs.upcoming) return false; + else hs.last = last; + hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + try { + hs.upcoming = adj; + adj.onclick(); + } catch (e){ + hs.last = hs.upcoming = null; + } + try { + exp.close(); + } catch (e) {} + return false; +}, + +previousOrNext : function (el, op) { + var exp = hs.getExpander(el); + if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); + else return false; +}, + +previous : function (el) { + return hs.previousOrNext(el, -1); +}, + +next : function (el) { + return hs.previousOrNext(el, 1); +}, + +keyHandler : function(e) { + if (!e) e = window.event; + if (!e.target) e.target = e.srcElement; // ie + if (typeof e.target.form != 'undefined') return true; // form element has focus + var exp = hs.getExpander(); + + var op = null; + switch (e.keyCode) { + case 70: // f + if (exp) exp.doFullExpand(); + return true; + case 32: // Space + case 34: // Page Down + case 39: // Arrow right + case 40: // Arrow down + op = 1; + break; + case 8: // Backspace + case 33: // Page Up + case 37: // Arrow left + case 38: // Arrow up + op = -1; + break; + case 27: // Escape + case 13: // Enter + op = 0; + } + if (op !== null) {hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + if (!hs.enableKeyListener) return true; + + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + if (exp) { + if (op == 0) { + exp.close(); + } else { + hs.previousOrNext(exp.key, op); + } + return false; + } + } + return true; +}, + + +registerOverlay : function (overlay) { + hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); +}, + + +getWrapperKey : function (element, expOnly) { + var el, re = /^highslide-wrapper-([0-9]+)$/; + // 1. look in open expanders + el = element; + while (el.parentNode) { + if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); + el = el.parentNode; + } + // 2. look in thumbnail + if (!expOnly) { + el = element; + while (el.parentNode) { + if (el.tagName && hs.isHsAnchor(el)) { + for (var key = 0; key < hs.expanders.length; key++) { + var exp = hs.expanders[key]; + if (exp && exp.a == el) return key; + } + } + el = el.parentNode; + } + } + return null; +}, + +getExpander : function (el, expOnly) { + if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; + if (typeof el == 'number') return hs.expanders[el] || null; + if (typeof el == 'string') el = hs.$(el); + return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; +}, + +isHsAnchor : function (a) { + return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); +}, + +reOrder : function () { + for (var i = 0; i < hs.expanders.length; i++) + if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); +}, + +mouseClickHandler : function(e) +{ + if (!e) e = window.event; + if (e.button > 1) return true; + if (!e.target) e.target = e.srcElement; + + var el = e.target; + while (el.parentNode + && !(/highslide-(image|move|html|resize)/.test(el.className))) + { + el = el.parentNode; + } + var exp = hs.getExpander(el); + if (exp && (exp.isClosing || !exp.isExpanded)) return true; + + if (exp && e.type == 'mousedown') { + if (e.target.form) return true; + var match = el.className.match(/highslide-(image|move|resize)/); + if (match) { + hs.dragArgs = { + exp: exp , + type: match[1], + left: exp.x.pos, + width: exp.x.size, + top: exp.y.pos, + height: exp.y.size, + clickX: e.clientX, + clickY: e.clientY + }; + + + hs.addEventListener(document, 'mousemove', hs.dragHandler); + if (e.preventDefault) e.preventDefault(); // FF + + if (/highslide-(image|html)-blur/.test(exp.content.className)) { + exp.focus(); + hs.hasFocused = true; + } + return false; + } + } else if (e.type == 'mouseup') { + + hs.removeEventListener(document, 'mousemove', hs.dragHandler); + + if (hs.dragArgs) { + if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') + hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; + var hasDragged = hs.dragArgs.hasDragged; + + if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { + exp.close(); + } + else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { + hs.dragArgs.exp.doShowHide('hidden'); + } + hs.hasFocused = false; + hs.dragArgs = null; + + } else if (/highslide-image-blur/.test(el.className)) { + el.style.cursor = hs.styleRestoreCursor; + } + } + return false; +}, + +dragHandler : function(e) +{ + if (!hs.dragArgs) return true; + if (!e) e = window.event; + var a = hs.dragArgs, exp = a.exp; + + a.dX = e.clientX - a.clickX; + a.dY = e.clientY - a.clickY; + + var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); + if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) + || (distance > (hs.dragSensitivity || 5)); + + if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { + + if (a.type == 'resize') exp.resize(a); + else { + exp.moveTo(a.left + a.dX, a.top + a.dY); + if (a.type == 'image') exp.content.style.cursor = 'move'; + } + } + return false; +}, + +wrapperMouseHandler : function (e) { try { - exp.close(); - } catch (e) {} - return false; -}, - -previousOrNext : function (el, op) { - var exp = hs.getExpander(el); - if (exp) return hs.transit(exp.getAdjacentAnchor(op), exp); - else return false; -}, - -previous : function (el) { - return hs.previousOrNext(el, -1); -}, - -next : function (el) { - return hs.previousOrNext(el, 1); -}, - -keyHandler : function(e) { - if (!e) e = window.event; - if (!e.target) e.target = e.srcElement; // ie - if (typeof e.target.form != 'undefined') return true; // form element has focus - var exp = hs.getExpander(); - - var op = null; - switch (e.keyCode) { - case 70: // f - if (exp) exp.doFullExpand(); - return true; - case 32: // Space - case 34: // Page Down - case 39: // Arrow right - case 40: // Arrow down - op = 1; - break; - case 8: // Backspace - case 33: // Page Up - case 37: // Arrow left - case 38: // Arrow up - op = -1; - break; - case 27: // Escape - case 13: // Enter - op = 0; - } - if (op !== null) {hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - if (!hs.enableKeyListener) return true; - - if (e.preventDefault) e.preventDefault(); - else e.returnValue = false; - if (exp) { - if (op == 0) { - exp.close(); - } else { - hs.previousOrNext(exp.key, op); - } - return false; - } - } - return true; -}, - - -registerOverlay : function (overlay) { - hs.push(hs.overlays, hs.extend(overlay, { hsId: 'hsId'+ hs.idCounter++ } )); -}, - - -getWrapperKey : function (element, expOnly) { - var el, re = /^highslide-wrapper-([0-9]+)$/; - // 1. look in open expanders - el = element; - while (el.parentNode) { - if (el.id && re.test(el.id)) return el.id.replace(re, "$1"); - el = el.parentNode; - } - // 2. look in thumbnail - if (!expOnly) { - el = element; - while (el.parentNode) { - if (el.tagName && hs.isHsAnchor(el)) { - for (var key = 0; key < hs.expanders.length; key++) { - var exp = hs.expanders[key]; - if (exp && exp.a == el) return key; - } - } - el = el.parentNode; - } - } - return null; -}, - -getExpander : function (el, expOnly) { - if (typeof el == 'undefined') return hs.expanders[hs.focusKey] || null; - if (typeof el == 'number') return hs.expanders[el] || null; - if (typeof el == 'string') el = hs.$(el); - return hs.expanders[hs.getWrapperKey(el, expOnly)] || null; -}, - -isHsAnchor : function (a) { - return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/hs.(htmlE|e)xpand/)); -}, - -reOrder : function () { - for (var i = 0; i < hs.expanders.length; i++) - if (hs.expanders[i] && hs.expanders[i].isExpanded) hs.focusTopmost(); -}, - -mouseClickHandler : function(e) -{ - if (!e) e = window.event; - if (e.button > 1) return true; - if (!e.target) e.target = e.srcElement; - - var el = e.target; - while (el.parentNode - && !(/highslide-(image|move|html|resize)/.test(el.className))) - { - el = el.parentNode; - } - var exp = hs.getExpander(el); - if (exp && (exp.isClosing || !exp.isExpanded)) return true; - - if (exp && e.type == 'mousedown') { - if (e.target.form) return true; - var match = el.className.match(/highslide-(image|move|resize)/); - if (match) { - hs.dragArgs = { - exp: exp , - type: match[1], - left: exp.x.pos, - width: exp.x.size, - top: exp.y.pos, - height: exp.y.size, - clickX: e.clientX, - clickY: e.clientY - }; - - - hs.addEventListener(document, 'mousemove', hs.dragHandler); - if (e.preventDefault) e.preventDefault(); // FF - - if (/highslide-(image|html)-blur/.test(exp.content.className)) { - exp.focus(); - hs.hasFocused = true; - } - return false; - } - } else if (e.type == 'mouseup') { - - hs.removeEventListener(document, 'mousemove', hs.dragHandler); - - if (hs.dragArgs) { - if (hs.styleRestoreCursor && hs.dragArgs.type == 'image') - hs.dragArgs.exp.content.style.cursor = hs.styleRestoreCursor; - var hasDragged = hs.dragArgs.hasDragged; - - if (!hasDragged &&!hs.hasFocused && !/(move|resize)/.test(hs.dragArgs.type)) { - exp.close(); - } - else if (hasDragged || (!hasDragged && hs.hasHtmlExpanders)) { - hs.dragArgs.exp.doShowHide('hidden'); - } - hs.hasFocused = false; - hs.dragArgs = null; - - } else if (/highslide-image-blur/.test(el.className)) { - el.style.cursor = hs.styleRestoreCursor; - } - } - return false; -}, - -dragHandler : function(e) -{ - if (!hs.dragArgs) return true; - if (!e) e = window.event; - var a = hs.dragArgs, exp = a.exp; - - a.dX = e.clientX - a.clickX; - a.dY = e.clientY - a.clickY; - - var distance = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2)); - if (!a.hasDragged) a.hasDragged = (a.type != 'image' && distance > 0) - || (distance > (hs.dragSensitivity || 5)); - - if (a.hasDragged && e.clientX > 5 && e.clientY > 5) { - - if (a.type == 'resize') exp.resize(a); - else { - exp.moveTo(a.left + a.dX, a.top + a.dY); - if (a.type == 'image') exp.content.style.cursor = 'move'; - } - } - return false; -}, - -wrapperMouseHandler : function (e) { - try { - if (!e) e = window.event; - var over = /mouseover/i.test(e.type); - if (!e.target) e.target = e.srcElement; // ie - if (!e.relatedTarget) e.relatedTarget = - over ? e.fromElement : e.toElement; // ie - var exp = hs.getExpander(e.target); - if (!exp.isExpanded) return; - if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp - || hs.dragArgs) return; - for (var i = 0; i < exp.overlays.length; i++) (function() { - var o = hs.$('hsId'+ exp.overlays[i]); - if (o && o.hideOnMouseOut) { - if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); - hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); - } - })(); - } catch (e) {} -}, -addEventListener : function (el, event, func) { - if (el == document && event == 'ready') { - hs.push(hs.onReady, func); - } - try { - el.addEventListener(event, func, false); - } catch (e) { - try { - el.detachEvent('on'+ event, func); - el.attachEvent('on'+ event, func); - } catch (e) { - el['on'+ event] = func; - } - } -}, - -removeEventListener : function (el, event, func) { - try { - el.removeEventListener(event, func, false); - } catch (e) { - try { - el.detachEvent('on'+ event, func); - } catch (e) { - el['on'+ event] = null; - } - } -}, - -preloadFullImage : function (i) { - if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { - var img = document.createElement('img'); - img.onload = function() { + if (!e) e = window.event; + var over = /mouseover/i.test(e.type); + if (!e.target) e.target = e.srcElement; // ie + if (!e.relatedTarget) e.relatedTarget = + over ? e.fromElement : e.toElement; // ie + var exp = hs.getExpander(e.target); + if (!exp.isExpanded) return; + if (!exp || !e.relatedTarget || hs.getExpander(e.relatedTarget, true) == exp + || hs.dragArgs) return; + for (var i = 0; i < exp.overlays.length; i++) (function() { + var o = hs.$('hsId'+ exp.overlays[i]); + if (o && o.hideOnMouseOut) { + if (over) hs.setStyles(o, { visibility: 'visible', display: '' }); + hs.animate(o, { opacity: over ? o.opacity : 0 }, o.dur); + } + })(); + } catch (e) {} +}, +addEventListener : function (el, event, func) { + if (el == document && event == 'ready') { + hs.push(hs.onReady, func); + } + try { + el.addEventListener(event, func, false); + } catch (e) { + try { + el.detachEvent('on'+ event, func); + el.attachEvent('on'+ event, func); + } catch (e) { + el['on'+ event] = func; + } + } +}, + +removeEventListener : function (el, event, func) { + try { + el.removeEventListener(event, func, false); + } catch (e) { + try { + el.detachEvent('on'+ event, func); + } catch (e) { + el['on'+ event] = null; + } + } +}, + +preloadFullImage : function (i) { + if (hs.continuePreloading && hs.preloadTheseImages[i] && hs.preloadTheseImages[i] != 'undefined') { + var img = document.createElement('img'); + img.onload = function() { img = null; - hs.preloadFullImage(i + 1); - }; - img.src = hs.preloadTheseImages[i]; - } -}, -preloadImages : function (number) { - if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; - - var arr = hs.getAnchors(); - for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { - hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); - } - - // preload outlines - if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); - else - - hs.preloadFullImage(0); - - // preload cursor - if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); -}, - - -init : function () { - if (!hs.container) { - - hs.ieLt7 = hs.ie && hs.uaVersion < 7; - hs.ieLt9 = hs.ie && hs.uaVersion < 9; - + hs.preloadFullImage(i + 1); + }; + img.src = hs.preloadTheseImages[i]; + } +}, +preloadImages : function (number) { + if (number && typeof number != 'object') hs.numberOfImagesToPreload = number; + + var arr = hs.getAnchors(); + for (var i = 0; i < arr.images.length && i < hs.numberOfImagesToPreload; i++) { + hs.push(hs.preloadTheseImages, hs.getSrc(arr.images[i])); + } + + // preload outlines + if (hs.outlineType) new hs.Outline(hs.outlineType, function () { hs.preloadFullImage(0)} ); + else + + hs.preloadFullImage(0); + + // preload cursor + if (hs.restoreCursor) var cur = hs.createElement('img', { src: hs.graphicsDir + hs.restoreCursor }); +}, + + +init : function () { + if (!hs.container) { + + hs.ieLt7 = hs.ie && hs.uaVersion < 7; + hs.ieLt9 = hs.ie && hs.uaVersion < 9; + hs.getPageSize(); - for (var x in hs.langDefaults) { - if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; - else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') - hs.lang[x] = hs.langDefaults[x]; - } - - hs.container = hs.createElement('div', { - className: 'highslide-container' - }, { - position: 'absolute', - left: 0, - top: 0, - width: '100%', - zIndex: hs.zIndexCounter, - direction: 'ltr' - }, - document.body, - true - ); - hs.loading = hs.createElement('a', { - className: 'highslide-loading', - title: hs.lang.loadingTitle, - innerHTML: hs.lang.loadingText, - href: 'javascript:;' - }, { - position: 'absolute', - top: '-9999px', - opacity: hs.loadingOpacity, - zIndex: 1 - }, hs.container - ); - hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); - - // http://www.robertpenner.com/easing/ - Math.linearTween = function (t, b, c, d) { - return c*t/d + b; - }; - Math.easeInQuad = function (t, b, c, d) { - return c*(t/=d)*t + b; - }; - - hs.hideSelects = hs.ieLt7; - hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' - || (hs.ieLt7 && hs.uaVersion < 5.5)); - } -}, -ready : function() { - if (hs.isReady) return; - hs.isReady = true; - for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); -}, - -updateAnchors : function() { - var el, els, all = [], images = [],groups = {}, re; - + for (var x in hs.langDefaults) { + if (typeof hs[x] != 'undefined') hs.lang[x] = hs[x]; + else if (typeof hs.lang[x] == 'undefined' && typeof hs.langDefaults[x] != 'undefined') + hs.lang[x] = hs.langDefaults[x]; + } + + hs.container = hs.createElement('div', { + className: 'highslide-container' + }, { + position: 'absolute', + left: 0, + top: 0, + width: '100%', + zIndex: hs.zIndexCounter, + direction: 'ltr' + }, + document.body, + true + ); + hs.loading = hs.createElement('a', { + className: 'highslide-loading', + title: hs.lang.loadingTitle, + innerHTML: hs.lang.loadingText, + href: 'javascript:;' + }, { + position: 'absolute', + top: '-9999px', + opacity: hs.loadingOpacity, + zIndex: 1 + }, hs.container + ); + hs.garbageBin = hs.createElement('div', null, { display: 'none' }, hs.container); + + // http://www.robertpenner.com/easing/ + Math.linearTween = function (t, b, c, d) { + return c*t/d + b; + }; + Math.easeInQuad = function (t, b, c, d) { + return c*(t/=d)*t + b; + }; + + hs.hideSelects = hs.ieLt7; + hs.hideIframes = ((window.opera && hs.uaVersion < 9) || navigator.vendor == 'KDE' + || (hs.ieLt7 && hs.uaVersion < 5.5)); + } +}, +ready : function() { + if (hs.isReady) return; + hs.isReady = true; + for (var i = 0; i < hs.onReady.length; i++) hs.onReady[i](); +}, + +updateAnchors : function() { + var el, els, all = [], images = [],groups = {}, re; + for (var i = 0; i < hs.openerTagNames.length; i++) { - els = document.getElementsByTagName(hs.openerTagNames[i]); + els = document.getElementsByTagName(hs.openerTagNames[i]); for (var j = 0; j < els.length; j++) { - el = els[j]; - re = hs.isHsAnchor(el); - if (re) { + el = els[j]; + re = hs.isHsAnchor(el); + if (re) { hs.push(all, el); if (re[0] == 'hs.expand') hs.push(images, el); - var g = hs.getParam(el, 'slideshowGroup') || 'none'; - if (!groups[g]) groups[g] = []; - hs.push(groups[g], el); - } - } - } - hs.anchors = { all: all, groups: groups, images: images }; - return hs.anchors; - -}, - -getAnchors : function() { - return hs.anchors || hs.updateAnchors(); -}, - - -close : function(el) { - var exp = hs.getExpander(el); - if (exp) exp.close(); - return false; -} + var g = hs.getParam(el, 'slideshowGroup') || 'none'; + if (!groups[g]) groups[g] = []; + hs.push(groups[g], el); + } + } + } + hs.anchors = { all: all, groups: groups, images: images }; + return hs.anchors; + +}, + +getAnchors : function() { + return hs.anchors || hs.updateAnchors(); +}, + + +close : function(el) { + var exp = hs.getExpander(el); + if (exp) exp.close(); + return false; +} }; // end hs object -hs.fx = function( elem, options, prop ){ - this.options = options; - this.elem = elem; - this.prop = prop; - - if (!options.orig) options.orig = {}; -}; +hs.fx = function( elem, options, prop ){ + this.options = options; + this.elem = elem; + this.prop = prop; + + if (!options.orig) options.orig = {}; +}; hs.fx.prototype = { update: function(){ - (hs.fx.step[this.prop] || hs.fx.step._default)(this); - - if (this.options.step) - this.options.step.call(this.elem, this.now, this); - + (hs.fx.step[this.prop] || hs.fx.step._default)(this); + + if (this.options.step) + this.options.step.call(this.elem, this.now, this); + }, - custom: function(from, to, unit){ - this.startTime = (new Date()).getTime(); - this.start = from; - this.end = to; - this.unit = unit;// || this.unit || "px"; - this.now = this.start; - this.pos = this.state = 0; - - var self = this; - function t(gotoEnd){ - return self.step(gotoEnd); - } - - t.elem = this.elem; - - if ( t() && hs.timers.push(t) == 1 ) { - hs.timerId = setInterval(function(){ - var timers = hs.timers; - - for ( var i = 0; i < timers.length; i++ ) - if ( !timers[i]() ) - timers.splice(i--, 1); - - if ( !timers.length ) { - clearInterval(hs.timerId); - } - }, 13); - } + custom: function(from, to, unit){ + this.startTime = (new Date()).getTime(); + this.start = from; + this.end = to; + this.unit = unit;// || this.unit || "px"; + this.now = this.start; + this.pos = this.state = 0; + + var self = this; + function t(gotoEnd){ + return self.step(gotoEnd); + } + + t.elem = this.elem; + + if ( t() && hs.timers.push(t) == 1 ) { + hs.timerId = setInterval(function(){ + var timers = hs.timers; + + for ( var i = 0; i < timers.length; i++ ) + if ( !timers[i]() ) + timers.splice(i--, 1); + + if ( !timers.length ) { + clearInterval(hs.timerId); + } + }, 13); + } }, - step: function(gotoEnd){ - var t = (new Date()).getTime(); - if ( gotoEnd || t >= this.options.duration + this.startTime ) { - this.now = this.end; - this.pos = this.state = 1; - this.update(); - - this.options.curAnim[ this.prop ] = true; - - var done = true; - for ( var i in this.options.curAnim ) - if ( this.options.curAnim[i] !== true ) - done = false; - + step: function(gotoEnd){ + var t = (new Date()).getTime(); + if ( gotoEnd || t >= this.options.duration + this.startTime ) { + this.now = this.end; + this.pos = this.state = 1; + this.update(); + + this.options.curAnim[ this.prop ] = true; + + var done = true; + for ( var i in this.options.curAnim ) + if ( this.options.curAnim[i] !== true ) + done = false; + if ( done ) { - if (this.options.complete) this.options.complete.call(this.elem); - } - return false; - } else { - var n = t - this.startTime; + if (this.options.complete) this.options.complete.call(this.elem); + } + return false; + } else { + var n = t - this.startTime; this.state = n / this.options.duration; - this.pos = this.options.easing(n, 0, 1, this.options.duration); + this.pos = this.options.easing(n, 0, 1, this.options.duration); this.now = this.start + ((this.end - this.start) * this.pos); - this.update(); - } - return true; - } - -}; - -hs.extend( hs.fx, { - step: { - - opacity: function(fx){ - hs.setStyles(fx.elem, { opacity: fx.now }); - }, - - _default: function(fx){ + this.update(); + } + return true; + } + +}; + +hs.extend( hs.fx, { + step: { + + opacity: function(fx){ + hs.setStyles(fx.elem, { opacity: fx.now }); + }, + + _default: function(fx){ try { - if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) - fx.elem.style[ fx.prop ] = fx.now + fx.unit; - else - fx.elem[ fx.prop ] = fx.now; - } catch (e) {} - } - } -}); - -hs.Outline = function (outlineType, onLoad) { - this.onLoad = onLoad; - this.outlineType = outlineType; - var v = hs.uaVersion, tr; - - this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; - if (!outlineType) { - if (onLoad) onLoad(); - return; - } - - hs.init(); - this.table = hs.createElement( - 'table', { - cellSpacing: 0 - }, { - visibility: 'hidden', - position: 'absolute', - borderCollapse: 'collapse', - width: 0 - }, - hs.container, - true - ); - var tbody = hs.createElement('tbody', null, null, this.table, 1); - - this.td = []; - for (var i = 0; i <= 8; i++) { - if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); - this.td[i] = hs.createElement('td', null, null, tr, true); - var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; - hs.setStyles(this.td[i], style); - } - this.td[4].className = outlineType +' highslide-outline'; - - this.preloadGraphic(); -}; - -hs.Outline.prototype = { -preloadGraphic : function () { - var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; - - var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; - this.graphic = hs.createElement('img', null, { position: 'absolute', - top: '-9999px' }, appendTo, true); // for onload trigger - - var pThis = this; - this.graphic.onload = function() { pThis.onGraphicLoad(); }; - - this.graphic.src = src; -}, - -onGraphicLoad : function () { - var o = this.offset = this.graphic.width / 4, - pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], - dim = { height: (2*o) +'px', width: (2*o) +'px' }; - for (var i = 0; i <= 8; i++) { - if (pos[i]) { - if (this.hasAlphaImageLoader) { - var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; - var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); - hs.createElement ('div', null, { - filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", - position: 'absolute', - width: w, - height: this.graphic.height +'px', - left: (pos[i][0]*o)+'px', - top: (pos[i][1]*o)+'px' - }, - div, - true); - } else { - hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); - } - - if (window.opera && (i == 3 || i ==5)) - hs.createElement('div', null, dim, this.td[i], true); - - hs.setStyles (this.td[i], dim); - } - } - this.graphic = null; - if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); - hs.pendingOutlines[this.outlineType] = this; - if (this.onLoad) this.onLoad(); -}, - -setPosition : function (pos, offset, vis, dur, easing) { - var exp = this.exp, - stl = exp.wrapper.style, - offset = offset || 0, - pos = pos || { - x: exp.x.pos + offset, - y: exp.y.pos + offset, - w: exp.x.get('wsize') - 2 * offset, - h: exp.y.get('wsize') - 2 * offset - }; - if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) - ? 'visible' : 'hidden'; - hs.setStyles(this.table, { - left: (pos.x - this.offset) +'px', - top: (pos.y - this.offset) +'px', - width: (pos.w + 2 * this.offset) +'px' - }); - - pos.w -= 2 * this.offset; - pos.h -= 2 * this.offset; - hs.setStyles (this.td[4], { - width: pos.w >= 0 ? pos.w +'px' : 0, - height: pos.h >= 0 ? pos.h +'px' : 0 - }); - if (this.hasAlphaImageLoader) this.td[3].style.height - = this.td[5].style.height = this.td[4].style.height; - -}, - -destroy : function(hide) { - if (hide) this.table.style.visibility = 'hidden'; - else hs.discardElement(this.table); -} -}; - -hs.Dimension = function(exp, dim) { - this.exp = exp; - this.dim = dim; + if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) + fx.elem.style[ fx.prop ] = fx.now + fx.unit; + else + fx.elem[ fx.prop ] = fx.now; + } catch (e) {} + } + } +}); + +hs.Outline = function (outlineType, onLoad) { + this.onLoad = onLoad; + this.outlineType = outlineType; + var v = hs.uaVersion, tr; + + this.hasAlphaImageLoader = hs.ie && hs.uaVersion < 7; + if (!outlineType) { + if (onLoad) onLoad(); + return; + } + + hs.init(); + this.table = hs.createElement( + 'table', { + cellSpacing: 0 + }, { + visibility: 'hidden', + position: 'absolute', + borderCollapse: 'collapse', + width: 0 + }, + hs.container, + true + ); + var tbody = hs.createElement('tbody', null, null, this.table, 1); + + this.td = []; + for (var i = 0; i <= 8; i++) { + if (i % 3 == 0) tr = hs.createElement('tr', null, { height: 'auto' }, tbody, true); + this.td[i] = hs.createElement('td', null, null, tr, true); + var style = i != 4 ? { lineHeight: 0, fontSize: 0} : { position : 'relative' }; + hs.setStyles(this.td[i], style); + } + this.td[4].className = outlineType +' highslide-outline'; + + this.preloadGraphic(); +}; + +hs.Outline.prototype = { +preloadGraphic : function () { + var src = hs.graphicsDir + (hs.outlinesDir || "outlines/")+ this.outlineType +".png"; + + var appendTo = hs.safari && hs.uaVersion < 525 ? hs.container : null; + this.graphic = hs.createElement('img', null, { position: 'absolute', + top: '-9999px' }, appendTo, true); // for onload trigger + + var pThis = this; + this.graphic.onload = function() { pThis.onGraphicLoad(); }; + + this.graphic.src = src; +}, + +onGraphicLoad : function () { + var o = this.offset = this.graphic.width / 4, + pos = [[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]], + dim = { height: (2*o) +'px', width: (2*o) +'px' }; + for (var i = 0; i <= 8; i++) { + if (pos[i]) { + if (this.hasAlphaImageLoader) { + var w = (i == 1 || i == 7) ? '100%' : this.graphic.width +'px'; + var div = hs.createElement('div', null, { width: '100%', height: '100%', position: 'relative', overflow: 'hidden'}, this.td[i], true); + hs.createElement ('div', null, { + filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+ this.graphic.src + "')", + position: 'absolute', + width: w, + height: this.graphic.height +'px', + left: (pos[i][0]*o)+'px', + top: (pos[i][1]*o)+'px' + }, + div, + true); + } else { + hs.setStyles(this.td[i], { background: 'url('+ this.graphic.src +') '+ (pos[i][0]*o)+'px '+(pos[i][1]*o)+'px'}); + } + + if (window.opera && (i == 3 || i ==5)) + hs.createElement('div', null, dim, this.td[i], true); + + hs.setStyles (this.td[i], dim); + } + } + this.graphic = null; + if (hs.pendingOutlines[this.outlineType]) hs.pendingOutlines[this.outlineType].destroy(); + hs.pendingOutlines[this.outlineType] = this; + if (this.onLoad) this.onLoad(); +}, + +setPosition : function (pos, offset, vis, dur, easing) { + var exp = this.exp, + stl = exp.wrapper.style, + offset = offset || 0, + pos = pos || { + x: exp.x.pos + offset, + y: exp.y.pos + offset, + w: exp.x.get('wsize') - 2 * offset, + h: exp.y.get('wsize') - 2 * offset + }; + if (vis) this.table.style.visibility = (pos.h >= 4 * this.offset) + ? 'visible' : 'hidden'; + hs.setStyles(this.table, { + left: (pos.x - this.offset) +'px', + top: (pos.y - this.offset) +'px', + width: (pos.w + 2 * this.offset) +'px' + }); + + pos.w -= 2 * this.offset; + pos.h -= 2 * this.offset; + hs.setStyles (this.td[4], { + width: pos.w >= 0 ? pos.w +'px' : 0, + height: pos.h >= 0 ? pos.h +'px' : 0 + }); + if (this.hasAlphaImageLoader) this.td[3].style.height + = this.td[5].style.height = this.td[4].style.height; + +}, + +destroy : function(hide) { + if (hide) this.table.style.visibility = 'hidden'; + else hs.discardElement(this.table); +} +}; + +hs.Dimension = function(exp, dim) { + this.exp = exp; + this.dim = dim; this.ucwh = dim == 'x' ? 'Width' : 'Height'; this.wh = this.ucwh.toLowerCase(); this.uclt = dim == 'x' ? 'Left' : 'Top'; @@ -876,1016 +876,1016 @@ hs.Dimension = function(exp, dim) { this.ucrb = dim == 'x' ? 'Right' : 'Bottom'; this.rb = this.ucrb.toLowerCase(); this.p1 = this.p2 = 0; -}; -hs.Dimension.prototype = { -get : function(key) { - switch (key) { - case 'loadingPos': - return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; +}; +hs.Dimension.prototype = { +get : function(key) { + switch (key) { + case 'loadingPos': + return this.tpos + this.tb + (this.t - hs.loading['offset'+ this.ucwh]) / 2; case 'wsize': - return this.size + 2 * this.cb + this.p1 + this.p2; + return this.size + 2 * this.cb + this.p1 + this.p2; case 'fitsize': - return this.clientSize - this.marginMin - this.marginMax; + return this.clientSize - this.marginMin - this.marginMax; case 'maxsize': - return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; + return this.get('fitsize') - 2 * this.cb - this.p1 - this.p2 ; case 'opos': - return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); + return this.pos - (this.exp.outline ? this.exp.outline.offset : 0); case 'osize': - return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); + return this.get('wsize') + (this.exp.outline ? 2*this.exp.outline.offset : 0); case 'imgPad': - return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; - - } -}, -calcBorders: function() { - // correct for borders + return this.imgSize ? Math.round((this.size - this.imgSize) / 2) : 0; + + } +}, +calcBorders: function() { + // correct for borders this.cb = (this.exp.content['offset'+ this.ucwh] - this.t) / 2; - - this.marginMax = hs['margin'+ this.ucrb]; -}, -calcThumb: function() { - this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : + + this.marginMax = hs['margin'+ this.ucrb]; +}, +calcThumb: function() { + this.t = this.exp.el[this.wh] ? parseInt(this.exp.el[this.wh]) : this.exp.el['offset'+ this.ucwh]; this.tpos = this.exp.tpos[this.dim]; this.tb = (this.exp.el['offset'+ this.ucwh] - this.t) / 2; if (this.tpos == 0 || this.tpos == -1) { - this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; - }; -}, -calcExpanded: function() { - var exp = this.exp; - this.justify = 'auto'; - - - // size and position + this.tpos = (hs.page[this.wh] / 2) + hs.page['scroll'+ this.uclt]; + }; +}, +calcExpanded: function() { + var exp = this.exp; + this.justify = 'auto'; + + + // size and position this.pos = this.tpos - this.cb + this.tb; - + if (this.maxHeight && this.dim == 'x') - exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); - - this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); - this.minSize = exp.allowSizeReduction ? - Math.min(exp['min'+ this.ucwh], this.full) :this.full; - if (exp.isImage && exp.useBox) { - this.size = exp[this.wh]; - this.imgSize = this.full; - } - if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; - this.marginMin = hs['margin'+ this.uclt]; - this.scroll = hs.page['scroll'+ this.uclt]; - this.clientSize = hs.page[this.wh]; -}, -setSize: function(i) { - var exp = this.exp; - if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { - this.imgSize = i; - this.size = Math.max(this.size, this.imgSize); - exp.content.style[this.lt] = this.get('imgPad')+'px'; - } else - this.size = i; - - exp.content.style[this.wh] = i +'px'; - exp.wrapper.style[this.wh] = this.get('wsize') +'px'; - if (exp.outline) exp.outline.setPosition(); - if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); -}, -setPos: function(i) { - this.pos = i; - this.exp.wrapper.style[this.lt] = i +'px'; - - if (this.exp.outline) this.exp.outline.setPosition(); - -} -}; - -hs.Expander = function(a, params, custom, contentType) { - if (document.readyState && hs.ie && !hs.isReady) { - hs.addEventListener(document, 'ready', function() { - new hs.Expander(a, params, custom, contentType); - }); - return; - } - this.a = a; - this.custom = custom; - this.contentType = contentType || 'image'; - this.isImage = !this.isHtml; - - hs.continuePreloading = false; - this.overlays = []; - hs.init(); - var key = this.key = hs.expanders.length; - // override inline parameters - for (var i = 0; i < hs.overrides.length; i++) { - var name = hs.overrides[i]; - this[name] = params && typeof params[name] != 'undefined' ? - params[name] : hs[name]; + exp.maxWidth = Math.min(exp.maxWidth || this.full, exp.maxHeight * this.full / exp.y.full); + + this.size = Math.min(this.full, exp['max'+ this.ucwh] || this.full); + this.minSize = exp.allowSizeReduction ? + Math.min(exp['min'+ this.ucwh], this.full) :this.full; + if (exp.isImage && exp.useBox) { + this.size = exp[this.wh]; + this.imgSize = this.full; + } + if (this.dim == 'x' && hs.padToMinWidth) this.minSize = exp.minWidth; + this.marginMin = hs['margin'+ this.uclt]; + this.scroll = hs.page['scroll'+ this.uclt]; + this.clientSize = hs.page[this.wh]; +}, +setSize: function(i) { + var exp = this.exp; + if (exp.isImage && (exp.useBox || hs.padToMinWidth)) { + this.imgSize = i; + this.size = Math.max(this.size, this.imgSize); + exp.content.style[this.lt] = this.get('imgPad')+'px'; + } else + this.size = i; + + exp.content.style[this.wh] = i +'px'; + exp.wrapper.style[this.wh] = this.get('wsize') +'px'; + if (exp.outline) exp.outline.setPosition(); + if (this.dim == 'x' && exp.overlayBox) exp.sizeOverlayBox(true); +}, +setPos: function(i) { + this.pos = i; + this.exp.wrapper.style[this.lt] = i +'px'; + + if (this.exp.outline) this.exp.outline.setPosition(); + +} +}; + +hs.Expander = function(a, params, custom, contentType) { + if (document.readyState && hs.ie && !hs.isReady) { + hs.addEventListener(document, 'ready', function() { + new hs.Expander(a, params, custom, contentType); + }); + return; + } + this.a = a; + this.custom = custom; + this.contentType = contentType || 'image'; + this.isImage = !this.isHtml; + + hs.continuePreloading = false; + this.overlays = []; + hs.init(); + var key = this.key = hs.expanders.length; + // override inline parameters + for (var i = 0; i < hs.overrides.length; i++) { + var name = hs.overrides[i]; + this[name] = params && typeof params[name] != 'undefined' ? + params[name] : hs[name]; + } + if (!this.src) this.src = a.href; + + // get thumb + var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; + el = this.thumb = el.getElementsByTagName('img')[0] || el; + this.thumbsUserSetId = el.id || a.id; + + // check if already open + for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && hs.expanders[i].a == a) { + hs.expanders[i].focus(); + return false; + } + } + + // cancel other + if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { + hs.expanders[i].cancelLoading(); + } } - if (!this.src) this.src = a.href; - - // get thumb - var el = (params && params.thumbnailId) ? hs.$(params.thumbnailId) : a; - el = this.thumb = el.getElementsByTagName('img')[0] || el; - this.thumbsUserSetId = el.id || a.id; - - // check if already open - for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && hs.expanders[i].a == a) { - hs.expanders[i].focus(); - return false; - } - } - - // cancel other - if (!hs.allowSimultaneousLoading) for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && hs.expanders[i].thumb != el && !hs.expanders[i].onLoadStarted) { - hs.expanders[i].cancelLoading(); - } - } - hs.expanders[key] = this; - if (!hs.allowMultipleInstances && !hs.upcoming) { - if (hs.expanders[key-1]) hs.expanders[key-1].close(); - if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) + hs.expanders[key] = this; + if (!hs.allowMultipleInstances && !hs.upcoming) { + if (hs.expanders[key-1]) hs.expanders[key-1].close(); + if (typeof hs.focusKey != 'undefined' && hs.expanders[hs.focusKey]) hs.expanders[hs.focusKey].close(); - } - - // initiate metrics - this.el = el; - this.tpos = this.pageOrigin || hs.getPosition(el); - hs.getPageSize(); - var x = this.x = new hs.Dimension(this, 'x'); - x.calcThumb(); - var y = this.y = new hs.Dimension(this, 'y'); + } + + // initiate metrics + this.el = el; + this.tpos = this.pageOrigin || hs.getPosition(el); + hs.getPageSize(); + var x = this.x = new hs.Dimension(this, 'x'); + x.calcThumb(); + var y = this.y = new hs.Dimension(this, 'y'); y.calcThumb(); - this.wrapper = hs.createElement( - 'div', { - id: 'highslide-wrapper-'+ this.key, - className: 'highslide-wrapper '+ this.wrapperClassName - }, { - visibility: 'hidden', - position: 'absolute', - zIndex: hs.zIndexCounter += 2 - }, null, true ); - - this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; - if (this.contentType == 'image' && this.outlineWhileAnimating == 2) - this.outlineWhileAnimating = 0; - - // get the outline - if (!this.outlineType) { - this[this.contentType +'Create'](); - - } else if (hs.pendingOutlines[this.outlineType]) { - this.connectOutline(); - this[this.contentType +'Create'](); - - } else { - this.showLoading(); - var exp = this; - new hs.Outline(this.outlineType, - function () { - exp.connectOutline(); - exp[exp.contentType +'Create'](); - } - ); - } + this.wrapper = hs.createElement( + 'div', { + id: 'highslide-wrapper-'+ this.key, + className: 'highslide-wrapper '+ this.wrapperClassName + }, { + visibility: 'hidden', + position: 'absolute', + zIndex: hs.zIndexCounter += 2 + }, null, true ); + + this.wrapper.onmouseover = this.wrapper.onmouseout = hs.wrapperMouseHandler; + if (this.contentType == 'image' && this.outlineWhileAnimating == 2) + this.outlineWhileAnimating = 0; + + // get the outline + if (!this.outlineType) { + this[this.contentType +'Create'](); + + } else if (hs.pendingOutlines[this.outlineType]) { + this.connectOutline(); + this[this.contentType +'Create'](); + + } else { + this.showLoading(); + var exp = this; + new hs.Outline(this.outlineType, + function () { + exp.connectOutline(); + exp[exp.contentType +'Create'](); + } + ); + } return true; -}; - -hs.Expander.prototype = { -error : function(e) { - if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); - else window.location.href = this.src; -}, - -connectOutline : function() { - var outline = this.outline = hs.pendingOutlines[this.outlineType]; - outline.exp = this; - outline.table.style.zIndex = this.wrapper.style.zIndex - 1; - hs.pendingOutlines[this.outlineType] = null; -}, - -showLoading : function() { - if (this.onLoadStarted || this.loading) return; - - this.loading = hs.loading; - var exp = this; - this.loading.onclick = function() { - exp.cancelLoading(); - }; - var exp = this, - l = this.x.get('loadingPos') +'px', - t = this.y.get('loadingPos') +'px'; - setTimeout(function () { - if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} - , 100); -}, - -imageCreate : function() { - var exp = this; - - var img = document.createElement('img'); - this.content = img; - img.onload = function () { - if (hs.expanders[exp.key]) exp.contentLoaded(); - }; - if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; - img.className = 'highslide-image'; - hs.setStyles(img, { +}; + +hs.Expander.prototype = { +error : function(e) { + if (hs.debug) alert ('Line '+ e.lineNumber +': '+ e.message); + else window.location.href = this.src; +}, + +connectOutline : function() { + var outline = this.outline = hs.pendingOutlines[this.outlineType]; + outline.exp = this; + outline.table.style.zIndex = this.wrapper.style.zIndex - 1; + hs.pendingOutlines[this.outlineType] = null; +}, + +showLoading : function() { + if (this.onLoadStarted || this.loading) return; + + this.loading = hs.loading; + var exp = this; + this.loading.onclick = function() { + exp.cancelLoading(); + }; + var exp = this, + l = this.x.get('loadingPos') +'px', + t = this.y.get('loadingPos') +'px'; + setTimeout(function () { + if (exp.loading) hs.setStyles(exp.loading, { left: l, top: t, zIndex: hs.zIndexCounter++ })} + , 100); +}, + +imageCreate : function() { + var exp = this; + + var img = document.createElement('img'); + this.content = img; + img.onload = function () { + if (hs.expanders[exp.key]) exp.contentLoaded(); + }; + if (hs.blockRightClick) img.oncontextmenu = function() { return false; }; + img.className = 'highslide-image'; + hs.setStyles(img, { visibility: 'hidden', - display: 'block', - position: 'absolute', - maxWidth: '9999px', - zIndex: 3 - }); - img.title = hs.lang.restoreTitle; - if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); - if (hs.ie && hs.flushImgSize) img.src = null; - img.src = this.src; - - this.showLoading(); -}, - -contentLoaded : function() { - try { - if (!this.content) return; + display: 'block', + position: 'absolute', + maxWidth: '9999px', + zIndex: 3 + }); + img.title = hs.lang.restoreTitle; + if (hs.safari && hs.uaVersion < 525) hs.container.appendChild(img); + if (hs.ie && hs.flushImgSize) img.src = null; + img.src = this.src; + + this.showLoading(); +}, + +contentLoaded : function() { + try { + if (!this.content) return; this.content.onload = null; if (this.onLoadStarted) return; - else this.onLoadStarted = true; - - var x = this.x, y = this.y; - - if (this.loading) { - hs.setStyles(this.loading, { top: '-9999px' }); - this.loading = null; - } - x.full = this.content.width; - y.full = this.content.height; - - hs.setStyles(this.content, { - width: x.t +'px', - height: y.t +'px' - }); - this.wrapper.appendChild(this.content); - hs.container.appendChild(this.wrapper); - - x.calcBorders(); - y.calcBorders(); - + else this.onLoadStarted = true; + + var x = this.x, y = this.y; + + if (this.loading) { + hs.setStyles(this.loading, { top: '-9999px' }); + this.loading = null; + } + x.full = this.content.width; + y.full = this.content.height; + + hs.setStyles(this.content, { + width: x.t +'px', + height: y.t +'px' + }); + this.wrapper.appendChild(this.content); + hs.container.appendChild(this.wrapper); + + x.calcBorders(); + y.calcBorders(); + hs.setStyles (this.wrapper, { - left: (x.tpos + x.tb - x.cb) +'px', - top: (y.tpos + x.tb - y.cb) +'px' + left: (x.tpos + x.tb - x.cb) +'px', + top: (y.tpos + x.tb - y.cb) +'px' }); - this.getOverlays(); - - var ratio = x.full / y.full; - x.calcExpanded(); - this.justify(x); - - y.calcExpanded(); - this.justify(y); - if (this.overlayBox) this.sizeOverlayBox(0, 1); - - - if (this.allowSizeReduction) { - this.correctRatio(ratio); - if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { - this.createFullExpand(); - if (this.overlays.length == 1) this.sizeOverlayBox(); - } - } - this.show(); - - } catch (e) { - this.error(e); - } -}, - -justify : function (p, moveOnly) { - var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; - - var hasMovedMin = false; - + this.getOverlays(); + + var ratio = x.full / y.full; + x.calcExpanded(); + this.justify(x); + + y.calcExpanded(); + this.justify(y); + if (this.overlayBox) this.sizeOverlayBox(0, 1); + + + if (this.allowSizeReduction) { + this.correctRatio(ratio); + if (this.isImage && this.x.full > (this.x.imgSize || this.x.size)) { + this.createFullExpand(); + if (this.overlays.length == 1) this.sizeOverlayBox(); + } + } + this.show(); + + } catch (e) { + this.error(e); + } +}, + +justify : function (p, moveOnly) { + var tgtArr, tgt = p.target, dim = p == this.x ? 'x' : 'y'; + + var hasMovedMin = false; + var allowReduce = p.exp.allowSizeReduction; p.pos = Math.round(p.pos - ((p.get('wsize') - p.t) / 2)); - if (p.pos < p.scroll + p.marginMin) { - p.pos = p.scroll + p.marginMin; - hasMovedMin = true; + if (p.pos < p.scroll + p.marginMin) { + p.pos = p.scroll + p.marginMin; + hasMovedMin = true; } - if (!moveOnly && p.size < p.minSize) { - p.size = p.minSize; - allowReduce = false; + if (!moveOnly && p.size < p.minSize) { + p.size = p.minSize; + allowReduce = false; } if (p.pos + p.get('wsize') > p.scroll + p.clientSize - p.marginMax) { if (!moveOnly && hasMovedMin && allowReduce) { p.size = Math.min(p.size, p.get(dim == 'y' ? 'fitsize' : 'maxsize')); - } else if (p.get('wsize') < p.get('fitsize')) { + } else if (p.get('wsize') < p.get('fitsize')) { p.pos = p.scroll + p.clientSize - p.marginMax - p.get('wsize'); - } else { // image larger than viewport - p.pos = p.scroll + p.marginMin; - if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); - } + } else { // image larger than viewport + p.pos = p.scroll + p.marginMin; + if (!moveOnly && allowReduce) p.size = p.get(dim == 'y' ? 'fitsize' : 'maxsize'); + } } - - if (!moveOnly && p.size < p.minSize) { - p.size = p.minSize; - allowReduce = false; - } - - - - if (p.pos < p.marginMin) { - var tmpMin = p.pos; - p.pos = p.marginMin; - - if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); - - } -}, - -correctRatio : function(ratio) { - var x = this.x, - y = this.y, + + if (!moveOnly && p.size < p.minSize) { + p.size = p.minSize; + allowReduce = false; + } + + + + if (p.pos < p.marginMin) { + var tmpMin = p.pos; + p.pos = p.marginMin; + + if (allowReduce && !moveOnly) p.size = p.size - (p.pos - tmpMin); + + } +}, + +correctRatio : function(ratio) { + var x = this.x, + y = this.y, changed = false, - xSize = Math.min(x.full, x.size), - ySize = Math.min(y.full, y.size), - useBox = (this.useBox || hs.padToMinWidth); - - if (xSize / ySize > ratio) { // width greater - xSize = ySize * ratio; - if (xSize < x.minSize) { // below minWidth - xSize = x.minSize; - ySize = xSize / ratio; - } - changed = true; - - } else if (xSize / ySize < ratio) { // height greater - ySize = xSize / ratio; - changed = true; - } - - if (hs.padToMinWidth && x.full < x.minSize) { - x.imgSize = x.full; - y.size = y.imgSize = y.full; - } else if (this.useBox) { - x.imgSize = xSize; - y.imgSize = ySize; - } else { - x.size = xSize; - y.size = ySize; - } + xSize = Math.min(x.full, x.size), + ySize = Math.min(y.full, y.size), + useBox = (this.useBox || hs.padToMinWidth); + + if (xSize / ySize > ratio) { // width greater + xSize = ySize * ratio; + if (xSize < x.minSize) { // below minWidth + xSize = x.minSize; + ySize = xSize / ratio; + } + changed = true; + + } else if (xSize / ySize < ratio) { // height greater + ySize = xSize / ratio; + changed = true; + } + + if (hs.padToMinWidth && x.full < x.minSize) { + x.imgSize = x.full; + y.size = y.imgSize = y.full; + } else if (this.useBox) { + x.imgSize = xSize; + y.imgSize = ySize; + } else { + x.size = xSize; + y.size = ySize; + } changed = this.fitOverlayBox(this.useBox ? null : ratio, changed); - if (useBox && y.size < y.imgSize) { - y.imgSize = y.size; - x.imgSize = y.size * ratio; - } - if (changed || useBox) { - x.pos = x.tpos - x.cb + x.tb; - x.minSize = x.size; - this.justify(x, true); - - y.pos = y.tpos - y.cb + y.tb; - y.minSize = y.size; - this.justify(y, true); - if (this.overlayBox) this.sizeOverlayBox(); - } - - -}, -fitOverlayBox : function(ratio, changed) { - var x = this.x, y = this.y; - if (this.overlayBox) { - while (y.size > this.minHeight && x.size > this.minWidth - && y.get('wsize') > y.get('fitsize')) { - y.size -= 10; - if (ratio) x.size = y.size * ratio; - this.sizeOverlayBox(0, 1); - changed = true; - } + if (useBox && y.size < y.imgSize) { + y.imgSize = y.size; + x.imgSize = y.size * ratio; } - return changed; -}, - -show : function () { + if (changed || useBox) { + x.pos = x.tpos - x.cb + x.tb; + x.minSize = x.size; + this.justify(x, true); + + y.pos = y.tpos - y.cb + y.tb; + y.minSize = y.size; + this.justify(y, true); + if (this.overlayBox) this.sizeOverlayBox(); + } + + +}, +fitOverlayBox : function(ratio, changed) { var x = this.x, y = this.y; - this.doShowHide('hidden'); - - // Apply size change - this.changeSize( - 1, { - wrapper: { - width : x.get('wsize'), - height : y.get('wsize'), - left: x.pos, - top: y.pos - }, - content: { - left: x.p1 + x.get('imgPad'), - top: y.p1 + y.get('imgPad'), - width:x.imgSize ||x.size, - height:y.imgSize ||y.size - } - }, - hs.expandDuration - ); -}, - -changeSize : function(up, to, dur) { - - if (this.outline && !this.outlineWhileAnimating) { - if (up) this.outline.setPosition(); - else this.outline.destroy(); - } - - - if (!up) this.destroyOverlays(); - - var exp = this, - x = exp.x, - y = exp.y, - easing = this.easing; + if (this.overlayBox) { + while (y.size > this.minHeight && x.size > this.minWidth + && y.get('wsize') > y.get('fitsize')) { + y.size -= 10; + if (ratio) x.size = y.size * ratio; + this.sizeOverlayBox(0, 1); + changed = true; + } + } + return changed; +}, + +show : function () { + var x = this.x, y = this.y; + this.doShowHide('hidden'); + + // Apply size change + this.changeSize( + 1, { + wrapper: { + width : x.get('wsize'), + height : y.get('wsize'), + left: x.pos, + top: y.pos + }, + content: { + left: x.p1 + x.get('imgPad'), + top: y.p1 + y.get('imgPad'), + width:x.imgSize ||x.size, + height:y.imgSize ||y.size + } + }, + hs.expandDuration + ); +}, + +changeSize : function(up, to, dur) { + + if (this.outline && !this.outlineWhileAnimating) { + if (up) this.outline.setPosition(); + else this.outline.destroy(); + } + + + if (!up) this.destroyOverlays(); + + var exp = this, + x = exp.x, + y = exp.y, + easing = this.easing; if (!up) easing = this.easingClose || easing; - var after = up ? - function() { - - if (exp.outline) exp.outline.table.style.visibility = "visible"; - setTimeout(function() { - exp.afterExpand(); - }, 50); - } : - function() { - exp.afterClose(); + var after = up ? + function() { + + if (exp.outline) exp.outline.table.style.visibility = "visible"; + setTimeout(function() { + exp.afterExpand(); + }, 50); + } : + function() { + exp.afterClose(); }; - if (up) hs.setStyles( this.wrapper, { - width: x.t +'px', - height: y.t +'px' + if (up) hs.setStyles( this.wrapper, { + width: x.t +'px', + height: y.t +'px' }); - if (this.fadeInOut) { - hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); + if (this.fadeInOut) { + hs.setStyles(this.wrapper, { opacity: up ? 0 : 1 }); hs.extend(to.wrapper, { opacity: up }); - } - hs.animate( this.wrapper, to.wrapper, { - duration: dur, - easing: easing, - step: function(val, args) { - if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { - var fac = up ? args.pos : 1 - args.pos; - var pos = { - w: x.t + (x.get('wsize') - x.t) * fac, - h: y.t + (y.get('wsize') - y.t) * fac, - x: x.tpos + (x.pos - x.tpos) * fac, - y: y.tpos + (y.pos - y.tpos) * fac - }; - exp.outline.setPosition(pos, 0, 1); - } - } + } + hs.animate( this.wrapper, to.wrapper, { + duration: dur, + easing: easing, + step: function(val, args) { + if (exp.outline && exp.outlineWhileAnimating && args.prop == 'top') { + var fac = up ? args.pos : 1 - args.pos; + var pos = { + w: x.t + (x.get('wsize') - x.t) * fac, + h: y.t + (y.get('wsize') - y.t) * fac, + x: x.tpos + (x.pos - x.tpos) * fac, + y: y.tpos + (y.pos - y.tpos) * fac + }; + exp.outline.setPosition(pos, 0, 1); + } + } }); hs.animate( this.content, to.content, dur, easing, after); - if (up) { - this.wrapper.style.visibility = 'visible'; - this.content.style.visibility = 'visible'; - this.a.className += ' highslide-active-anchor'; - } -}, - - - - -afterExpand : function() { - this.isExpanded = true; - this.focus(); + if (up) { + this.wrapper.style.visibility = 'visible'; + this.content.style.visibility = 'visible'; + this.a.className += ' highslide-active-anchor'; + } +}, + + + + +afterExpand : function() { + this.isExpanded = true; + this.focus(); if (hs.upcoming && hs.upcoming == this.a) hs.upcoming = null; this.prepareNextOutline(); - var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; - this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') - && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); - if (this.overlayBox) this.showOverlays(); - -}, - - -prepareNextOutline : function() { - var key = this.key; - var outlineType = this.outlineType; - new hs.Outline(outlineType, - function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); -}, - - -preloadNext : function() { - var next = this.getAdjacentAnchor(1); - if (next && next.onclick.toString().match(/hs\.expand/)) - var img = hs.createElement('img', { src: hs.getSrc(next) }); -}, - - -getAdjacentAnchor : function(op) { - var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; - return (as && as[current + op]) || null; -}, - -getAnchorIndex : function() { - var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; - if (arr) for (var i = 0; i < arr.length; i++) { - if (arr[i] == this.a) return i; - } - return null; -}, - - -cancelLoading : function() { - hs.discardElement (this.wrapper); - hs.expanders[this.key] = null; - if (this.loading) hs.loading.style.left = '-9999px'; -}, - -writeCredits : function () { - this.credits = hs.createElement('a', { - href: hs.creditsHref, - target: hs.creditsTarget, - className: 'highslide-credits', - innerHTML: hs.lang.creditsText, - title: hs.lang.creditsTitle - }); - this.createOverlay({ - overlayId: this.credits, - position: this.creditsPosition || 'top left' - }); -}, - -getInline : function(types, addOverlay) { - for (var i = 0; i < types.length; i++) { + var p = hs.page, mX = hs.mouse.x + p.scrollLeft, mY = hs.mouse.y + p.scrollTop; + this.mouseIsOver = this.x.pos < mX && mX < this.x.pos + this.x.get('wsize') + && this.y.pos < mY && mY < this.y.pos + this.y.get('wsize'); + if (this.overlayBox) this.showOverlays(); + +}, + + +prepareNextOutline : function() { + var key = this.key; + var outlineType = this.outlineType; + new hs.Outline(outlineType, + function () { try { hs.expanders[key].preloadNext(); } catch (e) {} }); +}, + + +preloadNext : function() { + var next = this.getAdjacentAnchor(1); + if (next && next.onclick.toString().match(/hs\.expand/)) + var img = hs.createElement('img', { src: hs.getSrc(next) }); +}, + + +getAdjacentAnchor : function(op) { + var current = this.getAnchorIndex(), as = hs.anchors.groups[this.slideshowGroup || 'none']; + return (as && as[current + op]) || null; +}, + +getAnchorIndex : function() { + var arr = hs.getAnchors().groups[this.slideshowGroup || 'none']; + if (arr) for (var i = 0; i < arr.length; i++) { + if (arr[i] == this.a) return i; + } + return null; +}, + + +cancelLoading : function() { + hs.discardElement (this.wrapper); + hs.expanders[this.key] = null; + if (this.loading) hs.loading.style.left = '-9999px'; +}, + +writeCredits : function () { + this.credits = hs.createElement('a', { + href: hs.creditsHref, + target: hs.creditsTarget, + className: 'highslide-credits', + innerHTML: hs.lang.creditsText, + title: hs.lang.creditsTitle + }); + this.createOverlay({ + overlayId: this.credits, + position: this.creditsPosition || 'top left' + }); +}, + +getInline : function(types, addOverlay) { + for (var i = 0; i < types.length; i++) { var type = types[i], s = null; - if (!this[type +'Id'] && this.thumbsUserSetId) + if (!this[type +'Id'] && this.thumbsUserSetId) this[type +'Id'] = type +'-for-'+ this.thumbsUserSetId; if (this[type +'Id']) this[type] = hs.getNode(this[type +'Id']); - if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { - s = eval(this[type +'Eval']); + if (!this[type] && !this[type +'Text'] && this[type +'Eval']) try { + s = eval(this[type +'Eval']); } catch (e) {} - if (!this[type] && this[type +'Text']) { - s = this[type +'Text']; + if (!this[type] && this[type +'Text']) { + s = this[type +'Text']; } - if (!this[type] && !s) { + if (!this[type] && !s) { this[type] = hs.getNode(this.a['_'+ type + 'Id']); if (!this[type]) { - var next = this.a.nextSibling; - while (next && !hs.isHsAnchor(next)) { - if ((new RegExp('highslide-'+ type)).test(next.className || null)) { - if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; - this[type] = hs.getNode(next.id); - break; - } - next = next.nextSibling; - } - } - } - - if (!this[type] && s) this[type] = hs.createElement('div', - { className: 'highslide-'+ type, innerHTML: s } ); - - if (addOverlay && this[type]) { + var next = this.a.nextSibling; + while (next && !hs.isHsAnchor(next)) { + if ((new RegExp('highslide-'+ type)).test(next.className || null)) { + if (!next.id) this.a['_'+ type + 'Id'] = next.id = 'hsId'+ hs.idCounter++; + this[type] = hs.getNode(next.id); + break; + } + next = next.nextSibling; + } + } + } + + if (!this[type] && s) this[type] = hs.createElement('div', + { className: 'highslide-'+ type, innerHTML: s } ); + + if (addOverlay && this[type]) { var o = { position: (type == 'heading') ? 'above' : 'below' }; - for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; - o.overlayId = this[type]; - this.createOverlay(o); - } - } -}, - - -// on end move and resize -doShowHide : function(visibility) { - if (hs.hideSelects) this.showHideElements('SELECT', visibility); - if (hs.hideIframes) this.showHideElements('IFRAME', visibility); - if (hs.geckoMac) this.showHideElements('*', visibility); -}, -showHideElements : function (tagName, visibility) { - var els = document.getElementsByTagName(tagName); - var prop = tagName == '*' ? 'overflow' : 'visibility'; - for (var i = 0; i < els.length; i++) { - if (prop == 'visibility' || (document.defaultView.getComputedStyle( - els[i], "").getPropertyValue('overflow') == 'auto' - || els[i].getAttribute('hidden-by') != null)) { - var hiddenBy = els[i].getAttribute('hidden-by'); - if (visibility == 'visible' && hiddenBy) { - hiddenBy = hiddenBy.replace('['+ this.key +']', ''); - els[i].setAttribute('hidden-by', hiddenBy); - if (!hiddenBy) els[i].style[prop] = els[i].origProp; - } else if (visibility == 'hidden') { // hide if behind - var elPos = hs.getPosition(els[i]); - elPos.w = els[i].offsetWidth; - elPos.h = els[i].offsetHeight; - - - var clearsX = (elPos.x + elPos.w < this.x.get('opos') - || elPos.x > this.x.get('opos') + this.x.get('osize')); - var clearsY = (elPos.y + elPos.h < this.y.get('opos') - || elPos.y > this.y.get('opos') + this.y.get('osize')); - var wrapperKey = hs.getWrapperKey(els[i]); - if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image - if (!hiddenBy) { - els[i].setAttribute('hidden-by', '['+ this.key +']'); - els[i].origProp = els[i].style[prop]; - els[i].style[prop] = 'hidden'; - - } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { - els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); - } - } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) - && wrapperKey != this.key) { // on move - els[i].setAttribute('hidden-by', ''); - els[i].style[prop] = els[i].origProp || ''; - } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { - els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); - } - - } - } - } -}, - -focus : function() { - this.wrapper.style.zIndex = hs.zIndexCounter += 2; - // blur others - for (var i = 0; i < hs.expanders.length; i++) { - if (hs.expanders[i] && i == hs.focusKey) { - var blurExp = hs.expanders[i]; - blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; - blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; - blurExp.content.title = hs.lang.focusTitle; - } - } - - // focus this - if (this.outline) this.outline.table.style.zIndex - = this.wrapper.style.zIndex - 1; - this.content.className = 'highslide-'+ this.contentType; - this.content.title = hs.lang.restoreTitle; - - if (hs.restoreCursor) { - hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; - if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; - this.content.style.cursor = hs.styleRestoreCursor; - } - - hs.focusKey = this.key; - hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); -}, -moveTo: function(x, y) { - this.x.setPos(x); - this.y.setPos(y); -}, -resize : function (e) { + for (var x in this[type+'Overlay']) o[x] = this[type+'Overlay'][x]; + o.overlayId = this[type]; + this.createOverlay(o); + } + } +}, + + +// on end move and resize +doShowHide : function(visibility) { + if (hs.hideSelects) this.showHideElements('SELECT', visibility); + if (hs.hideIframes) this.showHideElements('IFRAME', visibility); + if (hs.geckoMac) this.showHideElements('*', visibility); +}, +showHideElements : function (tagName, visibility) { + var els = document.getElementsByTagName(tagName); + var prop = tagName == '*' ? 'overflow' : 'visibility'; + for (var i = 0; i < els.length; i++) { + if (prop == 'visibility' || (document.defaultView.getComputedStyle( + els[i], "").getPropertyValue('overflow') == 'auto' + || els[i].getAttribute('hidden-by') != null)) { + var hiddenBy = els[i].getAttribute('hidden-by'); + if (visibility == 'visible' && hiddenBy) { + hiddenBy = hiddenBy.replace('['+ this.key +']', ''); + els[i].setAttribute('hidden-by', hiddenBy); + if (!hiddenBy) els[i].style[prop] = els[i].origProp; + } else if (visibility == 'hidden') { // hide if behind + var elPos = hs.getPosition(els[i]); + elPos.w = els[i].offsetWidth; + elPos.h = els[i].offsetHeight; + + + var clearsX = (elPos.x + elPos.w < this.x.get('opos') + || elPos.x > this.x.get('opos') + this.x.get('osize')); + var clearsY = (elPos.y + elPos.h < this.y.get('opos') + || elPos.y > this.y.get('opos') + this.y.get('osize')); + var wrapperKey = hs.getWrapperKey(els[i]); + if (!clearsX && !clearsY && wrapperKey != this.key) { // element falls behind image + if (!hiddenBy) { + els[i].setAttribute('hidden-by', '['+ this.key +']'); + els[i].origProp = els[i].style[prop]; + els[i].style[prop] = 'hidden'; + + } else if (hiddenBy.indexOf('['+ this.key +']') == -1) { + els[i].setAttribute('hidden-by', hiddenBy + '['+ this.key +']'); + } + } else if ((hiddenBy == '['+ this.key +']' || hs.focusKey == wrapperKey) + && wrapperKey != this.key) { // on move + els[i].setAttribute('hidden-by', ''); + els[i].style[prop] = els[i].origProp || ''; + } else if (hiddenBy && hiddenBy.indexOf('['+ this.key +']') > -1) { + els[i].setAttribute('hidden-by', hiddenBy.replace('['+ this.key +']', '')); + } + + } + } + } +}, + +focus : function() { + this.wrapper.style.zIndex = hs.zIndexCounter += 2; + // blur others + for (var i = 0; i < hs.expanders.length; i++) { + if (hs.expanders[i] && i == hs.focusKey) { + var blurExp = hs.expanders[i]; + blurExp.content.className += ' highslide-'+ blurExp.contentType +'-blur'; + blurExp.content.style.cursor = hs.ieLt7 ? 'hand' : 'pointer'; + blurExp.content.title = hs.lang.focusTitle; + } + } + + // focus this + if (this.outline) this.outline.table.style.zIndex + = this.wrapper.style.zIndex - 1; + this.content.className = 'highslide-'+ this.contentType; + this.content.title = hs.lang.restoreTitle; + + if (hs.restoreCursor) { + hs.styleRestoreCursor = window.opera ? 'pointer' : 'url('+ hs.graphicsDir + hs.restoreCursor +'), pointer'; + if (hs.ieLt7 && hs.uaVersion < 6) hs.styleRestoreCursor = 'hand'; + this.content.style.cursor = hs.styleRestoreCursor; + } + + hs.focusKey = this.key; + hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); +}, +moveTo: function(x, y) { + this.x.setPos(x); + this.y.setPos(y); +}, +resize : function (e) { var w, h, r = e.width / e.height; - w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); + w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full)); if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full; h = w / r; - if (h < Math.min(this.minHeight, this.y.full)) { - h = Math.min(this.minHeight, this.y.full); - if (this.isImage) w = h * r; - } - this.resizeTo(w, h); -}, -resizeTo: function(w, h) { + if (h < Math.min(this.minHeight, this.y.full)) { + h = Math.min(this.minHeight, this.y.full); + if (this.isImage) w = h * r; + } + this.resizeTo(w, h); +}, +resizeTo: function(w, h) { this.y.setSize(h); - this.x.setSize(w); + this.x.setSize(w); this.wrapper.style.height = this.y.get('wsize') +'px'; -}, - -close : function() { - if (this.isClosing || !this.isExpanded) return; - this.isClosing = true; - - hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); - - try { - this.content.style.cursor = 'default'; - this.changeSize( - 0, { - wrapper: { - width : this.x.t, - height : this.y.t, - left: this.x.tpos - this.x.cb + this.x.tb, - top: this.y.tpos - this.y.cb + this.y.tb - }, - content: { - left: 0, - top: 0, - width: this.x.t, - height: this.y.t - } - }, hs.restoreDuration - ); - } catch (e) { this.afterClose(); } -}, - -createOverlay : function (o) { - var el = o.overlayId; - if (typeof el == 'string') el = hs.getNode(el); - if (o.html) el = hs.createElement('div', { innerHTML: o.html }); - if (!el || typeof el == 'string') return; - el.style.display = 'block'; - this.genOverlayBox(); +}, + +close : function() { + if (this.isClosing || !this.isExpanded) return; + this.isClosing = true; + + hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', hs.keyHandler); + + try { + this.content.style.cursor = 'default'; + this.changeSize( + 0, { + wrapper: { + width : this.x.t, + height : this.y.t, + left: this.x.tpos - this.x.cb + this.x.tb, + top: this.y.tpos - this.y.cb + this.y.tb + }, + content: { + left: 0, + top: 0, + width: this.x.t, + height: this.y.t + } + }, hs.restoreDuration + ); + } catch (e) { this.afterClose(); } +}, + +createOverlay : function (o) { + var el = o.overlayId; + if (typeof el == 'string') el = hs.getNode(el); + if (o.html) el = hs.createElement('div', { innerHTML: o.html }); + if (!el || typeof el == 'string') return; + el.style.display = 'block'; + this.genOverlayBox(); var width = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto'; - if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; - var overlay = hs.createElement( - 'div', { - id: 'hsId'+ hs.idCounter++, - hsId: o.hsId - }, { - position: 'absolute', - visibility: 'hidden', - width: width, - direction: hs.lang.cssDirection || '', - opacity: 0 - },this.overlayBox, - true - ); - - overlay.appendChild(el); + if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) width = '200px'; + var overlay = hs.createElement( + 'div', { + id: 'hsId'+ hs.idCounter++, + hsId: o.hsId + }, { + position: 'absolute', + visibility: 'hidden', + width: width, + direction: hs.lang.cssDirection || '', + opacity: 0 + },this.overlayBox, + true + ); + + overlay.appendChild(el); hs.extend(overlay, { - opacity: 1, - offsetX: 0, - offsetY: 0, - dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 - }); + opacity: 1, + offsetX: 0, + offsetY: 0, + dur: (o.fade === 0 || o.fade === false || (o.fade == 2 && hs.ie)) ? 0 : 250 + }); hs.extend(overlay, o); - - + + if (this.gotOverlays) { - this.positionOverlay(overlay); - if (!overlay.hideOnMouseOut || this.mouseIsOver) - hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); - } - hs.push(this.overlays, hs.idCounter - 1); -}, -positionOverlay : function(overlay) { - var p = overlay.position || 'middle center', - offX = overlay.offsetX, + this.positionOverlay(overlay); + if (!overlay.hideOnMouseOut || this.mouseIsOver) + hs.animate(overlay, { opacity: overlay.opacity }, overlay.dur); + } + hs.push(this.overlays, hs.idCounter - 1); +}, +positionOverlay : function(overlay) { + var p = overlay.position || 'middle center', + offX = overlay.offsetX, offY = overlay.offsetY; if (overlay.parentNode != this.overlayBox) this.overlayBox.appendChild(overlay); - if (/left$/.test(p)) overlay.style.left = offX +'px'; - - if (/center$/.test(p)) hs.setStyles (overlay, { - left: '50%', - marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' - }); - - if (/right$/.test(p)) overlay.style.right = - offX +'px'; - - if (/^leftpanel$/.test(p)) { - hs.setStyles(overlay, { - right: '100%', - marginRight: this.x.cb +'px', - top: - this.y.cb +'px', - bottom: - this.y.cb +'px', - overflow: 'auto' - }); - this.x.p1 = overlay.offsetWidth; - - } else if (/^rightpanel$/.test(p)) { - hs.setStyles(overlay, { - left: '100%', - marginLeft: this.x.cb +'px', - top: - this.y.cb +'px', - bottom: - this.y.cb +'px', - overflow: 'auto' - }); - this.x.p2 = overlay.offsetWidth; + if (/left$/.test(p)) overlay.style.left = offX +'px'; + + if (/center$/.test(p)) hs.setStyles (overlay, { + left: '50%', + marginLeft: (offX - Math.round(overlay.offsetWidth / 2)) +'px' + }); + + if (/right$/.test(p)) overlay.style.right = - offX +'px'; + + if (/^leftpanel$/.test(p)) { + hs.setStyles(overlay, { + right: '100%', + marginRight: this.x.cb +'px', + top: - this.y.cb +'px', + bottom: - this.y.cb +'px', + overflow: 'auto' + }); + this.x.p1 = overlay.offsetWidth; + + } else if (/^rightpanel$/.test(p)) { + hs.setStyles(overlay, { + left: '100%', + marginLeft: this.x.cb +'px', + top: - this.y.cb +'px', + bottom: - this.y.cb +'px', + overflow: 'auto' + }); + this.x.p2 = overlay.offsetWidth; } - - if (/^top/.test(p)) overlay.style.top = offY +'px'; - if (/^middle/.test(p)) hs.setStyles (overlay, { - top: '50%', - marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' - }); + + if (/^top/.test(p)) overlay.style.top = offY +'px'; + if (/^middle/.test(p)) hs.setStyles (overlay, { + top: '50%', + marginTop: (offY - Math.round(overlay.offsetHeight / 2)) +'px' + }); if (/^bottom/.test(p)) overlay.style.bottom = - offY +'px'; - if (/^above$/.test(p)) { - hs.setStyles(overlay, { - left: (- this.x.p1 - this.x.cb) +'px', - right: (- this.x.p2 - this.x.cb) +'px', - bottom: '100%', - marginBottom: this.y.cb +'px', - width: 'auto' - }); - this.y.p1 = overlay.offsetHeight; - - } else if (/^below$/.test(p)) { - hs.setStyles(overlay, { - position: 'relative', - left: (- this.x.p1 - this.x.cb) +'px', - right: (- this.x.p2 - this.x.cb) +'px', - top: '100%', - marginTop: this.y.cb +'px', - width: 'auto' - }); - this.y.p2 = overlay.offsetHeight; + if (/^above$/.test(p)) { + hs.setStyles(overlay, { + left: (- this.x.p1 - this.x.cb) +'px', + right: (- this.x.p2 - this.x.cb) +'px', + bottom: '100%', + marginBottom: this.y.cb +'px', + width: 'auto' + }); + this.y.p1 = overlay.offsetHeight; + + } else if (/^below$/.test(p)) { + hs.setStyles(overlay, { + position: 'relative', + left: (- this.x.p1 - this.x.cb) +'px', + right: (- this.x.p2 - this.x.cb) +'px', + top: '100%', + marginTop: this.y.cb +'px', + width: 'auto' + }); + this.y.p2 = overlay.offsetHeight; overlay.style.position = 'absolute'; + } +}, + +getOverlays : function() { + this.getInline(['heading', 'caption'], true); + if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move'; + if (hs.showCredits) this.writeCredits(); + for (var i = 0; i < hs.overlays.length; i++) { + var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; + if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) + || (sg && sg === this.slideshowGroup)) { + this.createOverlay(o); + } } -}, - -getOverlays : function() { - this.getInline(['heading', 'caption'], true); - if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move'; - if (hs.showCredits) this.writeCredits(); - for (var i = 0; i < hs.overlays.length; i++) { - var o = hs.overlays[i], tId = o.thumbnailId, sg = o.slideshowGroup; - if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) - || (sg && sg === this.slideshowGroup)) { - this.createOverlay(o); - } - } - var os = []; - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - if (/panel$/.test(o.position)) this.positionOverlay(o); - else hs.push(os, o); + var os = []; + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + if (/panel$/.test(o.position)) this.positionOverlay(o); + else hs.push(os, o); } - for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); - this.gotOverlays = true; -}, -genOverlayBox : function() { - if (!this.overlayBox) this.overlayBox = hs.createElement ( - 'div', { + for (var i = 0; i < os.length; i++) this.positionOverlay(os[i]); + this.gotOverlays = true; +}, +genOverlayBox : function() { + if (!this.overlayBox) this.overlayBox = hs.createElement ( + 'div', { className: this.wrapperClassName - }, { - position : 'absolute', - width: (this.x.size || (this.useBox ? this.width : null) + }, { + position : 'absolute', + width: (this.x.size || (this.useBox ? this.width : null) || this.x.full) +'px', height: (this.y.size || this.y.full) +'px', - visibility : 'hidden', + visibility : 'hidden', overflow : 'hidden', - zIndex : hs.ie ? 4 : 'auto' - }, - hs.container, - true - ); -}, -sizeOverlayBox : function(doWrapper, doPanels) { - var overlayBox = this.overlayBox, - x = this.x, - y = this.y; - hs.setStyles( overlayBox, { - width: x.size +'px', - height: y.size +'px' - }); - if (doWrapper || doPanels) { - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); + zIndex : hs.ie ? 4 : 'auto' + }, + hs.container, + true + ); +}, +sizeOverlayBox : function(doWrapper, doPanels) { + var overlayBox = this.overlayBox, + x = this.x, + y = this.y; + hs.setStyles( overlayBox, { + width: x.size +'px', + height: y.size +'px' + }); + if (doWrapper || doPanels) { + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + var ie6 = (hs.ieLt7 || document.compatMode == 'BackCompat'); if (o && /^(above|below)$/.test(o.position)) { - if (ie6) { - o.style.width = (overlayBox.offsetWidth + 2 * x.cb - + x.p1 + x.p2) +'px'; + if (ie6) { + o.style.width = (overlayBox.offsetWidth + 2 * x.cb + + x.p1 + x.p2) +'px'; } - y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; - } - if (o && ie6 && /^(left|right)panel$/.test(o.position)) { - o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; + y[o.position == 'above' ? 'p1' : 'p2'] = o.offsetHeight; } - } - } - if (doWrapper) { - hs.setStyles(this.content, { - top: y.p1 +'px' - }); - hs.setStyles(overlayBox, { - top: (y.p1 + y.cb) +'px' - }); - } -}, - + if (o && ie6 && /^(left|right)panel$/.test(o.position)) { + o.style.height = (overlayBox.offsetHeight + 2* y.cb) +'px'; + } + } + } + if (doWrapper) { + hs.setStyles(this.content, { + top: y.p1 +'px' + }); + hs.setStyles(overlayBox, { + top: (y.p1 + y.cb) +'px' + }); + } +}, + showOverlays : function() { - var b = this.overlayBox; - b.className = ''; - hs.setStyles(b, { - top: (this.y.p1 + this.y.cb) +'px', - left: (this.x.p1 + this.x.cb) +'px', - overflow : 'visible' - }); - if (hs.safari) b.style.visibility = 'visible'; + var b = this.overlayBox; + b.className = ''; + hs.setStyles(b, { + top: (this.y.p1 + this.y.cb) +'px', + left: (this.x.p1 + this.x.cb) +'px', + overflow : 'visible' + }); + if (hs.safari) b.style.visibility = 'visible'; this.wrapper.appendChild (b); - for (var i = 0; i < this.overlays.length; i++) { - var o = hs.$('hsId'+ this.overlays[i]); - o.style.zIndex = o.zIndex || 4; - if (!o.hideOnMouseOut || this.mouseIsOver) { - o.style.visibility = 'visible'; - hs.setStyles(o, { visibility: 'visible', display: '' }); - hs.animate(o, { opacity: o.opacity }, o.dur); - } - } -}, - -destroyOverlays : function() { - if (!this.overlays.length) return; - hs.discardElement(this.overlayBox); -}, - - - -createFullExpand : function () { - this.fullExpandLabel = hs.createElement( - 'a', { - href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', - title: hs.lang.fullExpandTitle, - className: 'highslide-full-expand' - } - ); - - this.createOverlay({ - overlayId: this.fullExpandLabel, - position: hs.fullExpandPosition, - hideOnMouseOut: true, - opacity: hs.fullExpandOpacity - }); -}, - -doFullExpand : function () { - try { - if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); - - this.focus(); - var xSize = this.x.size, - ySize = this.y.size; - this.resizeTo(this.x.full, this.y.full); - - var xpos = this.x.pos - (this.x.size - xSize) / 2; - if (xpos < hs.marginLeft) xpos = hs.marginLeft; - - var ypos = this.y.pos - (this.y.size - ySize) / 2; - if (ypos < hs.marginTop) ypos = hs.marginTop; - - this.moveTo(xpos, ypos); - this.doShowHide('hidden'); - - } catch (e) { - this.error(e); - } -}, - - -afterClose : function () { - this.a.className = this.a.className.replace('highslide-active-anchor', ''); - - this.doShowHide('visible'); - if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); - - hs.discardElement(this.wrapper); - - hs.expanders[this.key] = null; - hs.reOrder(); -} - + for (var i = 0; i < this.overlays.length; i++) { + var o = hs.$('hsId'+ this.overlays[i]); + o.style.zIndex = o.zIndex || 4; + if (!o.hideOnMouseOut || this.mouseIsOver) { + o.style.visibility = 'visible'; + hs.setStyles(o, { visibility: 'visible', display: '' }); + hs.animate(o, { opacity: o.opacity }, o.dur); + } + } +}, + +destroyOverlays : function() { + if (!this.overlays.length) return; + hs.discardElement(this.overlayBox); +}, + + + +createFullExpand : function () { + this.fullExpandLabel = hs.createElement( + 'a', { + href: 'javascript:hs.expanders['+ this.key +'].doFullExpand();', + title: hs.lang.fullExpandTitle, + className: 'highslide-full-expand' + } + ); + + this.createOverlay({ + overlayId: this.fullExpandLabel, + position: hs.fullExpandPosition, + hideOnMouseOut: true, + opacity: hs.fullExpandOpacity + }); +}, + +doFullExpand : function () { + try { + if (this.fullExpandLabel) hs.discardElement(this.fullExpandLabel); + + this.focus(); + var xSize = this.x.size, + ySize = this.y.size; + this.resizeTo(this.x.full, this.y.full); + + var xpos = this.x.pos - (this.x.size - xSize) / 2; + if (xpos < hs.marginLeft) xpos = hs.marginLeft; + + var ypos = this.y.pos - (this.y.size - ySize) / 2; + if (ypos < hs.marginTop) ypos = hs.marginTop; + + this.moveTo(xpos, ypos); + this.doShowHide('hidden'); + + } catch (e) { + this.error(e); + } +}, + + +afterClose : function () { + this.a.className = this.a.className.replace('highslide-active-anchor', ''); + + this.doShowHide('visible'); + if (this.outline && this.outlineWhileAnimating) this.outline.destroy(); + + hs.discardElement(this.wrapper); + + hs.expanders[this.key] = null; + hs.reOrder(); +} + }; -hs.langDefaults = hs.lang; -// history +hs.langDefaults = hs.lang; +// history var HsExpander = hs.Expander; if (hs.ie && window == window.top) { - (function () { - try { - document.documentElement.doScroll('left'); - } catch (e) { - setTimeout(arguments.callee, 50); - return; - } - hs.ready(); - })(); -} + (function () { + try { + document.documentElement.doScroll('left'); + } catch (e) { + setTimeout(arguments.callee, 50); + return; + } + hs.ready(); + })(); +} hs.addEventListener(document, 'DOMContentLoaded', hs.ready); hs.addEventListener(window, 'load', hs.ready); - + // set handlers -hs.addEventListener(document, 'ready', function() { - if (hs.expandCursor) { - var style = hs.createElement('style', { type: 'text/css' }, null, - document.getElementsByTagName('HEAD')[0]), - backCompat = document.compatMode == 'BackCompat'; - - - function addRule(sel, dec) { - if (hs.ie && (hs.uaVersion < 9 || backCompat)) { - var last = document.styleSheets[document.styleSheets.length - 1]; - if (typeof(last.addRule) == "object") last.addRule(sel, dec); - } else { - style.appendChild(document.createTextNode(sel + " {" + dec + "}")); - } - } - function fix(prop) { - return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + - ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; +hs.addEventListener(document, 'ready', function() { + if (hs.expandCursor) { + var style = hs.createElement('style', { type: 'text/css' }, null, + document.getElementsByTagName('HEAD')[0]), + backCompat = document.compatMode == 'BackCompat'; + + + function addRule(sel, dec) { + if (hs.ie && (hs.uaVersion < 9 || backCompat)) { + var last = document.styleSheets[document.styleSheets.length - 1]; + if (typeof(last.addRule) == "object") last.addRule(sel, dec); + } else { + style.appendChild(document.createTextNode(sel + " {" + dec + "}")); + } + } + function fix(prop) { + return 'expression( ( ( ignoreMe = document.documentElement.'+ prop + + ' ? document.documentElement.'+ prop +' : document.body.'+ prop +' ) ) + \'px\' );'; } - if (hs.expandCursor) addRule ('.highslide img', - 'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); - } -}); -hs.addEventListener(window, 'resize', function() { - hs.getPageSize(); -}); -hs.addEventListener(document, 'mousemove', function(e) { - hs.mouse = { x: e.clientX, y: e.clientY }; -}); -hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); -hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); - -hs.addEventListener(document, 'ready', hs.getAnchors); -hs.addEventListener(window, 'load', hs.preloadImages); -} + if (hs.expandCursor) addRule ('.highslide img', + 'cursor: url('+ hs.graphicsDir + hs.expandCursor +'), pointer !important;'); + } +}); +hs.addEventListener(window, 'resize', function() { + hs.getPageSize(); +}); +hs.addEventListener(document, 'mousemove', function(e) { + hs.mouse = { x: e.clientX, y: e.clientY }; +}); +hs.addEventListener(document, 'mousedown', hs.mouseClickHandler); +hs.addEventListener(document, 'mouseup', hs.mouseClickHandler); + +hs.addEventListener(document, 'ready', hs.getAnchors); +hs.addEventListener(window, 'load', hs.preloadImages); +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.min.js index 2437ab7cb4fd391b012eb33a331b71524147e24b..44e11b9c58bbf8516fb3e04613a402c3d6c55373 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.min.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.min.js @@ -1,9 +1,9 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) * Config: default - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ if(!hs){var hs={lang:{cssDirection:"ltr",loadingText:"Loading...",loadingTitle:"Click to cancel",focusTitle:"Click to bring to front",fullExpandTitle:"Expand to actual size (f)",creditsText:"Powered by <i>Highslide JS</i>",creditsTitle:"Go to the Highslide JS homepage",restoreTitle:"Click to close image, click and drag to move. Use arrow keys for next and previous."},graphicsDir:"highslide/graphics/",expandCursor:"zoomin.cur",restoreCursor:"zoomout.cur",expandDuration:250,restoreDuration:250,marginLeft:15,marginRight:15,marginTop:15,marginBottom:15,zIndexCounter:1001,loadingOpacity:0.75,allowMultipleInstances:true,numberOfImagesToPreload:5,outlineWhileAnimating:2,outlineStartOffset:3,padToMinWidth:false,fullExpandPosition:"bottom right",fullExpandOpacity:1,showCredits:true,creditsHref:"http://highslide.com/",creditsTarget:"_self",enableKeyListener:true,openerTagNames:["a"],dragByHeading:true,minWidth:200,minHeight:200,allowSizeReduction:true,outlineType:"drop-shadow",preloadTheseImages:[],continuePreloading:true,expanders:[],overrides:["allowSizeReduction","useBox","outlineType","outlineWhileAnimating","captionId","captionText","captionEval","captionOverlay","headingId","headingText","headingEval","headingOverlay","creditsPosition","dragByHeading","width","height","wrapperClassName","minWidth","minHeight","maxWidth","maxHeight","pageOrigin","slideshowGroup","easing","easingClose","fadeInOut","src"],overlays:[],idCounter:0,oPos:{x:["leftpanel","left","center","right","rightpanel"],y:["above","top","middle","bottom","below"]},mouse:{},headingOverlay:{},captionOverlay:{},timers:[],pendingOutlines:{},clones:{},onReady:[],uaVersion:/Trident\/4\.0/.test(navigator.userAgent)?8:parseFloat((navigator.userAgent.toLowerCase().match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1]),ie:(document.all&&!window.opera),safari:/Safari/.test(navigator.userAgent),geckoMac:/Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent),$:function(a){if(a){return document.getElementById(a)}},push:function(a,b){a[a.length]=b},createElement:function(a,f,e,d,c){var b=document.createElement(a);if(f){hs.extend(b,f)}if(c){hs.setStyles(b,{padding:0,border:"none",margin:0})}if(e){hs.setStyles(b,e)}if(d){d.appendChild(b)}return b},extend:function(b,c){for(var a in c){b[a]=c[a]}return b},setStyles:function(b,c){for(var a in c){if(hs.ieLt9&&a=="opacity"){if(c[a]>0.99){b.style.removeAttribute("filter")}else{b.style.filter="alpha(opacity="+(c[a]*100)+")"}}else{b.style[a]=c[a]}}},animate:function(f,a,d){var c,g,j;if(typeof d!="object"||d===null){var i=arguments;d={duration:i[2],easing:i[3],complete:i[4]}}if(typeof d.duration!="number"){d.duration=250}d.easing=Math[d.easing]||Math.easeInQuad;d.curAnim=hs.extend({},a);for(var b in a){var h=new hs.fx(f,d,b);c=parseFloat(hs.css(f,b))||0;g=parseFloat(a[b]);j=b!="opacity"?"px":"";h.custom(c,g,j)}},css:function(a,c){if(a.style[c]){return a.style[c]}else{if(document.defaultView){return document.defaultView.getComputedStyle(a,null).getPropertyValue(c)}else{if(c=="opacity"){c="filter"}var b=a.currentStyle[c.replace(/\-(\w)/g,function(e,d){return d.toUpperCase()})];if(c=="filter"){b=b.replace(/alpha\(opacity=([0-9]+)\)/,function(e,d){return d/100})}return b===""?1:b}}},getPageSize:function(){var f=document,b=window,e=f.compatMode&&f.compatMode!="BackCompat"?f.documentElement:f.body,g=hs.ie&&(hs.uaVersion<9||typeof pageXOffset=="undefined");var c=g?e.clientWidth:(f.documentElement.clientWidth||self.innerWidth),a=g?e.clientHeight:self.innerHeight;hs.page={width:c,height:a,scrollLeft:g?e.scrollLeft:pageXOffset,scrollTop:g?e.scrollTop:pageYOffset};return hs.page},getPosition:function(a){var b={x:a.offsetLeft,y:a.offsetTop};while(a.offsetParent){a=a.offsetParent;b.x+=a.offsetLeft;b.y+=a.offsetTop;if(a!=document.body&&a!=document.documentElement){b.x-=a.scrollLeft;b.y-=a.scrollTop}}return b},expand:function(b,g,d,c){if(!b){b=hs.createElement("a",null,{display:"none"},hs.container)}if(typeof b.getParams=="function"){return g}try{new hs.Expander(b,g,d);return false}catch(f){return true}},focusTopmost:function(){var c=0,b=-1,a=hs.expanders,e,f;for(var d=0;d<a.length;d++){e=a[d];if(e){f=e.wrapper.style.zIndex;if(f&&f>c){c=f;b=d}}}if(b==-1){hs.focusKey=-1}else{a[b].focus()}},getParam:function(b,d){b.getParams=b.onclick;var c=b.getParams?b.getParams():null;b.getParams=null;return(c&&typeof c[d]!="undefined")?c[d]:(typeof hs[d]!="undefined"?hs[d]:null)},getSrc:function(b){var c=hs.getParam(b,"src");if(c){return c}return b.href},getNode:function(e){var c=hs.$(e),d=hs.clones[e],b={};if(!c&&!d){return null}if(!d){d=c.cloneNode(true);d.id="";hs.clones[e]=d;return c}else{return d.cloneNode(true)}},discardElement:function(a){if(a){hs.garbageBin.appendChild(a)}hs.garbageBin.innerHTML=""},transit:function(a,d){var b=d||hs.getExpander();d=b;if(hs.upcoming){return false}else{hs.last=b}hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{hs.upcoming=a;a.onclick()}catch(c){hs.last=hs.upcoming=null}try{d.close()}catch(c){}return false},previousOrNext:function(a,c){var b=hs.getExpander(a);if(b){return hs.transit(b.getAdjacentAnchor(c),b)}else{return false}},previous:function(a){return hs.previousOrNext(a,-1)},next:function(a){return hs.previousOrNext(a,1)},keyHandler:function(a){if(!a){a=window.event}if(!a.target){a.target=a.srcElement}if(typeof a.target.form!="undefined"){return true}var b=hs.getExpander();var c=null;switch(a.keyCode){case 70:if(b){b.doFullExpand()}return true;case 32:case 34:case 39:case 40:c=1;break;case 8:case 33:case 37:case 38:c=-1;break;case 27:case 13:c=0}if(c!==null){hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);if(!hs.enableKeyListener){return true}if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}if(b){if(c==0){b.close()}else{hs.previousOrNext(b.key,c)}return false}}return true},registerOverlay:function(a){hs.push(hs.overlays,hs.extend(a,{hsId:"hsId"+hs.idCounter++}))},getWrapperKey:function(c,b){var e,d=/^highslide-wrapper-([0-9]+)$/;e=c;while(e.parentNode){if(e.id&&d.test(e.id)){return e.id.replace(d,"$1")}e=e.parentNode}if(!b){e=c;while(e.parentNode){if(e.tagName&&hs.isHsAnchor(e)){for(var a=0;a<hs.expanders.length;a++){var f=hs.expanders[a];if(f&&f.a==e){return a}}}e=e.parentNode}}return null},getExpander:function(b,a){if(typeof b=="undefined"){return hs.expanders[hs.focusKey]||null}if(typeof b=="number"){return hs.expanders[b]||null}if(typeof b=="string"){b=hs.$(b)}return hs.expanders[hs.getWrapperKey(b,a)]||null},isHsAnchor:function(b){return(b.onclick&&b.onclick.toString().replace(/\s/g," ").match(/hs.(htmlE|e)xpand/))},reOrder:function(){for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&hs.expanders[a].isExpanded){hs.focusTopmost()}}},mouseClickHandler:function(d){if(!d){d=window.event}if(d.button>1){return true}if(!d.target){d.target=d.srcElement}var b=d.target;while(b.parentNode&&!(/highslide-(image|move|html|resize)/.test(b.className))){b=b.parentNode}var f=hs.getExpander(b);if(f&&(f.isClosing||!f.isExpanded)){return true}if(f&&d.type=="mousedown"){if(d.target.form){return true}var a=b.className.match(/highslide-(image|move|resize)/);if(a){hs.dragArgs={exp:f,type:a[1],left:f.x.pos,width:f.x.size,top:f.y.pos,height:f.y.size,clickX:d.clientX,clickY:d.clientY};hs.addEventListener(document,"mousemove",hs.dragHandler);if(d.preventDefault){d.preventDefault()}if(/highslide-(image|html)-blur/.test(f.content.className)){f.focus();hs.hasFocused=true}return false}}else{if(d.type=="mouseup"){hs.removeEventListener(document,"mousemove",hs.dragHandler);if(hs.dragArgs){if(hs.styleRestoreCursor&&hs.dragArgs.type=="image"){hs.dragArgs.exp.content.style.cursor=hs.styleRestoreCursor}var c=hs.dragArgs.hasDragged;if(!c&&!hs.hasFocused&&!/(move|resize)/.test(hs.dragArgs.type)){f.close()}else{if(c||(!c&&hs.hasHtmlExpanders)){hs.dragArgs.exp.doShowHide("hidden")}}hs.hasFocused=false;hs.dragArgs=null}else{if(/highslide-image-blur/.test(b.className)){b.style.cursor=hs.styleRestoreCursor}}}}return false},dragHandler:function(c){if(!hs.dragArgs){return true}if(!c){c=window.event}var b=hs.dragArgs,d=b.exp;b.dX=c.clientX-b.clickX;b.dY=c.clientY-b.clickY;var f=Math.sqrt(Math.pow(b.dX,2)+Math.pow(b.dY,2));if(!b.hasDragged){b.hasDragged=(b.type!="image"&&f>0)||(f>(hs.dragSensitivity||5))}if(b.hasDragged&&c.clientX>5&&c.clientY>5){if(b.type=="resize"){d.resize(b)}else{d.moveTo(b.left+b.dX,b.top+b.dY);if(b.type=="image"){d.content.style.cursor="move"}}}return false},wrapperMouseHandler:function(c){try{if(!c){c=window.event}var b=/mouseover/i.test(c.type);if(!c.target){c.target=c.srcElement}if(!c.relatedTarget){c.relatedTarget=b?c.fromElement:c.toElement}var d=hs.getExpander(c.target);if(!d.isExpanded){return}if(!d||!c.relatedTarget||hs.getExpander(c.relatedTarget,true)==d||hs.dragArgs){return}for(var a=0;a<d.overlays.length;a++){(function(){var e=hs.$("hsId"+d.overlays[a]);if(e&&e.hideOnMouseOut){if(b){hs.setStyles(e,{visibility:"visible",display:""})}hs.animate(e,{opacity:b?e.opacity:0},e.dur)}})()}}catch(c){}},addEventListener:function(a,c,b){if(a==document&&c=="ready"){hs.push(hs.onReady,b)}try{a.addEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b);a.attachEvent("on"+c,b)}catch(d){a["on"+c]=b}}},removeEventListener:function(a,c,b){try{a.removeEventListener(c,b,false)}catch(d){try{a.detachEvent("on"+c,b)}catch(d){a["on"+c]=null}}},preloadFullImage:function(b){if(hs.continuePreloading&&hs.preloadTheseImages[b]&&hs.preloadTheseImages[b]!="undefined"){var a=document.createElement("img");a.onload=function(){a=null;hs.preloadFullImage(b+1)};a.src=hs.preloadTheseImages[b]}},preloadImages:function(c){if(c&&typeof c!="object"){hs.numberOfImagesToPreload=c}var a=hs.getAnchors();for(var b=0;b<a.images.length&&b<hs.numberOfImagesToPreload;b++){hs.push(hs.preloadTheseImages,hs.getSrc(a.images[b]))}if(hs.outlineType){new hs.Outline(hs.outlineType,function(){hs.preloadFullImage(0)})}else{hs.preloadFullImage(0)}if(hs.restoreCursor){var d=hs.createElement("img",{src:hs.graphicsDir+hs.restoreCursor})}},init:function(){if(!hs.container){hs.ieLt7=hs.ie&&hs.uaVersion<7;hs.ieLt9=hs.ie&&hs.uaVersion<9;hs.getPageSize();for(var a in hs.langDefaults){if(typeof hs[a]!="undefined"){hs.lang[a]=hs[a]}else{if(typeof hs.lang[a]=="undefined"&&typeof hs.langDefaults[a]!="undefined"){hs.lang[a]=hs.langDefaults[a]}}}hs.container=hs.createElement("div",{className:"highslide-container"},{position:"absolute",left:0,top:0,width:"100%",zIndex:hs.zIndexCounter,direction:"ltr"},document.body,true);hs.loading=hs.createElement("a",{className:"highslide-loading",title:hs.lang.loadingTitle,innerHTML:hs.lang.loadingText,href:"javascript:;"},{position:"absolute",top:"-9999px",opacity:hs.loadingOpacity,zIndex:1},hs.container);hs.garbageBin=hs.createElement("div",null,{display:"none"},hs.container);Math.linearTween=function(f,e,h,g){return h*f/g+e};Math.easeInQuad=function(f,e,h,g){return h*(f/=g)*f+e};hs.hideSelects=hs.ieLt7;hs.hideIframes=((window.opera&&hs.uaVersion<9)||navigator.vendor=="KDE"||(hs.ieLt7&&hs.uaVersion<5.5))}},ready:function(){if(hs.isReady){return}hs.isReady=true;for(var a=0;a<hs.onReady.length;a++){hs.onReady[a]()}},updateAnchors:function(){var a,c,k=[],h=[],b={},l;for(var e=0;e<hs.openerTagNames.length;e++){c=document.getElementsByTagName(hs.openerTagNames[e]);for(var d=0;d<c.length;d++){a=c[d];l=hs.isHsAnchor(a);if(l){hs.push(k,a);if(l[0]=="hs.expand"){hs.push(h,a)}var f=hs.getParam(a,"slideshowGroup")||"none";if(!b[f]){b[f]=[]}hs.push(b[f],a)}}}hs.anchors={all:k,groups:b,images:h};return hs.anchors},getAnchors:function(){return hs.anchors||hs.updateAnchors()},close:function(a){var b=hs.getExpander(a);if(b){b.close()}return false}};hs.fx=function(b,a,c){this.options=a;this.elem=b;this.prop=c;if(!a.orig){a.orig={}}};hs.fx.prototype={update:function(){(hs.fx.step[this.prop]||hs.fx.step._default)(this);if(this.options.step){this.options.step.call(this.elem,this.now,this)}},custom:function(e,d,c){this.startTime=(new Date()).getTime();this.start=e;this.end=d;this.unit=c;this.now=this.start;this.pos=this.state=0;var a=this;function b(f){return a.step(f)}b.elem=this.elem;if(b()&&hs.timers.push(b)==1){hs.timerId=setInterval(function(){var g=hs.timers;for(var f=0;f<g.length;f++){if(!g[f]()){g.splice(f--,1)}}if(!g.length){clearInterval(hs.timerId)}},13)}},step:function(d){var c=(new Date()).getTime();if(d||c>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var a=true;for(var b in this.options.curAnim){if(this.options.curAnim[b]!==true){a=false}}if(a){if(this.options.complete){this.options.complete.call(this.elem)}}return false}else{var e=c-this.startTime;this.state=e/this.options.duration;this.pos=this.options.easing(e,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};hs.extend(hs.fx,{step:{opacity:function(a){hs.setStyles(a.elem,{opacity:a.now})},_default:function(a){try{if(a.elem.style&&a.elem.style[a.prop]!=null){a.elem.style[a.prop]=a.now+a.unit}else{a.elem[a.prop]=a.now}}catch(b){}}}});hs.Outline=function(g,e){this.onLoad=e;this.outlineType=g;var a=hs.uaVersion,f;this.hasAlphaImageLoader=hs.ie&&hs.uaVersion<7;if(!g){if(e){e()}return}hs.init();this.table=hs.createElement("table",{cellSpacing:0},{visibility:"hidden",position:"absolute",borderCollapse:"collapse",width:0},hs.container,true);var b=hs.createElement("tbody",null,null,this.table,1);this.td=[];for(var c=0;c<=8;c++){if(c%3==0){f=hs.createElement("tr",null,{height:"auto"},b,true)}this.td[c]=hs.createElement("td",null,null,f,true);var d=c!=4?{lineHeight:0,fontSize:0}:{position:"relative"};hs.setStyles(this.td[c],d)}this.td[4].className=g+" highslide-outline";this.preloadGraphic()};hs.Outline.prototype={preloadGraphic:function(){var b=hs.graphicsDir+(hs.outlinesDir||"outlines/")+this.outlineType+".png";var a=hs.safari&&hs.uaVersion<525?hs.container:null;this.graphic=hs.createElement("img",null,{position:"absolute",top:"-9999px"},a,true);var c=this;this.graphic.onload=function(){c.onGraphicLoad()};this.graphic.src=b},onGraphicLoad:function(){var d=this.offset=this.graphic.width/4,f=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],c={height:(2*d)+"px",width:(2*d)+"px"};for(var b=0;b<=8;b++){if(f[b]){if(this.hasAlphaImageLoader){var a=(b==1||b==7)?"100%":this.graphic.width+"px";var e=hs.createElement("div",null,{width:"100%",height:"100%",position:"relative",overflow:"hidden"},this.td[b],true);hs.createElement("div",null,{filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='"+this.graphic.src+"')",position:"absolute",width:a,height:this.graphic.height+"px",left:(f[b][0]*d)+"px",top:(f[b][1]*d)+"px"},e,true)}else{hs.setStyles(this.td[b],{background:"url("+this.graphic.src+") "+(f[b][0]*d)+"px "+(f[b][1]*d)+"px"})}if(window.opera&&(b==3||b==5)){hs.createElement("div",null,c,this.td[b],true)}hs.setStyles(this.td[b],c)}}this.graphic=null;if(hs.pendingOutlines[this.outlineType]){hs.pendingOutlines[this.outlineType].destroy()}hs.pendingOutlines[this.outlineType]=this;if(this.onLoad){this.onLoad()}},setPosition:function(g,e,c,b,f){var d=this.exp,a=d.wrapper.style,e=e||0,g=g||{x:d.x.pos+e,y:d.y.pos+e,w:d.x.get("wsize")-2*e,h:d.y.get("wsize")-2*e};if(c){this.table.style.visibility=(g.h>=4*this.offset)?"visible":"hidden"}hs.setStyles(this.table,{left:(g.x-this.offset)+"px",top:(g.y-this.offset)+"px",width:(g.w+2*this.offset)+"px"});g.w-=2*this.offset;g.h-=2*this.offset;hs.setStyles(this.td[4],{width:g.w>=0?g.w+"px":0,height:g.h>=0?g.h+"px":0});if(this.hasAlphaImageLoader){this.td[3].style.height=this.td[5].style.height=this.td[4].style.height}},destroy:function(a){if(a){this.table.style.visibility="hidden"}else{hs.discardElement(this.table)}}};hs.Dimension=function(b,a){this.exp=b;this.dim=a;this.ucwh=a=="x"?"Width":"Height";this.wh=this.ucwh.toLowerCase();this.uclt=a=="x"?"Left":"Top";this.lt=this.uclt.toLowerCase();this.ucrb=a=="x"?"Right":"Bottom";this.rb=this.ucrb.toLowerCase();this.p1=this.p2=0};hs.Dimension.prototype={get:function(a){switch(a){case"loadingPos":return this.tpos+this.tb+(this.t-hs.loading["offset"+this.ucwh])/2;case"wsize":return this.size+2*this.cb+this.p1+this.p2;case"fitsize":return this.clientSize-this.marginMin-this.marginMax;case"maxsize":return this.get("fitsize")-2*this.cb-this.p1-this.p2;case"opos":return this.pos-(this.exp.outline?this.exp.outline.offset:0);case"osize":return this.get("wsize")+(this.exp.outline?2*this.exp.outline.offset:0);case"imgPad":return this.imgSize?Math.round((this.size-this.imgSize)/2):0}},calcBorders:function(){this.cb=(this.exp.content["offset"+this.ucwh]-this.t)/2;this.marginMax=hs["margin"+this.ucrb]},calcThumb:function(){this.t=this.exp.el[this.wh]?parseInt(this.exp.el[this.wh]):this.exp.el["offset"+this.ucwh];this.tpos=this.exp.tpos[this.dim];this.tb=(this.exp.el["offset"+this.ucwh]-this.t)/2;if(this.tpos==0||this.tpos==-1){this.tpos=(hs.page[this.wh]/2)+hs.page["scroll"+this.uclt]}},calcExpanded:function(){var a=this.exp;this.justify="auto";this.pos=this.tpos-this.cb+this.tb;if(this.maxHeight&&this.dim=="x"){a.maxWidth=Math.min(a.maxWidth||this.full,a.maxHeight*this.full/a.y.full)}this.size=Math.min(this.full,a["max"+this.ucwh]||this.full);this.minSize=a.allowSizeReduction?Math.min(a["min"+this.ucwh],this.full):this.full;if(a.isImage&&a.useBox){this.size=a[this.wh];this.imgSize=this.full}if(this.dim=="x"&&hs.padToMinWidth){this.minSize=a.minWidth}this.marginMin=hs["margin"+this.uclt];this.scroll=hs.page["scroll"+this.uclt];this.clientSize=hs.page[this.wh]},setSize:function(a){var b=this.exp;if(b.isImage&&(b.useBox||hs.padToMinWidth)){this.imgSize=a;this.size=Math.max(this.size,this.imgSize);b.content.style[this.lt]=this.get("imgPad")+"px"}else{this.size=a}b.content.style[this.wh]=a+"px";b.wrapper.style[this.wh]=this.get("wsize")+"px";if(b.outline){b.outline.setPosition()}if(this.dim=="x"&&b.overlayBox){b.sizeOverlayBox(true)}},setPos:function(a){this.pos=a;this.exp.wrapper.style[this.lt]=a+"px";if(this.exp.outline){this.exp.outline.setPosition()}}};hs.Expander=function(k,f,b,l){if(document.readyState&&hs.ie&&!hs.isReady){hs.addEventListener(document,"ready",function(){new hs.Expander(k,f,b,l)});return}this.a=k;this.custom=b;this.contentType=l||"image";this.isImage=!this.isHtml;hs.continuePreloading=false;this.overlays=[];hs.init();var m=this.key=hs.expanders.length;for(var g=0;g<hs.overrides.length;g++){var c=hs.overrides[g];this[c]=f&&typeof f[c]!="undefined"?f[c]:hs[c]}if(!this.src){this.src=k.href}var d=(f&&f.thumbnailId)?hs.$(f.thumbnailId):k;d=this.thumb=d.getElementsByTagName("img")[0]||d;this.thumbsUserSetId=d.id||k.id;for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].a==k){hs.expanders[g].focus();return false}}if(!hs.allowSimultaneousLoading){for(var g=0;g<hs.expanders.length;g++){if(hs.expanders[g]&&hs.expanders[g].thumb!=d&&!hs.expanders[g].onLoadStarted){hs.expanders[g].cancelLoading()}}}hs.expanders[m]=this;if(!hs.allowMultipleInstances&&!hs.upcoming){if(hs.expanders[m-1]){hs.expanders[m-1].close()}if(typeof hs.focusKey!="undefined"&&hs.expanders[hs.focusKey]){hs.expanders[hs.focusKey].close()}}this.el=d;this.tpos=this.pageOrigin||hs.getPosition(d);hs.getPageSize();var j=this.x=new hs.Dimension(this,"x");j.calcThumb();var h=this.y=new hs.Dimension(this,"y");h.calcThumb();this.wrapper=hs.createElement("div",{id:"highslide-wrapper-"+this.key,className:"highslide-wrapper "+this.wrapperClassName},{visibility:"hidden",position:"absolute",zIndex:hs.zIndexCounter+=2},null,true);this.wrapper.onmouseover=this.wrapper.onmouseout=hs.wrapperMouseHandler;if(this.contentType=="image"&&this.outlineWhileAnimating==2){this.outlineWhileAnimating=0}if(!this.outlineType){this[this.contentType+"Create"]()}else{if(hs.pendingOutlines[this.outlineType]){this.connectOutline();this[this.contentType+"Create"]()}else{this.showLoading();var e=this;new hs.Outline(this.outlineType,function(){e.connectOutline();e[e.contentType+"Create"]()})}}return true};hs.Expander.prototype={error:function(a){if(hs.debug){alert("Line "+a.lineNumber+": "+a.message)}else{window.location.href=this.src}},connectOutline:function(){var a=this.outline=hs.pendingOutlines[this.outlineType];a.exp=this;a.table.style.zIndex=this.wrapper.style.zIndex-1;hs.pendingOutlines[this.outlineType]=null},showLoading:function(){if(this.onLoadStarted||this.loading){return}this.loading=hs.loading;var c=this;this.loading.onclick=function(){c.cancelLoading()};var c=this,a=this.x.get("loadingPos")+"px",b=this.y.get("loadingPos")+"px";setTimeout(function(){if(c.loading){hs.setStyles(c.loading,{left:a,top:b,zIndex:hs.zIndexCounter++})}},100)},imageCreate:function(){var b=this;var a=document.createElement("img");this.content=a;a.onload=function(){if(hs.expanders[b.key]){b.contentLoaded()}};if(hs.blockRightClick){a.oncontextmenu=function(){return false}}a.className="highslide-image";hs.setStyles(a,{visibility:"hidden",display:"block",position:"absolute",maxWidth:"9999px",zIndex:3});a.title=hs.lang.restoreTitle;if(hs.safari&&hs.uaVersion<525){hs.container.appendChild(a)}if(hs.ie&&hs.flushImgSize){a.src=null}a.src=this.src;this.showLoading()},contentLoaded:function(){try{if(!this.content){return}this.content.onload=null;if(this.onLoadStarted){return}else{this.onLoadStarted=true}var a=this.x,d=this.y;if(this.loading){hs.setStyles(this.loading,{top:"-9999px"});this.loading=null}a.full=this.content.width;d.full=this.content.height;hs.setStyles(this.content,{width:a.t+"px",height:d.t+"px"});this.wrapper.appendChild(this.content);hs.container.appendChild(this.wrapper);a.calcBorders();d.calcBorders();hs.setStyles(this.wrapper,{left:(a.tpos+a.tb-a.cb)+"px",top:(d.tpos+a.tb-d.cb)+"px"});this.getOverlays();var b=a.full/d.full;a.calcExpanded();this.justify(a);d.calcExpanded();this.justify(d);if(this.overlayBox){this.sizeOverlayBox(0,1)}if(this.allowSizeReduction){this.correctRatio(b);if(this.isImage&&this.x.full>(this.x.imgSize||this.x.size)){this.createFullExpand();if(this.overlays.length==1){this.sizeOverlayBox()}}}this.show()}catch(c){this.error(c)}},justify:function(f,b){var g,h=f.target,e=f==this.x?"x":"y";var d=false;var a=f.exp.allowSizeReduction;f.pos=Math.round(f.pos-((f.get("wsize")-f.t)/2));if(f.pos<f.scroll+f.marginMin){f.pos=f.scroll+f.marginMin;d=true}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}if(f.pos+f.get("wsize")>f.scroll+f.clientSize-f.marginMax){if(!b&&d&&a){f.size=Math.min(f.size,f.get(e=="y"?"fitsize":"maxsize"))}else{if(f.get("wsize")<f.get("fitsize")){f.pos=f.scroll+f.clientSize-f.marginMax-f.get("wsize")}else{f.pos=f.scroll+f.marginMin;if(!b&&a){f.size=f.get(e=="y"?"fitsize":"maxsize")}}}}if(!b&&f.size<f.minSize){f.size=f.minSize;a=false}if(f.pos<f.marginMin){var c=f.pos;f.pos=f.marginMin;if(a&&!b){f.size=f.size-(f.pos-c)}}},correctRatio:function(c){var a=this.x,g=this.y,e=false,d=Math.min(a.full,a.size),b=Math.min(g.full,g.size),f=(this.useBox||hs.padToMinWidth);if(d/b>c){d=b*c;if(d<a.minSize){d=a.minSize;b=d/c}e=true}else{if(d/b<c){b=d/c;e=true}}if(hs.padToMinWidth&&a.full<a.minSize){a.imgSize=a.full;g.size=g.imgSize=g.full}else{if(this.useBox){a.imgSize=d;g.imgSize=b}else{a.size=d;g.size=b}}e=this.fitOverlayBox(this.useBox?null:c,e);if(f&&g.size<g.imgSize){g.imgSize=g.size;a.imgSize=g.size*c}if(e||f){a.pos=a.tpos-a.cb+a.tb;a.minSize=a.size;this.justify(a,true);g.pos=g.tpos-g.cb+g.tb;g.minSize=g.size;this.justify(g,true);if(this.overlayBox){this.sizeOverlayBox()}}},fitOverlayBox:function(b,c){var a=this.x,d=this.y;if(this.overlayBox){while(d.size>this.minHeight&&a.size>this.minWidth&&d.get("wsize")>d.get("fitsize")){d.size-=10;if(b){a.size=d.size*b}this.sizeOverlayBox(0,1);c=true}}return c},show:function(){var a=this.x,b=this.y;this.doShowHide("hidden");this.changeSize(1,{wrapper:{width:a.get("wsize"),height:b.get("wsize"),left:a.pos,top:b.pos},content:{left:a.p1+a.get("imgPad"),top:b.p1+b.get("imgPad"),width:a.imgSize||a.size,height:b.imgSize||b.size}},hs.expandDuration)},changeSize:function(b,h,c){if(this.outline&&!this.outlineWhileAnimating){if(b){this.outline.setPosition()}else{this.outline.destroy()}}if(!b){this.destroyOverlays()}var e=this,a=e.x,g=e.y,f=this.easing;if(!b){f=this.easingClose||f}var d=b?function(){if(e.outline){e.outline.table.style.visibility="visible"}setTimeout(function(){e.afterExpand()},50)}:function(){e.afterClose()};if(b){hs.setStyles(this.wrapper,{width:a.t+"px",height:g.t+"px"})}if(this.fadeInOut){hs.setStyles(this.wrapper,{opacity:b?0:1});hs.extend(h.wrapper,{opacity:b})}hs.animate(this.wrapper,h.wrapper,{duration:c,easing:f,step:function(k,i){if(e.outline&&e.outlineWhileAnimating&&i.prop=="top"){var j=b?i.pos:1-i.pos;var l={w:a.t+(a.get("wsize")-a.t)*j,h:g.t+(g.get("wsize")-g.t)*j,x:a.tpos+(a.pos-a.tpos)*j,y:g.tpos+(g.pos-g.tpos)*j};e.outline.setPosition(l,0,1)}}});hs.animate(this.content,h.content,c,f,d);if(b){this.wrapper.style.visibility="visible";this.content.style.visibility="visible";this.a.className+=" highslide-active-anchor"}},afterExpand:function(){this.isExpanded=true;this.focus();if(hs.upcoming&&hs.upcoming==this.a){hs.upcoming=null}this.prepareNextOutline();var c=hs.page,b=hs.mouse.x+c.scrollLeft,a=hs.mouse.y+c.scrollTop;this.mouseIsOver=this.x.pos<b&&b<this.x.pos+this.x.get("wsize")&&this.y.pos<a&&a<this.y.pos+this.y.get("wsize");if(this.overlayBox){this.showOverlays()}},prepareNextOutline:function(){var a=this.key;var b=this.outlineType;new hs.Outline(b,function(){try{hs.expanders[a].preloadNext()}catch(c){}})},preloadNext:function(){var b=this.getAdjacentAnchor(1);if(b&&b.onclick.toString().match(/hs\.expand/)){var a=hs.createElement("img",{src:hs.getSrc(b)})}},getAdjacentAnchor:function(c){var b=this.getAnchorIndex(),a=hs.anchors.groups[this.slideshowGroup||"none"];return(a&&a[b+c])||null},getAnchorIndex:function(){var a=hs.getAnchors().groups[this.slideshowGroup||"none"];if(a){for(var b=0;b<a.length;b++){if(a[b]==this.a){return b}}}return null},cancelLoading:function(){hs.discardElement(this.wrapper);hs.expanders[this.key]=null;if(this.loading){hs.loading.style.left="-9999px"}},writeCredits:function(){this.credits=hs.createElement("a",{href:hs.creditsHref,target:hs.creditsTarget,className:"highslide-credits",innerHTML:hs.lang.creditsText,title:hs.lang.creditsTitle});this.createOverlay({overlayId:this.credits,position:this.creditsPosition||"top left"})},getInline:function(types,addOverlay){for(var i=0;i<types.length;i++){var type=types[i],s=null;if(!this[type+"Id"]&&this.thumbsUserSetId){this[type+"Id"]=type+"-for-"+this.thumbsUserSetId}if(this[type+"Id"]){this[type]=hs.getNode(this[type+"Id"])}if(!this[type]&&!this[type+"Text"]&&this[type+"Eval"]){try{s=eval(this[type+"Eval"])}catch(e){}}if(!this[type]&&this[type+"Text"]){s=this[type+"Text"]}if(!this[type]&&!s){this[type]=hs.getNode(this.a["_"+type+"Id"]);if(!this[type]){var next=this.a.nextSibling;while(next&&!hs.isHsAnchor(next)){if((new RegExp("highslide-"+type)).test(next.className||null)){if(!next.id){this.a["_"+type+"Id"]=next.id="hsId"+hs.idCounter++}this[type]=hs.getNode(next.id);break}next=next.nextSibling}}}if(!this[type]&&s){this[type]=hs.createElement("div",{className:"highslide-"+type,innerHTML:s})}if(addOverlay&&this[type]){var o={position:(type=="heading")?"above":"below"};for(var x in this[type+"Overlay"]){o[x]=this[type+"Overlay"][x]}o.overlayId=this[type];this.createOverlay(o)}}},doShowHide:function(a){if(hs.hideSelects){this.showHideElements("SELECT",a)}if(hs.hideIframes){this.showHideElements("IFRAME",a)}if(hs.geckoMac){this.showHideElements("*",a)}},showHideElements:function(c,b){var e=document.getElementsByTagName(c);var a=c=="*"?"overflow":"visibility";for(var f=0;f<e.length;f++){if(a=="visibility"||(document.defaultView.getComputedStyle(e[f],"").getPropertyValue("overflow")=="auto"||e[f].getAttribute("hidden-by")!=null)){var h=e[f].getAttribute("hidden-by");if(b=="visible"&&h){h=h.replace("["+this.key+"]","");e[f].setAttribute("hidden-by",h);if(!h){e[f].style[a]=e[f].origProp}}else{if(b=="hidden"){var k=hs.getPosition(e[f]);k.w=e[f].offsetWidth;k.h=e[f].offsetHeight;var j=(k.x+k.w<this.x.get("opos")||k.x>this.x.get("opos")+this.x.get("osize"));var g=(k.y+k.h<this.y.get("opos")||k.y>this.y.get("opos")+this.y.get("osize"));var d=hs.getWrapperKey(e[f]);if(!j&&!g&&d!=this.key){if(!h){e[f].setAttribute("hidden-by","["+this.key+"]");e[f].origProp=e[f].style[a];e[f].style[a]="hidden"}else{if(h.indexOf("["+this.key+"]")==-1){e[f].setAttribute("hidden-by",h+"["+this.key+"]")}}}else{if((h=="["+this.key+"]"||hs.focusKey==d)&&d!=this.key){e[f].setAttribute("hidden-by","");e[f].style[a]=e[f].origProp||""}else{if(h&&h.indexOf("["+this.key+"]")>-1){e[f].setAttribute("hidden-by",h.replace("["+this.key+"]",""))}}}}}}}},focus:function(){this.wrapper.style.zIndex=hs.zIndexCounter+=2;for(var a=0;a<hs.expanders.length;a++){if(hs.expanders[a]&&a==hs.focusKey){var b=hs.expanders[a];b.content.className+=" highslide-"+b.contentType+"-blur";b.content.style.cursor=hs.ieLt7?"hand":"pointer";b.content.title=hs.lang.focusTitle}}if(this.outline){this.outline.table.style.zIndex=this.wrapper.style.zIndex-1}this.content.className="highslide-"+this.contentType;this.content.title=hs.lang.restoreTitle;if(hs.restoreCursor){hs.styleRestoreCursor=window.opera?"pointer":"url("+hs.graphicsDir+hs.restoreCursor+"), pointer";if(hs.ieLt7&&hs.uaVersion<6){hs.styleRestoreCursor="hand"}this.content.style.cursor=hs.styleRestoreCursor}hs.focusKey=this.key;hs.addEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler)},moveTo:function(a,b){this.x.setPos(a);this.y.setPos(b)},resize:function(d){var a,b,c=d.width/d.height;a=Math.max(d.width+d.dX,Math.min(this.minWidth,this.x.full));if(this.isImage&&Math.abs(a-this.x.full)<12){a=this.x.full}b=a/c;if(b<Math.min(this.minHeight,this.y.full)){b=Math.min(this.minHeight,this.y.full);if(this.isImage){a=b*c}}this.resizeTo(a,b)},resizeTo:function(a,b){this.y.setSize(b);this.x.setSize(a);this.wrapper.style.height=this.y.get("wsize")+"px"},close:function(){if(this.isClosing||!this.isExpanded){return}this.isClosing=true;hs.removeEventListener(document,window.opera?"keypress":"keydown",hs.keyHandler);try{this.content.style.cursor="default";this.changeSize(0,{wrapper:{width:this.x.t,height:this.y.t,left:this.x.tpos-this.x.cb+this.x.tb,top:this.y.tpos-this.y.cb+this.y.tb},content:{left:0,top:0,width:this.x.t,height:this.y.t}},hs.restoreDuration)}catch(a){this.afterClose()}},createOverlay:function(d){var c=d.overlayId;if(typeof c=="string"){c=hs.getNode(c)}if(d.html){c=hs.createElement("div",{innerHTML:d.html})}if(!c||typeof c=="string"){return}c.style.display="block";this.genOverlayBox();var b=d.width&&/^[0-9]+(px|%)$/.test(d.width)?d.width:"auto";if(/^(left|right)panel$/.test(d.position)&&!/^[0-9]+px$/.test(d.width)){b="200px"}var a=hs.createElement("div",{id:"hsId"+hs.idCounter++,hsId:d.hsId},{position:"absolute",visibility:"hidden",width:b,direction:hs.lang.cssDirection||"",opacity:0},this.overlayBox,true);a.appendChild(c);hs.extend(a,{opacity:1,offsetX:0,offsetY:0,dur:(d.fade===0||d.fade===false||(d.fade==2&&hs.ie))?0:250});hs.extend(a,d);if(this.gotOverlays){this.positionOverlay(a);if(!a.hideOnMouseOut||this.mouseIsOver){hs.animate(a,{opacity:a.opacity},a.dur)}}hs.push(this.overlays,hs.idCounter-1)},positionOverlay:function(c){var d=c.position||"middle center",b=c.offsetX,a=c.offsetY;if(c.parentNode!=this.overlayBox){this.overlayBox.appendChild(c)}if(/left$/.test(d)){c.style.left=b+"px"}if(/center$/.test(d)){hs.setStyles(c,{left:"50%",marginLeft:(b-Math.round(c.offsetWidth/2))+"px"})}if(/right$/.test(d)){c.style.right=-b+"px"}if(/^leftpanel$/.test(d)){hs.setStyles(c,{right:"100%",marginRight:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p1=c.offsetWidth}else{if(/^rightpanel$/.test(d)){hs.setStyles(c,{left:"100%",marginLeft:this.x.cb+"px",top:-this.y.cb+"px",bottom:-this.y.cb+"px",overflow:"auto"});this.x.p2=c.offsetWidth}}if(/^top/.test(d)){c.style.top=a+"px"}if(/^middle/.test(d)){hs.setStyles(c,{top:"50%",marginTop:(a-Math.round(c.offsetHeight/2))+"px"})}if(/^bottom/.test(d)){c.style.bottom=-a+"px"}if(/^above$/.test(d)){hs.setStyles(c,{left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",bottom:"100%",marginBottom:this.y.cb+"px",width:"auto"});this.y.p1=c.offsetHeight}else{if(/^below$/.test(d)){hs.setStyles(c,{position:"relative",left:(-this.x.p1-this.x.cb)+"px",right:(-this.x.p2-this.x.cb)+"px",top:"100%",marginTop:this.y.cb+"px",width:"auto"});this.y.p2=c.offsetHeight;c.style.position="absolute"}}},getOverlays:function(){this.getInline(["heading","caption"],true);if(this.heading&&this.dragByHeading){this.heading.className+=" highslide-move"}if(hs.showCredits){this.writeCredits()}for(var a=0;a<hs.overlays.length;a++){var d=hs.overlays[a],e=d.thumbnailId,b=d.slideshowGroup;if((!e&&!b)||(e&&e==this.thumbsUserSetId)||(b&&b===this.slideshowGroup)){this.createOverlay(d)}}var c=[];for(var a=0;a<this.overlays.length;a++){var d=hs.$("hsId"+this.overlays[a]);if(/panel$/.test(d.position)){this.positionOverlay(d)}else{hs.push(c,d)}}for(var a=0;a<c.length;a++){this.positionOverlay(c[a])}this.gotOverlays=true},genOverlayBox:function(){if(!this.overlayBox){this.overlayBox=hs.createElement("div",{className:this.wrapperClassName},{position:"absolute",width:(this.x.size||(this.useBox?this.width:null)||this.x.full)+"px",height:(this.y.size||this.y.full)+"px",visibility:"hidden",overflow:"hidden",zIndex:hs.ie?4:"auto"},hs.container,true)}},sizeOverlayBox:function(f,d){var c=this.overlayBox,a=this.x,h=this.y;hs.setStyles(c,{width:a.size+"px",height:h.size+"px"});if(f||d){for(var e=0;e<this.overlays.length;e++){var g=hs.$("hsId"+this.overlays[e]);var b=(hs.ieLt7||document.compatMode=="BackCompat");if(g&&/^(above|below)$/.test(g.position)){if(b){g.style.width=(c.offsetWidth+2*a.cb+a.p1+a.p2)+"px"}h[g.position=="above"?"p1":"p2"]=g.offsetHeight}if(g&&b&&/^(left|right)panel$/.test(g.position)){g.style.height=(c.offsetHeight+2*h.cb)+"px"}}}if(f){hs.setStyles(this.content,{top:h.p1+"px"});hs.setStyles(c,{top:(h.p1+h.cb)+"px"})}},showOverlays:function(){var a=this.overlayBox;a.className="";hs.setStyles(a,{top:(this.y.p1+this.y.cb)+"px",left:(this.x.p1+this.x.cb)+"px",overflow:"visible"});if(hs.safari){a.style.visibility="visible"}this.wrapper.appendChild(a);for(var c=0;c<this.overlays.length;c++){var d=hs.$("hsId"+this.overlays[c]);d.style.zIndex=d.zIndex||4;if(!d.hideOnMouseOut||this.mouseIsOver){d.style.visibility="visible";hs.setStyles(d,{visibility:"visible",display:""});hs.animate(d,{opacity:d.opacity},d.dur)}}},destroyOverlays:function(){if(!this.overlays.length){return}hs.discardElement(this.overlayBox)},createFullExpand:function(){this.fullExpandLabel=hs.createElement("a",{href:"javascript:hs.expanders["+this.key+"].doFullExpand();",title:hs.lang.fullExpandTitle,className:"highslide-full-expand"});this.createOverlay({overlayId:this.fullExpandLabel,position:hs.fullExpandPosition,hideOnMouseOut:true,opacity:hs.fullExpandOpacity})},doFullExpand:function(){try{if(this.fullExpandLabel){hs.discardElement(this.fullExpandLabel)}this.focus();var c=this.x.size,a=this.y.size;this.resizeTo(this.x.full,this.y.full);var b=this.x.pos-(this.x.size-c)/2;if(b<hs.marginLeft){b=hs.marginLeft}var f=this.y.pos-(this.y.size-a)/2;if(f<hs.marginTop){f=hs.marginTop}this.moveTo(b,f);this.doShowHide("hidden")}catch(d){this.error(d)}},afterClose:function(){this.a.className=this.a.className.replace("highslide-active-anchor","");this.doShowHide("visible");if(this.outline&&this.outlineWhileAnimating){this.outline.destroy()}hs.discardElement(this.wrapper);hs.expanders[this.key]=null;hs.reOrder()}};hs.langDefaults=hs.lang;var HsExpander=hs.Expander;if(hs.ie&&window==window.top){(function(){try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,50);return}hs.ready()})()}hs.addEventListener(document,"DOMContentLoaded",hs.ready);hs.addEventListener(window,"load",hs.ready);hs.addEventListener(document,"ready",function(){if(hs.expandCursor){var d=hs.createElement("style",{type:"text/css"},null,document.getElementsByTagName("HEAD")[0]),c=document.compatMode=="BackCompat";function b(f,g){if(hs.ie&&(hs.uaVersion<9||c)){var e=document.styleSheets[document.styleSheets.length-1];if(typeof(e.addRule)=="object"){e.addRule(f,g)}}else{d.appendChild(document.createTextNode(f+" {"+g+"}"))}}function a(e){return"expression( ( ( ignoreMe = document.documentElement."+e+" ? document.documentElement."+e+" : document.body."+e+" ) ) + 'px' );"}if(hs.expandCursor){b(".highslide img","cursor: url("+hs.graphicsDir+hs.expandCursor+"), pointer !important;")}}});hs.addEventListener(window,"resize",function(){hs.getPageSize()});hs.addEventListener(document,"mousemove",function(a){hs.mouse={x:a.clientX,y:a.clientY}});hs.addEventListener(document,"mousedown",hs.mouseClickHandler);hs.addEventListener(document,"mouseup",hs.mouseClickHandler);hs.addEventListener(document,"ready",hs.getAnchors);hs.addEventListener(window,"load",hs.preloadImages)}; \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.packed.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.packed.js index 42837a211fa0e3a7a221d102a4029922ee9741b0..8654cb3af1dc3e6d229bb9b7f5333ffb22482df2 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.packed.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/highslide.packed.js @@ -1,9 +1,9 @@ -/** - * Name: Highslide JS - * Version: 4.1.13 (2011-10-06) +/** + * Name: Highslide JS + * Version: 4.1.13 (2011-10-06) * Config: default +packed - * Author: Torstein Hønsi - * Support: www.highslide.com/support - * License: www.highslide.com/#license - */ + * Author: Torstein Hønsi + * Support: www.highslide.com/support + * License: www.highslide.com/#license + */ eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?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}('q(!m){u m={1F:{8l:\'6P\',6K:\'93...\',6L:\'6b 1L 92\',7T:\'6b 1L 91 1L 8Z\',88:\'90 1L 94 I (f)\',8e:\'95 2t <i>6I 6F</i>\',8b:\'9a 1L 98 6I 6F 97\',5V:\'6b 1L 2h 1Y, 96 6O 8Y 1L 3c. 8X 8Q 8P S 1A 6O 79.\'},47:\'1c/8O/\',4l:\'8M.6A\',3S:\'8N.6A\',84:5c,7y:5c,43:15,7J:15,48:15,7N:15,3L:8R,7g:0.75,8j:G,5U:5,2R:2,8S:3,3V:1a,7z:\'2S 2o\',7O:1,7W:G,8x:\'8W://1c.8V/\',8o:\'8U\',7e:G,5t:[\'a\'],68:G,3Y:6W,3K:6W,3N:G,1h:\'9b-9c\',3U:[],5j:G,N:[],5i:[\'3N\',\'2d\',\'1h\',\'2R\',\'9u\',\'9t\',\'9s\',\'6R\',\'9q\',\'9r\',\'9v\',\'6X\',\'89\',\'68\',\'M\',\'16\',\'60\',\'3Y\',\'3K\',\'4X\',\'5q\',\'8h\',\'3b\',\'1J\',\'85\',\'86\',\'1l\'],1v:[],3F:0,9w:{x:[\'8n\',\'18\',\'6c\',\'2o\',\'7x\'],y:[\'42\',\'W\',\'6a\',\'2S\',\'4r\']},4B:{},6X:{},6R:{},2A:[],2Q:{},6m:{},4a:[],1R:/9A\\/4\\.0/.14(3W.4V)?8:6g((3W.4V.58().2X(/.+(?:6V|9z|9y|1P)[\\/: ]([\\d.]+)/)||[0,\'0\'])[1]),1P:(L.3R&&!1n.2r),4D:/9x/.14(3W.4V),8y:/9p.+6V:1\\.[0-8].+9o/.14(3W.4V),$:A(1t){q(1t)C L.9h(1t)},2e:A(2c,2v){2c[2c.X]=2v},Z:A(6S,3a,2F,6f,6U){u B=L.Z(6S);q(3a)m.2q(B,3a);q(6U)m.T(B,{9f:0,9d:\'3r\',5h:0});q(2F)m.T(B,2F);q(6f)6f.2g(B);C B},2q:A(B,3a){S(u x 3v 3a)B[x]=3a[x];C B},T:A(B,2F){S(u x 3v 2F){q(m.2Y&&x==\'1o\'){q(2F[x]>0.99)B.F.9e(\'3P\');K B.F.3P=\'7k(1o=\'+(2F[x]*1V)+\')\'}K B.F[x]=2F[x]}},3p:A(B,Q,25){u 2O,3h,2M;q(1m 25!=\'5I\'||25===H){u 2y=87;25={2Z:2y[2],1J:2y[3],5y:2y[4]}}q(1m 25.2Z!=\'3g\')25.2Z=5c;25.1J=1d[25.1J]||1d.6Z;25.4c=m.2q({},Q);S(u 2b 3v Q){u e=1S m.1k(B,25,2b);2O=6g(m.5s(B,2b))||0;3h=6g(Q[2b]);2M=2b!=\'1o\'?\'D\':\'\';e.2z(2O,3h,2M)}},5s:A(B,Q){q(B.F[Q]){C B.F[Q]}K q(L.63){C L.63.8B(B,H).8s(Q)}K{q(Q==\'1o\')Q=\'3P\';u 2v=B.8L[Q.31(/\\-(\\w)/g,A(a,b){C b.9j()})];q(Q==\'3P\')2v=2v.31(/7k\\(1o=([0-9]+)\\)/,A(a,b){C b/1V});C 2v===\'\'?1:2v}},4N:A(){u d=L,w=1n,3D=d.5a&&d.5a!=\'5K\'?d.3i:d.4J,2Y=m.1P&&(m.1R<9||1m 71==\'1Z\');u M=2Y?3D.7j:(d.3i.7j||4H.9n),16=2Y?3D.9m:4H.9l;m.2J={M:M,16:16,4w:2Y?3D.4w:71,4y:2Y?3D.4y:9k};C m.2J},62:A(B){u p={x:B.7n,y:B.7s};3m(B.7m){B=B.7m;p.x+=B.7n;p.y+=B.7s;q(B!=L.4J&&B!=L.3i){p.x-=B.4w;p.y-=B.4y}}C p},4b:A(a,21,2z,J){q(!a)a=m.Z(\'a\',H,{3q:\'3r\'},m.20);q(1m a.3E==\'A\')C 21;1z{1S m.46(a,21,2z);C 1a}1C(e){C G}},7a:A(){u 5X=0,54=-1,N=m.N,z,1p;S(u i=0;i<N.X;i++){z=N[i];q(z){1p=z.V.F.1p;q(1p&&1p>5X){5X=1p;54=i}}}q(54==-1)m.2u=-1;K N[54].3k()},5r:A(a,3J){a.3E=a.3x;u p=a.3E?a.3E():H;a.3E=H;C(p&&1m p[3J]!=\'1Z\')?p[3J]:(1m m[3J]!=\'1Z\'?m[3J]:H)},5l:A(a){u 1l=m.5r(a,\'1l\');q(1l)C 1l;C a.3y},3B:A(1t){u 4s=m.$(1t),2U=m.6m[1t],a={};q(!4s&&!2U)C H;q(!2U){2U=4s.7f(G);2U.1t=\'\';m.6m[1t]=2U;C 4s}K{C 2U.7f(G)}},3t:A(d){q(d)m.5k.2g(d);m.5k.3G=\'\'},74:A(66,z){u 2G=z||m.2C();z=2G;q(m.2W)C 1a;K m.2G=2G;m.3d(L,1n.2r?\'4R\':\'4T\',m.3H);1z{m.2W=66;66.3x()}1C(e){m.2G=m.2W=H}1z{z.2h()}1C(e){}C 1a},4e:A(B,1W){u z=m.2C(B);q(z)C m.74(z.5m(1W),z);K C 1a},79:A(B){C m.4e(B,-1)},1A:A(B){C m.4e(B,1)},3H:A(e){q(!e)e=1n.1G;q(!e.1M)e.1M=e.6x;q(1m e.1M.7c!=\'1Z\')C G;u z=m.2C();u 1W=H;7u(e.8F){1q 70:q(z)z.5M();C G;1q 32:1q 34:1q 39:1q 40:1W=1;6r;1q 8:1q 33:1q 37:1q 38:1W=-1;6r;1q 27:1q 13:1W=0}q(1W!==H){m.3d(L,1n.2r?\'4R\':\'4T\',m.3H);q(!m.7e)C G;q(e.4F)e.4F();K e.8E=1a;q(z){q(1W==0){z.2h()}K{m.4e(z.R,1W)}C 1a}}C G},8G:A(O){m.2e(m.1v,m.2q(O,{2a:\'2a\'+m.3F++}))},65:A(6l,4u){u B,30=/^1c-V-([0-9]+)$/;B=6l;3m(B.2V){q(B.1t&&30.14(B.1t))C B.1t.31(30,"$1");B=B.2V}q(!4u){B=6l;3m(B.2V){q(B.4g&&m.4E(B)){S(u R=0;R<m.N.X;R++){u z=m.N[R];q(z&&z.a==B)C R}}B=B.2V}}C H},2C:A(B,4u){q(1m B==\'1Z\')C m.N[m.2u]||H;q(1m B==\'3g\')C m.N[B]||H;q(1m B==\'69\')B=m.$(B);C m.N[m.65(B,4u)]||H},4E:A(a){C(a.3x&&a.3x.7F().31(/\\s/g,\' \').2X(/m.(8J|e)8D/))},7Y:A(){S(u i=0;i<m.N.X;i++)q(m.N[i]&&m.N[i].3C)m.7a()},6i:A(e){q(!e)e=1n.1G;q(e.8I>1)C G;q(!e.1M)e.1M=e.6x;u B=e.1M;3m(B.2V&&!(/1c-(1Y|3c|4Z|2T)/.14(B.1g))){B=B.2V}u z=m.2C(B);q(z&&(z.6k||!z.3C))C G;q(z&&e.J==\'7o\'){q(e.1M.7c)C G;u 2X=B.1g.2X(/1c-(1Y|3c|2T)/);q(2X){m.1U={z:z,J:2X[1],18:z.x.E,M:z.x.I,W:z.y.E,16:z.y.I,72:e.4z,76:e.4o};m.1D(L,\'6w\',m.6D);q(e.4F)e.4F();q(/1c-(1Y|4Z)-5W/.14(z.11.1g)){z.3k();m.6B=G}C 1a}}K q(e.J==\'7i\'){m.3d(L,\'6w\',m.6D);q(m.1U){q(m.3e&&m.1U.J==\'1Y\')m.1U.z.11.F.2N=m.3e;u 2E=m.1U.2E;q(!2E&&!m.6B&&!/(3c|2T)/.14(m.1U.J)){z.2h()}K q(2E||(!2E&&m.8C)){m.1U.z.45(\'1i\')}m.6B=1a;m.1U=H}K q(/1c-1Y-5W/.14(B.1g)){B.F.2N=m.3e}}C 1a},6D:A(e){q(!m.1U)C G;q(!e)e=1n.1G;u a=m.1U,z=a.z;a.5b=e.4z-a.72;a.6o=e.4o-a.76;u 6n=1d.a7(1d.7q(a.5b,2)+1d.7q(a.6o,2));q(!a.2E)a.2E=(a.J!=\'1Y\'&&6n>0)||(6n>(m.al||5));q(a.2E&&e.4z>5&&e.4o>5){q(a.J==\'2T\')z.2T(a);K{z.5v(a.18+a.5b,a.W+a.6o);q(a.J==\'1Y\')z.11.F.2N=\'3c\'}}C 1a},8g:A(e){1z{q(!e)e=1n.1G;u 4C=/ao/i.14(e.J);q(!e.1M)e.1M=e.6x;q(!e.4v)e.4v=4C?e.an:e.9C;u z=m.2C(e.1M);q(!z.3C)C;q(!z||!e.4v||m.2C(e.4v,G)==z||m.1U)C;S(u i=0;i<z.1v.X;i++)(A(){u o=m.$(\'2a\'+z.1v[i]);q(o&&o.4K){q(4C)m.T(o,{1b:\'1X\',3q:\'\'});m.3p(o,{1o:4C?o.1o:0},o.2p)}})()}1C(e){}},1D:A(B,1G,2i){q(B==L&&1G==\'2H\'){m.2e(m.4a,2i)}1z{B.1D(1G,2i,1a)}1C(e){1z{B.7l(\'3Z\'+1G,2i);B.ac(\'3Z\'+1G,2i)}1C(e){B[\'3Z\'+1G]=2i}}},3d:A(B,1G,2i){1z{B.3d(1G,2i,1a)}1C(e){1z{B.7l(\'3Z\'+1G,2i)}1C(e){B[\'3Z\'+1G]=H}}},4A:A(i){q(m.5j&&m.3U[i]&&m.3U[i]!=\'1Z\'){u 1f=L.Z(\'1f\');1f.4S=A(){1f=H;m.4A(i+1)};1f.1l=m.3U[i]}},7E:A(3g){q(3g&&1m 3g!=\'5I\')m.5U=3g;u 2c=m.51();S(u i=0;i<2c.36.X&&i<m.5U;i++){m.2e(m.3U,m.5l(2c.36[i]))}q(m.1h)1S m.41(m.1h,A(){m.4A(0)});K m.4A(0);q(m.3S)u 6A=m.Z(\'1f\',{1l:m.47+m.3S})},6y:A(){q(!m.20){m.3j=m.1P&&m.1R<7;m.2Y=m.1P&&m.1R<9;m.4N();S(u x 3v m.4O){q(1m m[x]!=\'1Z\')m.1F[x]=m[x];K q(1m m.1F[x]==\'1Z\'&&1m m.4O[x]!=\'1Z\')m.1F[x]=m.4O[x]}m.20=m.Z(\'1O\',{1g:\'1c-20\'},{1e:\'29\',18:0,W:0,M:\'1V%\',1p:m.3L,8a:\'6P\'},L.4J,G);m.1E=m.Z(\'a\',{1g:\'1c-1E\',3w:m.1F.6L,3G:m.1F.6K,3y:\'8u:;\'},{1e:\'29\',W:\'-3X\',1o:m.7g,1p:1},m.20);m.5k=m.Z(\'1O\',H,{3q:\'3r\'},m.20);1d.at=A(t,b,c,d){C c*t/d+b};1d.6Z=A(t,b,c,d){C c*(t/=d)*t+b};m.8A=m.3j;m.8f=((1n.2r&&m.1R<9)||3W.aw==\'ay\'||(m.3j&&m.1R<5.5))}},2H:A(){q(m.5n)C;m.5n=G;S(u i=0;i<m.4a.X;i++)m.4a[i]()},7p:A(){u B,17,3R=[],36=[],2s={},30;S(u i=0;i<m.5t.X;i++){17=L.4U(m.5t[i]);S(u j=0;j<17.X;j++){B=17[j];30=m.4E(B);q(30){m.2e(3R,B);q(30[0]==\'m.4b\')m.2e(36,B);u g=m.5r(B,\'3b\')||\'3r\';q(!2s[g])2s[g]=[];m.2e(2s[g],B)}}}m.4p={3R:3R,2s:2s,36:36};C m.4p},51:A(){C m.4p||m.7p()},2h:A(B){u z=m.2C(B);q(z)z.2h();C 1a}};m.1k=A(1Q,1w,Q){k.1w=1w;k.1Q=1Q;k.Q=Q;q(!1w.7h)1w.7h={}};m.1k.53={5C:A(){(m.1k.2x[k.Q]||m.1k.2x.7r)(k);q(k.1w.2x)k.1w.2x.77(k.1Q,k.2I,k)},2z:A(7b,1L,2M){k.5x=(1S 78()).73();k.2O=7b;k.3h=1L;k.2M=2M;k.2I=k.2O;k.E=k.5E=0;u 4H=k;A t(4d){C 4H.2x(4d)}t.1Q=k.1Q;q(t()&&m.2A.2e(t)==1){m.7d=9M(A(){u 2A=m.2A;S(u i=0;i<2A.X;i++)q(!2A[i]())2A.9P(i--,1);q(!2A.X){9Q(m.7d)}},13)}},2x:A(4d){u t=(1S 78()).73();q(4d||t>=k.1w.2Z+k.5x){k.2I=k.3h;k.E=k.5E=1;k.5C();k.1w.4c[k.Q]=G;u 5z=G;S(u i 3v k.1w.4c)q(k.1w.4c[i]!==G)5z=1a;q(5z){q(k.1w.5y)k.1w.5y.77(k.1Q)}C 1a}K{u n=t-k.5x;k.5E=n/k.1w.2Z;k.E=k.1w.1J(n,0,1,k.1w.2Z);k.2I=k.2O+((k.3h-k.2O)*k.E);k.5C()}C G}};m.2q(m.1k,{2x:{1o:A(1k){m.T(1k.1Q,{1o:1k.2I})},7r:A(1k){1z{q(1k.1Q.F&&1k.1Q.F[1k.Q]!=H)1k.1Q.F[1k.Q]=1k.2I+1k.2M;K 1k.1Q[1k.Q]=1k.2I}1C(e){}}}});m.41=A(1h,2P){k.2P=2P;k.1h=1h;u v=m.1R,4Y;k.5J=m.1P&&m.1R<7;q(!1h){q(2P)2P();C}m.6y();k.28=m.Z(\'28\',{9V:0},{1b:\'1i\',1e:\'29\',9X:\'9Y\',M:0},m.20,G);u 5R=m.Z(\'5R\',H,H,k.28,1);k.1H=[];S(u i=0;i<=8;i++){q(i%3==0)4Y=m.Z(\'4Y\',H,{16:\'2l\'},5R,G);k.1H[i]=m.Z(\'1H\',H,H,4Y,G);u F=i!=4?{9Z:0,aF:0}:{1e:\'6j\'};m.T(k.1H[i],F)}k.1H[4].1g=1h+\' 1c-19\';k.7t()};m.41.53={7t:A(){u 1l=m.47+(m.9K||"9O/")+k.1h+".9N";u 6T=m.4D&&m.1R<7v?m.20:H;k.2k=m.Z(\'1f\',H,{1e:\'29\',W:\'-3X\'},6T,G);u 6E=k;k.2k.4S=A(){6E.6N()};k.2k.1l=1l},6N:A(){u o=k.1j=k.2k.M/4,E=[[0,0],[0,-4],[-2,0],[0,-8],0,[-2,-8],[0,-2],[0,-6],[-2,-2]],1x={16:(2*o)+\'D\',M:(2*o)+\'D\'};S(u i=0;i<=8;i++){q(E[i]){q(k.5J){u w=(i==1||i==7)?\'1V%\':k.2k.M+\'D\';u 1O=m.Z(\'1O\',H,{M:\'1V%\',16:\'1V%\',1e:\'6j\',2L:\'1i\'},k.1H[i],G);m.Z(\'1O\',H,{3P:"a0:9U.9W.a1(a8=9I, 1l=\'"+k.2k.1l+"\')",1e:\'29\',M:w,16:k.2k.16+\'D\',18:(E[i][0]*o)+\'D\',W:(E[i][1]*o)+\'D\'},1O,G)}K{m.T(k.1H[i],{9J:\'5T(\'+k.2k.1l+\') \'+(E[i][0]*o)+\'D \'+(E[i][1]*o)+\'D\'})}q(1n.2r&&(i==3||i==5))m.Z(\'1O\',H,1x,k.1H[i],G);m.T(k.1H[i],1x)}}k.2k=H;q(m.2Q[k.1h])m.2Q[k.1h].4q();m.2Q[k.1h]=k;q(k.2P)k.2P()},3A:A(E,1j,6H,2p,1J){u z=k.z,9E=z.V.F,1j=1j||0,E=E||{x:z.x.E+1j,y:z.y.E+1j,w:z.x.P(\'1u\')-2*1j,h:z.y.P(\'1u\')-2*1j};q(6H)k.28.F.1b=(E.h>=4*k.1j)?\'1X\':\'1i\';m.T(k.28,{18:(E.x-k.1j)+\'D\',W:(E.y-k.1j)+\'D\',M:(E.w+2*k.1j)+\'D\'});E.w-=2*k.1j;E.h-=2*k.1j;m.T(k.1H[4],{M:E.w>=0?E.w+\'D\':0,16:E.h>=0?E.h+\'D\':0});q(k.5J)k.1H[3].F.16=k.1H[5].F.16=k.1H[4].F.16},4q:A(6Y){q(6Y)k.28.F.1b=\'1i\';K m.3t(k.28)}};m.4W=A(z,1x){k.z=z;k.1x=1x;k.2D=1x==\'x\'?\'ax\':\'av\';k.2w=k.2D.58();k.3O=1x==\'x\'?\'ar\':\'au\';k.5o=k.3O.58();k.5f=1x==\'x\'?\'az\':\'aA\';k.aG=k.5f.58();k.1B=k.2f=0};m.4W.53={P:A(R){7u(R){1q\'5O\':C k.1s+k.2j+(k.t-m.1E[\'1j\'+k.2D])/2;1q\'1u\':C k.I+2*k.Y+k.1B+k.2f;1q\'3o\':C k.55-k.2K-k.4I;1q\'5G\':C k.P(\'3o\')-2*k.Y-k.1B-k.2f;1q\'3Q\':C k.E-(k.z.19?k.z.19.1j:0);1q\'64\':C k.P(\'1u\')+(k.z.19?2*k.z.19.1j:0);1q\'4h\':C k.1y?1d.56((k.I-k.1y)/2):0}},5w:A(){k.Y=(k.z.11[\'1j\'+k.2D]-k.t)/2;k.4I=m[\'5h\'+k.5f]},5g:A(){k.t=k.z.B[k.2w]?aC(k.z.B[k.2w]):k.z.B[\'1j\'+k.2D];k.1s=k.z.1s[k.1x];k.2j=(k.z.B[\'1j\'+k.2D]-k.t)/2;q(k.1s==0||k.1s==-1){k.1s=(m.2J[k.2w]/2)+m.2J[\'2B\'+k.3O]}},5B:A(){u z=k.z;k.3n=\'2l\';k.E=k.1s-k.Y+k.2j;q(k.5q&&k.1x==\'x\')z.4X=1d.22(z.4X||k.U,z.5q*k.U/z.y.U);k.I=1d.22(k.U,z[\'67\'+k.2D]||k.U);k.1T=z.3N?1d.22(z[\'22\'+k.2D],k.U):k.U;q(z.3f&&z.2d){k.I=z[k.2w];k.1y=k.U}q(k.1x==\'x\'&&m.3V)k.1T=z.3Y;k.2K=m[\'5h\'+k.3O];k.2B=m.2J[\'2B\'+k.3O];k.55=m.2J[k.2w]},6h:A(i){u z=k.z;q(z.3f&&(z.2d||m.3V)){k.1y=i;k.I=1d.67(k.I,k.1y);z.11.F[k.5o]=k.P(\'4h\')+\'D\'}K k.I=i;z.11.F[k.2w]=i+\'D\';z.V.F[k.2w]=k.P(\'1u\')+\'D\';q(z.19)z.19.3A();q(k.1x==\'x\'&&z.1r)z.35(G)},5Z:A(i){k.E=i;k.z.V.F[k.5o]=i+\'D\';q(k.z.19)k.z.19.3A()}};m.46=A(a,21,2z,26){q(L.ab&&m.1P&&!m.5n){m.1D(L,\'2H\',A(){1S m.46(a,21,2z,26)});C}k.a=a;k.2z=2z;k.26=26||\'1Y\';k.3f=!k.ak;m.5j=1a;k.1v=[];m.6y();u R=k.R=m.N.X;S(u i=0;i<m.5i.X;i++){u 2b=m.5i[i];k[2b]=21&&1m 21[2b]!=\'1Z\'?21[2b]:m[2b]}q(!k.1l)k.1l=a.3y;u B=(21&&21.5Y)?m.$(21.5Y):a;B=k.8k=B.4U(\'1f\')[0]||B;k.4Q=B.1t||a.1t;S(u i=0;i<m.N.X;i++){q(m.N[i]&&m.N[i].a==a){m.N[i].3k();C 1a}}q(!m.ad)S(u i=0;i<m.N.X;i++){q(m.N[i]&&m.N[i].8k!=B&&!m.N[i].52){m.N[i].6t()}}m.N[R]=k;q(!m.8j&&!m.2W){q(m.N[R-1])m.N[R-1].2h();q(1m m.2u!=\'1Z\'&&m.N[m.2u])m.N[m.2u].2h()}k.B=B;k.1s=k.8h||m.62(B);m.4N();u x=k.x=1S m.4W(k,\'x\');x.5g();u y=k.y=1S m.4W(k,\'y\');y.5g();k.V=m.Z(\'1O\',{1t:\'1c-V-\'+k.R,1g:\'1c-V \'+k.60},{1b:\'1i\',1e:\'29\',1p:m.3L+=2},H,G);k.V.aB=k.V.aD=m.8g;q(k.26==\'1Y\'&&k.2R==2)k.2R=0;q(!k.1h){k[k.26+\'5e\']()}K q(m.2Q[k.1h]){k.5N();k[k.26+\'5e\']()}K{k.5H();u z=k;1S m.41(k.1h,A(){z.5N();z[z.26+\'5e\']()})}C G};m.46.53={5Q:A(e){q(m.aE)aa(\'a9 \'+e.9L+\': \'+e.9F);K 1n.9H.3y=k.1l},5N:A(){u 19=k.19=m.2Q[k.1h];19.z=k;19.28.F.1p=k.V.F.1p-1;m.2Q[k.1h]=H},5H:A(){q(k.52||k.1E)C;k.1E=m.1E;u z=k;k.1E.3x=A(){z.6t()};u z=k,l=k.x.P(\'5O\')+\'D\',t=k.y.P(\'5O\')+\'D\';5S(A(){q(z.1E)m.T(z.1E,{18:l,W:t,1p:m.3L++})},1V)},af:A(){u z=k;u 1f=L.Z(\'1f\');k.11=1f;1f.4S=A(){q(m.N[z.R])z.81()};q(m.aq)1f.9D=A(){C 1a};1f.1g=\'1c-1Y\';m.T(1f,{1b:\'1i\',3q:\'7I\',1e:\'29\',4X:\'3X\',1p:3});1f.3w=m.1F.5V;q(m.4D&&m.1R<7v)m.20.2g(1f);q(m.1P&&m.a2)1f.1l=H;1f.1l=k.1l;k.5H()},81:A(){1z{q(!k.11)C;k.11.4S=H;q(k.52)C;K k.52=G;u x=k.x,y=k.y;q(k.1E){m.T(k.1E,{W:\'-3X\'});k.1E=H}x.U=k.11.M;y.U=k.11.16;m.T(k.11,{M:x.t+\'D\',16:y.t+\'D\'});k.V.2g(k.11);m.20.2g(k.V);x.5w();y.5w();m.T(k.V,{18:(x.1s+x.2j-x.Y)+\'D\',W:(y.1s+x.2j-y.Y)+\'D\'});k.80();u 1K=x.U/y.U;x.5B();k.3n(x);y.5B();k.3n(y);q(k.1r)k.35(0,1);q(k.3N){k.7R(1K);q(k.3f&&k.x.U>(k.x.1y||k.x.I)){k.8p();q(k.1v.X==1)k.35()}}k.7U()}1C(e){k.5Q(e)}},3n:A(p,3l){u a5,a3=p.1M,1x=p==k.x?\'x\':\'y\';u 5D=1a;u 3s=p.z.3N;p.E=1d.56(p.E-((p.P(\'1u\')-p.t)/2));q(p.E<p.2B+p.2K){p.E=p.2B+p.2K;5D=G}q(!3l&&p.I<p.1T){p.I=p.1T;3s=1a}q(p.E+p.P(\'1u\')>p.2B+p.55-p.4I){q(!3l&&5D&&3s){p.I=1d.22(p.I,p.P(1x==\'y\'?\'3o\':\'5G\'))}K q(p.P(\'1u\')<p.P(\'3o\')){p.E=p.2B+p.55-p.4I-p.P(\'1u\')}K{p.E=p.2B+p.2K;q(!3l&&3s)p.I=p.P(1x==\'y\'?\'3o\':\'5G\')}}q(!3l&&p.I<p.1T){p.I=p.1T;3s=1a}q(p.E<p.2K){u 7X=p.E;p.E=p.2K;q(3s&&!3l)p.I=p.I-(p.E-7X)}},7R:A(1K){u x=k.x,y=k.y,2m=1a,1N=1d.22(x.U,x.I),24=1d.22(y.U,y.I),2d=(k.2d||m.3V);q(1N/24>1K){ 1N=24*1K;q(1N<x.1T){1N=x.1T;24=1N/1K}2m=G}K q(1N/24<1K){ 24=1N/1K;2m=G}q(m.3V&&x.U<x.1T){x.1y=x.U;y.I=y.1y=y.U}K q(k.2d){x.1y=1N;y.1y=24}K{x.I=1N;y.I=24}2m=k.7S(k.2d?H:1K,2m);q(2d&&y.I<y.1y){y.1y=y.I;x.1y=y.I*1K}q(2m||2d){x.E=x.1s-x.Y+x.2j;x.1T=x.I;k.3n(x,G);y.E=y.1s-y.Y+y.2j;y.1T=y.I;k.3n(y,G);q(k.1r)k.35()}},7S:A(1K,2m){u x=k.x,y=k.y;q(k.1r){3m(y.I>k.3K&&x.I>k.3Y&&y.P(\'1u\')>y.P(\'3o\')){y.I-=10;q(1K)x.I=y.I*1K;k.35(0,1);2m=G}}C 2m},7U:A(){u x=k.x,y=k.y;k.45(\'1i\');k.6e(1,{V:{M:x.P(\'1u\'),16:y.P(\'1u\'),18:x.E,W:y.E},11:{18:x.1B+x.P(\'4h\'),W:y.1B+y.P(\'4h\'),M:x.1y||x.I,16:y.1y||y.I}},m.84)},6e:A(23,1L,2p){q(k.19&&!k.2R){q(23)k.19.3A();K k.19.4q()}q(!23)k.8v();u z=k,x=z.x,y=z.y,1J=k.1J;q(!23)1J=k.85||1J;u 7A=23?A(){q(z.19)z.19.28.F.1b="1X";5S(A(){z.7B()},50)}:A(){z.5P()};q(23)m.T(k.V,{M:x.t+\'D\',16:y.t+\'D\'});q(k.86){m.T(k.V,{1o:23?0:1});m.2q(1L.V,{1o:23})}m.3p(k.V,1L.V,{2Z:2p,1J:1J,2x:A(2v,2y){q(z.19&&z.2R&&2y.Q==\'W\'){u 3I=23?2y.E:1-2y.E;u E={w:x.t+(x.P(\'1u\')-x.t)*3I,h:y.t+(y.P(\'1u\')-y.t)*3I,x:x.1s+(x.E-x.1s)*3I,y:y.1s+(y.E-y.1s)*3I};z.19.3A(E,0,1)}}});m.3p(k.11,1L.11,2p,1J,7A);q(23){k.V.F.1b=\'1X\';k.11.F.1b=\'1X\';k.a.1g+=\' 1c-7P-7Q\'}},7B:A(){k.3C=G;k.3k();q(m.2W&&m.2W==k.a)m.2W=H;k.7w();u p=m.2J,5u=m.4B.x+p.4w,5p=m.4B.y+p.4y;k.6q=k.x.E<5u&&5u<k.x.E+k.x.P(\'1u\')&&k.y.E<5p&&5p<k.y.E+k.y.P(\'1u\');q(k.1r)k.8d()},7w:A(){u R=k.R;u 1h=k.1h;1S m.41(1h,A(){1z{m.N[R].7K()}1C(e){}})},7K:A(){u 1A=k.5m(1);q(1A&&1A.3x.7F().2X(/m\\.4b/))u 1f=m.Z(\'1f\',{1l:m.5l(1A)})},5m:A(1W){u 8r=k.8q(),as=m.4p.2s[k.3b||\'3r\'];C(as&&as[8r+1W])||H},8q:A(){u 2c=m.51().2s[k.3b||\'3r\'];q(2c)S(u i=0;i<2c.X;i++){q(2c[i]==k.a)C i}C H},6t:A(){m.3t(k.V);m.N[k.R]=H;q(k.1E)m.1E.F.18=\'-3X\'},8c:A(){k.6v=m.Z(\'a\',{3y:m.8x,1M:m.8o,1g:\'1c-6v\',3G:m.1F.8e,3w:m.1F.8b});k.49({4x:k.6v,1e:k.89||\'W 18\'})},7Z:A(6u,8w){S(u i=0;i<6u.X;i++){u J=6u[i],s=H;q(!k[J+\'3z\']&&k.4Q)k[J+\'3z\']=J+\'-S-\'+k.4Q;q(k[J+\'3z\'])k[J]=m.3B(k[J+\'3z\']);q(!k[J]&&!k[J+\'6s\']&&k[J+\'8i\'])1z{s=ah(k[J+\'8i\'])}1C(e){}q(!k[J]&&k[J+\'6s\']){s=k[J+\'6s\']}q(!k[J]&&!s){k[J]=m.3B(k.a[\'8t\'+J+\'3z\']);q(!k[J]){u 1A=k.a.83;3m(1A&&!m.4E(1A)){q((1S aj(\'1c-\'+J)).14(1A.1g||H)){q(!1A.1t)k.a[\'8t\'+J+\'3z\']=1A.1t=\'2a\'+m.3F++;k[J]=m.3B(1A.1t);6r}1A=1A.83}}}q(!k[J]&&s)k[J]=m.Z(\'1O\',{1g:\'1c-\'+J,3G:s});q(8w&&k[J]){u o={1e:(J==\'4P\')?\'42\':\'4r\'};S(u x 3v k[J+\'8z\'])o[x]=k[J+\'8z\'][x];o.4x=k[J];k.49(o)}}},45:A(1b){q(m.8A)k.4f(\'8K\',1b);q(m.8f)k.4f(\'8H\',1b);q(m.8y)k.4f(\'*\',1b)},4f:A(4g,1b){u 17=L.4U(4g);u Q=4g==\'*\'?\'2L\':\'1b\';S(u i=0;i<17.X;i++){q(Q==\'1b\'||(L.63.8B(17[i],"").8s(\'2L\')==\'2l\'||17[i].7H(\'1i-2t\')!=H)){u 1I=17[i].7H(\'1i-2t\');q(1b==\'1X\'&&1I){1I=1I.31(\'[\'+k.R+\']\',\'\');17[i].3T(\'1i-2t\',1I);q(!1I)17[i].F[Q]=17[i].61}K q(1b==\'1i\'){u 2n=m.62(17[i]);2n.w=17[i].44;2n.h=17[i].3u;u 7G=(2n.x+2n.w<k.x.P(\'3Q\')||2n.x>k.x.P(\'3Q\')+k.x.P(\'64\'));u 7M=(2n.y+2n.h<k.y.P(\'3Q\')||2n.y>k.y.P(\'3Q\')+k.y.P(\'64\'));u 4j=m.65(17[i]);q(!7G&&!7M&&4j!=k.R){q(!1I){17[i].3T(\'1i-2t\',\'[\'+k.R+\']\');17[i].61=17[i].F[Q];17[i].F[Q]=\'1i\'}K q(1I.7L(\'[\'+k.R+\']\')==-1){17[i].3T(\'1i-2t\',1I+\'[\'+k.R+\']\')}}K q((1I==\'[\'+k.R+\']\'||m.2u==4j)&&4j!=k.R){17[i].3T(\'1i-2t\',\'\');17[i].F[Q]=17[i].61||\'\'}K q(1I&&1I.7L(\'[\'+k.R+\']\')>-1){17[i].3T(\'1i-2t\',1I.31(\'[\'+k.R+\']\',\'\'))}}}}},3k:A(){k.V.F.1p=m.3L+=2;S(u i=0;i<m.N.X;i++){q(m.N[i]&&i==m.2u){u 3M=m.N[i];3M.11.1g+=\' 1c-\'+3M.26+\'-5W\';3M.11.F.2N=m.3j?\'7V\':\'4i\';3M.11.3w=m.1F.7T}}q(k.19)k.19.28.F.1p=k.V.F.1p-1;k.11.1g=\'1c-\'+k.26;k.11.3w=m.1F.5V;q(m.3S){m.3e=1n.2r?\'4i\':\'5T(\'+m.47+m.3S+\'), 4i\';q(m.3j&&m.1R<6)m.3e=\'7V\';k.11.F.2N=m.3e}m.2u=k.R;m.1D(L,1n.2r?\'4R\':\'4T\',m.3H)},5v:A(x,y){k.x.5Z(x);k.y.5Z(y)},2T:A(e){u w,h,r=e.M/e.16;w=1d.67(e.M+e.5b,1d.22(k.3Y,k.x.U));q(k.3f&&1d.9B(w-k.x.U)<12)w=k.x.U;h=w/r;q(h<1d.22(k.3K,k.y.U)){h=1d.22(k.3K,k.y.U);q(k.3f)w=h*r}k.5L(w,h)},5L:A(w,h){k.y.6h(h);k.x.6h(w);k.V.F.16=k.y.P(\'1u\')+\'D\'},2h:A(){q(k.6k||!k.3C)C;k.6k=G;m.3d(L,1n.2r?\'4R\':\'4T\',m.3H);1z{k.11.F.2N=\'9g\';k.6e(0,{V:{M:k.x.t,16:k.y.t,18:k.x.1s-k.x.Y+k.x.2j,W:k.y.1s-k.y.Y+k.y.2j},11:{18:0,W:0,M:k.x.t,16:k.y.t}},m.7y)}1C(e){k.5P()}},49:A(o){u B=o.4x;q(1m B==\'69\')B=m.3B(B);q(o.4Z)B=m.Z(\'1O\',{3G:o.4Z});q(!B||1m B==\'69\')C;B.F.3q=\'7I\';k.7C();u M=o.M&&/^[0-9]+(D|%)$/.14(o.M)?o.M:\'2l\';q(/^(18|2o)6z$/.14(o.1e)&&!/^[0-9]+D$/.14(o.M))M=\'8T\';u O=m.Z(\'1O\',{1t:\'2a\'+m.3F++,2a:o.2a},{1e:\'29\',1b:\'1i\',M:M,8a:m.1F.8l||\'\',1o:0},k.1r,G);O.2g(B);m.2q(O,{1o:1,6Q:0,8m:0,2p:(o.6d===0||o.6d===1a||(o.6d==2&&m.1P))?0:5c});m.2q(O,o);q(k.82){k.4m(O);q(!O.4K||k.6q)m.3p(O,{1o:O.1o},O.2p)}m.2e(k.1v,m.3F-1)},4m:A(O){u p=O.1e||\'6a 6c\',57=O.6Q,59=O.8m;q(O.2V!=k.1r)k.1r.2g(O);q(/18$/.14(p))O.F.18=57+\'D\';q(/6c$/.14(p))m.T(O,{18:\'50%\',43:(57-1d.56(O.44/2))+\'D\'});q(/2o$/.14(p))O.F.2o=-57+\'D\';q(/^8n$/.14(p)){m.T(O,{2o:\'1V%\',7J:k.x.Y+\'D\',W:-k.y.Y+\'D\',2S:-k.y.Y+\'D\',2L:\'2l\'});k.x.1B=O.44}K q(/^7x$/.14(p)){m.T(O,{18:\'1V%\',43:k.x.Y+\'D\',W:-k.y.Y+\'D\',2S:-k.y.Y+\'D\',2L:\'2l\'});k.x.2f=O.44}q(/^W/.14(p))O.F.W=59+\'D\';q(/^6a/.14(p))m.T(O,{W:\'50%\',48:(59-1d.56(O.3u/2))+\'D\'});q(/^2S/.14(p))O.F.2S=-59+\'D\';q(/^42$/.14(p)){m.T(O,{18:(-k.x.1B-k.x.Y)+\'D\',2o:(-k.x.2f-k.x.Y)+\'D\',2S:\'1V%\',7N:k.y.Y+\'D\',M:\'2l\'});k.y.1B=O.3u}K q(/^4r$/.14(p)){m.T(O,{1e:\'6j\',18:(-k.x.1B-k.x.Y)+\'D\',2o:(-k.x.2f-k.x.Y)+\'D\',W:\'1V%\',48:k.y.Y+\'D\',M:\'2l\'});k.y.2f=O.3u;O.F.1e=\'29\'}},80:A(){k.7Z([\'4P\',\'9i\'],G);q(k.4P&&k.68)k.4P.1g+=\' 1c-3c\';q(m.7W)k.8c();S(u i=0;i<m.1v.X;i++){u o=m.1v[i],5d=o.5Y,4n=o.3b;q((!5d&&!4n)||(5d&&5d==k.4Q)||(4n&&4n===k.3b)){k.49(o)}}u 4k=[];S(u i=0;i<k.1v.X;i++){u o=m.$(\'2a\'+k.1v[i]);q(/6z$/.14(o.1e))k.4m(o);K m.2e(4k,o)}S(u i=0;i<4k.X;i++)k.4m(4k[i]);k.82=G},7C:A(){q(!k.1r)k.1r=m.Z(\'1O\',{1g:k.60},{1e:\'29\',M:(k.x.I||(k.2d?k.M:H)||k.x.U)+\'D\',16:(k.y.I||k.y.U)+\'D\',1b:\'1i\',2L:\'1i\',1p:m.1P?4:\'2l\'},m.20,G)},35:A(6p,7D){u 1r=k.1r,x=k.x,y=k.y;m.T(1r,{M:x.I+\'D\',16:y.I+\'D\'});q(6p||7D){S(u i=0;i<k.1v.X;i++){u o=m.$(\'2a\'+k.1v[i]);u 6C=(m.3j||L.5a==\'5K\');q(o&&/^(42|4r)$/.14(o.1e)){q(6C){o.F.M=(1r.44+2*x.Y+x.1B+x.2f)+\'D\'}y[o.1e==\'42\'?\'1B\':\'2f\']=o.3u}q(o&&6C&&/^(18|2o)6z$/.14(o.1e)){o.F.16=(1r.3u+2*y.Y)+\'D\'}}}q(6p){m.T(k.11,{W:y.1B+\'D\'});m.T(1r,{W:(y.1B+y.Y)+\'D\'})}},8d:A(){u b=k.1r;b.1g=\'\';m.T(b,{W:(k.y.1B+k.y.Y)+\'D\',18:(k.x.1B+k.x.Y)+\'D\',2L:\'1X\'});q(m.4D)b.F.1b=\'1X\';k.V.2g(b);S(u i=0;i<k.1v.X;i++){u o=m.$(\'2a\'+k.1v[i]);o.F.1p=o.1p||4;q(!o.4K||k.6q){o.F.1b=\'1X\';m.T(o,{1b:\'1X\',3q:\'\'});m.3p(o,{1o:o.1o},o.2p)}}},8v:A(){q(!k.1v.X)C;m.3t(k.1r)},8p:A(){k.4M=m.Z(\'a\',{3y:\'8u:m.N[\'+k.R+\'].5M();\',3w:m.1F.88,1g:\'1c-U-4b\'});k.49({4x:k.4M,1e:m.7z,4K:G,1o:m.7O})},5M:A(){1z{q(k.4M)m.3t(k.4M);k.3k();u 1N=k.x.I,24=k.y.I;k.5L(k.x.U,k.y.U);u 4G=k.x.E-(k.x.I-1N)/2;q(4G<m.43)4G=m.43;u 4t=k.y.E-(k.y.I-24)/2;q(4t<m.48)4t=m.48;k.5v(4G,4t);k.45(\'1i\')}1C(e){k.5Q(e)}},5P:A(){k.a.1g=k.a.1g.31(\'1c-7P-7Q\',\'\');k.45(\'1X\');q(k.19&&k.2R)k.19.4q();m.3t(k.V);m.N[k.R]=H;m.7Y()}};m.4O=m.1F;u 9G=m.46;q(m.1P&&1n==1n.W){(A(){1z{L.3i.a4(\'18\')}1C(e){5S(87.ag,50);C}m.2H()})()}m.1D(L,\'ai\',m.2H);m.1D(1n,\'6M\',m.2H);m.1D(L,\'2H\',A(){q(m.4l){u F=m.Z(\'F\',{J:\'am/5s\'},H,L.4U(\'ap\')[0]),6G=L.5a==\'5K\';A 4L(5A,5F){q(m.1P&&(m.1R<9||6G)){u 2G=L.6J[L.6J.X-1];q(1m(2G.4L)=="5I")2G.4L(5A,5F)}K{F.2g(L.a6(5A+" {"+5F+"}"))}}A 9T(Q){C\'9S( ( ( 9R = L.3i.\'+Q+\' ? L.3i.\'+Q+\' : L.4J.\'+Q+\' ) ) + \\\'D\\\' );\'}q(m.4l)4L(\'.1c 1f\',\'2N: 5T(\'+m.47+m.4l+\'), 4i !ae;\')}});m.1D(1n,\'2T\',A(){m.4N()});m.1D(L,\'6w\',A(e){m.4B={x:e.4z,y:e.4o}});m.1D(L,\'7o\',m.6i);m.1D(L,\'7i\',m.6i);m.1D(L,\'2H\',m.51);m.1D(1n,\'6M\',m.7E)}',62,663,'||||||||||||||||||||this||hs||||if||||var|||||exp|function|el|return|px|pos|style|true|null|size|type|else|document|width|expanders|overlay|get|prop|key|for|setStyles|full|wrapper|top|length|cb|createElement||content|||test||height|els|left|outline|false|visibility|highslide|Math|position|img|className|outlineType|hidden|offset|fx|src|typeof|window|opacity|zIndex|case|overlayBox|tpos|id|wsize|overlays|options|dim|imgSize|try|next|p1|catch|addEventListener|loading|lang|event|td|hiddenBy|easing|ratio|to|target|xSize|div|ie|elem|uaVersion|new|minSize|dragArgs|100|op|visible|image|undefined|container|params|min|up|ySize|opt|contentType||table|absolute|hsId|name|arr|useBox|push|p2|appendChild|close|func|tb|graphic|auto|changed|elPos|right|dur|extend|opera|groups|by|focusKey|val|wh|step|args|custom|timers|scroll|getExpander|ucwh|hasDragged|styles|last|ready|now|page|marginMin|overflow|unit|cursor|start|onLoad|pendingOutlines|outlineWhileAnimating|bottom|resize|clone|parentNode|upcoming|match|ieLt9|duration|re|replace||||sizeOverlayBox|images||||attribs|slideshowGroup|move|removeEventListener|styleRestoreCursor|isImage|number|end|documentElement|ieLt7|focus|moveOnly|while|justify|fitsize|animate|display|none|allowReduce|discardElement|offsetHeight|in|title|onclick|href|Id|setPosition|getNode|isExpanded|iebody|getParams|idCounter|innerHTML|keyHandler|fac|param|minHeight|zIndexCounter|blurExp|allowSizeReduction|uclt|filter|opos|all|restoreCursor|setAttribute|preloadTheseImages|padToMinWidth|navigator|9999px|minWidth|on||Outline|above|marginLeft|offsetWidth|doShowHide|Expander|graphicsDir|marginTop|createOverlay|onReady|expand|curAnim|gotoEnd|previousOrNext|showHideElements|tagName|imgPad|pointer|wrapperKey|os|expandCursor|positionOverlay|sg|clientY|anchors|destroy|below|node|ypos|expOnly|relatedTarget|scrollLeft|overlayId|scrollTop|clientX|preloadFullImage|mouse|over|safari|isHsAnchor|preventDefault|xpos|self|marginMax|body|hideOnMouseOut|addRule|fullExpandLabel|getPageSize|langDefaults|heading|thumbsUserSetId|keypress|onload|keydown|getElementsByTagName|userAgent|Dimension|maxWidth|tr|html||getAnchors|onLoadStarted|prototype|topmostKey|clientSize|round|offX|toLowerCase|offY|compatMode|dX|250|tId|Create|ucrb|calcThumb|margin|overrides|continuePreloading|garbageBin|getSrc|getAdjacentAnchor|isReady|lt|mY|maxHeight|getParam|css|openerTagNames|mX|moveTo|calcBorders|startTime|complete|done|sel|calcExpanded|update|hasMovedMin|state|dec|maxsize|showLoading|object|hasAlphaImageLoader|BackCompat|resizeTo|doFullExpand|connectOutline|loadingPos|afterClose|error|tbody|setTimeout|url|numberOfImagesToPreload|restoreTitle|blur|topZ|thumbnailId|setPos|wrapperClassName|origProp|getPosition|defaultView|osize|getWrapperKey|adj|max|dragByHeading|string|middle|Click|center|fade|changeSize|parent|parseFloat|setSize|mouseClickHandler|relative|isClosing|element|clones|distance|dY|doWrapper|mouseIsOver|break|Text|cancelLoading|types|credits|mousemove|srcElement|init|panel|cur|hasFocused|ie6|dragHandler|pThis|JS|backCompat|vis|Highslide|styleSheets|loadingText|loadingTitle|load|onGraphicLoad|and|ltr|offsetX|captionOverlay|tag|appendTo|nopad|rv|200|headingOverlay|hide|easeInQuad||pageXOffset|clickX|getTime|transit||clickY|call|Date|previous|focusTopmost|from|form|timerId|enableKeyListener|cloneNode|loadingOpacity|orig|mouseup|clientWidth|alpha|detachEvent|offsetParent|offsetLeft|mousedown|updateAnchors|pow|_default|offsetTop|preloadGraphic|switch|525|prepareNextOutline|rightpanel|restoreDuration|fullExpandPosition|after|afterExpand|genOverlayBox|doPanels|preloadImages|toString|clearsX|getAttribute|block|marginRight|preloadNext|indexOf|clearsY|marginBottom|fullExpandOpacity|active|anchor|correctRatio|fitOverlayBox|focusTitle|show|hand|showCredits|tmpMin|reOrder|getInline|getOverlays|contentLoaded|gotOverlays|nextSibling|expandDuration|easingClose|fadeInOut|arguments|fullExpandTitle|creditsPosition|direction|creditsTitle|writeCredits|showOverlays|creditsText|hideIframes|wrapperMouseHandler|pageOrigin|Eval|allowMultipleInstances|thumb|cssDirection|offsetY|leftpanel|creditsTarget|createFullExpand|getAnchorIndex|current|getPropertyValue|_|javascript|destroyOverlays|addOverlay|creditsHref|geckoMac|Overlay|hideSelects|getComputedStyle|hasHtmlExpanders|xpand|returnValue|keyCode|registerOverlay|IFRAME|button|htmlE|SELECT|currentStyle|zoomin|zoomout|graphics|keys|arrow|1001|outlineStartOffset|200px|_self|com|http|Use|drag|front|Expand|bring|cancel|Loading|actual|Powered|click|homepage|the||Go|drop|shadow|border|removeAttribute|padding|default|getElementById|caption|toUpperCase|pageYOffset|innerHeight|clientHeight|innerWidth|Gecko|Macintosh|headingId|headingText|captionEval|captionText|captionId|headingEval|oPos|Safari|ra|it|Trident|abs|toElement|oncontextmenu|stl|message|HsExpander|location|scale|background|outlinesDir|lineNumber|setInterval|png|outlines|splice|clearInterval|ignoreMe|expression|fix|DXImageTransform|cellSpacing|Microsoft|borderCollapse|collapse|lineHeight|progid|AlphaImageLoader|flushImgSize|tgt|doScroll|tgtArr|createTextNode|sqrt|sizingMethod|Line|alert|readyState|attachEvent|allowSimultaneousLoading|important|imageCreate|callee|eval|DOMContentLoaded|RegExp|isHtml|dragSensitivity|text|fromElement|mouseover|HEAD|blockRightClick|Left||linearTween|Top|Height|vendor|Width|KDE|Right|Bottom|onmouseover|parseInt|onmouseout|debug|fontSize|rb'.split('|'),0,{})) diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/nextgen_highslide_init.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/nextgen_highslide_init.js index 6269bf0afb82afa9b117f4afd58019c138f1866a..f4d7c5c1c79bc56ab2d568b7c51c674d3040227e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/nextgen_highslide_init.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/highslide/nextgen_highslide_init.js @@ -1,15 +1,15 @@ // Apply default settings var galleryOptions = { - align: 'center', - dimmingOpacity: 0.8, - fadeInOut: true, - marginBottom: 80, - marginLeft: 100, - numberPosition: 'caption', - slideshowGroup: 'gallery', - transitions: ['expand', 'crossfade'], - wrapperClassName: 'dark borderless floating-caption', - graphicsDir: nextgen_highslide_graphics_dir + '/' + align: 'center', + dimmingOpacity: 0.8, + fadeInOut: true, + marginBottom: 80, + marginLeft: 100, + numberPosition: 'caption', + slideshowGroup: 'gallery', + transitions: ['expand', 'crossfade'], + wrapperClassName: 'dark borderless floating-caption', + graphicsDir: nextgen_highslide_graphics_dir + '/' }; hs.align = galleryOptions['align']; @@ -23,15 +23,23 @@ hs.showCredits = galleryOptions['showCredits']; hs.graphicsDir = galleryOptions['graphicsDir']; hs.wrapperClassName = galleryOptions['wrapperClassName']; -// Enable slideshows -hs.addSlideshow({ - fixedControls: true, - interval: 5000, - overlayOptions: { - hideOnMouseOut: true, - opacity: .6, - position: 'top center' - }, - repeat: true, - useControls: true +jQuery(function($) { + var selector = nextgen_lightbox_filter_selector($, $([])); + selector.addClass('highslide'); + selector.click(function () { return hs.expand(this) }); + + hs.updateAnchors(); + + // Enable slideshows + hs.addSlideshow({ + fixedControls: true, + interval: 5000, + overlayOptions: { + hideOnMouseOut: true, + opacity: .6, + position: 'top center' + }, + repeat: true, + useControls: true + }); }); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.css index 5805977996ae33ed31e0010efb87925e6df2bd9b..d1e1ff6063560d5f8770c19856d051999654cb06 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.css @@ -1,103 +1,103 @@ -/** - * jQuery lightBox plugin - * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) - * and adapted to me for use like a plugin from jQuery. - * @name jquery-lightbox-0.5.css - * @author Leandro Vieira Pinho - http://leandrovieira.com - * @version 0.5 - * @date April 11, 2008 - * @category jQuery plugin - * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com) - * @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US - * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin - */ -#jquery-overlay { - position: absolute; - top: 0; - left: 0; - z-index: 10090; - width: 100%; - height: 500px; -} -#jquery-lightbox { - position: absolute; - top: 0; - left: 0; - width: 100%; - z-index: 10100; - text-align: center; - line-height: 0; -} -#jquery-lightbox a img { border: none; } -#lightbox-container-image-box { - position: relative; - background-color: #fff; - width: 250px; - height: 250px; - margin: 0 auto; -} -#lightbox-container-image { padding: 10px; } -#lightbox-loading { - position: absolute; - top: 40%; - left: 0%; - height: 25%; - width: 100%; - text-align: center; - line-height: 0; -} -#lightbox-nav { - position: absolute; - top: 0; - left: 0; - height: 100%; - width: 100%; - z-index: 10010; -} -#lightbox-container-image-box > #lightbox-nav { left: 0; } -#lightbox-nav a { outline: none;} -#lightbox-nav-btnPrev, #lightbox-nav-btnNext { - width: 49%; - height: 100%; - zoom: 1; - display: block; -} -#lightbox-nav-btnPrev { - left: 0; - float: left; -} -#lightbox-nav-btnNext { - right: 0; - float: right; -} -#lightbox-container-image-data-box { - font: 10px Verdana, Helvetica, sans-serif; - background-color: #fff; - margin: 0 auto; - line-height: 1.4em; - overflow: auto; - width: 100%; - padding: 0 10px 0; - position: relative; - min-height: 32px; -} -#lightbox-container-image-data { - padding: 0 10px; - color: #666; -} -#lightbox-container-image-data #lightbox-image-details { - width: 70%; - float: left; - text-align: left; -} -#lightbox-image-details-caption { font-weight: bold; } -#lightbox-image-details-currentNumber { - display: block; - clear: left; - padding-bottom: 1.0em; -} -#lightbox-secNav-btnClose { - width: 66px; - float: right; - padding-bottom: 0.7em; -} +/** + * jQuery lightBox plugin + * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) + * and adapted to me for use like a plugin from jQuery. + * @name jquery-lightbox-0.5.css + * @author Leandro Vieira Pinho - http://leandrovieira.com + * @version 0.5 + * @date April 11, 2008 + * @category jQuery plugin + * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com) + * @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US + * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin + */ +#jquery-overlay { + position: absolute; + top: 0; + left: 0; + z-index: 10090; + width: 100%; + height: 500px; +} +#jquery-lightbox { + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 10100; + text-align: center; + line-height: 0; +} +#jquery-lightbox a img { border: none; } +#lightbox-container-image-box { + position: relative; + background-color: #fff; + width: 250px; + height: 250px; + margin: 0 auto; +} +#lightbox-container-image { padding: 10px; } +#lightbox-loading { + position: absolute; + top: 40%; + left: 0%; + height: 25%; + width: 100%; + text-align: center; + line-height: 0; +} +#lightbox-nav { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 10010; +} +#lightbox-container-image-box > #lightbox-nav { left: 0; } +#lightbox-nav a { outline: none;} +#lightbox-nav-btnPrev, #lightbox-nav-btnNext { + width: 49%; + height: 100%; + zoom: 1; + display: block; +} +#lightbox-nav-btnPrev { + left: 0; + float: left; +} +#lightbox-nav-btnNext { + right: 0; + float: right; +} +#lightbox-container-image-data-box { + font: 10px Verdana, Helvetica, sans-serif; + background-color: #fff; + margin: 0 auto; + line-height: 1.4em; + overflow: auto; + width: 100%; + padding: 0 10px 0; + position: relative; + min-height: 32px; +} +#lightbox-container-image-data { + padding: 0 10px; + color: #666; +} +#lightbox-container-image-data #lightbox-image-details { + width: 70%; + float: left; + text-align: left; +} +#lightbox-image-details-caption { font-weight: bold; } +#lightbox-image-details-currentNumber { + display: block; + clear: left; + padding-bottom: 1.0em; +} +#lightbox-secNav-btnClose { + width: 66px; + float: right; + padding-bottom: 0.7em; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.js index 28a61bbf63afadc3d7e491f4946ed62d3df73bb3..eef6425e0f1a62e317ce03803d45f3a03bb3ce7a 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.js @@ -1,472 +1,472 @@ -/** - * jQuery lightBox plugin - * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) - * and adapted to me for use like a plugin from jQuery. - * @name jquery-lightbox-0.5.js - * @author Leandro Vieira Pinho - http://leandrovieira.com - * @version 0.5 - * @date April 11, 2008 - * @category jQuery plugin - * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com) - * @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US - * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin - */ - -// Offering a Custom Alias suport - More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias -(function($) { - /** - * $ is an alias to jQuery object - * - */ - $.fn.lightBox = function(settings) { - // Settings to configure the jQuery lightBox plugin how you like - settings = jQuery.extend({ - // Configuration related to overlay - overlayBgColor: '#000', // (string) Background color to overlay; inform a hexadecimal value like: #RRGGBB. Where RR, GG, and BB are the hexadecimal values for the red, green, and blue values of the color. - overlayOpacity: 0.8, // (integer) Opacity value to overlay; inform: 0.X. Where X are number from 0 to 9 - // Configuration related to navigation - fixedNavigation: false, // (boolean) Boolean that informs if the navigation (next and prev button) will be fixed or not in the interface. - // Configuration related to images - imageLoading: 'images/lightbox-ico-loading.gif', // (string) Path and the name of the loading icon - imageBtnPrev: 'images/lightbox-btn-prev.gif', // (string) Path and the name of the prev button image - imageBtnNext: 'images/lightbox-btn-next.gif', // (string) Path and the name of the next button image - imageBtnClose: 'images/lightbox-btn-close.gif', // (string) Path and the name of the close btn - imageBlank: 'images/lightbox-blank.gif', // (string) Path and the name of a blank image (one pixel) - // Configuration related to container image box - containerBorderSize: 10, // (integer) If you adjust the padding in the CSS for the container, #lightbox-container-image-box, you will need to update this value - containerResizeSpeed: 400, // (integer) Specify the resize duration of container image. These number are miliseconds. 400 is default. - // Configuration related to texts in caption. For example: Image 2 of 8. You can alter either "Image" and "of" texts. - txtImage: 'Image', // (string) Specify text "Image" - txtOf: 'of', // (string) Specify text "of" - // Configuration related to keyboard navigation - keyToClose: 'c', // (string) (c = close) Letter to close the jQuery lightBox interface. Beyond this letter, the letter X and the SCAPE key is used to. - keyToPrev: 'p', // (string) (p = previous) Letter to show the previous image - keyToNext: 'n', // (string) (n = next) Letter to show the next image. - // Don�t alter these variables in any way - imageArray: [], - activeImage: 0 - },settings); - // Caching the jQuery object with all elements matched - var jQueryMatchedObj = this; // This, in this context, refer to jQuery object - /** - * Initializing the plugin calling the start function - * - * @return boolean false - */ - function _initialize() { - _start(this,jQueryMatchedObj); // This, in this context, refer to object (link) which the user have clicked - return false; // Avoid the browser following the link - } - /** - * Start the jQuery lightBox plugin - * - * @param object objClicked The object (link) whick the user have clicked - * @param object jQueryMatchedObj The jQuery object with all elements matched - */ - function _start(objClicked,jQueryMatchedObj) { - // Hime some elements to avoid conflict with overlay in IE. These elements appear above the overlay. - $('embed, object, select').css({ 'visibility' : 'hidden' }); - // Call the function to create the markup structure; style some elements; assign events in some elements. - _set_interface(); - // Unset total images in imageArray - settings.imageArray.length = 0; - // Unset image active information - settings.activeImage = 0; - // We have an image set? Or just an image? Let�s see it. - if ( jQueryMatchedObj.length == 1 ) { - settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title'))); - } else { - // Add an Array (as many as we have), with href and title atributes, inside the Array that storage the images references - for ( var i = 0; i < jQueryMatchedObj.length; i++ ) { - settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title'))); - } - } - while ( settings.imageArray[settings.activeImage][0] != objClicked.getAttribute('href') ) { - settings.activeImage++; - } - // Call the function that prepares image exibition - _set_image_to_view(); - } - /** - * Create the jQuery lightBox plugin interface - * - * The HTML markup will be like that: - <div id="jquery-overlay"></div> - <div id="jquery-lightbox"> - <div id="lightbox-container-image-box"> - <div id="lightbox-container-image"> - <img src="../fotos/XX.jpg" id="lightbox-image"> - <div id="lightbox-nav"> - <a href="#" id="lightbox-nav-btnPrev"></a> - <a href="#" id="lightbox-nav-btnNext"></a> - </div> - <div id="lightbox-loading"> - <a href="#" id="lightbox-loading-link"> - <img src="../images/lightbox-ico-loading.gif"> - </a> - </div> - </div> - </div> - <div id="lightbox-container-image-data-box"> - <div id="lightbox-container-image-data"> - <div id="lightbox-image-details"> - <span id="lightbox-image-details-caption"></span> - <span id="lightbox-image-details-currentNumber"></span> - </div> - <div id="lightbox-secNav"> - <a href="#" id="lightbox-secNav-btnClose"> - <img src="../images/lightbox-btn-close.gif"> - </a> - </div> - </div> - </div> - </div> - * - */ - function _set_interface() { - // Apply the HTML markup into body tag - $('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="' + settings.imageLoading + '"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="' + settings.imageBtnClose + '"></a></div></div></div></div>'); - // Get page sizes - var arrPageSizes = ___getPageSize(); - // Style overlay and show it - $('#jquery-overlay').css({ - backgroundColor: settings.overlayBgColor, - opacity: settings.overlayOpacity, - width: arrPageSizes[0], - height: arrPageSizes[1] - }).fadeIn(); - // Get page scroll - var arrPageScroll = ___getPageScroll(); - // Calculate top and left offset for the jquery-lightbox div object and show it - $('#jquery-lightbox').css({ - top: arrPageScroll[1] + (arrPageSizes[3] / 10), - left: arrPageScroll[0] - }).show(); - // Assigning click events in elements to close overlay - $('#jquery-overlay,#jquery-lightbox').click(function() { - _finish(); - }); - // Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects - $('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function() { - _finish(); - return false; - }); - // If window was resized, calculate the new overlay dimensions - $(window).resize(function() { - // Get page sizes - var arrPageSizes = ___getPageSize(); - // Style overlay and show it - $('#jquery-overlay').css({ - width: arrPageSizes[0], - height: arrPageSizes[1] - }); - // Get page scroll - var arrPageScroll = ___getPageScroll(); - // Calculate top and left offset for the jquery-lightbox div object and show it - $('#jquery-lightbox').css({ - top: arrPageScroll[1] + (arrPageSizes[3] / 10), - left: arrPageScroll[0] - }); - }); - } - /** - * Prepares image exibition; doing a image�s preloader to calculate it�s size - * - */ - function _set_image_to_view() { // show the loading - // Show the loading - $('#lightbox-loading').show(); - if ( settings.fixedNavigation ) { - $('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide(); - } else { - // Hide some elements - $('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide(); - } - // Image preload process - var objImagePreloader = new Image(); - objImagePreloader.onload = function() { - $('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]); - // Perfomance an effect in the image container resizing it - _resize_container_image_box(objImagePreloader.width,objImagePreloader.height); - // clear onLoad, IE behaves irratically with animated gifs otherwise - objImagePreloader.onload=function(){}; - }; - objImagePreloader.src = settings.imageArray[settings.activeImage][0]; - }; - /** - * Perfomance an effect in the image container resizing it - * - * @param integer intImageWidth The image�s width that will be showed - * @param integer intImageHeight The image�s height that will be showed - */ - function _resize_container_image_box(intImageWidth,intImageHeight) { - // Get current width and height - var intCurrentWidth = $('#lightbox-container-image-box').width(); - var intCurrentHeight = $('#lightbox-container-image-box').height(); - // Get the width and height of the selected image plus the padding - var intWidth = (intImageWidth + (settings.containerBorderSize * 2)); // Plus the image�s width and the left and right padding value - var intHeight = (intImageHeight + (settings.containerBorderSize * 2)); // Plus the image�s height and the left and right padding value - // Diferences - var intDiffW = intCurrentWidth - intWidth; - var intDiffH = intCurrentHeight - intHeight; - // Perfomance the effect - $('#lightbox-container-image-box').animate({ width: intWidth, height: intHeight },settings.containerResizeSpeed,function() { _show_image(); }); - if ( ( intDiffW == 0 ) && ( intDiffH == 0 ) ) { - if ( $.browser.msie ) { - ___pause(250); - } else { - ___pause(100); - } - } - $('#lightbox-container-image-data-box').css({ width: intImageWidth }); - $('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ height: intImageHeight + (settings.containerBorderSize * 2) }); - }; - /** - * Show the prepared image - * - */ - function _show_image() { - $('#lightbox-loading').hide(); - $('#lightbox-image').fadeIn(function() { - _show_image_data(); - _set_navigation(); - }); - _preload_neighbor_images(); - }; - /** - * Show the image information - * - */ - function _show_image_data() { - $('#lightbox-container-image-data-box').slideDown('fast'); - $('#lightbox-image-details-caption').hide(); - if ( settings.imageArray[settings.activeImage][1] ) { - $('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show(); - } - // If we have a image set, display 'Image X of X' - if ( settings.imageArray.length > 1 ) { - $('#lightbox-image-details-currentNumber').html(settings.txtImage + ' ' + ( settings.activeImage + 1 ) + ' ' + settings.txtOf + ' ' + settings.imageArray.length).show(); - } - } - /** - * Display the button navigations - * - */ - function _set_navigation() { - $('#lightbox-nav').show(); - - // Instead to define this configuration in CSS file, we define here. And it�s need to IE. Just. - $('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' }); - - // Show the prev button, if not the first image in set - if ( settings.activeImage != 0 ) { - if ( settings.fixedNavigation ) { - $('#lightbox-nav-btnPrev').css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' }) - .unbind() - .bind('click',function() { - settings.activeImage = settings.activeImage - 1; - _set_image_to_view(); - return false; - }); - } else { - // Show the images button for Next buttons - $('#lightbox-nav-btnPrev').unbind().hover(function() { - $(this).css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' }); - },function() { - $(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' }); - }).show().bind('click',function() { - settings.activeImage = settings.activeImage - 1; - _set_image_to_view(); - return false; - }); - } - } - - // Show the next button, if not the last image in set - if ( settings.activeImage != ( settings.imageArray.length -1 ) ) { - if ( settings.fixedNavigation ) { - $('#lightbox-nav-btnNext').css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' }) - .unbind() - .bind('click',function() { - settings.activeImage = settings.activeImage + 1; - _set_image_to_view(); - return false; - }); - } else { - // Show the images button for Next buttons - $('#lightbox-nav-btnNext').unbind().hover(function() { - $(this).css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' }); - },function() { - $(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' }); - }).show().bind('click',function() { - settings.activeImage = settings.activeImage + 1; - _set_image_to_view(); - return false; - }); - } - } - // Enable keyboard navigation - _enable_keyboard_navigation(); - } - /** - * Enable a support to keyboard navigation - * - */ - function _enable_keyboard_navigation() { - $(document).keydown(function(objEvent) { - _keyboard_action(objEvent); - }); - } - /** - * Disable the support to keyboard navigation - * - */ - function _disable_keyboard_navigation() { - $(document).unbind(); - } - /** - * Perform the keyboard actions - * - */ - function _keyboard_action(objEvent) { - // To ie - if ( objEvent == null ) { - keycode = event.keyCode; - escapeKey = 27; - // To Mozilla - } else { - keycode = objEvent.keyCode; - escapeKey = objEvent.DOM_VK_ESCAPE; - } - // Get the key in lower case form - key = String.fromCharCode(keycode).toLowerCase(); - // Verify the keys to close the ligthBox - if ( ( key == settings.keyToClose ) || ( key == 'x' ) || ( keycode == escapeKey ) ) { - _finish(); - } - // Verify the key to show the previous image - if ( ( key == settings.keyToPrev ) || ( keycode == 37 ) ) { - // If we�re not showing the first image, call the previous - if ( settings.activeImage != 0 ) { - settings.activeImage = settings.activeImage - 1; - _set_image_to_view(); - _disable_keyboard_navigation(); - } - } - // Verify the key to show the next image - if ( ( key == settings.keyToNext ) || ( keycode == 39 ) ) { - // If we�re not showing the last image, call the next - if ( settings.activeImage != ( settings.imageArray.length - 1 ) ) { - settings.activeImage = settings.activeImage + 1; - _set_image_to_view(); - _disable_keyboard_navigation(); - } - } - } - /** - * Preload prev and next images being showed - * - */ - function _preload_neighbor_images() { - if ( (settings.imageArray.length -1) > settings.activeImage ) { - objNext = new Image(); - objNext.src = settings.imageArray[settings.activeImage + 1][0]; - } - if ( settings.activeImage > 0 ) { - objPrev = new Image(); - objPrev.src = settings.imageArray[settings.activeImage -1][0]; - } - } - /** - * Remove jQuery lightBox plugin HTML markup - * - */ - function _finish() { - $('#jquery-lightbox').remove(); - $('#jquery-overlay').fadeOut(function() { $('#jquery-overlay').remove(); }); - // Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay. - $('embed, object, select').css({ 'visibility' : 'visible' }); - } - /** - / THIRD FUNCTION - * getPageSize() by quirksmode.com - * - * @return Array Return an array with page width, height and window width, height - */ - function ___getPageSize() { - var xScroll, yScroll; - if (window.innerHeight && window.scrollMaxY) { - xScroll = window.innerWidth + window.scrollMaxX; - yScroll = window.innerHeight + window.scrollMaxY; - } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac - xScroll = document.body.scrollWidth; - yScroll = document.body.scrollHeight; - } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari - xScroll = document.body.offsetWidth; - yScroll = document.body.offsetHeight; - } - var windowWidth, windowHeight; - if (self.innerHeight) { // all except Explorer - if(document.documentElement.clientWidth){ - windowWidth = document.documentElement.clientWidth; - } else { - windowWidth = self.innerWidth; - } - windowHeight = self.innerHeight; - } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode - windowWidth = document.documentElement.clientWidth; - windowHeight = document.documentElement.clientHeight; - } else if (document.body) { // other Explorers - windowWidth = document.body.clientWidth; - windowHeight = document.body.clientHeight; - } - // for small pages with total height less then height of the viewport - if(yScroll < windowHeight){ - pageHeight = windowHeight; - } else { - pageHeight = yScroll; - } - // for small pages with total width less then width of the viewport - if(xScroll < windowWidth){ - pageWidth = xScroll; - } else { - pageWidth = windowWidth; - } - arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight); - return arrayPageSize; - }; - /** - / THIRD FUNCTION - * getPageScroll() by quirksmode.com - * - * @return Array Return an array with x,y page scroll values. - */ - function ___getPageScroll() { - var xScroll, yScroll; - if (self.pageYOffset) { - yScroll = self.pageYOffset; - xScroll = self.pageXOffset; - } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict - yScroll = document.documentElement.scrollTop; - xScroll = document.documentElement.scrollLeft; - } else if (document.body) {// all other Explorers - yScroll = document.body.scrollTop; - xScroll = document.body.scrollLeft; - } - arrayPageScroll = new Array(xScroll,yScroll); - return arrayPageScroll; - }; - /** - * Stop the code execution from a escified time in milisecond - * - */ - function ___pause(ms) { - var date = new Date(); - curDate = null; - do { var curDate = new Date(); } - while ( curDate - date < ms); - }; - // Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once - return this.unbind('click').click(_initialize); - }; +/** + * jQuery lightBox plugin + * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) + * and adapted to me for use like a plugin from jQuery. + * @name jquery-lightbox-0.5.js + * @author Leandro Vieira Pinho - http://leandrovieira.com + * @version 0.5 + * @date April 11, 2008 + * @category jQuery plugin + * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com) + * @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US + * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin + */ + +// Offering a Custom Alias suport - More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias +(function($) { + /** + * $ is an alias to jQuery object + * + */ + $.fn.lightBox = function(settings) { + // Settings to configure the jQuery lightBox plugin how you like + settings = jQuery.extend({ + // Configuration related to overlay + overlayBgColor: '#000', // (string) Background color to overlay; inform a hexadecimal value like: #RRGGBB. Where RR, GG, and BB are the hexadecimal values for the red, green, and blue values of the color. + overlayOpacity: 0.8, // (integer) Opacity value to overlay; inform: 0.X. Where X are number from 0 to 9 + // Configuration related to navigation + fixedNavigation: false, // (boolean) Boolean that informs if the navigation (next and prev button) will be fixed or not in the interface. + // Configuration related to images + imageLoading: 'images/lightbox-ico-loading.gif', // (string) Path and the name of the loading icon + imageBtnPrev: 'images/lightbox-btn-prev.gif', // (string) Path and the name of the prev button image + imageBtnNext: 'images/lightbox-btn-next.gif', // (string) Path and the name of the next button image + imageBtnClose: 'images/lightbox-btn-close.gif', // (string) Path and the name of the close btn + imageBlank: 'images/lightbox-blank.gif', // (string) Path and the name of a blank image (one pixel) + // Configuration related to container image box + containerBorderSize: 10, // (integer) If you adjust the padding in the CSS for the container, #lightbox-container-image-box, you will need to update this value + containerResizeSpeed: 400, // (integer) Specify the resize duration of container image. These number are miliseconds. 400 is default. + // Configuration related to texts in caption. For example: Image 2 of 8. You can alter either "Image" and "of" texts. + txtImage: 'Image', // (string) Specify text "Image" + txtOf: 'of', // (string) Specify text "of" + // Configuration related to keyboard navigation + keyToClose: 'c', // (string) (c = close) Letter to close the jQuery lightBox interface. Beyond this letter, the letter X and the SCAPE key is used to. + keyToPrev: 'p', // (string) (p = previous) Letter to show the previous image + keyToNext: 'n', // (string) (n = next) Letter to show the next image. + // Don�t alter these variables in any way + imageArray: [], + activeImage: 0 + },settings); + // Caching the jQuery object with all elements matched + var jQueryMatchedObj = this; // This, in this context, refer to jQuery object + /** + * Initializing the plugin calling the start function + * + * @return boolean false + */ + function _initialize() { + _start(this,jQueryMatchedObj); // This, in this context, refer to object (link) which the user have clicked + return false; // Avoid the browser following the link + } + /** + * Start the jQuery lightBox plugin + * + * @param object objClicked The object (link) whick the user have clicked + * @param object jQueryMatchedObj The jQuery object with all elements matched + */ + function _start(objClicked,jQueryMatchedObj) { + // Hime some elements to avoid conflict with overlay in IE. These elements appear above the overlay. + $('embed, object, select').css({ 'visibility' : 'hidden' }); + // Call the function to create the markup structure; style some elements; assign events in some elements. + _set_interface(); + // Unset total images in imageArray + settings.imageArray.length = 0; + // Unset image active information + settings.activeImage = 0; + // We have an image set? Or just an image? Let�s see it. + if ( jQueryMatchedObj.length == 1 ) { + settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title'))); + } else { + // Add an Array (as many as we have), with href and title atributes, inside the Array that storage the images references + for ( var i = 0; i < jQueryMatchedObj.length; i++ ) { + settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title'))); + } + } + while ( settings.imageArray[settings.activeImage][0] != objClicked.getAttribute('href') ) { + settings.activeImage++; + } + // Call the function that prepares image exibition + _set_image_to_view(); + } + /** + * Create the jQuery lightBox plugin interface + * + * The HTML markup will be like that: + <div id="jquery-overlay"></div> + <div id="jquery-lightbox"> + <div id="lightbox-container-image-box"> + <div id="lightbox-container-image"> + <img src="../fotos/XX.jpg" id="lightbox-image"> + <div id="lightbox-nav"> + <a href="#" id="lightbox-nav-btnPrev"></a> + <a href="#" id="lightbox-nav-btnNext"></a> + </div> + <div id="lightbox-loading"> + <a href="#" id="lightbox-loading-link"> + <img src="../images/lightbox-ico-loading.gif"> + </a> + </div> + </div> + </div> + <div id="lightbox-container-image-data-box"> + <div id="lightbox-container-image-data"> + <div id="lightbox-image-details"> + <span id="lightbox-image-details-caption"></span> + <span id="lightbox-image-details-currentNumber"></span> + </div> + <div id="lightbox-secNav"> + <a href="#" id="lightbox-secNav-btnClose"> + <img src="../images/lightbox-btn-close.gif"> + </a> + </div> + </div> + </div> + </div> + * + */ + function _set_interface() { + // Apply the HTML markup into body tag + $('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="' + settings.imageLoading + '"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="' + settings.imageBtnClose + '"></a></div></div></div></div>'); + // Get page sizes + var arrPageSizes = ___getPageSize(); + // Style overlay and show it + $('#jquery-overlay').css({ + backgroundColor: settings.overlayBgColor, + opacity: settings.overlayOpacity, + width: arrPageSizes[0], + height: arrPageSizes[1] + }).fadeIn(); + // Get page scroll + var arrPageScroll = ___getPageScroll(); + // Calculate top and left offset for the jquery-lightbox div object and show it + $('#jquery-lightbox').css({ + top: arrPageScroll[1] + (arrPageSizes[3] / 10), + left: arrPageScroll[0] + }).show(); + // Assigning click events in elements to close overlay + $('#jquery-overlay,#jquery-lightbox').click(function() { + _finish(); + }); + // Assign the _finish function to lightbox-loading-link and lightbox-secNav-btnClose objects + $('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function() { + _finish(); + return false; + }); + // If window was resized, calculate the new overlay dimensions + $(window).resize(function() { + // Get page sizes + var arrPageSizes = ___getPageSize(); + // Style overlay and show it + $('#jquery-overlay').css({ + width: arrPageSizes[0], + height: arrPageSizes[1] + }); + // Get page scroll + var arrPageScroll = ___getPageScroll(); + // Calculate top and left offset for the jquery-lightbox div object and show it + $('#jquery-lightbox').css({ + top: arrPageScroll[1] + (arrPageSizes[3] / 10), + left: arrPageScroll[0] + }); + }); + } + /** + * Prepares image exibition; doing a image�s preloader to calculate it�s size + * + */ + function _set_image_to_view() { // show the loading + // Show the loading + $('#lightbox-loading').show(); + if ( settings.fixedNavigation ) { + $('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide(); + } else { + // Hide some elements + $('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide(); + } + // Image preload process + var objImagePreloader = new Image(); + objImagePreloader.onload = function() { + $('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]); + // Perfomance an effect in the image container resizing it + _resize_container_image_box(objImagePreloader.width,objImagePreloader.height); + // clear onLoad, IE behaves irratically with animated gifs otherwise + objImagePreloader.onload=function(){}; + }; + objImagePreloader.src = settings.imageArray[settings.activeImage][0]; + }; + /** + * Perfomance an effect in the image container resizing it + * + * @param integer intImageWidth The image�s width that will be showed + * @param integer intImageHeight The image�s height that will be showed + */ + function _resize_container_image_box(intImageWidth,intImageHeight) { + // Get current width and height + var intCurrentWidth = $('#lightbox-container-image-box').width(); + var intCurrentHeight = $('#lightbox-container-image-box').height(); + // Get the width and height of the selected image plus the padding + var intWidth = (intImageWidth + (settings.containerBorderSize * 2)); // Plus the image�s width and the left and right padding value + var intHeight = (intImageHeight + (settings.containerBorderSize * 2)); // Plus the image�s height and the left and right padding value + // Diferences + var intDiffW = intCurrentWidth - intWidth; + var intDiffH = intCurrentHeight - intHeight; + // Perfomance the effect + $('#lightbox-container-image-box').animate({ width: intWidth, height: intHeight },settings.containerResizeSpeed,function() { _show_image(); }); + if ( ( intDiffW == 0 ) && ( intDiffH == 0 ) ) { + if ( $.browser.msie ) { + ___pause(250); + } else { + ___pause(100); + } + } + $('#lightbox-container-image-data-box').css({ width: intImageWidth }); + $('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ height: intImageHeight + (settings.containerBorderSize * 2) }); + }; + /** + * Show the prepared image + * + */ + function _show_image() { + $('#lightbox-loading').hide(); + $('#lightbox-image').fadeIn(function() { + _show_image_data(); + _set_navigation(); + }); + _preload_neighbor_images(); + }; + /** + * Show the image information + * + */ + function _show_image_data() { + $('#lightbox-container-image-data-box').slideDown('fast'); + $('#lightbox-image-details-caption').hide(); + if ( settings.imageArray[settings.activeImage][1] ) { + $('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show(); + } + // If we have a image set, display 'Image X of X' + if ( settings.imageArray.length > 1 ) { + $('#lightbox-image-details-currentNumber').html(settings.txtImage + ' ' + ( settings.activeImage + 1 ) + ' ' + settings.txtOf + ' ' + settings.imageArray.length).show(); + } + } + /** + * Display the button navigations + * + */ + function _set_navigation() { + $('#lightbox-nav').show(); + + // Instead to define this configuration in CSS file, we define here. And it�s need to IE. Just. + $('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' }); + + // Show the prev button, if not the first image in set + if ( settings.activeImage != 0 ) { + if ( settings.fixedNavigation ) { + $('#lightbox-nav-btnPrev').css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' }) + .unbind() + .bind('click',function() { + settings.activeImage = settings.activeImage - 1; + _set_image_to_view(); + return false; + }); + } else { + // Show the images button for Next buttons + $('#lightbox-nav-btnPrev').unbind().hover(function() { + $(this).css({ 'background' : 'url(' + settings.imageBtnPrev + ') left 15% no-repeat' }); + },function() { + $(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' }); + }).show().bind('click',function() { + settings.activeImage = settings.activeImage - 1; + _set_image_to_view(); + return false; + }); + } + } + + // Show the next button, if not the last image in set + if ( settings.activeImage != ( settings.imageArray.length -1 ) ) { + if ( settings.fixedNavigation ) { + $('#lightbox-nav-btnNext').css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' }) + .unbind() + .bind('click',function() { + settings.activeImage = settings.activeImage + 1; + _set_image_to_view(); + return false; + }); + } else { + // Show the images button for Next buttons + $('#lightbox-nav-btnNext').unbind().hover(function() { + $(this).css({ 'background' : 'url(' + settings.imageBtnNext + ') right 15% no-repeat' }); + },function() { + $(this).css({ 'background' : 'transparent url(' + settings.imageBlank + ') no-repeat' }); + }).show().bind('click',function() { + settings.activeImage = settings.activeImage + 1; + _set_image_to_view(); + return false; + }); + } + } + // Enable keyboard navigation + _enable_keyboard_navigation(); + } + /** + * Enable a support to keyboard navigation + * + */ + function _enable_keyboard_navigation() { + $(document).keydown(function(objEvent) { + _keyboard_action(objEvent); + }); + } + /** + * Disable the support to keyboard navigation + * + */ + function _disable_keyboard_navigation() { + $(document).unbind(); + } + /** + * Perform the keyboard actions + * + */ + function _keyboard_action(objEvent) { + // To ie + if ( objEvent == null ) { + keycode = event.keyCode; + escapeKey = 27; + // To Mozilla + } else { + keycode = objEvent.keyCode; + escapeKey = objEvent.DOM_VK_ESCAPE; + } + // Get the key in lower case form + key = String.fromCharCode(keycode).toLowerCase(); + // Verify the keys to close the ligthBox + if ( ( key == settings.keyToClose ) || ( key == 'x' ) || ( keycode == escapeKey ) ) { + _finish(); + } + // Verify the key to show the previous image + if ( ( key == settings.keyToPrev ) || ( keycode == 37 ) ) { + // If we�re not showing the first image, call the previous + if ( settings.activeImage != 0 ) { + settings.activeImage = settings.activeImage - 1; + _set_image_to_view(); + _disable_keyboard_navigation(); + } + } + // Verify the key to show the next image + if ( ( key == settings.keyToNext ) || ( keycode == 39 ) ) { + // If we�re not showing the last image, call the next + if ( settings.activeImage != ( settings.imageArray.length - 1 ) ) { + settings.activeImage = settings.activeImage + 1; + _set_image_to_view(); + _disable_keyboard_navigation(); + } + } + } + /** + * Preload prev and next images being showed + * + */ + function _preload_neighbor_images() { + if ( (settings.imageArray.length -1) > settings.activeImage ) { + objNext = new Image(); + objNext.src = settings.imageArray[settings.activeImage + 1][0]; + } + if ( settings.activeImage > 0 ) { + objPrev = new Image(); + objPrev.src = settings.imageArray[settings.activeImage -1][0]; + } + } + /** + * Remove jQuery lightBox plugin HTML markup + * + */ + function _finish() { + $('#jquery-lightbox').remove(); + $('#jquery-overlay').fadeOut(function() { $('#jquery-overlay').remove(); }); + // Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay. + $('embed, object, select').css({ 'visibility' : 'visible' }); + } + /** + / THIRD FUNCTION + * getPageSize() by quirksmode.com + * + * @return Array Return an array with page width, height and window width, height + */ + function ___getPageSize() { + var xScroll, yScroll; + if (window.innerHeight && window.scrollMaxY) { + xScroll = window.innerWidth + window.scrollMaxX; + yScroll = window.innerHeight + window.scrollMaxY; + } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac + xScroll = document.body.scrollWidth; + yScroll = document.body.scrollHeight; + } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari + xScroll = document.body.offsetWidth; + yScroll = document.body.offsetHeight; + } + var windowWidth, windowHeight; + if (self.innerHeight) { // all except Explorer + if(document.documentElement.clientWidth){ + windowWidth = document.documentElement.clientWidth; + } else { + windowWidth = self.innerWidth; + } + windowHeight = self.innerHeight; + } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode + windowWidth = document.documentElement.clientWidth; + windowHeight = document.documentElement.clientHeight; + } else if (document.body) { // other Explorers + windowWidth = document.body.clientWidth; + windowHeight = document.body.clientHeight; + } + // for small pages with total height less then height of the viewport + if(yScroll < windowHeight){ + pageHeight = windowHeight; + } else { + pageHeight = yScroll; + } + // for small pages with total width less then width of the viewport + if(xScroll < windowWidth){ + pageWidth = xScroll; + } else { + pageWidth = windowWidth; + } + arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight); + return arrayPageSize; + }; + /** + / THIRD FUNCTION + * getPageScroll() by quirksmode.com + * + * @return Array Return an array with x,y page scroll values. + */ + function ___getPageScroll() { + var xScroll, yScroll; + if (self.pageYOffset) { + yScroll = self.pageYOffset; + xScroll = self.pageXOffset; + } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict + yScroll = document.documentElement.scrollTop; + xScroll = document.documentElement.scrollLeft; + } else if (document.body) {// all other Explorers + yScroll = document.body.scrollTop; + xScroll = document.body.scrollLeft; + } + arrayPageScroll = new Array(xScroll,yScroll); + return arrayPageScroll; + }; + /** + * Stop the code execution from a escified time in milisecond + * + */ + function ___pause(ms) { + var date = new Date(); + curDate = null; + do { var curDate = new Date(); } + while ( curDate - date < ms); + }; + // Return the jQuery object for chaining. The unbind method is used to avoid click conflict when the plugin is called more than once + return this.unbind('click').click(_initialize); + }; })(jQuery); // Call and execute the function immediately passing the jQuery object \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.min.js index 429f0c557c8e2de483abfe39c9e0af34917ebf8e..5f13b0bf6034700af3d3d04ed8426df37bdfc70f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.min.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/jquery.lightbox-0.5.min.js @@ -1,42 +1,42 @@ -/** - * jQuery lightBox plugin - * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) - * and adapted to me for use like a plugin from jQuery. - * @name jquery-lightbox-0.5.js - * @author Leandro Vieira Pinho - http://leandrovieira.com - * @version 0.5 - * @date April 11, 2008 - * @category jQuery plugin - * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com) - * @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US - * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin - */ -(function($){$.fn.lightBox=function(settings){settings=jQuery.extend({overlayBgColor:'#000',overlayOpacity:0.8,fixedNavigation:false,imageLoading:'images/lightbox-ico-loading.gif',imageBtnPrev:'images/lightbox-btn-prev.gif',imageBtnNext:'images/lightbox-btn-next.gif',imageBtnClose:'images/lightbox-btn-close.gif',imageBlank:'images/lightbox-blank.gif',containerBorderSize:10,containerResizeSpeed:400,txtImage:'Image',txtOf:'of',keyToClose:'c',keyToPrev:'p',keyToNext:'n',imageArray:[],activeImage:0},settings);var jQueryMatchedObj=this;function _initialize(){_start(this,jQueryMatchedObj);return false;} -function _start(objClicked,jQueryMatchedObj){$('embed, object, select').css({'visibility':'hidden'});_set_interface();settings.imageArray.length=0;settings.activeImage=0;if(jQueryMatchedObj.length==1){settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title')));}else{for(var i=0;i<jQueryMatchedObj.length;i++){settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title')));}} -while(settings.imageArray[settings.activeImage][0]!=objClicked.getAttribute('href')){settings.activeImage++;} -_set_image_to_view();} -function _set_interface(){$('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="'+settings.imageLoading+'"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="'+settings.imageBtnClose+'"></a></div></div></div></div>');var arrPageSizes=___getPageSize();$('#jquery-overlay').css({backgroundColor:settings.overlayBgColor,opacity:settings.overlayOpacity,width:arrPageSizes[0],height:arrPageSizes[1]}).fadeIn();var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/10),left:arrPageScroll[0]}).show();$('#jquery-overlay,#jquery-lightbox').click(function(){_finish();});$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function(){_finish();return false;});$(window).resize(function(){var arrPageSizes=___getPageSize();$('#jquery-overlay').css({width:arrPageSizes[0],height:arrPageSizes[1]});var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/10),left:arrPageScroll[0]});});} -function _set_image_to_view(){$('#lightbox-loading').show();if(settings.fixedNavigation){$('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();}else{$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();} -var objImagePreloader=new Image();objImagePreloader.onload=function(){$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);objImagePreloader.onload=function(){};};objImagePreloader.src=settings.imageArray[settings.activeImage][0];};function _resize_container_image_box(intImageWidth,intImageHeight){var intCurrentWidth=$('#lightbox-container-image-box').width();var intCurrentHeight=$('#lightbox-container-image-box').height();var intWidth=(intImageWidth+(settings.containerBorderSize*2));var intHeight=(intImageHeight+(settings.containerBorderSize*2));var intDiffW=intCurrentWidth-intWidth;var intDiffH=intCurrentHeight-intHeight;$('#lightbox-container-image-box').animate({width:intWidth,height:intHeight},settings.containerResizeSpeed,function(){_show_image();});if((intDiffW==0)&&(intDiffH==0)){if($.browser.msie){___pause(250);}else{___pause(100);}} -$('#lightbox-container-image-data-box').css({width:intImageWidth});$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({height:intImageHeight+(settings.containerBorderSize*2)});};function _show_image(){$('#lightbox-loading').hide();$('#lightbox-image').fadeIn(function(){_show_image_data();_set_navigation();});_preload_neighbor_images();};function _show_image_data(){$('#lightbox-container-image-data-box').slideDown('fast');$('#lightbox-image-details-caption').hide();if(settings.imageArray[settings.activeImage][1]){$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();} -if(settings.imageArray.length>1){$('#lightbox-image-details-currentNumber').html(settings.txtImage+' '+(settings.activeImage+1)+' '+settings.txtOf+' '+settings.imageArray.length).show();}} -function _set_navigation(){$('#lightbox-nav').show();$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({'background':'transparent url('+settings.imageBlank+') no-repeat'});if(settings.activeImage!=0){if(settings.fixedNavigation){$('#lightbox-nav-btnPrev').css({'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'}).unbind().bind('click',function(){settings.activeImage=settings.activeImage-1;_set_image_to_view();return false;});}else{$('#lightbox-nav-btnPrev').unbind().hover(function(){$(this).css({'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'});},function(){$(this).css({'background':'transparent url('+settings.imageBlank+') no-repeat'});}).show().bind('click',function(){settings.activeImage=settings.activeImage-1;_set_image_to_view();return false;});}} -if(settings.activeImage!=(settings.imageArray.length-1)){if(settings.fixedNavigation){$('#lightbox-nav-btnNext').css({'background':'url('+settings.imageBtnNext+') right 15% no-repeat'}).unbind().bind('click',function(){settings.activeImage=settings.activeImage+1;_set_image_to_view();return false;});}else{$('#lightbox-nav-btnNext').unbind().hover(function(){$(this).css({'background':'url('+settings.imageBtnNext+') right 15% no-repeat'});},function(){$(this).css({'background':'transparent url('+settings.imageBlank+') no-repeat'});}).show().bind('click',function(){settings.activeImage=settings.activeImage+1;_set_image_to_view();return false;});}} -_enable_keyboard_navigation();} -function _enable_keyboard_navigation(){$(document).keydown(function(objEvent){_keyboard_action(objEvent);});} -function _disable_keyboard_navigation(){$(document).unbind();} -function _keyboard_action(objEvent){if(objEvent==null){keycode=event.keyCode;escapeKey=27;}else{keycode=objEvent.keyCode;escapeKey=objEvent.DOM_VK_ESCAPE;} -key=String.fromCharCode(keycode).toLowerCase();if((key==settings.keyToClose)||(key=='x')||(keycode==escapeKey)){_finish();} -if((key==settings.keyToPrev)||(keycode==37)){if(settings.activeImage!=0){settings.activeImage=settings.activeImage-1;_set_image_to_view();_disable_keyboard_navigation();}} -if((key==settings.keyToNext)||(keycode==39)){if(settings.activeImage!=(settings.imageArray.length-1)){settings.activeImage=settings.activeImage+1;_set_image_to_view();_disable_keyboard_navigation();}}} -function _preload_neighbor_images(){if((settings.imageArray.length-1)>settings.activeImage){objNext=new Image();objNext.src=settings.imageArray[settings.activeImage+1][0];} -if(settings.activeImage>0){objPrev=new Image();objPrev.src=settings.imageArray[settings.activeImage-1][0];}} -function _finish(){$('#jquery-lightbox').remove();$('#jquery-overlay').fadeOut(function(){$('#jquery-overlay').remove();});$('embed, object, select').css({'visibility':'visible'});} -function ___getPageSize(){var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=window.innerWidth+window.scrollMaxX;yScroll=window.innerHeight+window.scrollMaxY;}else if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight;}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight;} -var windowWidth,windowHeight;if(self.innerHeight){if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth;}else{windowWidth=self.innerWidth;} -windowHeight=self.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight;}else if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight;} -if(yScroll<windowHeight){pageHeight=windowHeight;}else{pageHeight=yScroll;} -if(xScroll<windowWidth){pageWidth=xScroll;}else{pageWidth=windowWidth;} -arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight);return arrayPageSize;};function ___getPageScroll(){var xScroll,yScroll;if(self.pageYOffset){yScroll=self.pageYOffset;xScroll=self.pageXOffset;}else if(document.documentElement&&document.documentElement.scrollTop){yScroll=document.documentElement.scrollTop;xScroll=document.documentElement.scrollLeft;}else if(document.body){yScroll=document.body.scrollTop;xScroll=document.body.scrollLeft;} -arrayPageScroll=new Array(xScroll,yScroll);return arrayPageScroll;};function ___pause(ms){var date=new Date();curDate=null;do{var curDate=new Date();} +/** + * jQuery lightBox plugin + * This jQuery plugin was inspired and based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) + * and adapted to me for use like a plugin from jQuery. + * @name jquery-lightbox-0.5.js + * @author Leandro Vieira Pinho - http://leandrovieira.com + * @version 0.5 + * @date April 11, 2008 + * @category jQuery plugin + * @copyright (c) 2008 Leandro Vieira Pinho (leandrovieira.com) + * @license CCAttribution-ShareAlike 2.5 Brazil - http://creativecommons.org/licenses/by-sa/2.5/br/deed.en_US + * @example Visit http://leandrovieira.com/projects/jquery/lightbox/ for more informations about this jQuery plugin + */ +(function($){$.fn.lightBox=function(settings){settings=jQuery.extend({overlayBgColor:'#000',overlayOpacity:0.8,fixedNavigation:false,imageLoading:'images/lightbox-ico-loading.gif',imageBtnPrev:'images/lightbox-btn-prev.gif',imageBtnNext:'images/lightbox-btn-next.gif',imageBtnClose:'images/lightbox-btn-close.gif',imageBlank:'images/lightbox-blank.gif',containerBorderSize:10,containerResizeSpeed:400,txtImage:'Image',txtOf:'of',keyToClose:'c',keyToPrev:'p',keyToNext:'n',imageArray:[],activeImage:0},settings);var jQueryMatchedObj=this;function _initialize(){_start(this,jQueryMatchedObj);return false;} +function _start(objClicked,jQueryMatchedObj){$('embed, object, select').css({'visibility':'hidden'});_set_interface();settings.imageArray.length=0;settings.activeImage=0;if(jQueryMatchedObj.length==1){settings.imageArray.push(new Array(objClicked.getAttribute('href'),objClicked.getAttribute('title')));}else{for(var i=0;i<jQueryMatchedObj.length;i++){settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'),jQueryMatchedObj[i].getAttribute('title')));}} +while(settings.imageArray[settings.activeImage][0]!=objClicked.getAttribute('href')){settings.activeImage++;} +_set_image_to_view();} +function _set_interface(){$('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="'+settings.imageLoading+'"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="'+settings.imageBtnClose+'"></a></div></div></div></div>');var arrPageSizes=___getPageSize();$('#jquery-overlay').css({backgroundColor:settings.overlayBgColor,opacity:settings.overlayOpacity,width:arrPageSizes[0],height:arrPageSizes[1]}).fadeIn();var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/10),left:arrPageScroll[0]}).show();$('#jquery-overlay,#jquery-lightbox').click(function(){_finish();});$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function(){_finish();return false;});$(window).resize(function(){var arrPageSizes=___getPageSize();$('#jquery-overlay').css({width:arrPageSizes[0],height:arrPageSizes[1]});var arrPageScroll=___getPageScroll();$('#jquery-lightbox').css({top:arrPageScroll[1]+(arrPageSizes[3]/10),left:arrPageScroll[0]});});} +function _set_image_to_view(){$('#lightbox-loading').show();if(settings.fixedNavigation){$('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();}else{$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();} +var objImagePreloader=new Image();objImagePreloader.onload=function(){$('#lightbox-image').attr('src',settings.imageArray[settings.activeImage][0]);_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);objImagePreloader.onload=function(){};};objImagePreloader.src=settings.imageArray[settings.activeImage][0];};function _resize_container_image_box(intImageWidth,intImageHeight){var intCurrentWidth=$('#lightbox-container-image-box').width();var intCurrentHeight=$('#lightbox-container-image-box').height();var intWidth=(intImageWidth+(settings.containerBorderSize*2));var intHeight=(intImageHeight+(settings.containerBorderSize*2));var intDiffW=intCurrentWidth-intWidth;var intDiffH=intCurrentHeight-intHeight;$('#lightbox-container-image-box').animate({width:intWidth,height:intHeight},settings.containerResizeSpeed,function(){_show_image();});if((intDiffW==0)&&(intDiffH==0)){if($.browser.msie){___pause(250);}else{___pause(100);}} +$('#lightbox-container-image-data-box').css({width:intImageWidth});$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({height:intImageHeight+(settings.containerBorderSize*2)});};function _show_image(){$('#lightbox-loading').hide();$('#lightbox-image').fadeIn(function(){_show_image_data();_set_navigation();});_preload_neighbor_images();};function _show_image_data(){$('#lightbox-container-image-data-box').slideDown('fast');$('#lightbox-image-details-caption').hide();if(settings.imageArray[settings.activeImage][1]){$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();} +if(settings.imageArray.length>1){$('#lightbox-image-details-currentNumber').html(settings.txtImage+' '+(settings.activeImage+1)+' '+settings.txtOf+' '+settings.imageArray.length).show();}} +function _set_navigation(){$('#lightbox-nav').show();$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({'background':'transparent url('+settings.imageBlank+') no-repeat'});if(settings.activeImage!=0){if(settings.fixedNavigation){$('#lightbox-nav-btnPrev').css({'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'}).unbind().bind('click',function(){settings.activeImage=settings.activeImage-1;_set_image_to_view();return false;});}else{$('#lightbox-nav-btnPrev').unbind().hover(function(){$(this).css({'background':'url('+settings.imageBtnPrev+') left 15% no-repeat'});},function(){$(this).css({'background':'transparent url('+settings.imageBlank+') no-repeat'});}).show().bind('click',function(){settings.activeImage=settings.activeImage-1;_set_image_to_view();return false;});}} +if(settings.activeImage!=(settings.imageArray.length-1)){if(settings.fixedNavigation){$('#lightbox-nav-btnNext').css({'background':'url('+settings.imageBtnNext+') right 15% no-repeat'}).unbind().bind('click',function(){settings.activeImage=settings.activeImage+1;_set_image_to_view();return false;});}else{$('#lightbox-nav-btnNext').unbind().hover(function(){$(this).css({'background':'url('+settings.imageBtnNext+') right 15% no-repeat'});},function(){$(this).css({'background':'transparent url('+settings.imageBlank+') no-repeat'});}).show().bind('click',function(){settings.activeImage=settings.activeImage+1;_set_image_to_view();return false;});}} +_enable_keyboard_navigation();} +function _enable_keyboard_navigation(){$(document).keydown(function(objEvent){_keyboard_action(objEvent);});} +function _disable_keyboard_navigation(){$(document).unbind();} +function _keyboard_action(objEvent){if(objEvent==null){keycode=event.keyCode;escapeKey=27;}else{keycode=objEvent.keyCode;escapeKey=objEvent.DOM_VK_ESCAPE;} +key=String.fromCharCode(keycode).toLowerCase();if((key==settings.keyToClose)||(key=='x')||(keycode==escapeKey)){_finish();} +if((key==settings.keyToPrev)||(keycode==37)){if(settings.activeImage!=0){settings.activeImage=settings.activeImage-1;_set_image_to_view();_disable_keyboard_navigation();}} +if((key==settings.keyToNext)||(keycode==39)){if(settings.activeImage!=(settings.imageArray.length-1)){settings.activeImage=settings.activeImage+1;_set_image_to_view();_disable_keyboard_navigation();}}} +function _preload_neighbor_images(){if((settings.imageArray.length-1)>settings.activeImage){objNext=new Image();objNext.src=settings.imageArray[settings.activeImage+1][0];} +if(settings.activeImage>0){objPrev=new Image();objPrev.src=settings.imageArray[settings.activeImage-1][0];}} +function _finish(){$('#jquery-lightbox').remove();$('#jquery-overlay').fadeOut(function(){$('#jquery-overlay').remove();});$('embed, object, select').css({'visibility':'visible'});} +function ___getPageSize(){var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=window.innerWidth+window.scrollMaxX;yScroll=window.innerHeight+window.scrollMaxY;}else if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight;}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight;} +var windowWidth,windowHeight;if(self.innerHeight){if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth;}else{windowWidth=self.innerWidth;} +windowHeight=self.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight;}else if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight;} +if(yScroll<windowHeight){pageHeight=windowHeight;}else{pageHeight=yScroll;} +if(xScroll<windowWidth){pageWidth=xScroll;}else{pageWidth=windowWidth;} +arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight);return arrayPageSize;};function ___getPageScroll(){var xScroll,yScroll;if(self.pageYOffset){yScroll=self.pageYOffset;xScroll=self.pageXOffset;}else if(document.documentElement&&document.documentElement.scrollTop){yScroll=document.documentElement.scrollTop;xScroll=document.documentElement.scrollLeft;}else if(document.body){yScroll=document.body.scrollTop;xScroll=document.body.scrollLeft;} +arrayPageScroll=new Array(xScroll,yScroll);return arrayPageScroll;};function ___pause(ms){var date=new Date();curDate=null;do{var curDate=new Date();} while(curDate-date<ms);};return this.unbind('click').click(_initialize);};})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/nextgen_lightbox_init.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/nextgen_lightbox_init.js index 0e0c6037726c04edf24c5bcfacc8f2edee3e8868..ffc4f086dee0f1335cff83f1211f7c14538af104 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/nextgen_lightbox_init.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/jquery.lightbox/nextgen_lightbox_init.js @@ -46,7 +46,9 @@ jQuery(function($) { }); var nextgen_jquery_lightbox_init = function() { - $('.ngg_lightbox').lightBox({ + var selector = nextgen_lightbox_filter_selector($, $(".ngg_lightbox")); + + selector.lightBox({ imageLoading: nextgen_lightbox_loading_img_url, imageBtnClose: nextgen_lightbox_close_btn_url, imageBtnPrev: nextgen_lightbox_btn_prev_url, diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/lightbox_context.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/lightbox_context.js new file mode 100644 index 0000000000000000000000000000000000000000..6313bf2528da19698c70cbbb274fe263d8129e6c --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/lightbox_context.js @@ -0,0 +1,27 @@ +function nextgen_lightbox_filter_selector($, selector) +{ + if (nextgen_lightbox_settings && nextgen_lightbox_settings.context) { + var context = nextgen_lightbox_settings.context; + + if (context == 'all_images') { + selector = selector.add($('a > img').parent()); + } + else if (context == 'all_images_direct') { + selector = selector.add($('a[href] > img').parent() + .filter(function() { + var href = $(this).attr('href').toLowerCase(); + var ext = href.substring(href.length - 3); + var ext2 = href.substring(href.length - 4); + + return (ext == 'jpg' || ext == 'gif' || ext == 'png' || ext2 == 'tiff' || ext2 == 'jpeg'); + })); + } + else if (context == 'nextgen_and_wp_images') { + selector = selector.add($('a > img[class*="wp-image-"]').parent()); + } + + selector = selector.not('.gallery_link'); + } + + return selector; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/nextgen_shutter.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/nextgen_shutter.js index ece8b1e9a002cc69ecb632a9dcd21c7fa314be00..e8da22bfdf65c36167a00a9b07a76e2966b60eb8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/nextgen_shutter.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter/nextgen_shutter.js @@ -1,13 +1,21 @@ -jQuery(function($){ - var callback = function(){ - var shutterLinks = {}, shutterSets = {}; shutterReloaded.init(); +jQuery(function($) { + var callback = function() { + var selector = nextgen_lightbox_filter_selector($, $([])); + selector.addClass('shutterset'); + var shutterLinks = {}, + shutterSets = {}; + window.shutterSettings = {imageCount: true}; + shutterReloaded.init(); }; $(this).bind('refreshed', callback); var flag = 'shutter'; - if (typeof($(window).data(flag)) == 'undefined') + + if (typeof($(window).data(flag)) == 'undefined') { $(window).data(flag, true); - else return; + } else { + return; + } callback(); }); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/close.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/close.gif old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/loading.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/loading.gif old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/next.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/next.gif old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/prev.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/prev.gif old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/resize1.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/resize1.gif old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/resize2.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/images/resize2.gif old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/nextgen_shutter_reloaded.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/nextgen_shutter_reloaded.js index b0742b270e94da63518a0884e446cb1135d319c0..1bab5b4c2d2850b77ffaf2085f6c7bb58a90f4c9 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/nextgen_shutter_reloaded.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/nextgen_shutter_reloaded.js @@ -1,5 +1,8 @@ jQuery(function($){ var callback = function(){ + var selector = nextgen_lightbox_filter_selector($, $([])); + selector.addClass('shutterset'); + var shutterLinks = {}, shutterSets = {}; shutterReloaded.Init(); }; $(this).bind('refreshed', callback); @@ -10,4 +13,4 @@ jQuery(function($){ else return; callback(); -}); \ No newline at end of file +}); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.css old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/shutter_reloaded/shutter.js old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/thickbox/nextgen_thickbox_init.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/thickbox/nextgen_thickbox_init.js index 61486fd2fbafc382a17cf9c76700d9fbbd0fb057..0da9d01f799a565eb1a8dadd8ae8c05d673787fe 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/thickbox/nextgen_thickbox_init.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/lightbox/static/thickbox/nextgen_thickbox_init.js @@ -8,3 +8,8 @@ var thickboxL10n = { close: 'Close', noiframes: 'This feature requires inline frames. You have iframes disabled or your browser does not support them.' }; + +jQuery(function($) { + var selector = nextgen_lightbox_filter_selector($, $([])); + selector.addClass('thickbox'); +}); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/class.mediarss_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/class.mediarss_controller.php index 593c1674fb1b290383c90a730b2d900b6ba7386e..09c2eb4d19300241ec3f71b0e597d943b96f3bfa 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/class.mediarss_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/class.mediarss_controller.php @@ -50,7 +50,7 @@ class Mixin_MediaRSS_Controller extends Mixin { // retrieve by transient id $factory = $this->object->get_registry()->get_utility('I_Component_Factory'); - $displayed_gallery = $factory->create('displayed_gallery', $mapper); + $displayed_gallery = $factory->create('displayed_gallery', NULL, $mapper); $displayed_gallery->apply_transient($transient_id); } elseif (($params = $this->object->param('params'))) @@ -58,7 +58,7 @@ class Mixin_MediaRSS_Controller extends Mixin // Create the displayed gallery based on the URL parameters $factory = $this->object->get_registry()->get_utility('I_Component_Factory'); $displayed_gallery = $factory->create( - 'displayed_gallery', $mapper, json_decode($params) + 'displayed_gallery', json_decode($params), $mapper ); } @@ -96,16 +96,16 @@ class Mixin_MediaRSS_Controller extends Mixin */ function _get_feed_copyright($displayed_gallery) { - $site_url = $this->object->get_site_url(); + $base_url = $this->object->get_base_url(); $blog_name = get_option('blogname'); - return "Copyright (C) {$blog_name} ({$site_url})"; + return "Copyright (C) {$blog_name} ({$base_url})"; } /** * Gets the Site URL * @return string */ - function get_site_url() + function get_base_url() { $router = $this->get_registry()->get_utility('I_Router'); return $router->get_base_url(); @@ -128,7 +128,7 @@ class Mixin_MediaRSS_Controller extends Mixin */ function _get_feed_link($displayed_gallery) { - return $this->object->get_site_url(); + return $this->object->get_base_url(); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/module.mediarss.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/module.mediarss.php index 0851b468c32433ce9bc669bc83f40780b427e236..3ad9a8594deadbc20ec4a106f75a85a4f00a7d90 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/module.mediarss.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/module.mediarss.php @@ -13,7 +13,7 @@ class M_MediaRss extends C_Base_Module 'photocrati-mediarss', 'MediaRss', 'Generates MediaRSS feeds of image collections', - '0.1', + '0.4', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/templates/mediarss_feed.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/templates/mediarss_feed.php index 22d7659904dce1f6a71da5329aac64ff8cb10262..0b0e9a3d5fe05d55ae47bc05ff2909c9d1092e99 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/templates/mediarss_feed.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/templates/mediarss_feed.php @@ -4,11 +4,11 @@ <generator><![CDATA[<?php echo_h($generator)?>]]></generator> <title><?php echo_h($feed_title) ?></title> <description><?php echo_h($feed_description) ?></description> - <link><![CDATA[<?php echo esc_url($feed_link)?>]]></link> + <link><![CDATA[<?php echo nextgen_esc_url($feed_link)?>]]></link> <?php foreach($images as $image): ?> <?php - $image_url = $storage->get_image_url($image); - $thumb_url = $storage->get_thumb_url($image); + $image_url = $storage->get_image_url($image, 'full', TRUE); + $thumb_url = $storage->get_thumb_url($image, TRUE); $thumb_size = $storage->get_thumb_dimensions($image); $width = $thumb_size['width']; $height = $thumb_size['height']; @@ -16,14 +16,14 @@ <item> <title><![CDATA[<?php echo_h($image->alttext)?>]]></title> <description><![CDATA[<?php echo_h($image->description)?>]]></description> - <link><![CDATA[<?php echo esc_url($image_url)?>]]></link> + <link><![CDATA[<?php echo nextgen_esc_url($image_url)?>]]></link> <guid>image-id:<?php echo_h($image->id_field)?></guid> - <media:content url="<?php echo esc_url($image_url)?>" medium="image" /> + <media:content url="<?php echo nextgen_esc_url($image_url)?>" medium="image" /> <media:title><![CDATA[<?php echo_h($image->alttext)?>]]></media:title> <?php if (isset($description)): ?> <media:description><![CDDATA[<?php echo_h($image->description)?>]]></media:description> <?php endif ?> - <media:thumbnail width="<?php echo esc_attr($width)?>" height="<?php echo esc_attr($height)?>" url="<?php echo esc_url($thumb_url) ?>"/> + <media:thumbnail width="<?php echo esc_attr($width)?>" height="<?php echo esc_attr($height)?>" url="<?php echo nextgen_esc_url($thumb_url) ?>"/> <?php if (isset($tagnames)): ?> <media:keywords><![CDATA[<?php echo_h($tagnames)?>]]></media:keywords> <?php endif ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/templates/playlist_feed.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/templates/playlist_feed.php index e62dfadcec80976efb3202ae87a39b37e96d17d6..f87283d6df39880bd49b183846ce47e085ed5e33 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/templates/playlist_feed.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mediarss/templates/playlist_feed.php @@ -2,8 +2,8 @@ <trackList> <?php foreach($images as $image): ?> <?php - $image_url = $storage->get_image_url($image); - $thumb_url = $storage->get_thumb_url($image); + $image_url = $storage->get_image_url($image, 'full', TRUE); + $thumb_url = $storage->get_thumb_url($image, TRUE); $thumb_size = $storage->get_thumb_dimensions($image); $width = $thumb_size['width']; $height = $thumb_size['height']; @@ -17,8 +17,8 @@ $image_title = substr_replace($image_title, '...', 15, -10); ?> <track> - <title><![CDATA[<?php echo_h($image_title)?>]]></title> - <location><![CDATA[<?php echo esc_url($image_url)?>]]></location> + <title><![CDATA[<?php echo strip_tags($image_title); ?>]]></title> + <location><![CDATA[<?php echo nextgen_esc_url($image_url)?>]]></location> </track> <?php endforeach ?> </trackList> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/adapter.mvc_router.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/adapter.mvc_router.php index 40dd93f85ab22371bbfb886b6b146bcd216df020..e2a99b24664e2e25cc2e6eb780b8133c0c54563e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/adapter.mvc_router.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/adapter.mvc_router.php @@ -17,9 +17,9 @@ class A_MVC_Router extends Mixin // Find the module directory $fs = $this->object->get_registry()->get_utility('I_Fs'); - return $fs->join_paths( - $base_url, - $fs->find_static_abspath($path, $module, TRUE) - ); + return $this->join_paths( + $base_url, + str_replace("\\", '/', $fs->find_static_abspath($path, $module, TRUE)) + ); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/class.mvc_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/class.mvc_controller.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/class.mvc_option_handler.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/class.mvc_option_handler.php index 734f4b2d8893b4a69c6e2fb1acc0324c1ea8daed..e87b1f7c73f70011752cecfa223a756a4c21e7ce 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/class.mvc_option_handler.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/class.mvc_option_handler.php @@ -4,6 +4,6 @@ class C_Mvc_Option_Handler { function get($option, $default=NULL) { - return path_join(dirname(__FILE__), 'templates'); + return implode(DIRECTORY_SEPARATOR, array(dirname(__FILE__), 'templates')); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/interface.mvc_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/interface.mvc_controller.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/interface.mvc_view.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/interface.mvc_view.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/module.mvc.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/module.mvc.php old mode 100644 new mode 100755 index 5ef882d1b91a2cfe495bd2fc5927688ab785bb2d..1106f71992d2d189f7faddfb473cd6c9062b10b8 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/module.mvc.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/module.mvc.php @@ -21,7 +21,7 @@ class M_MVC extends C_Base_Module "photocrati-mvc", "MVC Framework", "Provides an MVC architecture for the plugin to use", - "0.4", + "0.5", "http://www.photocrati.com", "Photocrati Media", "http://www.photocrati.com" diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/template_helper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/template_helper.php old mode 100644 new mode 100755 index 9a6d9d1bdaef0a0676ef09aef5d60dfa13cea662..e96bb41794769612ddfc0feb68d479c969d17d01 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/template_helper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/template_helper.php @@ -23,4 +23,17 @@ if (strpos($_SERVER['REQUEST_URI'], 'adminer') === FALSE) { echo h($str); } } -} \ No newline at end of file + + if (!function_exists('echo_safe_html')) { + function echo_safe_html($html, $extra_tags = null) + { + $tags = array('<a>', '<abbr>', '<acronym>', '<address>', '<b>', '<base>', '<basefont>', '<big>', '<blockquote>', '<br>', '<br/>', '<caption>', '<center>', '<cite>', '<code>', '<col>', '<colgroup>', '<dd>', '<del>', '<dfn>', '<dir>', '<div>', '<dl>', '<dt>', '<em>', '<fieldset>', '<font>', '<h1>', '<h2>', '<h3>', '<h4>', '<h5>', '<h6>', '<hr>', '<i>', '<ins>', '<label>', '<legend>', '<li>', '<menu>', '<noframes>', '<noscript>', '<ol>', '<optgroup>', '<option>', '<p>', '<pre>', '<q>', '<s>', '<samp>', '<select>', '<small>', '<span>', '<strike>', '<strong>', '<sub>', '<sup>', '<table>', '<tbody>', '<td>', '<tfoot>', '<th>', '<thead>', '<tr>', '<tt>', '<u>', '<ul>'); + + $html = preg_replace('/\\s+on\\w+=(["\']).*?\\1/i', '', $html); + $html = preg_replace('/(<\/[^>]+?>)(<[^>\/][^>]*?>)/', '$1 $2', $html); + $html = strip_tags($html, implode('', $tags)); + + echo $html; + } + } +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/templates/404.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/templates/404.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/templates/500.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/templates/500.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/templates/index.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/templates/index.php old mode 100644 new mode 100755 index 93b6990622bc112960b1b11df787ec36f32bdf71..ae60456717cf41f8abf64623e7135d55cc638c86 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/templates/index.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/mvc/templates/index.php @@ -1,7 +1,7 @@ <?php $settings = C_NextGen_Settings::get_instance(); $obj = method_exists($this, 'get_class_definition_dir') ? $this : $this->object; -$template_dir = path_join($obj->get_class_definition_dir(), 'templates'); +$template_dir = implode(DIRECTORY_SEPARATOR, array($obj->get_class_definition_dir(), 'templates')); $default_template_dir = $settings->mvc_template_dir; ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php index c7e5704af4f1d2bedb19eafe521334c67ee84737..14ce427eed39ecbb79a81e5887d872553c461b69 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php @@ -4,7 +4,7 @@ class A_Import_Folder_Form extends Mixin { function get_title() { - return "Import Folder"; + return __("Import Folder", 'nggallery'); } function enqueue_static_resources() diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php index c09c097eaff2ee7397e0c706fb24f156766c1dcd..1234ac79dce2510ac766d2924a1094aa2851c71f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php @@ -4,7 +4,11 @@ class A_NextGen_AddGallery_Ajax extends Mixin { function cookie_dump_action() { - return array('success' => 1); + foreach ($_COOKIE as $key => &$value) { + if (is_string($value)) $value = stripslashes($value); + } + + return array('success' => 1, 'cookies' => $_COOKIE); } function upload_image_action() @@ -34,7 +38,7 @@ class A_NextGen_AddGallery_Ajax extends Mixin } else { $error = TRUE; - $retval['error'] = "No gallery name specified"; + $retval['error'] = __("No gallery name specified", 'nggallery'); } } @@ -48,33 +52,33 @@ class A_NextGen_AddGallery_Ajax extends Mixin if (($results = $storage->upload_zip($gallery_id))) { $retval = $results; } - else $retval['error'] = 'Failed to extract images from ZIP'; + else $retval['error'] = __('Failed to extract images from ZIP', 'nggallery'); } elseif (($image = $storage->upload_image($gallery_id))) { $retval['image_ids'] = array($image->id()); } else { - $retval['error'] = 'Image generation failed'; + $retval['error'] = __('Image generation failed', 'nggallery'); $error = TRUE; } } - catch (E_InsufficientWriteAccessException $ex) { + catch (E_NggErrorException $ex) { $retval['error'] = $ex->getMessage(); $error = TRUE; } catch (Exception $ex) { - $retval['error'] = "An unexpected error occured."; + $retval['error'] = __("An unexpected error occured.", 'nggallery'); $retval['error_details'] = $ex->getMessage(); $error = TRUE; } } - } - else { - $retval['error'] = "No permissions to upload images. Try refreshing the page."; + } + else { + $retval['error'] = __("No permissions to upload images. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.", 'nggallery'); $error = TRUE; - } + } - if ($error) header('HTTP/1.1 400 Bad Request'); + if ($error) return $retval; else $retval['gallery_name'] = esc_html($gallery_name); return $retval; @@ -90,7 +94,10 @@ class A_NextGen_AddGallery_Ajax extends Mixin { if (($dir = urldecode($this->param('dir')))) { $fs = $this->get_registry()->get_utility('I_Fs'); - $root = path_join($fs->get_document_root(), 'wp-content'); + if (is_multisite()) + $root = $this->object->get_registry()->get_utility('I_Gallery_Storage')->get_upload_abspath(); + else + $root = NGG_IMPORT_ROOT; $browse_path = $fs->join_paths($root, $dir); if (@file_exists($browse_path)) { @@ -99,8 +106,8 @@ class A_NextGen_AddGallery_Ajax extends Mixin if( count($files) > 2 ) { /* The 2 accounts for . and .. */ $html[] = "<ul class=\"jqueryFileTree\" style=\"display: none;\">"; foreach( $files as $file ) { - $file_path = path_join($browse_path, $file); - $rel_file_path = str_replace(WP_CONTENT_DIR, '', $file_path); + $file_path = $fs->join_paths($browse_path, $file); + $rel_file_path = str_replace($root, '', $file_path); if(@file_exists($file_path) && $file != '.' && $file != '..' && is_dir($file_path) ) { $html[] = "<li class=\"directory collapsed\"><a href=\"#\" rel=\"" . htmlentities($rel_file_path) . "/\">" . htmlentities($file) . "</a></li>"; } @@ -110,15 +117,15 @@ class A_NextGen_AddGallery_Ajax extends Mixin $retval['html'] = implode("\n", $html); } else { - $retval['error'] = "Directory does not exist."; + $retval['error'] = __("Directory does not exist.", 'nggallery'); } } else { - $retval['error'] = "No directory specified."; + $retval['error'] = __("No directory specified.", 'nggallery'); } } else { - $retval['error'] = "No permissions to browse folders. Try refreshing the page."; + $retval['error'] = __("No permissions to browse folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.", 'nggallery'); } return $retval; @@ -132,23 +139,31 @@ class A_NextGen_AddGallery_Ajax extends Mixin if ($this->validate_ajax_request('nextgen_upload_image')) { if (($folder = $this->param('folder'))) { - $storage = $this->get_registry()->get_utility('I_Gallery_Storage'); - $fs = $this->get_registry()->get_utility('I_Fs'); + $storage = C_Gallery_Storage::get_instance(); + $fs = C_Fs::get_instance(); try { - $keep_files = $this->param('keep_location') == 'on'; - $retval = $storage->import_gallery_from_fs($fs->join_paths($fs->get_document_root(), 'wp-content', $folder), false, !$keep_files); + $keep_files = $this->param('keep_location') == 'on'; + if (is_multisite()) + $root = $this->object->get_registry()->get_utility('I_Gallery_Storage')->get_upload_abspath(); + else + $root = NGG_IMPORT_ROOT; + $retval = $storage->import_gallery_from_fs($fs->join_paths($root, $folder), false, !$keep_files); if (!$retval) $retval = array('error' => "Could not import folder. No images found."); } - catch (Exception $ex) { - $retval['error'] = $ex->getMessage(); - } + catch (E_NggErrorException $ex) { + $retval['error'] = $ex->getMessage(); + } + catch (Exception $ex) { + $retval['error'] = __("An unexpected error occured.", 'nggallery'); + $retval['error_details'] = $ex->getMessage(); + } } else { - $retval['error'] = "No folder specified"; + $retval['error'] = __("No folder specified", 'nggallery'); } } else { - $retval['error'] = "No permissions to import folders. Try refreshing the page."; + $retval['error'] = __("No permissions to import folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges.", 'nggallery'); } return $retval; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_controller.php index 9959908b992298f39ad4732c98560f7d73087c0a..03c233c6e0c7eb02f8145a39a5d7b1879dae8af6 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_controller.php @@ -4,7 +4,7 @@ class A_NextGen_AddGallery_Controller extends Mixin { function get_page_title() { - return 'Add Gallery / Images'; + return __('Add Gallery / Images', 'nggallery'); } function get_required_permission() diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_forms.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_forms.php index 8549da3ea40ec8c1d064a275c74bc29716782175..945b130f643b842d0ce80be5491fb8a39bb919db 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_forms.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_forms.php @@ -13,7 +13,7 @@ class A_NextGen_AddGallery_Forms extends Mixin foreach ($forms as $form => $adapter) { $registry->add_adapter('I_Form', $adapter, $form); - $this->object->add_form(NEXTGEN_ADD_GALLERY_SLUG, $form); + $this->object->add_form(NGG_ADD_GALLERY_SLUG, $form); } } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_pages.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_pages.php index 83b61800bbcf794db9c912877c82a772db36be0e..5da58398f2ee49f15484ad269f8e33c7ac3addeb 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_pages.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_pages.php @@ -4,12 +4,11 @@ class A_NextGen_AddGallery_Pages extends Mixin { function initialize() { - $this->object->add( - NEXTGEN_ADD_GALLERY_SLUG, - 'A_NextGen_AddGallery_Controller', - NGGFOLDER, - true, - 'nggallery-manage-gallery' - ); + $this->object->add(NGG_ADD_GALLERY_SLUG, array( + 'adapter' => 'A_NextGen_AddGallery_Controller', + 'parent' => NGGFOLDER, + 'add_menu' => TRUE, + 'before' => 'nggallery-manage-gallery' + )); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php index 4fc76117ce8c3c42f958a7eb4f4f3cea851b761f..0b73b9e23f4e60a0cfc34c53fb799fd456e4dc59 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php @@ -4,15 +4,47 @@ class A_Upload_Images_Form extends Mixin { function get_title() { - return "Upload Images"; + return __("Upload Images", 'nggallery'); } + /** + * Plupload stores its i18n JS *mostly* as "en.js" or "ar.js" - but some as zh_CN.js so we must check both if the + * first does not match. + * + * @return bool|string + */ + function _find_plupload_i18n() + { + $fs = $this->get_registry()->get_utility('I_Fs'); + $router = $this->_get_registry()->get_utility('I_Router'); + $locale = get_locale(); + + $dir = $fs->find_static_abspath('photocrati-nextgen_addgallery_page#plupload-2.1.1/i18n') . DIRECTORY_SEPARATOR; + + $tmp = explode('_', $locale, 2); + + $retval = FALSE; + + if (file_exists($dir . $tmp[0] . '.js')) + $retval = $tmp[0]; + else if (file_exists($dir . $locale . '.js')) + $retval = $locale; + + if ($retval) + $retval = $router->get_static_url('photocrati-nextgen_addgallery_page#plupload-2.1.1/i18n/' . $retval . '.js'); + + return $retval; + } function enqueue_static_resources() { - wp_enqueue_style('plupload.queue'); + wp_enqueue_style('ngg.plupload.queue'); wp_enqueue_script('browserplus'); - wp_enqueue_script('plupload.queue'); + wp_enqueue_script('ngg.plupload.queue'); + + $i18n = $this->_find_plupload_i18n(); + if (!empty($i18n)) + wp_enqueue_script('ngg.plupload.i18n', $i18n, array('ngg.plupload.full')); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php index 627d90825460069e5f2529dbc776b79cda467617..e472d024a31c7957fbc08f5eb316f0fc8763cfa8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php @@ -5,7 +5,7 @@ } **/ -define('NEXTGEN_ADD_GALLERY_SLUG', 'ngg_addgallery'); +define('NGG_ADD_GALLERY_SLUG', 'ngg_addgallery'); class M_NextGen_AddGallery_Page extends C_Base_Module { @@ -15,7 +15,7 @@ class M_NextGen_AddGallery_Page extends C_Base_Module 'photocrati-nextgen_addgallery_page', 'NextGEN Add Gallery Page', 'Provides admin page for adding a gallery and uploading images', - '0.2', + '0.5', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -50,12 +50,14 @@ class M_NextGen_AddGallery_Page extends C_Base_Module { if (is_admin()) { $router = $this->_get_registry()->get_utility('I_Router'); - wp_register_script('plupload.queue', $router->get_static_url('photocrati-nextgen_addgallery_page#plupload_queue/jquery.plupload.queue.js'), array('plupload-all')); - wp_register_style('plupload.queue', $router->get_static_url('photocrati-nextgen_addgallery_page#plupload_queue/css/jquery.plupload.queue.css')); + wp_register_script('browserplus', $router->get_static_url('photocrati-nextgen_addgallery_page#browserplus-2.4.21.min.js')); + wp_register_script('ngg.plupload.moxie', $router->get_static_url('photocrati-nextgen_addgallery_page#plupload-2.1.1/moxie.min.js')); + wp_register_script('ngg.plupload.full', $router->get_static_url('photocrati-nextgen_addgallery_page#plupload-2.1.1/plupload.full.min.js'), array('ngg.plupload.moxie')); + wp_register_script('ngg.plupload.queue', $router->get_static_url('photocrati-nextgen_addgallery_page#plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.min.js'), array('ngg.plupload.full')); + wp_register_style('ngg.plupload.queue', $router->get_static_url('photocrati-nextgen_addgallery_page#plupload-2.1.1/jquery.plupload.queue/css/jquery.plupload.queue.css')); wp_register_style('nextgen_addgallery_page', $router->get_static_url('photocrati-nextgen_addgallery_page#styles.css')); wp_register_script('jquery.filetree', $router->get_static_url('photocrati-nextgen_addgallery_page#jquery.filetree/jquery.filetree.js'), array('jquery')); wp_register_style('jquery.filetree', $router->get_static_url('photocrati-nextgen_addgallery_page#jquery.filetree/jquery.filetree.css')); - wp_register_script('browserplus', 'http://bp.yahooapis.com/2.4.21/browserplus-min.js'); } } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/browserplus-2.4.21.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/browserplus-2.4.21.min.js new file mode 100644 index 0000000000000000000000000000000000000000..626f3245d473d9a107bfaa2744426d225ec62f57 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/browserplus-2.4.21.min.js @@ -0,0 +1,8 @@ +/* + * browserplus.js + * + * Provides a gateway between user JavaScript and the BrowserPlus platform + * + * Copyright 2007-2009 Yahoo! Inc. All rights reserved. + */ +BrowserPlus=(typeof BrowserPlus!="undefined"&&BrowserPlus)?BrowserPlus:(function(){var P=false;var F="__browserPlusPluginID";var E="uninitialized";var G=[];var D="application/x-yahoo-browserplus_2";var J,K,L,H,A;return{initWhenAvailable:function(R,S){setTimeout(function(){try{navigator.plugins.refresh(false)}catch(T){}BrowserPlus.init(R,function(U){if(U.success){S(U)}else{BrowserPlus.initWhenAvailable(R,S)}})},1000)},clientSystemInfo:function(){return I()},listActiveServices:function(R){if(R==null||R.constructor!=Function){throw new Error("BrowserPlus.services() invoked without required callback parameter.")}return N().EnumerateServices(R)},getPlatformInfo:function(){if(N()===null){throw new Error("BrowserPlus.getPlatformInfo() invoked, but init() has not completed successfully.")}return N().Info()},isServiceLoaded:function(S,R){return((S!=undefined&&BrowserPlus.hasOwnProperty(S))&&(R==undefined||BrowserPlus[S].hasOwnProperty(R)))},describeService:function(S,R){if(R==null||R.constructor!=Function){throw new Error("BrowserPlus.services() invoked without required callback parameter")}if(N()===null){throw new Error("BrowserPlus.describeService() invoked, but init() has not completed successfully.")}return N().DescribeService(S,R)},isServiceActivated:function(S,R){return N().DescribeService(S,(function(){var T=R;return function(U){T(U.success)}})())},isInitialized:function(){return(E==="succeeded")},require:function(S,T){if(T==null||T.constructor!=Function){throw new Error("BrowserPlus.require() invoked without required callback parameter")}var R=function(V){if(V.success){var W=[];for(var U=0;U<V.value.length;U++){if(V.value[U].fullDesc){M({value:V.value[U].fullDesc});W.push({service:V.value[U].service,version:V.value[U].version})}else{BrowserPlus.describeService({service:V.value[U].service,version:V.value[U].version},M);W=V.value}}V.value=W}T(V)};N().RequireService(S,R);return true},init:function(T,S){if(I().browser=="Safari"){navigator.plugins.refresh(false)}var X=null;var W=null;if(S==null){W=T}else{X=T;W=S}if(W==null||W.constructor!=Function){throw new Error("BrowserPlus.init() invoked without required callback parameter")}if(X===null){X=new Object}if(typeof(X.locale)=="undefined"){X.locale=I().locale}var R=true;if(!X.supportLevel||X.supportLevel==="experimental"){R=(I().supportLevel!=="unsupported")}else{if(X.supportLevel==="supported"){R=(I().supportLevel==="supported")}}if(!R){W({success:false,error:"bp.unsupportedClient"});return}if(E==="succeeded"){W({success:true});return}if(E=="inprogress"){G.push(W);return}E="inprogress";if(typeof(window.onunload)=="undefined"){window.onunload=function(){}}var V=false;if(Q()&&N()!==null){V=true}if(!V){E="uninitialized";W({success:false,error:"bp.notInstalled"});return}else{G.push(W);var U=(function(){var Y=X;return function(){var d=function(g){if(!g.success&&g.error==="bp.switchVersion"&&I().browser!=="Explorer"){var h="application/x-yahoo-browserplus_";h+=g.verboseError;if(h!==D){D=h;setTimeout(function(){try{var j=document.getElementById(F);if(j){document.documentElement.removeChild(j.parentNode)}navigator.plugins.refresh(false)}catch(i){}if(Q()&&N()!==null){setTimeout(function(){N().Initialize(Y,d)},10)}else{d(g)}},10);return}}if(!g.success&&g.error==="bp.switchVersion"){g={success:false,error:"bp.notInstalled",verboseError:"BrowserPlus isn't installed, or couldn't be loaded"}}E=g.success?"succeeded":"uninitialized";var e=G;G=[];for(var f=0;f<e.length;f++){e[f](g)}};try{N().Initialize(Y,d)}catch(b){var Z=I();var c={success:false,error:"bp.notInstalled",verboseError:String(b)};if(Z.browser=="Explorer"){c.error="bp.unsupportedClient"}else{if(Z.browser=="Firefox"){try{navigator.plugins.refresh(true)}catch(a){}}}d(c)}}})();setTimeout(U,0)}},_detectBrowser:function(){return BrowserPlus.clientSystemInfo()}};function Q(){if(B()){return C()}else{return O()}}function O(){var R=navigator.mimeTypes[D];if(typeof(R)!=="object"||typeof(R.enabledPlugin)!=="object"){return false}var S=document.createElement("div");S.style.visibility="hidden";S.style.borderStyle="hidden";S.style.width=0;S.style.height=0;S.style.border=0;S.style.position="absolute";S.style.top=0;S.style.left=0;S.innerHTML='<object type="'+D+'" id="'+F+'" name="'+F+'"></object>';document.documentElement.appendChild(S);P=true;return true}function C(){if(N()!=null){return true}try{var R=document.createElement("object");R.id=F;R.type=D;R.style.display="none";document.body.appendChild(R);document.getElementById(F).Ping();P=true;return true}catch(T){try{document.body.removeChild(R)}catch(S){}}return false}function N(){if(P){return document.getElementById(F)}return null}function B(){return(I().browser=="Explorer")}function M(T){T=T.value;var V=T.name;var R=T.versionString;if(!BrowserPlus[V]){BrowserPlus[V]={};BrowserPlus[V].corelet=V;BrowserPlus[V].version=R}if(!BrowserPlus[V][R]){BrowserPlus[V][R]={};BrowserPlus[V][R].corelet=V;BrowserPlus[V][R].version=R}if(V=="core"){BrowserPlus[V].version=R}if(T.functions){for(var S=0;S<T.functions.length;S++){var W=T.functions[S].name;var U=(function(){var X=W;return function(Z,Y){if(Y==null||Y.constructor!=Function){throw new Error("BrowserPlus."+V+"."+X+"() invoked without required callback parameter")}return N().ExecuteMethod(V,R,X,Z,Y)}})();BrowserPlus[V][R][W]=U;if(R==BrowserPlus[V].version){BrowserPlus[V][W]=U}}}}function I(){var X=[{string:navigator.vendor,subString:"Apple",identity:"Safari"},{string:navigator.vendor,subString:"Google",identity:"Chrome"},{prop:window.opera,identity:"Opera"},{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"}];var W=[{string:navigator.platform,subString:"Win",identity:"Windows"},{string:navigator.platform,subString:"Mac",identity:"Mac"},{string:navigator.platform,subString:"Linux",identity:"Linux"}];var U={Mac:{Firefox:"supported",Safari:"supported"},Windows:{Explorer:{"8":"supported","7":"supported","6":"experimental"},Safari:"supported",Firefox:"supported",Chrome:"supported"}};var S;function T(b){for(var Y=0;Y<b.length;Y++){var Z=b[Y].string;var a=b[Y].prop;S=b[Y].versionSearch||b[Y].identity;if(Z){if(Z.indexOf(b[Y].subString)!=-1){return b[Y].identity}}else{if(a){return b[Y].identity}}}return null}function R(Z){var Y=Z.indexOf(S);if(Y==-1){return null}else{return parseFloat(Z.substring(Y+S.length+1))}}function V(){if(U[L]&&U[L][J]){var Y=U[L][J];if(typeof Y==="string"){return Y}else{if(Y[K]){return Y[K]}else{return"unsupported"}}}else{return"unsupported"}}if(!J){J=T(X)||"An unknown browser";K=R(navigator.userAgent)||R(navigator.appVersion)||"an unknown version";L=T(W)||"an unknown OS";if(L==="Mac"&&navigator.userAgent.indexOf("Intel")==-1){A="unsupported"}else{if(navigator.userAgent.indexOf("Firefox/2.0.0")!=-1){A="unsupported"}else{A=V()}}H=navigator.language||navigator.browserLanguage||navigator.userLanguage||navigator.systemLanguage}return{browser:J,version:K,os:L,locale:H,supportLevel:A}}})();if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={}}if(typeof YAHOO.bp=="undefined"||!YAHOO.bp){YAHOO.bp=BrowserPlus}; \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/images/directory.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/images/directory.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/images/folder_open.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/images/folder_open.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/images/spinner.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/images/spinner.gif old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.css old mode 100644 new mode 100755 index db969e2de0ec5399af3375e93bc7d818eaeb8a53..aaed0443c1a4e65a6e4311ab0fe92d96db7195bf --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.css @@ -1,95 +1,95 @@ -UL.jqueryFileTree { - font-family: Verdana, sans-serif; - font-size: 11px; - line-height: 18px; - padding: 0px; - margin: 0px; -} - -UL.jqueryFileTree LI { - list-style: none; - padding: 0px; - padding-left: 20px; - margin: 0px; - white-space: nowrap; -} - -UL.jqueryFileTree A { - color: #333; - text-decoration: none; - display: block; - padding: 0px 2px; -} - -UL.jqueryFileTree A:hover { - background: #BDF; -} - -UL.jqueryFileTree A.selected_folder { - background-color: #EEEEEE; -} - -/* Core Styles */ -.jqueryFileTree LI.directory { background: url(images/directory.png) left top no-repeat; } -.jqueryFileTree LI.expanded { background: url(images/folder_open.png) left top no-repeat; } -.jqueryFileTree LI.file { background: url(images/file.png) left top no-repeat; } -.jqueryFileTree LI.wait { background: url(images/spinner.gif) left top no-repeat; } -/* File Extensions*/ -.jqueryFileTree LI.ext_3gp { background: url(images/film.png) left top no-repeat; } -.jqueryFileTree LI.ext_afp { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_afpa { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_asp { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_aspx { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_avi { background: url(images/film.png) left top no-repeat; } -.jqueryFileTree LI.ext_bat { background: url(images/application.png) left top no-repeat; } -.jqueryFileTree LI.ext_bmp { background: url(images/picture.png) left top no-repeat; } -.jqueryFileTree LI.ext_c { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_cfm { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_cgi { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_com { background: url(images/application.png) left top no-repeat; } -.jqueryFileTree LI.ext_cpp { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_css { background: url(images/css.png) left top no-repeat; } -.jqueryFileTree LI.ext_doc { background: url(images/doc.png) left top no-repeat; } -.jqueryFileTree LI.ext_exe { background: url(images/application.png) left top no-repeat; } -.jqueryFileTree LI.ext_gif { background: url(images/picture.png) left top no-repeat; } -.jqueryFileTree LI.ext_fla { background: url(images/flash.png) left top no-repeat; } -.jqueryFileTree LI.ext_h { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_htm { background: url(images/html.png) left top no-repeat; } -.jqueryFileTree LI.ext_html { background: url(images/html.png) left top no-repeat; } -.jqueryFileTree LI.ext_jar { background: url(images/java.png) left top no-repeat; } -.jqueryFileTree LI.ext_jpg { background: url(images/picture.png) left top no-repeat; } -.jqueryFileTree LI.ext_jpeg { background: url(images/picture.png) left top no-repeat; } -.jqueryFileTree LI.ext_js { background: url(images/script.png) left top no-repeat; } -.jqueryFileTree LI.ext_lasso { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_log { background: url(images/txt.png) left top no-repeat; } -.jqueryFileTree LI.ext_m4p { background: url(images/music.png) left top no-repeat; } -.jqueryFileTree LI.ext_mov { background: url(images/film.png) left top no-repeat; } -.jqueryFileTree LI.ext_mp3 { background: url(images/music.png) left top no-repeat; } -.jqueryFileTree LI.ext_mp4 { background: url(images/film.png) left top no-repeat; } -.jqueryFileTree LI.ext_mpg { background: url(images/film.png) left top no-repeat; } -.jqueryFileTree LI.ext_mpeg { background: url(images/film.png) left top no-repeat; } -.jqueryFileTree LI.ext_ogg { background: url(images/music.png) left top no-repeat; } -.jqueryFileTree LI.ext_pcx { background: url(images/picture.png) left top no-repeat; } -.jqueryFileTree LI.ext_pdf { background: url(images/pdf.png) left top no-repeat; } -.jqueryFileTree LI.ext_php { background: url(images/php.png) left top no-repeat; } -.jqueryFileTree LI.ext_png { background: url(images/picture.png) left top no-repeat; } -.jqueryFileTree LI.ext_ppt { background: url(images/ppt.png) left top no-repeat; } -.jqueryFileTree LI.ext_psd { background: url(images/psd.png) left top no-repeat; } -.jqueryFileTree LI.ext_pl { background: url(images/script.png) left top no-repeat; } -.jqueryFileTree LI.ext_py { background: url(images/script.png) left top no-repeat; } -.jqueryFileTree LI.ext_rb { background: url(images/ruby.png) left top no-repeat; } -.jqueryFileTree LI.ext_rbx { background: url(images/ruby.png) left top no-repeat; } -.jqueryFileTree LI.ext_rhtml { background: url(images/ruby.png) left top no-repeat; } -.jqueryFileTree LI.ext_rpm { background: url(images/linux.png) left top no-repeat; } -.jqueryFileTree LI.ext_ruby { background: url(images/ruby.png) left top no-repeat; } -.jqueryFileTree LI.ext_sql { background: url(images/db.png) left top no-repeat; } -.jqueryFileTree LI.ext_swf { background: url(images/flash.png) left top no-repeat; } -.jqueryFileTree LI.ext_tif { background: url(images/picture.png) left top no-repeat; } -.jqueryFileTree LI.ext_tiff { background: url(images/picture.png) left top no-repeat; } -.jqueryFileTree LI.ext_txt { background: url(images/txt.png) left top no-repeat; } -.jqueryFileTree LI.ext_vb { background: url(images/code.png) left top no-repeat; } -.jqueryFileTree LI.ext_wav { background: url(images/music.png) left top no-repeat; } -.jqueryFileTree LI.ext_wmv { background: url(images/film.png) left top no-repeat; } -.jqueryFileTree LI.ext_xls { background: url(images/xls.png) left top no-repeat; } -.jqueryFileTree LI.ext_xml { background: url(images/code.png) left top no-repeat; } +UL.jqueryFileTree { + font-family: Verdana, sans-serif; + font-size: 11px; + line-height: 18px; + padding: 0px; + margin: 0px; +} + +UL.jqueryFileTree LI { + list-style: none; + padding: 0px; + padding-left: 20px; + margin: 0px; + white-space: nowrap; +} + +UL.jqueryFileTree A { + color: #333; + text-decoration: none; + display: block; + padding: 0px 2px; +} + +UL.jqueryFileTree A:hover { + background: #BDF; +} + +UL.jqueryFileTree A.selected_folder { + background-color: #EEEEEE; +} + +/* Core Styles */ +.jqueryFileTree LI.directory { background: url(images/directory.png) left top no-repeat; } +.jqueryFileTree LI.expanded { background: url(images/folder_open.png) left top no-repeat; } +.jqueryFileTree LI.file { background: url(images/file.png) left top no-repeat; } +.jqueryFileTree LI.wait { background: url(images/spinner.gif) left top no-repeat; } +/* File Extensions*/ +.jqueryFileTree LI.ext_3gp { background: url(images/film.png) left top no-repeat; } +.jqueryFileTree LI.ext_afp { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_afpa { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_asp { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_aspx { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_avi { background: url(images/film.png) left top no-repeat; } +.jqueryFileTree LI.ext_bat { background: url(images/application.png) left top no-repeat; } +.jqueryFileTree LI.ext_bmp { background: url(images/picture.png) left top no-repeat; } +.jqueryFileTree LI.ext_c { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_cfm { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_cgi { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_com { background: url(images/application.png) left top no-repeat; } +.jqueryFileTree LI.ext_cpp { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_css { background: url(images/css.png) left top no-repeat; } +.jqueryFileTree LI.ext_doc { background: url(images/doc.png) left top no-repeat; } +.jqueryFileTree LI.ext_exe { background: url(images/application.png) left top no-repeat; } +.jqueryFileTree LI.ext_gif { background: url(images/picture.png) left top no-repeat; } +.jqueryFileTree LI.ext_fla { background: url(images/flash.png) left top no-repeat; } +.jqueryFileTree LI.ext_h { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_htm { background: url(images/html.png) left top no-repeat; } +.jqueryFileTree LI.ext_html { background: url(images/html.png) left top no-repeat; } +.jqueryFileTree LI.ext_jar { background: url(images/java.png) left top no-repeat; } +.jqueryFileTree LI.ext_jpg { background: url(images/picture.png) left top no-repeat; } +.jqueryFileTree LI.ext_jpeg { background: url(images/picture.png) left top no-repeat; } +.jqueryFileTree LI.ext_js { background: url(images/script.png) left top no-repeat; } +.jqueryFileTree LI.ext_lasso { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_log { background: url(images/txt.png) left top no-repeat; } +.jqueryFileTree LI.ext_m4p { background: url(images/music.png) left top no-repeat; } +.jqueryFileTree LI.ext_mov { background: url(images/film.png) left top no-repeat; } +.jqueryFileTree LI.ext_mp3 { background: url(images/music.png) left top no-repeat; } +.jqueryFileTree LI.ext_mp4 { background: url(images/film.png) left top no-repeat; } +.jqueryFileTree LI.ext_mpg { background: url(images/film.png) left top no-repeat; } +.jqueryFileTree LI.ext_mpeg { background: url(images/film.png) left top no-repeat; } +.jqueryFileTree LI.ext_ogg { background: url(images/music.png) left top no-repeat; } +.jqueryFileTree LI.ext_pcx { background: url(images/picture.png) left top no-repeat; } +.jqueryFileTree LI.ext_pdf { background: url(images/pdf.png) left top no-repeat; } +.jqueryFileTree LI.ext_php { background: url(images/php.png) left top no-repeat; } +.jqueryFileTree LI.ext_png { background: url(images/picture.png) left top no-repeat; } +.jqueryFileTree LI.ext_ppt { background: url(images/ppt.png) left top no-repeat; } +.jqueryFileTree LI.ext_psd { background: url(images/psd.png) left top no-repeat; } +.jqueryFileTree LI.ext_pl { background: url(images/script.png) left top no-repeat; } +.jqueryFileTree LI.ext_py { background: url(images/script.png) left top no-repeat; } +.jqueryFileTree LI.ext_rb { background: url(images/ruby.png) left top no-repeat; } +.jqueryFileTree LI.ext_rbx { background: url(images/ruby.png) left top no-repeat; } +.jqueryFileTree LI.ext_rhtml { background: url(images/ruby.png) left top no-repeat; } +.jqueryFileTree LI.ext_rpm { background: url(images/linux.png) left top no-repeat; } +.jqueryFileTree LI.ext_ruby { background: url(images/ruby.png) left top no-repeat; } +.jqueryFileTree LI.ext_sql { background: url(images/db.png) left top no-repeat; } +.jqueryFileTree LI.ext_swf { background: url(images/flash.png) left top no-repeat; } +.jqueryFileTree LI.ext_tif { background: url(images/picture.png) left top no-repeat; } +.jqueryFileTree LI.ext_tiff { background: url(images/picture.png) left top no-repeat; } +.jqueryFileTree LI.ext_txt { background: url(images/txt.png) left top no-repeat; } +.jqueryFileTree LI.ext_vb { background: url(images/code.png) left top no-repeat; } +.jqueryFileTree LI.ext_wav { background: url(images/music.png) left top no-repeat; } +.jqueryFileTree LI.ext_wmv { background: url(images/film.png) left top no-repeat; } +.jqueryFileTree LI.ext_xls { background: url(images/xls.png) left top no-repeat; } +.jqueryFileTree LI.ext_xml { background: url(images/code.png) left top no-repeat; } .jqueryFileTree LI.ext_zip { background: url(images/zip.png) left top no-repeat; } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/jquery.filetree/jquery.filetree.js old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/Moxie.swf b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/Moxie.swf new file mode 100755 index 0000000000000000000000000000000000000000..6493572bdf005ad7765d58f79f2ef65660fba931 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/Moxie.swf differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/Moxie.xap b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/Moxie.xap new file mode 100755 index 0000000000000000000000000000000000000000..3a9f389f43dce1bee4f6b7f57ceeb0f8cb7c123e Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/Moxie.xap differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ar.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ar.js new file mode 100755 index 0000000000000000000000000000000000000000..dc348395dbfb4f628d4323e1a8d39cb879d28319 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ar.js @@ -0,0 +1,2 @@ +// Arabic (ar) +plupload.addI18n({"Stop Upload":"أيقاف التحميل","Upload URL might be wrong or doesn't exist.":"عنوان التحميل ربما يكون خاطئ أو غير متوفر","tb":"تيرابايت","Size":"الحجم","Close":"أغلاق","Init error.":"خطأ في تهيئة","Add files to the upload queue and click the start button.":"أضف ملفات إلى القائمة إنتظار التحميل ثم أضغط على زر البداية","Filename":"أسم الملف","Image format either wrong or not supported.":"صيغة الصورة أما خطاء أو غير مدعومه","Status":"الحالة","HTTP Error.":"خطأ في برتوكول نقل الملفات","Start Upload":"أبدا التحميل","mb":"ميجابايت","kb":"كيلوبايت","Duplicate file error.":"خطاء في تكرار الملف","File size error.":"خطأ في حجم الملف","N/A":"لا شي","gb":"جيجابايت","Error: Invalid file extension:":"خطاء : أمتداد الملف غير صالح :","Select files":"أختر الملفات","%s already present in the queue.":"%s الملف موجود بالفعل في قائمة الانتظار","File: %s":"ملف: %s","b":"بايت","Uploaded %d/%d files":"تحميل %d/%d ملف","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"العناصر المقبوله لتحميل هي %d ملف في هذا الوقت. الملفات الاضافية أزيلة.","%d files queued":"%d الملفات في قائمة الانتظار","File: %s, size: %d, max file size: %d":"ملف: %s, أقصى حجم للملف: %d, حجم: %d","Drag files here.":"سحب الملف هنا","Runtime ran out of available memory.":"الذاكرة المتوفره أنتهت لمدة التشغيل","File count error.":"خطاء في عد الملفات","File extension error.":"خطأ في أمتداد الملف","Error: File too large:":" خطاء : حجم الملف كبير :","Add Files":"أضف ملفات"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/bs.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/bs.js new file mode 100755 index 0000000000000000000000000000000000000000..27fe00933909b04338fb779fe3ebffb97a62f365 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/bs.js @@ -0,0 +1,2 @@ +// Bosnian (bs) +plupload.addI18n({"Stop Upload":"Prekini dodavanje","Upload URL might be wrong or doesn't exist.":"URL za dodavanje je neispravan ili ne postoji.","tb":"tb","Size":"Veličina","Close":"Zatvori","Init error.":"Inicijalizacijska greška.","Add files to the upload queue and click the start button.":"Dodajte datoteke u red i kliknite na dugme za pokretanje.","Filename":"Naziv datoteke","Image format either wrong or not supported.":"Format slike je neispravan ili nije podržan.","Status":"Status","HTTP Error.":"HTTP greška.","Start Upload":"Započni dodavanje","mb":"mb","kb":"kb","Duplicate file error.":"Dupla datoteka.","File size error.":"Greška u veličini datoteke.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Greška! Neispravan ekstenzija datoteke:","Select files":"Odaberite datoteke","%s already present in the queue.":"%s se već nalazi u redu.","File: %s":"Datoteka: %s","b":"b","Uploaded %d/%d files":"Dodano %d/%d datoteka","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Dodavanje trenutno dozvoljava samo %d datoteka istovremeno. Dodatne datoteke su uklonjene.","%d files queued":"%d datoteka čeka","File: %s, size: %d, max file size: %d":"Datoteka: %s, veličina: %d, maksimalna veličina: %d","Drag files here.":"Dovucite datoteke ovdje.","Runtime ran out of available memory.":"Nema više dostupne memorije.","File count error.":"Greška u brojanju datoeka.","File extension error.":"Greška u ekstenziji datoteke.","Error: File too large:":"Greška! Datoteka je prevelika:","Add Files":"Dodaj datoteke"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ca.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ca.js new file mode 100755 index 0000000000000000000000000000000000000000..e82b3dc3e8727079a0267f8184c3402b4efeb1bd --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ca.js @@ -0,0 +1,2 @@ +// Catalan (ca) +plupload.addI18n({"Stop Upload":"","Upload URL might be wrong or doesn't exist.":"","tb":"","Size":"","Close":"","Init error.":"","Add files to the upload queue and click the start button.":"","Filename":"","Image format either wrong or not supported.":"","Status":"","HTTP Error.":"","Start Upload":"","mb":"","kb":"","Duplicate file error.":"","File size error.":"","N/A":"","gb":"","Error: Invalid file extension:":"","Select files":"","%s already present in the queue.":"","File: %s":"","b":"","Uploaded %d/%d files":"","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"","%d files queued":"","File: %s, size: %d, max file size: %d":"","Drag files here.":"","Runtime ran out of available memory.":"","File count error.":"","File extension error.":"","Error: File too large:":"","Add Files":""}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cs.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cs.js new file mode 100755 index 0000000000000000000000000000000000000000..cc18b076f4cc59b9d351aea9a65af1922dd73389 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cs.js @@ -0,0 +1,2 @@ +// Czech (cs) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Velikost","Close":"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Přidejte soubory do fronty a pak spusťte nahrávání.","Filename":"Název souboru","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Spustit nahrávání","mb":"","kb":"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Vyberte soubory","%s already present in the queue.":"","File: %s":"File: %s","b":"","Uploaded %d/%d files":"Nahráno %d/%d souborů","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Sem přetáhněte soubory.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Přidat soubory"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cy.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cy.js new file mode 100755 index 0000000000000000000000000000000000000000..54a60c0268dab49880c395b59bbfd256817f879c --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/cy.js @@ -0,0 +1,2 @@ +// Welsh (cy) +plupload.addI18n({"Stop Upload":"Atal Lanlwytho","Upload URL might be wrong or doesn't exist.":"URL y lanlwythiad ynb anghywir neu ddim yn bodoli.","tb":"tb","Size":"Maint","Close":"Cau","Init error.":"Gwall cych.","Add files to the upload queue and click the start button.":"Ychwanegwch ffeiliau i'r ciw lanlwytho a chlicio'r botwm dechrau.","Filename":"Enw'r ffeil","Image format either wrong or not supported.":"Fformat delwedd yn anghywir neu heb ei gynnal.","Status":"Statws","HTTP Error.":"Gwall HTTP.","Start Upload":"Dechrau Lanlwytho","mb":"mb","kb":"kb","Duplicate file error.":"Gwall ffeil ddyblyg.","File size error.":"Gwall maint ffeil.","N/A":"Dd/A","gb":"gb","Error: Invalid file extension:":"Gwall: estyniad ffeil annilys:","Select files":"Dewis ffeiliau","%s already present in the queue.":"%s yn y ciw yn barod.","File: %s":"Ffeil: %s","b":"b","Uploaded %d/%d files":"Lanlwythwyd %d/%d ffeil","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Mae'r elfen lanlwytho yn derbyn %d ffeil ar y tro. Caiff ffeiliau ychwanegol eu tynnu.","%d files queued":"%d ffeil mewn ciw","File: %s, size: %d, max file size: %d":"Ffeil: %s, maint: %d, maint mwyaf ffeil: %d","Drag files here.":"Llusgwch ffeiliau yma.","Runtime ran out of available memory.":"Allan o gof.","File count error.":"Gwall cyfri ffeiliau.","File extension error.":"Gwall estyniad ffeil.","Error: File too large:":"Gwall: Ffeil yn rhy fawr:","Add Files":"Ychwanegu Ffeiliau"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/da.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/da.js new file mode 100755 index 0000000000000000000000000000000000000000..4b5d11d988d49951b0c8e30e70165bac7c7e4320 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/da.js @@ -0,0 +1,2 @@ +// Danish (da) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Størrelse","Close":"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Tilføj filer til køen","Filename":"Filnavn","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Vælg filer","%s already present in the queue.":"","File: %s":"File: %s","b":"","Uploaded %d/%d files":"Uploaded %d/%d files","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Træk filer her.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/de.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/de.js new file mode 100755 index 0000000000000000000000000000000000000000..d050682697bd40ed88fda09c97b2709f02d5fc14 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/de.js @@ -0,0 +1,2 @@ +// German (de) +plupload.addI18n({"Stop Upload":"Hochladen stoppen","Upload URL might be wrong or doesn't exist.":"Upload-URL ist falsch oder existiert nicht.","tb":"TB","Size":"Größe","Close":"Schließen","Init error.":"Initialisierungsfehler","Add files to the upload queue and click the start button.":"Dateien hinzufügen und auf 'Hochladen' klicken.","Filename":"Dateiname","Image format either wrong or not supported.":"Bildformat falsch oder nicht unterstützt.","Status":"Status","HTTP Error.":"HTTP-Fehler","Start Upload":"Upload beginnen","mb":"MB","kb":"kB","Duplicate file error.":"","File size error.":"Fehler bei Dateigröße","N/A":"Nicht verfügbar","gb":"GB","Error: Invalid file extension:":"Fehler: Ungültige Dateiendung:","Select files":"Dateien hochladen","%s already present in the queue.":"","File: %s":"Datei: %s","b":"B","Uploaded %d/%d files":"%d/%d Dateien sind hochgeladen","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Der Uploader akzeptiert nur %d Datei(en) pro Durchgang. Überzählige Dateien wurden abgetrennt.","%d files queued":"%d Dateien in der Warteschlange","File: %s, size: %d, max file size: %d":"Datei: %s, Größe: %d, maximale Dateigröße: %d","Drag files here.":"Ziehen Sie die Dateien hier hin","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"Fehler bei Dateiendung","Error: File too large:":"Fehler: Datei zu groß:","Add Files":"Dateien hinzufügen"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/el.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/el.js new file mode 100755 index 0000000000000000000000000000000000000000..99d8b24b328e6cd06202afdf77c49e4d3f563343 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/el.js @@ -0,0 +1,2 @@ +// Greek (el) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Μέγεθος","Close":"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Προσθήκη αρχείων στην ουρά μεταφόρτωσης","Filename":"Όνομα αρχείου","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Κατάσταση","HTTP Error.":"HTTP Error.","Start Upload":"Εκκίνηση μεταφόρτωσης","mb":"","kb":"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Επιλέξτε Αρχεία","%s already present in the queue.":"","File: %s":"File: %s","b":"","Uploaded %d/%d files":"Ανέβηκαν %d/%d αρχεία","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Σύρετε αρχεία εδώ","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Προσθέστε αρχεία"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/en.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/en.js new file mode 100755 index 0000000000000000000000000000000000000000..6ab3e2e08d9752554c2051179f5ca3cb83580c5a --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/en.js @@ -0,0 +1,2 @@ +// English (en) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"tb","Size":"Size","Close":"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Add files to the upload queue and click the start button.","Filename":"Filename","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload","mb":"mb","kb":"kb","Duplicate file error.":"Duplicate file error.","File size error.":"File size error.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Select files","%s already present in the queue.":"%s already present in the queue.","File: %s":"File: %s","b":"b","Uploaded %d/%d files":"Uploaded %d/%d files","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"File: %s, size: %d, max file size: %d","Drag files here.":"Drag files here.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/es.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/es.js new file mode 100755 index 0000000000000000000000000000000000000000..72b0367ed32aeb3842b1085e283b59ec26fbc095 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/es.js @@ -0,0 +1,2 @@ +// Spanish (es) +plupload.addI18n({"Stop Upload":"Detener Subida.","Upload URL might be wrong or doesn't exist.":"URL de carga inexistente.","tb":"TB","Size":"Tamaño","Close":"Cerrar","Init error.":"Error de inicialización.","Add files to the upload queue and click the start button.":"Agregue archivos a la lista de subida y pulse clic en el botón de Iniciar carga","Filename":"Nombre de archivo","Image format either wrong or not supported.":"Formato de imagen no soportada.","Status":"Estado","HTTP Error.":"Error de HTTP.","Start Upload":"Iniciar carga","mb":"MB","kb":"KB","Duplicate file error.":"Error, archivo duplicado","File size error.":"Error de tamaño de archivo.","N/A":"No disponible","gb":"GB","Error: Invalid file extension:":"Error: Extensión de archivo inválida:","Select files":"Elija archivos","%s already present in the queue.":"%s ya se encuentra en la lista.","File: %s":"Archivo: %s","b":"B","Uploaded %d/%d files":"Subidos %d/%d archivos","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Se aceptan sólo %d archivo(s) al tiempo. Más, no se tienen en cuenta.","%d files queued":"%d archivos en cola.","File: %s, size: %d, max file size: %d":"Archivo: %s, tamaño: %d, tamaño máximo de archivo: %d","Drag files here.":"Arrastre archivos aquí","Runtime ran out of available memory.":"No hay memoria disponible.","File count error.":"Error en contador de archivos.","File extension error.":"Error de extensión de archivo.","Error: File too large:":"Error: archivo demasiado grande:","Add Files":"Agregar archivos"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/et.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/et.js new file mode 100755 index 0000000000000000000000000000000000000000..3e145b10e7d7c338a67d628be3285d4bdd2f48c8 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/et.js @@ -0,0 +1,2 @@ +// Estonian (et) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Üleslaadimise URL võib olla vale või seda pole.","tb":"","Size":"Suurus","Close":"Sulge","Init error.":"Lähtestamise viga.","Add files to the upload queue and click the start button.":"Lisa failid üleslaadimise järjekorda ja klõpsa alustamise nupule.","Filename":"Failinimi","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Olek","HTTP Error.":"HTTP ühenduse viga.","Start Upload":"Start Upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"Failisuuruse viga.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Vali faile","%s already present in the queue.":"","File: %s":"Fail: %s","b":"","Uploaded %d/%d files":"Üles laaditud %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Üleslaadimise element saab vastu võtta ainult %d faili ühe korraga. Ülejäänud failid jäetakse laadimata.","%d files queued":"Järjekorras on %d faili","File: %s, size: %d, max file size: %d":"","Drag files here.":"Lohista failid siia.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Failide arvu viga.","File extension error.":"Faililaiendi viga.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fa.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fa.js new file mode 100755 index 0000000000000000000000000000000000000000..a833c07aa893008048b4f682e4ba298f7fa4f18b --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fa.js @@ -0,0 +1,2 @@ +// Persian (fa) +plupload.addI18n({"Stop Upload":"توقف انتقال","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"سایز","Close":"بستن","Init error.":"خطا در استارت اسکریپت","Add files to the upload queue and click the start button.":"اضافه کنید فایل ها را به صف آپلود و دکمه شروع را کلیک کنید.","Filename":"نام فایل","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"وضعیت","HTTP Error.":"HTTP خطای","Start Upload":"شروع انتقال","mb":"","kb":"","Duplicate file error.":"","File size error.":"خطای سایز فایل","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"انتخاب فایل","%s already present in the queue.":"","File: %s":" فایل ها : %s","b":"","Uploaded %d/%d files":"منتقل شد %d/%d از فایلها","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"عنصر بارگذار فقط %d فایل رو در یک زمان می پذیرد. سایر فایل ها مجرد از این موضوع هستند.","%d files queued":"%d فایل در صف","File: %s, size: %d, max file size: %d":"","Drag files here.":"بکشید فایل ها رو به اینجا","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"خطای تعداد فایل","File extension error.":"خطا پیشوند فایل","Error: File too large:":"Error: File too large:","Add Files":"افزودن فایل"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fi.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fi.js new file mode 100755 index 0000000000000000000000000000000000000000..b6cb189801c72f62883015d5027bafe7d53aba7e --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fi.js @@ -0,0 +1,2 @@ +// Finnish (fi) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Koko","Close":"Sulje","Init error.":"Init virhe.","Add files to the upload queue and click the start button.":"Lisää tiedostoja latausjonoon ja klikkaa aloita-nappia.","Filename":"Tiedostonimi","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Tila","HTTP Error.":"HTTP virhe.","Start Upload":"Start Upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"Tiedostokokovirhe.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Valitse tiedostoja","%s already present in the queue.":"","File: %s":"Tiedosto: %s","b":"","Uploaded %d/%d files":"Ladattu %d/%d tiedostoa","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Latauselementti sallii ladata vain %d tiedosto(a) kerrallaan. Ylimääräiset tiedostot ohitettiin.","%d files queued":"%d tiedostoa jonossa","File: %s, size: %d, max file size: %d":"","Drag files here.":"Raahaa tiedostot tänne.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Tiedostolaskentavirhe.","File extension error.":"Tiedostopäätevirhe.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fr.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fr.js new file mode 100755 index 0000000000000000000000000000000000000000..812149e93abda9d643372c3f81a6843e43426c1b --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/fr.js @@ -0,0 +1,2 @@ +// French (fr) +plupload.addI18n({"Stop Upload":"Arrêter l'envoi.","Upload URL might be wrong or doesn't exist.":"L'URL d'envoi est soit erronée soit n'existe pas.","tb":"To","Size":"Taille","Close":"Fermer","Init error.":"Erreur d'initialisation.","Add files to the upload queue and click the start button.":"Ajoutez des fichiers à la file d'attente de téléchargement et appuyez sur le bouton 'Démarrer l'envoi'","Filename":"Nom du fichier","Image format either wrong or not supported.":"Le format d'image est soit erroné soit pas géré.","Status":"État","HTTP Error.":"Erreur HTTP.","Start Upload":"Démarrer l'envoi","mb":"Mo","kb":"Ko","Duplicate file error.":"Erreur: Fichier à double.","File size error.":"Erreur de taille de fichier.","N/A":"Non applicable","gb":"Go","Error: Invalid file extension:":"Erreur: Extension de fichier non valide:","Select files":"Sélectionnez les fichiers","%s already present in the queue.":"%s déjà présent dans la file d'attente.","File: %s":"Fichier: %s","b":"o","Uploaded %d/%d files":"%d fichiers sur %d ont été envoyés","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Que %d fichier(s) peuvent être envoyé(s) à la fois. Les fichiers supplémentaires ont été ignorés.","%d files queued":"%d fichiers en attente","File: %s, size: %d, max file size: %d":"Fichier: %s, taille: %d, taille max. d'un fichier: %d","Drag files here.":"Déposez les fichiers ici.","Runtime ran out of available memory.":"Le traitement a manqué de mémoire disponible.","File count error.":"Erreur: Nombre de fichiers.","File extension error.":"Erreur d'extension de fichier","Error: File too large:":"Erreur: Fichier trop volumineux:","Add Files":"Ajouter des fichiers"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/he.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/he.js new file mode 100755 index 0000000000000000000000000000000000000000..710334780f90ae14d4fe29536fde7de299fef2be --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/he.js @@ -0,0 +1,2 @@ +// Hebrew (he) +plupload.addI18n({"Stop Upload":"בטל העלאה","Upload URL might be wrong or doesn't exist.":"כתובת URL שגויה או לא קיימת.","tb":"tb","Size":"גודל","Close":"סגור","Init error.":"שגיאת איתחול","Add files to the upload queue and click the start button.":"הוסף קבצים לרשימה ולחץ על כפתור שליחה להתחלת פעולות העלאה","Filename":"שם קובץ","Image format either wrong or not supported.":"תמונה פגומה או סוג תמונה לא נתמך","Status":"אחוז","HTTP Error.":"שגיאת פרוטוקול","Start Upload":"שליחה","mb":"MB","kb":"KB","Duplicate file error.":"קובץ כפול","File size error.":"גודל קובץ חורג מהמותר","N/A":"שגיאה","gb":"GB","Error: Invalid file extension:":"שגיאה: סוג קובץ לא נתמך:","Select files":"בחר קבצים","%s already present in the queue.":"%sקובץ נמצא כבר ברשימת הקבצים.","File: %s":"קובץ: %s","b":"B","Uploaded %d/%d files":"מעלה: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"אלמנטי ההעלאה מקבלים רק %d קובץ(ים) בפעם אחת. קבצים נוספים הוסרו.","%d files queued":"%d קבצים נותרו","File: %s, size: %d, max file size: %d":"קובץ: %s, גודל: %d, גודל מקסימלי: %d","Drag files here.":"גרור קבצים לכאן","Runtime ran out of available memory.":"שגיאת מחסור בזיכרון","File count error.":"שגיאת מספר קבצים","File extension error.":"קובץ זה לא נתמך","Error: File too large:":"שגיאה: קובץ חורג מהגודל המותר:","Add Files":"הוסף קבצים"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hr.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hr.js new file mode 100755 index 0000000000000000000000000000000000000000..626dded43714bbc5c8ff701c1e0f1068cb770b65 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hr.js @@ -0,0 +1,2 @@ +// Croatian (hr) +plupload.addI18n({"Stop Upload":"Zaustavi upload.","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"tb","Size":"Veličina","Close":"Zatvori","Init error.":"Greška inicijalizacije.","Add files to the upload queue and click the start button.":"Dodajte datoteke u listu i kliknite Upload.","Filename":"Ime datoteke","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP greška.","Start Upload":"Pokreni upload.","mb":"mb","kb":"kb","Duplicate file error.":"Pogreška dvostruke datoteke.","File size error.":"Greška veličine datoteke.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Pogreška: Nevažeći nastavak datoteke:","Select files":"Odaberite datoteke:","%s already present in the queue.":"%s je već prisutan u listi čekanja.","File: %s":"Datoteka: %s","b":"b","Uploaded %d/%d files":"Uploadano %d/%d datoteka","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d datoteka na čekanju.","File: %s, size: %d, max file size: %d":"Datoteka: %s, veličina: %d, maksimalna veličina: %d","Drag files here.":"Dovucite datoteke ovdje","Runtime ran out of available memory.":"Runtime aplikaciji je ponestalo memorije.","File count error.":"Pogreška u broju datoteka.","File extension error.":"Pogreška u nastavku datoteke.","Error: File too large:":"Pogreška: Datoteka je prevelika:","Add Files":"Dodaj datoteke"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hu.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hu.js new file mode 100755 index 0000000000000000000000000000000000000000..b2b49b31d9266e2abde705b97f7398d6f8179d1b --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hu.js @@ -0,0 +1,2 @@ +// Hungarian (hu) +plupload.addI18n({"Stop Upload":"Feltöltés leállítása","Upload URL might be wrong or doesn't exist.":"A feltöltő URL hibás vagy nem létezik.","tb":"","Size":"Méret","Close":"Bezárás","Init error.":"Init hiba.","Add files to the upload queue and click the start button.":"A fájlok feltöltési sorhoz való hozzáadása után az Indítás gombra kell kattintani.","Filename":"Fájlnév","Image format either wrong or not supported.":"Rossz vagy nem támogatott képformátum.","Status":"Állapot","HTTP Error.":"HTTP-hiba.","Start Upload":"Feltöltés indítása","mb":"","kb":"","Duplicate file error.":"Duplikáltfájl-hiba.","File size error.":"Hibás fájlméret.","N/A":"Nem elérhető","gb":"","Error: Invalid file extension:":"Hiba: érvénytelen fájlkiterjesztés:","Select files":"Fájlok kiválasztása","%s already present in the queue.":"%s már szerepel a listában.","File: %s":"Fájl: %s","b":"b","Uploaded %d/%d files":"Feltöltött fájlok: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"A feltöltés egyszerre csak %d fájlt fogad el, a többi fájl nem lesz feltöltve.","%d files queued":"%d fájl sorbaállítva","File: %s, size: %d, max file size: %d":"Fájl: %s, méret: %d, legnagyobb fájlméret: %d","Drag files here.":"Ide lehet húzni a fájlokat.","Runtime ran out of available memory.":"Futásidőben elfogyott a rendelkezésre álló memória.","File count error.":"A fájlok számával kapcsolatos hiba.","File extension error.":"Hibás fájlkiterjesztés.","Error: File too large:":"Hiba: a fájl túl nagy:","Add Files":"Fájlok hozzáadása"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hy.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hy.js new file mode 100755 index 0000000000000000000000000000000000000000..c13a9653b8571b6811677b791f643a804c1102a7 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/hy.js @@ -0,0 +1,2 @@ +// Armenian (hy) +plupload.addI18n({"Stop Upload":"Կանգնեցնել","Upload URL might be wrong or doesn't exist.":"Ավեցաված URL-ը սխալ է կամ գոյություն չունի։","tb":"տբ","Size":"Չափ","Close":"Փակել","Init error.":"Ստեղծման սխալ","Add files to the upload queue and click the start button.":"Ավելացրեք ֆայլեր ցուցակում և սեղմեք \"Վերբեռնել\"։","Filename":"Ֆայլի անուն","Image format either wrong or not supported.":"Նկարի ֆորմատը սխալ է կամ չի ընդունվում։","Status":"","HTTP Error.":"HTTP սխալ","Start Upload":"Վերբեռնել","mb":"մբ","kb":"կբ","Duplicate file error.":"Ֆայլի կրկնման սխալ","File size error.":"Ֆայլի չափի սխալ","N/A":"N/A","gb":"գբ","Error: Invalid file extension:":"Սխալ։ Ֆայլի ընդլայնումը սխալ է։","Select files":"Ընտրեք ֆայլերը","%s already present in the queue.":"%s ֆայլը արդեն ավելացված է ցուցակում.","File: %s":"Ֆայլ: %s","b":"բ","Uploaded %d/%d files":"Վերբեռնվել են %d/%d ֆայլերը","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"","%d files queued":"ցուցակում կա %d ֆայլ","File: %s, size: %d, max file size: %d":"Ֆայլ: %s, չափ: %d, ֆայլի մաքսիմում չափ: %d","Drag files here.":"Տեղափոխեք ֆայլերը այստեղ","Runtime ran out of available memory.":"","File count error.":"Ֆայլերի քանակի սխալ","File extension error.":"Ֆայլի ընդլայնման սխալ","Error: File too large:":"Սխալ։ Ֆայլի չափը մեծ է։","Add Files":"Ավելացնել ֆայլեր"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/id.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/id.js new file mode 100755 index 0000000000000000000000000000000000000000..2921c27d17541606f1811b5656a7f19f7a1af0a5 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/id.js @@ -0,0 +1,2 @@ +// Indonesian (id) +plupload.addI18n({"Stop Upload":"Hentikan Upload","Upload URL might be wrong or doesn't exist.":"Alamat URL untuk upload tidak benar atau tidak ada","tb":"tb","Size":"Ukuran","Close":"Tutup","Init error.":"Kesalahan pada Init","Add files to the upload queue and click the start button.":"Tambahkan file kedalam antrian upload dan klik tombol Mulai","Filename":"Nama File","Image format either wrong or not supported.":"Kesalahan pada jenis gambar atau jenis file tidak didukung","Status":"Status","HTTP Error.":"HTTP Bermasalah","Start Upload":"Mulai Upload","mb":"mb","kb":"kb","Duplicate file error.":"Terjadi duplikasi file","File size error.":"Kesalahan pada ukuran file","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Kesalahan: Ekstensi file tidak dikenal","Select files":"Pilih file","%s already present in the queue.":"%s sudah ada dalam daftar antrian","File: %s":"File: %s","b":"b","Uploaded %d/%d files":"File terupload %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Tempat untuk upload hanya menerima %d file(s) dalam setiap upload. File lainnya tidak akan disertakan","%d files queued":"%d file dalam antrian","File: %s, size: %d, max file size: %d":"File: %s, ukuran: %d, maksimum ukuran file: %d","Drag files here.":"Tarik file kesini","Runtime ran out of available memory.":"Tidak cukup memori","File count error.":"Kesalahan pada jumlah file","File extension error.":"Kesalahan pada ekstensi file","Error: File too large:":"Kesalahan: File terlalu besar","Add Files":"Tambah File"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/it.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/it.js new file mode 100755 index 0000000000000000000000000000000000000000..66c9f9df078a5640b1a8e49fccd102184d87b086 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/it.js @@ -0,0 +1,2 @@ +// Italian (it) +plupload.addI18n({"Stop Upload":"Ferma Upload","Upload URL might be wrong or doesn't exist.":"URL di Upload errata o non esistente","tb":"tb","Size":"Dimensione","Close":"Chiudi","Init error.":"Errore inizializzazione.","Add files to the upload queue and click the start button.":"Aggiungi i file alla coda di caricamento e clicca il pulsante di avvio.","Filename":"Nome file","Image format either wrong or not supported.":"Formato immagine errato o non supportato.","Status":"Stato","HTTP Error.":"Errore HTTP.","Start Upload":"Inizia Upload","mb":"mb","kb":"kb","Duplicate file error.":"Errore file duplicato.","File size error.":"Errore dimensione file.","N/A":"N/D","gb":"gb","Error: Invalid file extension:":"Errore: Estensione file non valida:","Select files":"Seleziona i files","%s already present in the queue.":"%s già presente nella coda.","File: %s":"File: %s","b":"byte","Uploaded %d/%d files":"Caricati %d/%d file","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d file in coda","File: %s, size: %d, max file size: %d":"File: %s, dimensione: %d, dimensione max file: %d","Drag files here.":"Trascina i files qui.","Runtime ran out of available memory.":"Runtime ha esaurito la memoria disponibile.","File count error.":"File count error.","File extension error.":"Errore estensione file.","Error: File too large:":"Errore: File troppo grande:","Add Files":"Aggiungi file"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ja.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ja.js new file mode 100755 index 0000000000000000000000000000000000000000..6cf3e225da04f7af71a537218b4afbaf510839da --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ja.js @@ -0,0 +1,2 @@ +// Japanese (ja) +plupload.addI18n({"Stop Upload":"アップロード停止","Upload URL might be wrong or doesn't exist.":"アップロード先の URL が存在しません","tb":"","Size":"サイズ","Close":"閉じる","Init error.":"イニシャライズエラー","Add files to the upload queue and click the start button.":"ファイルをアップロードキューに追加してスタートボタンをクリックしてください","Filename":"ファイル名","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"ステータス","HTTP Error.":"HTTP エラー","Start Upload":"アップロード","mb":"","kb":"","Duplicate file error.":"","File size error.":"ファイルサイズエラー","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"ファイル選択","%s already present in the queue.":"","File: %s":"ファイル: %s","b":"","Uploaded %d/%d files":"アップロード中 %d/%d ファイル","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"アップロード可能なファイル数は %d です。余分なファイルは削除されました","%d files queued":"%d ファイルが追加されました","File: %s, size: %d, max file size: %d":"","Drag files here.":"ここにファイルをドラッグ","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"ファイル数エラー","File extension error.":"ファイル拡張子エラー","Error: File too large:":"Error: File too large:","Add Files":"ファイルを追加"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ka.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ka.js new file mode 100755 index 0000000000000000000000000000000000000000..b1a1fa9d6d5e466c733674ea26de91712ef224e1 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ka.js @@ -0,0 +1,2 @@ +// Georgian (ka) +plupload.addI18n({"Stop Upload":"ატვირთვის შეჩერება","Upload URL might be wrong or doesn't exist.":"ატვირთვის მისამართი არასწორია ან არ არსებობს.","tb":"ტბ","Size":"ზომა","Close":"დავხუროთ","Init error.":"ინიციალიზაციის შეცდომა.","Add files to the upload queue and click the start button.":"დაამატეთ ფაილები და დააჭირეთ ღილაკს - ატვირთვა.","Filename":"ფაილის სახელი","Image format either wrong or not supported.":"ფაილის ფორმატი არ არის მხარდაჭერილი ან არასწორია.","Status":"სტატუსი","HTTP Error.":"HTTP შეცდომა.","Start Upload":"ატვირთვა","mb":"მბ","kb":"კბ","Duplicate file error.":"ესეთი ფაილი უკვე დამატებულია.","File size error.":"ფაილის ზომა დაშვებულზე დიდია.","N/A":"N/A","gb":"გბ","Error: Invalid file extension:":"შეცდომა: ფაილს აქვს არასწორი გაფართოება.","Select files":"ფაილების მონიშვნა","%s already present in the queue.":"%s უკვე დამატებულია.","File: %s":"ფაილი: %s","b":"ბ","Uploaded %d/%d files":"ატვირთულია %d/%d ფაილი","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"ერთდროულად დაშვებულია მხოლოდ %d ფაილის დამატება.","%d files queued":"რიგშია %d ფაილი","File: %s, size: %d, max file size: %d":"ფაილი: %s, ზომა: %d, მაქსიმალური დაშვებული ზომა: %d","Drag files here.":"ჩააგდეთ ფაილები აქ.","Runtime ran out of available memory.":"ხელმისაწვდომი მეხსიერება გადაივსო.","File count error.":"აღმოჩენილია ზედმეტი ფაილები.","File extension error.":"ფაილის ფორმატი დაშვებული არ არის.","Error: File too large:":"შეცდომა: ფაილი ზედმეტად დიდია.","Add Files":"დაამატეთ ფაილები"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/kk.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/kk.js new file mode 100755 index 0000000000000000000000000000000000000000..344922a880b96a8d39c314beb2c1865b4d52912d --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/kk.js @@ -0,0 +1,2 @@ +// Kazakh (kk) +plupload.addI18n({"Stop Upload":"Жүктеуді тоқтату","Upload URL might be wrong or doesn't exist.":"Жүктеуді қабылдаушы URL қате не мүлдем көрсетілмеген.","tb":"тб","Size":"Өлшемі","Close":"Жабу","Init error.":"Инициализация қатесі.","Add files to the upload queue and click the start button.":"Жүктеу кезегіне файлдар қосып, Бастау кнопкасын басыңыз.","Filename":"Файл аты","Image format either wrong or not supported.":"Сурет форматы қате немесе оның қолдауы жоқ.","Status":"Күйі","HTTP Error.":"HTTP қатесі.","Start Upload":"Жүктеуді бастау","mb":"мб","kb":"кб","Duplicate file error.":"Файл қайталамасының қатесі.","File size error.":"Файл өлшемінің қатесі.","N/A":"Қ/Ж","gb":"гб","Error: Invalid file extension:":"Қате: Файл кеңейтілуі қате:","Select files":"Файлдар таңдаңыз","%s already present in the queue.":"%s файлы кезекте бұрыннан бар.","File: %s":"Файл: %s","b":"б","Uploaded %d/%d files":"Жүктелген: %d/%d файл","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Жүктеу элементі бір кезде %d файл ғана жүктей алады. Артық файлдар жүктелмейді.","%d files queued":"%d файл кезекке қойылды","File: %s, size: %d, max file size: %d":"Файл: %s, өлшемі: %d, макс. файл өлшемі: %d","Drag files here.":"Файлдарды мына жерге тастаңыз.","Runtime ran out of available memory.":"Орындау кезінде жады жетпей қалды.","File count error.":"Файл санының қатесі.","File extension error.":"Файл кеңейтілуінің қатесі.","Error: File too large:":"Қате: Файл мөлшері тым үлкен:","Add Files":"Файл қосу"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ko.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ko.js new file mode 100755 index 0000000000000000000000000000000000000000..534b179c47b49aef066f4347299b8c74d5223a7a --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ko.js @@ -0,0 +1,2 @@ +// Korean (ko) +plupload.addI18n({"Stop Upload":"업로드 중지","Upload URL might be wrong or doesn't exist.":"업로드할 URL이 존재하지 않습니다","tb":"","Size":"크기","Close":"닫기","Init error.":"초기화 오류","Add files to the upload queue and click the start button.":"파일을 업로드 큐에 추가하여 시작 버튼을 클릭하십시오.","Filename":"파일 이름","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"상태","HTTP Error.":"HTTP 오류","Start Upload":"업로드","mb":"","kb":"","Duplicate file error.":"","File size error.":"파일 크기 오류","N/A":"N/A","gb":"","Error: Invalid file extension:":"오류 : 확장자가 허용되지 않습니다 :","Select files":"파일 선택","%s already present in the queue.":"","File: %s":"파일 % s","b":"","Uploaded %d/%d files":"업로드 중 % d / % d 파일","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"업로드 가능한 파일의 수는 % d입니다. 불필요한 파일은 삭제되었습니다","%d files queued":"% d 파일이 추가되었습니다","File: %s, size: %d, max file size: %d":"","Drag files here.":"여기에 파일을 드래그","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"이미지 : 오류","File extension error.":"파일 확장자 오류","Error: File too large:":"오류 : 크기가 너무 큽니다","Add Files":"파일 추가"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lt.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lt.js new file mode 100755 index 0000000000000000000000000000000000000000..b24e65b0329805ee4d5d46dd42e35765fa42b561 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lt.js @@ -0,0 +1,2 @@ +// Lithuanian (lt) +plupload.addI18n({"Stop Upload":"Stabdyti įkėlimą","Upload URL might be wrong or doesn't exist.":"Klaidinga arba neegzistuojanti įkėlimo nuoroda.","tb":"tb","Size":"Dydis","Close":"Uždaryti","Init error.":"Įkrovimo klaida.","Add files to the upload queue and click the start button.":"Pridėkite bylas į įkėlimo eilę ir paspauskite starto mygtuką.","Filename":"Bylos pavadinimas","Image format either wrong or not supported.":"Paveiksliuko formatas klaidingas arba nebepalaikomas.","Status":"Statusas","HTTP Error.":"HTTP klaida.","Start Upload":"Pradėti įkėlimą","mb":"mb","kb":"kb","Duplicate file error.":"Pasikartojanti byla.","File size error.":"Netinkamas bylos dydis.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Klaida: Netinkamas bylos plėtinys:","Select files":"Žymėti bylas","%s already present in the queue.":"%s jau yra eilėje.","File: %s":"Byla: %s","b":"b","Uploaded %d/%d files":"Įkelta bylų: %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Vienu metu galima įkelti tik %d bylas(ų). Papildomos bylos buvo pašalintos.","%d files queued":"%d bylų eilėje","File: %s, size: %d, max file size: %d":"Byla: %s, dydis: %d, galimas dydis: %d","Drag files here.":"Padėti bylas čia.","Runtime ran out of available memory.":"Išeikvota darbinė atmintis.","File count error.":"Netinkamas bylų kiekis.","File extension error.":"Netinkamas pletinys.","Error: File too large:":"Klaida: Byla per didelė:","Add Files":"Pridėti bylas"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lv.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lv.js new file mode 100755 index 0000000000000000000000000000000000000000..0c76b98a4c47df738f6f578dda6cfc9fbe1fefe6 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/lv.js @@ -0,0 +1,2 @@ +// Latvian (lv) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"terrabaiti","Size":"Izmērs","Close":"Aizvērt","Init error.":"Inicializācijas kļūda.","Add files to the upload queue and click the start button.":"Pieveinojiet failus rindai un klikšķiniet uz","Filename":"Faila nosaukums","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Statuss","HTTP Error.":"HTTP kļūda.","Start Upload":"Start Upload","mb":"megabaiti","kb":"kilobaiti","Duplicate file error.":"Atkārtota faila kļūda","File size error.":"Faila izmēra kļūda.","N/A":"N/A","gb":"gigabaiti","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Izvēlieties failus","%s already present in the queue.":"%s jau ir atrodams rindā.","File: %s":"Fails: %s","b":"baiti","Uploaded %d/%d files":"Augšupielādēti %d/%d faili","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Iespējams ielādēt tikai %d failus vienā reizē. Atlikušie faili netika pievienoti","%d files queued":"%d faili pievienoti rindai","File: %s, size: %d, max file size: %d":"Fails: %s, izmērs: %d, max faila izmērs: %d","Drag files here.":"Ievelciet failus šeit","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Failu skaita kļūda","File extension error.":"Faila paplašinājuma kļūda.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/nl.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/nl.js new file mode 100755 index 0000000000000000000000000000000000000000..9c82812e26d17a43bb45f1f93f83581819d11add --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/nl.js @@ -0,0 +1,2 @@ +// Dutch (nl) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Grootte","Close":"Close","Init error.":"Initialisatie error.","Add files to the upload queue and click the start button.":"Voeg bestanden toe aan de wachtrij en druk op 'Start'.","Filename":"Bestandsnaam","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"Bestandsgrootte Error.","N/A":"Niet beschikbaar","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Selecteer bestand(en):","%s already present in the queue.":"","File: %s":"File: %s","b":"","Uploaded %d/%d files":"%d/%d bestanden ge-upload","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Sleep bestanden hierheen.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"Ongeldig bestandstype.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pl.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pl.js new file mode 100755 index 0000000000000000000000000000000000000000..4126260835c1e0b3ada014d8b4784b5972a1b439 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pl.js @@ -0,0 +1,2 @@ +// Polish (pl) +plupload.addI18n({"Stop Upload":"Przerwij transfer.","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Rozmiar","Close":"Close","Init error.":"Błąd inicjalizacji.","Add files to the upload queue and click the start button.":"Dodaj pliki i kliknij 'Rozpocznij transfer'.","Filename":"Nazwa pliku","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"Błąd HTTP.","Start Upload":"Start Upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"Plik jest zbyt duży.","N/A":"Nie dostępne","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Wybierz pliki:","%s already present in the queue.":"","File: %s":"File: %s","b":"","Uploaded %d/%d files":"Wysłano %d/%d plików","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d plików w kolejce.","File: %s, size: %d, max file size: %d":"","Drag files here.":"Przeciągnij tu pliki","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"Nieobsługiwany format pliku.","Error: File too large:":"Error: File too large:","Add Files":"Dodaj pliki"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pt_BR.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pt_BR.js new file mode 100755 index 0000000000000000000000000000000000000000..c755de37a7416eca1997e2b7be32935e2b089efb --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/pt_BR.js @@ -0,0 +1,2 @@ +// Portuguese (Brazil) (pt_BR) +plupload.addI18n({"Stop Upload":"Parar o envio","Upload URL might be wrong or doesn't exist.":"URL de envio está errada ou não existe","tb":"","Size":"Tamanho","Close":"Fechar","Init error.":"Erro inicializando.","Add files to the upload queue and click the start button.":"Adicione os arquivos abaixo e clique no botão \"Iniciar o envio\".","Filename":"Nome do arquivo","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"Erro HTTP.","Start Upload":"Iniciar o envio","mb":"","kb":"","Duplicate file error.":"","File size error.":"Tamanho de arquivo não permitido.","N/A":"N/D","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Escolha os arquivos","%s already present in the queue.":"","File: %s":"Arquivo: %s","b":"","Uploaded %d/%d files":"Enviado(s) %d/%d arquivo(s)","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Só são aceitos %d arquivos por vez. O que passou disso foi descartado.","%d files queued":"%d arquivo(s)","File: %s, size: %d, max file size: %d":"","Drag files here.":"Arraste os arquivos pra cá","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Erro na contagem dos arquivos","File extension error.":"Tipo de arquivo não permitido.","Error: File too large:":"Error: File too large:","Add Files":"Adicionar arquivo(s)"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ro.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ro.js new file mode 100755 index 0000000000000000000000000000000000000000..2ea3f06cb3078f00dcf2227e82de48d1e272165e --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ro.js @@ -0,0 +1,2 @@ +// Romanian (ro) +plupload.addI18n({"Stop Upload":"Oprește încărcarea","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"tb","Size":"Mărime","Close":"Închide","Init error.":"Eroare inițializare.","Add files to the upload queue and click the start button.":"Adaugă fișiere în lista apoi apasă butonul \"Începe încărcarea\".","Filename":"Nume fișier","Image format either wrong or not supported.":"Formatul de imagine ori este greșit ori nu este suportat.","Status":"Stare","HTTP Error.":"Eroare HTTP","Start Upload":"Începe încărcarea","mb":"mb","kb":"kb","Duplicate file error.":"Eroare duplicat fișier.","File size error.":"Eroare dimensiune fișier.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Eroare: Extensia fișierului este invalidă:","Select files":"Selectează fișierele","%s already present in the queue.":"%s există deja în lista de așteptare.","File: %s":"Fișier: %s","b":"b","Uploaded %d/%d files":"Fișiere încărcate %d/%d","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d fișiere listate","File: %s, size: %d, max file size: %d":"Fișier: %s, mărime: %d, mărime maximă: %d","Drag files here.":"Trage aici fișierele.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"Eroare numărare fișiere.","File extension error.":"Eroare extensie fișier.","Error: File too large:":"Eroare: Fișierul este prea mare:","Add Files":"Adaugă fișiere"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ru.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ru.js new file mode 100755 index 0000000000000000000000000000000000000000..ae2470bee0e3b6ea90a5e9a70cec49c4acc45e20 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/ru.js @@ -0,0 +1,2 @@ +// Russian (ru) +plupload.addI18n({"Stop Upload":"Остановить Загрузку","Upload URL might be wrong or doesn't exist.":"Адрес заргузки неправильный или он не существует.","tb":"тб","Size":"Размер","Close":"Закрыть","Init error.":"Ошибка инициализации.","Add files to the upload queue and click the start button.":"Добавьте файлы в очередь и нажмите кнопку \"Загрузить файлы\".","Filename":"Имя файла","Image format either wrong or not supported.":"Формат картинки неправильный или он не поддерживается.","Status":"Статус","HTTP Error.":"Ошибка HTTP.","Start Upload":"Начать загрузку","mb":"мб","kb":"кб","Duplicate file error.":"Такой файл уже присутствует в очереди.","File size error.":"Неправильный размер файла.","N/A":"N/A","gb":"гб","Error: Invalid file extension:":"Ошибка: У файла неправильное расширение:","Select files":"Выберите файлы","%s already present in the queue.":"%s уже присутствует в очереди.","File: %s":"Файл: %s","b":"б","Uploaded %d/%d files":"Загружено %d/%d файлов","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Загрузочный элемент за раз принимает только %d файл(ов). Лишние файлы были отброшены.","%d files queued":"В очереди %d файл(ов)","File: %s, size: %d, max file size: %d":"Файл: %s, размер: %d, макс. размер файла: %d","Drag files here.":"Перетащите файлы сюда.","Runtime ran out of available memory.":"Рабочая среда превысила лимит достуной памяти.","File count error.":"Слишком много файлов.","File extension error.":"Неправильное расширение файла.","Error: File too large:":"Ошибка: Файл слишком большой:","Add Files":"Добавьте файлы"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sk.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sk.js new file mode 100755 index 0000000000000000000000000000000000000000..fb028906c877c67e418c42d73b0d2c679e46c825 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sk.js @@ -0,0 +1,2 @@ +// Slovak (sk) +plupload.addI18n({"Stop Upload":"Zastaviť nahrávanie","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Veľkosť","Close":"Close","Init error.":"Chyba inicializácie.","Add files to the upload queue and click the start button.":"Pridajte súbory do zoznamu a potom spustite nahrávanie.","Filename":"Názov súboru","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Stav","HTTP Error.":"HTTP Chyba.","Start Upload":"Start Upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"Súbor je príliš veľký.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Vyberte súbory","%s already present in the queue.":"","File: %s":"File: %s","b":"","Uploaded %d/%d files":"Nahraných %d/%d súborov","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d súborov pridaných do zoznamu","File: %s, size: %d, max file size: %d":"","Drag files here.":"Sem pretiahnite súbory.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"Chybný typ súboru.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sr.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sr.js new file mode 100755 index 0000000000000000000000000000000000000000..bb9581c8b0e1a6f4ef813733e06845c5a3071f23 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sr.js @@ -0,0 +1,2 @@ +// Serbian (sr) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Veličina","Close":"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Dodajte fajlove u listu i kliknite na dugme Start.","Filename":"Naziv fajla","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Počni upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Izaberite fajlove","%s already present in the queue.":"","File: %s":"File: %s","b":"","Uploaded %d/%d files":"Snimljeno %d/%d fajlova","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Prevucite fajlove ovde.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Dodaj fajlove"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sv.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sv.js new file mode 100755 index 0000000000000000000000000000000000000000..a33bbb5bd582df8ea17786ff256c0c952b628404 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/sv.js @@ -0,0 +1,2 @@ +// Swedish (sv) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"","Size":"Storlek","Close":"Close","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Lägg till filer till kön och tryck på start.","Filename":"Filnamn","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload","mb":"","kb":"","Duplicate file error.":"","File size error.":"File size error.","N/A":"N/A","gb":"","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Välj filer","%s already present in the queue.":"","File: %s":"File: %s","b":"","Uploaded %d/%d files":"Uploaded %d/%d files","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"","Drag files here.":"Dra filer hit","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","Error: File too large:":"Error: File too large:","Add Files":"Add Files"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/th_TH.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/th_TH.js new file mode 100755 index 0000000000000000000000000000000000000000..53b995e6dbe1ed53090d73bb317008190dc5363e --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/th_TH.js @@ -0,0 +1,2 @@ +// Thai (Thailand) (th_TH) +plupload.addI18n({"Stop Upload":"หยุดอัพโหลด","Upload URL might be wrong or doesn't exist.":"URL ของการอัพโหลดอาจจะผิดหรือไม่มีอยู่","tb":"เทราไบต์","Size":"ขนาด","Close":"ปิด","Init error.":"Init เกิดข้อผิดพลาด","Add files to the upload queue and click the start button.":"เพิ่มไฟล์ไปยังคิวอัพโหลดและคลิกที่ปุ่มเริ่ม","Filename":"ชื่อไฟล์","Image format either wrong or not supported.":"รูปแบบรูปภาพทั้งสองผิดหรือไม่รองรับ","Status":"สถานะ","HTTP Error.":"HTTP เกิดข้อผิดพลาด","Start Upload":"เริ่มอัพโหลด","mb":"เมกะไบต์","kb":"กิโลไบต์","Duplicate file error.":"ไฟล์ที่ซ้ำกันเกิดข้อผิดพลาด","File size error.":"ขนาดไฟล์เกิดข้อผิดพลาด","N/A":"N/A","gb":"กิกะไบต์","Error: Invalid file extension:":"ข้อผิดพลาด: นามสกุลไฟล์ไม่ถูกต้อง:","Select files":"เลือกไฟล์","%s already present in the queue.":"%s อยู่ในคิวแล้ว","File: %s":"ไฟล์: %s","b":"ไบต์","Uploaded %d/%d files":"อัพโหลดแล้ว %d/%d ไฟล์","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"การอัพโหลดจะยอมรับเฉพาะ %d ไฟล์(s) ในช่วงเวลาเดียวกัน เมื่อไฟล์พิเศษถูกปลดออก","%d files queued":"%d ไฟล์ที่อยู่ในคิว","File: %s, size: %d, max file size: %d":"ไฟล์: %s, ขนาด: %d, ขนาดไฟล์สูงสุด: %d","Drag files here.":"ลากไฟล์มาที่นี่","Runtime ran out of available memory.":"รันไทม์วิ่งออกมาจากหน่วยความจำ","File count error.":"การนับไฟล์เกิดข้อผิดพลาด","File extension error.":"นามสกุลไฟล์เกิดข้อผิดพลาด","Error: File too large:":"ข้อผิดพลาด: ไฟล์ใหญ่เกินไป:","Add Files":"เพิ่มไฟล์"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/tr.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/tr.js new file mode 100755 index 0000000000000000000000000000000000000000..47fec4ea36823e3a791828b65854c1155e1e1eec --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/tr.js @@ -0,0 +1,2 @@ +// Turkish (tr) +plupload.addI18n({"Stop Upload":"Yüklemeyi durdur","Upload URL might be wrong or doesn't exist.":"URL yok ya da hatalı olabilir.","tb":"tb","Size":"Boyut","Close":"Kapat","Init error.":"Başlangıç hatası.","Add files to the upload queue and click the start button.":"Dosyaları kuyruğa ekleyin ve başlatma butonuna tıklayın.","Filename":"Dosya adı","Image format either wrong or not supported.":"Resim formatı yanlış ya da desteklenmiyor.","Status":"Durum","HTTP Error.":"HTTP hatası.","Start Upload":"Yüklemeyi başlat","mb":"mb","kb":"kb","Duplicate file error.":"Yinelenen dosya hatası.","File size error.":"Dosya boyutu hatası.","N/A":"-","gb":"gb","Error: Invalid file extension:":"Hata: Geçersiz dosya uzantısı:","Select files":"Dosyaları seç","%s already present in the queue.":"%s kuyrukta zaten mevcut.","File: %s":"Dosya: %s","b":"bayt","Uploaded %d/%d files":"%d/%d dosya yüklendi","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Yükleme elemanı aynı anda %d dosya kabul eder. Ekstra dosyalar işleme konulmaz.","%d files queued":"Kuyrukta %d dosya var.","File: %s, size: %d, max file size: %d":"Dosya: %s, boyut: %d, maksimum dosya boyutu: %d","Drag files here.":"Dosyaları buraya bırakın.","Runtime ran out of available memory.":"İşlem için yeterli bellek yok.","File count error.":"Dosya sayım hatası.","File extension error.":"Dosya uzantısı hatası.","Error: File too large:":"Hata: Dosya çok büyük:","Add Files":"Dosya ekle"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/uk_UA.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/uk_UA.js new file mode 100755 index 0000000000000000000000000000000000000000..ba92ce5a6b040a41b40e00c13c5bf02e2a216a6d --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/uk_UA.js @@ -0,0 +1,2 @@ +// Ukrainian (Ukraine) (uk_UA) +plupload.addI18n({"Stop Upload":"Зупинити завантаження","Upload URL might be wrong or doesn't exist.":"Адреса завантаження неправильна або не існує.","tb":"","Size":"Розмір","Close":"Закрити","Init error.":"Помилка ініціалізації.","Add files to the upload queue and click the start button.":"Додайте файли в чергу та натисніть кнопку \"Завантажити файли\".","Filename":"Назва файлу","Image format either wrong or not supported.":"Формат картинки не правильний або не підтримується.","Status":"Статус","HTTP Error.":"Помилка HTTP.","Start Upload":"Почати завантаження","mb":"","kb":"","Duplicate file error.":"","File size error.":"Неправильний розмір файлу.","N/A":"Н/Д","gb":"","Error: Invalid file extension:":"Помилка: У файлу неправильне розширення:","Select files":"Оберіть файли","%s already present in the queue.":"","File: %s":"Файл: %s","b":"","Uploaded %d/%d files":"Завантажено %d/%d файлів","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"","%d files queued":"В черзі %d файл(ів)","File: %s, size: %d, max file size: %d":"","Drag files here.":"Перетягніть файли сюди.","Runtime ran out of available memory.":"Робоче середовище перевищило ліміт доступної пам'яті.","File count error.":"Занадто багато файлів.","File extension error.":"Неправильне розширення файлу.","Error: File too large:":"Помилка: Файл занадто великий:","Add Files":"Додати файли"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_CN.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_CN.js new file mode 100755 index 0000000000000000000000000000000000000000..f48e0c43e54ae12c15a3b6fb80b1e735f865270f --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_CN.js @@ -0,0 +1,2 @@ +// Chinese (China) (zh_CN) +plupload.addI18n({"Stop Upload":"停止上传","Upload URL might be wrong or doesn't exist.":"上传的URL可能是错误的或不存在。","tb":"tb","Size":"大小","Close":"关闭","Init error.":"初始化错误。","Add files to the upload queue and click the start button.":"将文件添加到上传队列,然后点击”开始上传“按钮。","Filename":"文件名","Image format either wrong or not supported.":"图片格式错误或者不支持。","Status":"状态","HTTP Error.":"HTTP 错误。","Start Upload":"开始上传","mb":"mb","kb":"kb","Duplicate file error.":"重复文件错误。","File size error.":"文件大小错误。","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"错误:无效的文件扩展名:","Select files":"选择文件","%s already present in the queue.":"%s 已经在当前队列里。","File: %s":"文件: %s","b":"b","Uploaded %d/%d files":"已上传 %d/%d 个文件","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"每次只接受同时上传 %d 个文件,多余的文件将会被删除。","%d files queued":"%d 个文件加入到队列","File: %s, size: %d, max file size: %d":"文件: %s, 大小: %d, 最大文件大小: %d","Drag files here.":"把文件拖到这里。","Runtime ran out of available memory.":"运行时已消耗所有可用内存。","File count error.":"文件数量错误。","File extension error.":"文件扩展名错误。","Error: File too large:":"错误: 文件太大:","Add Files":"增加文件"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_TW.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_TW.js new file mode 100755 index 0000000000000000000000000000000000000000..71983d2f4abd325a4c644b37542e641e947b31a1 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/i18n/zh_TW.js @@ -0,0 +1,2 @@ +// Chinese (Taiwan) (zh_TW) +plupload.addI18n({"Stop Upload":"停止上傳","Upload URL might be wrong or doesn't exist.":"檔案URL可能有誤或者不存在。","tb":"tb","Size":"大小","Close":"關閉","Init error.":"初始化錯誤。","Add files to the upload queue and click the start button.":"將檔案加入上傳序列,然後點選”開始上傳“按鈕。","Filename":"檔案名稱","Image format either wrong or not supported.":"圖片格式錯誤或者不支援。","Status":"狀態","HTTP Error.":"HTTP 錯誤。","Start Upload":"開始上傳","mb":"mb","kb":"kb","Duplicate file error.":"錯誤:檔案重複。","File size error.":"錯誤:檔案大小超過限制。","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"錯誤:不接受的檔案格式:","Select files":"選擇檔案","%s already present in the queue.":"%s 已經存在目前的檔案序列。","File: %s":"檔案: %s","b":"b","Uploaded %d/%d files":"已上傳 %d/%d 個文件","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"每次只能上傳 %d 個檔案,超過限制數量的檔案將被忽略。","%d files queued":"%d 個檔案加入到序列","File: %s, size: %d, max file size: %d":"檔案: %s, 大小: %d, 最大檔案大小: %d","Drag files here.":"把檔案拖曳到這裡。","Runtime ran out of available memory.":"執行時耗盡了所有可用的記憶體。","File count error.":"檔案數量錯誤。","File extension error.":"檔案副檔名錯誤。","Error: File too large:":"錯誤: 檔案大小太大:","Add Files":"增加檔案"}); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/css/jquery.plupload.queue.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/css/jquery.plupload.queue.css new file mode 100755 index 0000000000000000000000000000000000000000..1a23a3d8a214f1fb27b98ff4f6c240049b7c4547 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/css/jquery.plupload.queue.css @@ -0,0 +1,181 @@ +/* + Plupload +------------------------------------------------------------------- */ + +.plupload_button { + display: -moz-inline-box; /* FF < 3*/ + display: inline-block; + font: normal 12px sans-serif; + text-decoration: none; + color: #42454a; + border: 1px solid #bababa; + padding: 2px 8px 3px 20px; + margin-right: 4px; + background: #f3f3f3 url('../img/buttons.png') no-repeat 0 center; + outline: 0; + + /* Optional rounded corners for browsers that support it */ + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.plupload_button:hover { + color: #000; + text-decoration: none; +} + +.plupload_disabled, a.plupload_disabled:hover { + color: #737373; + border-color: #c5c5c5; + background: #ededed url('../img/buttons-disabled.png') no-repeat 0 center; + cursor: default; +} + +.plupload_add { + background-position: -181px center; +} + +.plupload_wrapper { + font: normal 11px Verdana,sans-serif; + width: 100%; +} + +.plupload_container { + padding: 8px; + background: url('../img/transp50.png'); + /*-moz-border-radius: 5px;*/ +} + +.plupload_container input { + border: 1px solid #DDD; + font: normal 11px Verdana,sans-serif; + width: 98%; +} + +.plupload_header {background: #2A2C2E url('../img/backgrounds.gif') repeat-x;} +.plupload_header_content { + background: url('../img/backgrounds.gif') no-repeat 0 -317px; + min-height: 56px; + padding-left: 60px; + color: #FFF; +} +.plupload_header_title { + font: normal 18px sans-serif; + padding: 6px 0 3px; +} +.plupload_header_text { + font: normal 12px sans-serif; +} + +.plupload_filelist { + margin: 0; + padding: 0; + list-style: none; +} + +.plupload_scroll .plupload_filelist { + height: 185px; + background: #F5F5F5; + overflow-y: scroll; +} + +.plupload_filelist li { + padding: 10px 8px; + background: #F5F5F5 url('../img/backgrounds.gif') repeat-x 0 -156px; + border-bottom: 1px solid #DDD; +} + +.plupload_filelist_header, .plupload_filelist_footer { + background: #DFDFDF; + padding: 8px 8px; + color: #42454A; +} +.plupload_filelist_header { + border-top: 1px solid #EEE; + border-bottom: 1px solid #CDCDCD; +} + +.plupload_filelist_footer {border-top: 1px solid #FFF; height: 22px; line-height: 20px; vertical-align: middle;} +.plupload_file_name {float: left; overflow: hidden} +.plupload_file_status {color: #777;} +.plupload_file_status span {color: #42454A;} +.plupload_file_size, .plupload_file_status, .plupload_progress { + float: right; + width: 80px; +} +.plupload_file_size, .plupload_file_status, .plupload_file_action {text-align: right;} + +.plupload_filelist .plupload_file_name { + width: 205px; + white-space: nowrap; + text-overflow: ellipsis; +} + +.plupload_file_action { + float: right; + width: 16px; + height: 16px; + margin-left: 15px; +} + +.plupload_file_action * { + display: none; + width: 16px; + height: 16px; +} + +li.plupload_uploading {background: #ECF3DC url('../img/backgrounds.gif') repeat-x 0 -238px;} +li.plupload_done {color:#AAA} + +li.plupload_delete a { + background: url('../img/delete.gif'); +} + +li.plupload_failed a { + background: url('../img/error.gif'); + cursor: default; +} + +li.plupload_done a { + background: url('../img/done.gif'); + cursor: default; +} + +.plupload_progress, .plupload_upload_status { + display: none; +} + +.plupload_progress_container { + margin-top: 3px; + border: 1px solid #CCC; + background: #FFF; + padding: 1px; +} +.plupload_progress_bar { + width: 0px; + height: 7px; + background: #CDEB8B; +} + +.plupload_scroll .plupload_filelist_header .plupload_file_action, .plupload_scroll .plupload_filelist_footer .plupload_file_action { + margin-right: 17px; +} + +/* Floats */ + +.plupload_clear,.plupload_clearer {clear: both;} +.plupload_clearer, .plupload_progress_bar { + display: block; + font-size: 0; + line-height: 0; +} + +li.plupload_droptext { + background: transparent; + text-align: center; + vertical-align: middle; + border: 0; + line-height: 165px; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/backgrounds.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/backgrounds.gif new file mode 100755 index 0000000000000000000000000000000000000000..39e33ebc02114ebea6bb33dee2fb76af3a6dd4dc Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/backgrounds.gif differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/buttons-disabled.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/buttons-disabled.png new file mode 100755 index 0000000000000000000000000000000000000000..afa11af9b93bcbd261faa6a5b0835e82493712b2 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/buttons-disabled.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/buttons.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/buttons.png new file mode 100755 index 0000000000000000000000000000000000000000..153e73885ac4a1fd1a98dccd5df73b8d72a2df10 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/buttons.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/delete.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/delete.gif new file mode 100755 index 0000000000000000000000000000000000000000..78ca8b3b49e8f739df6ecfa4ef1119058b40e035 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/delete.gif differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/done.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/done.gif new file mode 100755 index 0000000000000000000000000000000000000000..29f3ed7c97eb2e5bd17a7e6bab98d696377cfda0 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/done.gif differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/error.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/error.gif new file mode 100755 index 0000000000000000000000000000000000000000..4682b63007c89fae09f6640e1a968a073d98b90d Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/error.gif differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/throbber.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/throbber.gif new file mode 100755 index 0000000000000000000000000000000000000000..4ae8b16a5a474c3da1e426afc20d2167ebd360f1 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/throbber.gif differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/transp50.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/transp50.png new file mode 100755 index 0000000000000000000000000000000000000000..eb0efe104bdcc277ddcc3f6efdb54e1d533a5179 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/img/transp50.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.js new file mode 100755 index 0000000000000000000000000000000000000000..576920af254e9c2521876f57c153f5ffe68b9bfd --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.js @@ -0,0 +1,424 @@ +/** + * jquery.plupload.queue.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/* global jQuery:true, alert:true */ + +/** +jQuery based implementation of the Plupload API - multi-runtime file uploading API. + +To use the widget you must include _jQuery_. It is not meant to be extended in any way and is provided to be +used as it is. + +@example + <!-- Instantiating: --> + <div id="uploader"> + <p>Your browser doesn't have Flash, Silverlight or HTML5 support.</p> + </div> + + <script> + $('#uploader').pluploadQueue({ + url : '../upload.php', + filters : [ + {title : "Image files", extensions : "jpg,gif,png"} + ], + rename: true, + flash_swf_url : '../../js/Moxie.swf', + silverlight_xap_url : '../../js/Moxie.xap', + }); + </script> + +@example + // Retrieving a reference to plupload.Uploader object + var uploader = $('#uploader').pluploadQueue(); + + uploader.bind('FilesAdded', function() { + + // Autostart + setTimeout(uploader.start, 1); // "detach" from the main thread + }); + +@class pluploadQueue +@constructor +@param {Object} settings For detailed information about each option check documentation. + @param {String} settings.url URL of the server-side upload handler. + @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. + @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. + @param {Array} [settings.filters=[]] Set of file type filters, each one defined by hash of title and extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR` + @param {String} [settings.flash_swf_url] URL of the Flash swf. + @param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs. + @param {Number|String} [settings.max_file_size] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event. + @param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message. + @param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload. + @param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog. + @param {Boolean} [settings.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess. + @param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}` + @param {Number} [settings.resize.width] If image is bigger, it will be resized. + @param {Number} [settings.resize.height] If image is bigger, it will be resized. + @param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100). + @param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally. + @param {String} [settings.runtimes="html5,flash,silverlight,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails. + @param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. + @param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files. + + @param {Boolean} [settings.dragdrop=true] Enable ability to add file to the queue by drag'n'dropping them from the desktop. + @param {Boolean} [settings.rename=false] Enable ability to rename files in the queue. + @param {Boolean} [settings.multiple_queues=true] Re-activate the widget after each upload procedure. +*/ +(function($, o) { + var uploaders = {}; + + function _(str) { + return plupload.translate(str) || str; + } + + function renderUI(id, target) { + // Remove all existing non plupload items + target.contents().each(function(i, node) { + node = $(node); + + if (!node.is('.plupload')) { + node.remove(); + } + }); + + target.prepend( + '<div class="plupload_wrapper plupload_scroll">' + + '<div id="' + id + '_container" class="plupload_container">' + + '<div class="plupload">' + + '<div class="plupload_header">' + + '<div class="plupload_header_content">' + + '<div class="plupload_header_title">' + _('Select files') + '</div>' + + '<div class="plupload_header_text">' + _('Add files to the upload queue and click the start button.') + '</div>' + + '</div>' + + '</div>' + + + '<div class="plupload_content">' + + '<div class="plupload_filelist_header">' + + '<div class="plupload_file_name">' + _('Filename') + '</div>' + + '<div class="plupload_file_action"> </div>' + + '<div class="plupload_file_status"><span>' + _('Status') + '</span></div>' + + '<div class="plupload_file_size">' + _('Size') + '</div>' + + '<div class="plupload_clearer"> </div>' + + '</div>' + + + '<ul id="' + id + '_filelist" class="plupload_filelist"></ul>' + + + '<div class="plupload_filelist_footer">' + + '<div class="plupload_file_name">' + + '<div class="plupload_buttons">' + + '<a href="#" class="plupload_button plupload_add" id="' + id + '_browse">' + _('Add Files') + '</a>' + + '<a href="#" class="plupload_button plupload_start">' + _('Start Upload') + '</a>' + + '</div>' + + '<span class="plupload_upload_status"></span>' + + '</div>' + + '<div class="plupload_file_action"></div>' + + '<div class="plupload_file_status"><span class="plupload_total_status">0%</span></div>' + + '<div class="plupload_file_size"><span class="plupload_total_file_size">0 b</span></div>' + + '<div class="plupload_progress">' + + '<div class="plupload_progress_container">' + + '<div class="plupload_progress_bar"></div>' + + '</div>' + + '</div>' + + '<div class="plupload_clearer"> </div>' + + '</div>' + + '</div>' + + '</div>' + + '</div>' + + '<input type="hidden" id="' + id + '_count" name="' + id + '_count" value="0" />' + + '</div>' + ); + } + + $.fn.pluploadQueue = function(settings) { + if (settings) { + this.each(function() { + var uploader, target, id, contents_bak; + + target = $(this); + id = target.attr('id'); + + if (!id) { + id = plupload.guid(); + target.attr('id', id); + } + + contents_bak = target.html(); + renderUI(id, target); + + settings = $.extend({ + dragdrop : true, + browse_button : id + '_browse', + container : id + }, settings); + + // Enable drag/drop (see PostInit handler as well) + if (settings.dragdrop) { + settings.drop_element = id + '_filelist'; + } + + uploader = new plupload.Uploader(settings); + + uploaders[id] = uploader; + + function handleStatus(file) { + var actionClass; + + if (file.status == plupload.DONE) { + actionClass = 'plupload_done'; + } + + if (file.status == plupload.FAILED) { + actionClass = 'plupload_failed'; + } + + if (file.status == plupload.QUEUED) { + actionClass = 'plupload_delete'; + } + + if (file.status == plupload.UPLOADING) { + actionClass = 'plupload_uploading'; + } + + var icon = $('#' + file.id).attr('class', actionClass).find('a').css('display', 'block'); + if (file.hint) { + icon.attr('title', file.hint); + } + } + + function updateTotalProgress() { + $('span.plupload_total_status', target).html(uploader.total.percent + '%'); + $('div.plupload_progress_bar', target).css('width', uploader.total.percent + '%'); + $('span.plupload_upload_status', target).html( + o.sprintf(_('Uploaded %d/%d files'), uploader.total.uploaded, uploader.files.length) + ); + } + + function updateList() { + var fileList = $('ul.plupload_filelist', target).html(''), inputCount = 0, inputHTML; + + $.each(uploader.files, function(i, file) { + inputHTML = ''; + + if (file.status == plupload.DONE) { + if (file.target_name) { + inputHTML += '<input type="hidden" name="' + id + '_' + inputCount + '_tmpname" value="' + plupload.xmlEncode(file.target_name) + '" />'; + } + + inputHTML += '<input type="hidden" name="' + id + '_' + inputCount + '_name" value="' + plupload.xmlEncode(file.name) + '" />'; + inputHTML += '<input type="hidden" name="' + id + '_' + inputCount + '_status" value="' + (file.status == plupload.DONE ? 'done' : 'failed') + '" />'; + + inputCount++; + + $('#' + id + '_count').val(inputCount); + } + + fileList.append( + '<li id="' + file.id + '">' + + '<div class="plupload_file_name"><span>' + file.name + '</span></div>' + + '<div class="plupload_file_action"><a href="#"></a></div>' + + '<div class="plupload_file_status">' + file.percent + '%</div>' + + '<div class="plupload_file_size">' + plupload.formatSize(file.size) + '</div>' + + '<div class="plupload_clearer"> </div>' + + inputHTML + + '</li>' + ); + + handleStatus(file); + + $('#' + file.id + '.plupload_delete a').click(function(e) { + $('#' + file.id).remove(); + uploader.removeFile(file); + + e.preventDefault(); + }); + }); + + $('span.plupload_total_file_size', target).html(plupload.formatSize(uploader.total.size)); + + if (uploader.total.queued === 0) { + $('span.plupload_add_text', target).html(_('Add Files')); + } else { + $('span.plupload_add_text', target).html(o.sprintf(_('%d files queued'), uploader.total.queued)); + } + + $('a.plupload_start', target).toggleClass('plupload_disabled', uploader.files.length == (uploader.total.uploaded + uploader.total.failed)); + + // Scroll to end of file list + fileList[0].scrollTop = fileList[0].scrollHeight; + + updateTotalProgress(); + + // Re-add drag message if there is no files + if (!uploader.files.length && uploader.features.dragdrop && uploader.settings.dragdrop) { + $('#' + id + '_filelist').append('<li class="plupload_droptext">' + _("Drag files here.") + '</li>'); + } + } + + function destroy() { + delete uploaders[id]; + uploader.destroy(); + target.html(contents_bak); + uploader = target = contents_bak = null; + } + + uploader.bind("UploadFile", function(up, file) { + $('#' + file.id).addClass('plupload_current_file'); + }); + + uploader.bind('Init', function(up, res) { + // Enable rename support + if (!settings.unique_names && settings.rename) { + target.on('click', '#' + id + '_filelist div.plupload_file_name span', function(e) { + var targetSpan = $(e.target), file, parts, name, ext = ""; + + // Get file name and split out name and extension + file = up.getFile(targetSpan.parents('li')[0].id); + name = file.name; + parts = /^(.+)(\.[^.]+)$/.exec(name); + if (parts) { + name = parts[1]; + ext = parts[2]; + } + + // Display input element + targetSpan.hide().after('<input type="text" />'); + targetSpan.next().val(name).focus().blur(function() { + targetSpan.show().next().remove(); + }).keydown(function(e) { + var targetInput = $(this); + + if (e.keyCode == 13) { + e.preventDefault(); + + // Rename file and glue extension back on + file.name = targetInput.val() + ext; + targetSpan.html(file.name); + targetInput.blur(); + } + }); + }); + } + + $('#' + id + '_container').attr('title', 'Using runtime: ' + res.runtime); + + $('a.plupload_start', target).click(function(e) { + if (!$(this).hasClass('plupload_disabled')) { + uploader.start(); + } + + e.preventDefault(); + }); + + $('a.plupload_stop', target).click(function(e) { + e.preventDefault(); + uploader.stop(); + }); + + $('a.plupload_start', target).addClass('plupload_disabled'); + }); + + uploader.bind("Error", function(up, err) { + var file = err.file, message; + + if (file) { + message = err.message; + + if (err.details) { + message += " (" + err.details + ")"; + } + + if (err.code == plupload.FILE_SIZE_ERROR) { + alert(_("Error: File too large:") + " " + file.name); + } + + if (err.code == plupload.FILE_EXTENSION_ERROR) { + alert(_("Error: Invalid file extension:") + " " + file.name); + } + + file.hint = message; + $('#' + file.id).attr('class', 'plupload_failed').find('a').css('display', 'block').attr('title', message); + } + + if (err.code === plupload.INIT_ERROR) { + setTimeout(function() { + destroy(); + }, 1); + } + }); + + uploader.bind("PostInit", function(up) { + // features are populated only after input components are fully instantiated + if (up.settings.dragdrop && up.features.dragdrop) { + $('#' + id + '_filelist').append('<li class="plupload_droptext">' + _("Drag files here.") + '</li>'); + } + }); + + uploader.init(); + + uploader.bind('StateChanged', function() { + if (uploader.state === plupload.STARTED) { + $('li.plupload_delete a,div.plupload_buttons', target).hide(); + $('span.plupload_upload_status,div.plupload_progress,a.plupload_stop', target).css('display', 'block'); + $('span.plupload_upload_status', target).html('Uploaded ' + uploader.total.uploaded + '/' + uploader.files.length + ' files'); + + if (settings.multiple_queues) { + $('span.plupload_total_status,span.plupload_total_file_size', target).show(); + } + } else { + updateList(); + $('a.plupload_stop,div.plupload_progress', target).hide(); + $('a.plupload_delete', target).css('display', 'block'); + + if (settings.multiple_queues && uploader.total.uploaded + uploader.total.failed == uploader.files.length) { + $(".plupload_buttons,.plupload_upload_status", target).css("display", "inline"); + $(".plupload_start", target).addClass("plupload_disabled"); + $('span.plupload_total_status,span.plupload_total_file_size', target).hide(); + } + } + }); + + uploader.bind('FilesAdded', updateList); + + uploader.bind('FilesRemoved', function() { + // since the whole file list is redrawn for every change in the queue + // we need to scroll back to the file removal point to avoid annoying + // scrolling to the bottom bug (see #926) + var scrollTop = $('#' + id + '_filelist').scrollTop(); + updateList(); + $('#' + id + '_filelist').scrollTop(scrollTop); + }); + + uploader.bind('FileUploaded', function(up, file) { + handleStatus(file); + }); + + uploader.bind("UploadProgress", function(up, file) { + // Set file specific progress + $('#' + file.id + ' div.plupload_file_status', target).html(file.percent + '%'); + + handleStatus(file); + updateTotalProgress(); + }); + + // Call setup function + if (settings.setup) { + settings.setup(uploader); + } + }); + + return this; + } else { + // Get uploader instance for specified element + return uploaders[$(this[0]).attr('id')]; + } + }; +})(jQuery, mOxie); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.min.js new file mode 100755 index 0000000000000000000000000000000000000000..a38f914ad788482ba33b5131dc78daa2a31ba695 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.plupload.queue/jquery.plupload.queue.min.js @@ -0,0 +1 @@ +;(function(e,t){function r(e){return plupload.translate(e)||e}function i(t,n){n.contents().each(function(t,n){n=e(n),n.is(".plupload")||n.remove()}),n.prepend('<div class="plupload_wrapper plupload_scroll"><div id="'+t+'_container" class="plupload_container">'+'<div class="plupload">'+'<div class="plupload_header">'+'<div class="plupload_header_content">'+'<div class="plupload_header_title">'+r("Select files")+"</div>"+'<div class="plupload_header_text">'+r("Add files to the upload queue and click the start button.")+"</div>"+"</div>"+"</div>"+'<div class="plupload_content">'+'<div class="plupload_filelist_header">'+'<div class="plupload_file_name">'+r("Filename")+"</div>"+'<div class="plupload_file_action"> </div>'+'<div class="plupload_file_status"><span>'+r("Status")+"</span></div>"+'<div class="plupload_file_size">'+r("Size")+"</div>"+'<div class="plupload_clearer"> </div>'+"</div>"+'<ul id="'+t+'_filelist" class="plupload_filelist"></ul>'+'<div class="plupload_filelist_footer">'+'<div class="plupload_file_name">'+'<div class="plupload_buttons">'+'<a href="#" class="plupload_button plupload_add" id="'+t+'_browse">'+r("Add Files")+"</a>"+'<a href="#" class="plupload_button plupload_start">'+r("Start Upload")+"</a>"+"</div>"+'<span class="plupload_upload_status"></span>'+"</div>"+'<div class="plupload_file_action"></div>'+'<div class="plupload_file_status"><span class="plupload_total_status">0%</span></div>'+'<div class="plupload_file_size"><span class="plupload_total_file_size">0 b</span></div>'+'<div class="plupload_progress">'+'<div class="plupload_progress_container">'+'<div class="plupload_progress_bar"></div>'+"</div>"+"</div>"+'<div class="plupload_clearer"> </div>'+"</div>"+"</div>"+"</div>"+"</div>"+'<input type="hidden" id="'+t+'_count" name="'+t+'_count" value="0" />'+"</div>")}var n={};e.fn.pluploadQueue=function(s){return s?(this.each(function(){function c(t){var n;t.status==plupload.DONE&&(n="plupload_done"),t.status==plupload.FAILED&&(n="plupload_failed"),t.status==plupload.QUEUED&&(n="plupload_delete"),t.status==plupload.UPLOADING&&(n="plupload_uploading");var r=e("#"+t.id).attr("class",n).find("a").css("display","block");t.hint&&r.attr("title",t.hint)}function h(){e("span.plupload_total_status",a).html(u.total.percent+"%"),e("div.plupload_progress_bar",a).css("width",u.total.percent+"%"),e("span.plupload_upload_status",a).html(t.sprintf(r("Uploaded %d/%d files"),u.total.uploaded,u.files.length))}function p(){var n=e("ul.plupload_filelist",a).html(""),i=0,s;e.each(u.files,function(t,r){s="",r.status==plupload.DONE&&(r.target_name&&(s+='<input type="hidden" name="'+f+"_"+i+'_tmpname" value="'+plupload.xmlEncode(r.target_name)+'" />'),s+='<input type="hidden" name="'+f+"_"+i+'_name" value="'+plupload.xmlEncode(r.name)+'" />',s+='<input type="hidden" name="'+f+"_"+i+'_status" value="'+(r.status==plupload.DONE?"done":"failed")+'" />',i++,e("#"+f+"_count").val(i)),n.append('<li id="'+r.id+'">'+'<div class="plupload_file_name"><span>'+r.name+"</span></div>"+'<div class="plupload_file_action"><a href="#"></a></div>'+'<div class="plupload_file_status">'+r.percent+"%</div>"+'<div class="plupload_file_size">'+plupload.formatSize(r.size)+"</div>"+'<div class="plupload_clearer"> </div>'+s+"</li>"),c(r),e("#"+r.id+".plupload_delete a").click(function(t){e("#"+r.id).remove(),u.removeFile(r),t.preventDefault()})}),e("span.plupload_total_file_size",a).html(plupload.formatSize(u.total.size)),u.total.queued===0?e("span.plupload_add_text",a).html(r("Add Files")):e("span.plupload_add_text",a).html(t.sprintf(r("%d files queued"),u.total.queued)),e("a.plupload_start",a).toggleClass("plupload_disabled",u.files.length==u.total.uploaded+u.total.failed),n[0].scrollTop=n[0].scrollHeight,h(),!u.files.length&&u.features.dragdrop&&u.settings.dragdrop&&e("#"+f+"_filelist").append('<li class="plupload_droptext">'+r("Drag files here.")+"</li>")}function d(){delete n[f],u.destroy(),a.html(l),u=a=l=null}var u,a,f,l;a=e(this),f=a.attr("id"),f||(f=plupload.guid(),a.attr("id",f)),l=a.html(),i(f,a),s=e.extend({dragdrop:!0,browse_button:f+"_browse",container:f},s),s.dragdrop&&(s.drop_element=f+"_filelist"),u=new plupload.Uploader(s),n[f]=u,u.bind("UploadFile",function(t,n){e("#"+n.id).addClass("plupload_current_file")}),u.bind("Init",function(t,n){!s.unique_names&&s.rename&&a.on("click","#"+f+"_filelist div.plupload_file_name span",function(n){var r=e(n.target),i,s,o,u="";i=t.getFile(r.parents("li")[0].id),o=i.name,s=/^(.+)(\.[^.]+)$/.exec(o),s&&(o=s[1],u=s[2]),r.hide().after('<input type="text" />'),r.next().val(o).focus().blur(function(){r.show().next().remove()}).keydown(function(t){var n=e(this);t.keyCode==13&&(t.preventDefault(),i.name=n.val()+u,r.html(i.name),n.blur())})}),e("#"+f+"_container").attr("title","Using runtime: "+n.runtime),e("a.plupload_start",a).click(function(t){e(this).hasClass("plupload_disabled")||u.start(),t.preventDefault()}),e("a.plupload_stop",a).click(function(e){e.preventDefault(),u.stop()}),e("a.plupload_start",a).addClass("plupload_disabled")}),u.bind("Error",function(t,n){var i=n.file,s;i&&(s=n.message,n.details&&(s+=" ("+n.details+")"),n.code==plupload.FILE_SIZE_ERROR&&alert(r("Error: File too large:")+" "+i.name),n.code==plupload.FILE_EXTENSION_ERROR&&alert(r("Error: Invalid file extension:")+" "+i.name),i.hint=s,e("#"+i.id).attr("class","plupload_failed").find("a").css("display","block").attr("title",s)),n.code===plupload.INIT_ERROR&&setTimeout(function(){d()},1)}),u.bind("PostInit",function(t){t.settings.dragdrop&&t.features.dragdrop&&e("#"+f+"_filelist").append('<li class="plupload_droptext">'+r("Drag files here.")+"</li>")}),u.init(),u.bind("StateChanged",function(){u.state===plupload.STARTED?(e("li.plupload_delete a,div.plupload_buttons",a).hide(),e("span.plupload_upload_status,div.plupload_progress,a.plupload_stop",a).css("display","block"),e("span.plupload_upload_status",a).html("Uploaded "+u.total.uploaded+"/"+u.files.length+" files"),s.multiple_queues&&e("span.plupload_total_status,span.plupload_total_file_size",a).show()):(p(),e("a.plupload_stop,div.plupload_progress",a).hide(),e("a.plupload_delete",a).css("display","block"),s.multiple_queues&&u.total.uploaded+u.total.failed==u.files.length&&(e(".plupload_buttons,.plupload_upload_status",a).css("display","inline"),e(".plupload_start",a).addClass("plupload_disabled"),e("span.plupload_total_status,span.plupload_total_file_size",a).hide()))}),u.bind("FilesAdded",p),u.bind("FilesRemoved",function(){var t=e("#"+f+"_filelist").scrollTop();p(),e("#"+f+"_filelist").scrollTop(t)}),u.bind("FileUploaded",function(e,t){c(t)}),u.bind("UploadProgress",function(t,n){e("#"+n.id+" div.plupload_file_status",a).html(n.percent+"%"),c(n),h()}),s.setup&&s.setup(u)}),this):n[e(this[0]).attr("id")]}})(jQuery,mOxie); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/css/jquery.ui.plupload.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/css/jquery.ui.plupload.css new file mode 100755 index 0000000000000000000000000000000000000000..739894cf5e4b1fa31b18cbef1e96c360e4150981 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/css/jquery.ui.plupload.css @@ -0,0 +1,362 @@ +/* + Plupload +------------------------------------------------------------------- */ + +.plupload_button { + cursor: pointer; + outline: none; +} + +.plupload_wrapper { + font: normal 11px Verdana,sans-serif; + width: 100%; + min-width: 520px; +} + +.plupload_container { + _height: 300px; + min-height: 300px; + position: relative; +} + +.plupload_filelist_footer {border-width: 1px 0 0 0} +.plupload_file {border-width: 0 0 1px 0} +.plupload_container .plupload_header {border-width: 0 0 1px 0; position: relative;} + +.plupload_delete .ui-icon, +.plupload_done .ui-icon, +.plupload_failed .ui-icon { + cursor:pointer; +} + +.plupload_header_content { + height: 56px; + padding: 0 160px 0 60px; + position: relative; +} + +.plupload_logo { + width: 40px; + height: 40px; + background: url('../img/plupload.png') no-repeat 0 0; + position: absolute; + top: 8px; + left: 8px; +} + +.plupload_header_content_bw .plupload_logo { + background-position: -40px 0; +} + +.plupload_header_title { + font: normal 18px sans-serif; + padding: 6px 0 3px; +} + +.plupload_header_text { + font: normal 12px sans-serif; +} + +.plupload_view_switch { + position: absolute; + right: 16px; + bottom: 8px; + margin: 0; + display: none; +} + +.plupload_view_switch .ui-button { + margin-right: -0.31em; +} + +.plupload_content { + position: absolute; + top: 87px; + bottom: 44px; + left: 0; + right: 0; + overflow-y: auto; + width: 100%; +} + +.plupload_filelist { + border-collapse: collapse; + border-left: none; + border-right: none; + margin: 0; + padding: 0; + width: 100%; + -moz-user-select: none; + -webkit-user-select: none; + user-select: none; +} + +.plupload_filelist_content { + padding: 0; + margin: 0; +} + +.plupload_cell {padding: 8px 6px;} + +.plupload_file { + list-style: none; + display: block; + position: relative; + overflow: hidden; + width: 100%; +} + +.plupload_file_thumb { + position: absolute; + left: 6px; + top: 6px; + background: #eee url(../img/loading.gif) center no-repeat; +} + +.plupload_file_thumb_loaded .plupload_file_thumb { + background-image: none; +} + +.plupload_file_name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.plupload_filelist_header { + border-top: none; +} + +.plupload_filelist_footer { + position: absolute; + bottom: 0; + left: 0; + right: 0; +} + +.plupload_buttons { + position: relative; +} + +/* list view */ +.plupload_view_list .plupload_file { + border-left: none; + border-right: none; + border-top: none; + height: 29px; +} + +.plupload_view_list div.plupload_file_size, +.plupload_view_list div.plupload_file_status, +.plupload_view_list div.plupload_file_action { + padding: 8px 6px; + position: absolute; + top: 0; + right: 0; +} + +.plupload_view_list div.plupload_file_name { + margin-right: 156px; + padding: 8px 6px; + _width: 75%; +} + +.plupload_view_list div.plupload_file_size { + right: 28px; +} + +.plupload_view_list div.plupload_file_status { + right: 82px; +} + +.plupload_view_list .plupload_file_rename { + margin-left: -2px; +} + +.plupload_view_list .plupload_file_size, +.plupload_view_list .plupload_file_status, +.plupload_filelist_footer .plupload_file_size, +.plupload_filelist_footer .plupload_file_status { + text-align: right; + width: 52px; +} + +.plupload_view_list .plupload_file_thumb, +.plupload_view_list .plupload_file_dummy { + top: -999px; +} + +.plupload_view_list .plupload_file_progress { + display: none; +} + + +/* thumbs view */ +.plupload_view_thumbs .plupload_content { + top: 57px; +} + +.plupload_view_thumbs .plupload_filelist_header { + display: none; +} + +.plupload_view_thumbs .plupload_file { + width: 100px; + padding: 72px 6px 6px; + margin: 10px; + border: 1px solid #fff; + float: left; +} + +.plupload_view_thumbs .plupload_file_thumb, +.plupload_view_thumbs .plupload_file_dummy { + width: 100px; + height: 60px; + text-align: center; + overflow: hidden; +} + +.plupload_view_thumbs .plupload_file_dummy { + font-size: 21px; + font-weight: bold; + text-transform: lowercase; + overflow: hidden; + line-height: 60px; + border: none; +} + +.plupload_view_thumbs div.plupload_file_action { + position: absolute; + top: 0; + right: 0; +} + +.plupload_view_thumbs div.plupload_file_name { + padding: 0; + font-weight: bold; +} + +.plupload_view_thumbs .plupload_file_rename { + padding: 1px 0; + width: 100% !important; +} + +.plupload_view_thumbs div.plupload_file_size { + font-size: 0.8em; + font-weight: normal; +} + +.plupload_view_thumbs div.plupload_file_status { + position: absolute; + top: 67px; + left: 6px; + width: 100px; + height: 3px; + overflow: hidden; + text-indent: -999px; +} + +.plupload_view_thumbs div.plupload_file_progress { + border: none; + height: 100%; +} + +.plupload .ui-sortable-helper, +.plupload .ui-sortable .plupload_file { + cursor:move; +} + +.plupload_file_action {width: 16px;} +.plupload_file_name { + overflow: hidden; + padding-left: 10px; +} + +.plupload_file_rename { + border: none; + font: normal 11px Verdana, sans-serif; + padding: 1px 2px; + line-height: 11px; + height: 11px; +} + +.plupload_progress {width: 60px;} +.plupload_progress_container {padding: 1px;} + + +/* Floats */ + +.plupload_right {float: right;} +.plupload_left {float: left;} +.plupload_clear,.plupload_clearer {clear: both;} +.plupload_clearer, .plupload_progress_bar { + display: block; + font-size: 0; + line-height: 0; +} +.plupload_clearer {height: 0;} + +/* Misc */ +.plupload_hidden {display: none;} + +.plupload_droptext { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; + text-align: center; + vertical-align: middle; + border: 0; + line-height: 160px; + display: none; +} + +.plupload_dropbox .plupload_droptext { + display: block; +} + +.plupload_buttons, .plupload_upload_status {float: left} + +.plupload_message { + position: absolute; + top: -1px; + left: -1px; + height: 100%; + width: 100%; +} + +.plupload_message p { + padding:0.7em; + margin:0; +} + +.plupload_message strong { + font-weight: bold; +} + +plupload_message i { + font-style: italic; +} + +.plupload_message p span.ui-icon { + float: left; + margin-right: 0.3em; +} + +.plupload_header_content .ui-state-error, +.plupload_header_content .ui-state-highlight { + border:none; +} + +.plupload_message_close { + position:absolute; + top:5px; + right:5px; + cursor:pointer; +} + +.plupload .ui-sortable-placeholder { + height:35px; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/img/loading.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/img/loading.gif new file mode 100755 index 0000000000000000000000000000000000000000..f0109d1706f7e1f26bbe6563a45e4146e5f02c45 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/img/loading.gif differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/img/plupload.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/img/plupload.png new file mode 100755 index 0000000000000000000000000000000000000000..8ae0f90b5abcb54b3fe2c1f8c69aaeaff41d886e Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/img/plupload.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/jquery.ui.plupload.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/jquery.ui.plupload.js new file mode 100755 index 0000000000000000000000000000000000000000..28fc6c2916a1b96dc58b00b7b6484ce11f76bac9 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/jquery.ui.plupload.js @@ -0,0 +1,1307 @@ +/** + * jquery.ui.plupload.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.progressbar.js + * + * Optionally: + * jquery.ui.sortable.js + */ + + /* global jQuery:true */ + +/** +jQuery UI based implementation of the Plupload API - multi-runtime file uploading API. + +To use the widget you must include _jQuery_ and _jQuery UI_ bundle (including `ui.core`, `ui.widget`, `ui.button`, +`ui.progressbar` and `ui.sortable`). + +In general the widget is designed the way that you do not usually need to do anything to it after you instantiate it. +But! You still can intervenue, to some extent, in case you need to. Although, due to the fact that widget is based on +_jQuery UI_ widget factory, there are some specifics. See examples below for more details. + +@example + <!-- Instantiating: --> + <div id="uploader"> + <p>Your browser doesn't have Flash, Silverlight or HTML5 support.</p> + </div> + + <script> + $('#uploader').plupload({ + url : '../upload.php', + filters : [ + {title : "Image files", extensions : "jpg,gif,png"} + ], + rename: true, + sortable: true, + flash_swf_url : '../../js/Moxie.swf', + silverlight_xap_url : '../../js/Moxie.xap', + }); + </script> + +@example + // Invoking methods: + $('#uploader').plupload(options); + + // Display welcome message in the notification area + $('#uploader').plupload('notify', 'info', "This might be obvious, but you need to click 'Add Files' to add some files."); + +@example + // Subscribing to the events... + // ... on initialization: + $('#uploader').plupload({ + ... + viewchanged: function(event, args) { + // stuff ... + } + }); + // ... or after initialization + $('#uploader').on("viewchanged", function(event, args) { + // stuff ... + }); + +@class UI.Plupload +@constructor +@param {Object} settings For detailed information about each option check documentation. + @param {String} settings.url URL of the server-side upload handler. + @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. + @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. + @param {Array} [settings.filters=[]] Set of file type filters, each one defined by hash of title and extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR` + @param {String} [settings.flash_swf_url] URL of the Flash swf. + @param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs. + @param {Number|String} [settings.max_file_size] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event. + @param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message. + @param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload. + @param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog. + @param {Boolean} [settings.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess. + @param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}` + @param {Number} [settings.resize.width] If image is bigger, it will be resized. + @param {Number} [settings.resize.height] If image is bigger, it will be resized. + @param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100). + @param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally. + @param {String} [settings.runtimes="html5,flash,silverlight,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails. + @param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. + @param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files. + + @param {Boolean} [settings.autostart=false] Whether to auto start uploading right after file selection. + @param {Boolean} [settings.dragdrop=true] Enable ability to add file to the queue by drag'n'dropping them from the desktop. + @param {Boolean} [settings.rename=false] Enable ability to rename files in the queue. + @param {Boolean} [settings.sortable=false] Enable ability to sort files in the queue, changing their uploading priority. + @param {Object} [settings.buttons] Control the visibility of functional buttons. + @param {Boolean} [settings.buttons.browse=true] Display browse button. + @param {Boolean} [settings.buttons.start=true] Display start button. + @param {Boolean} [settings.buttons.stop=true] Display stop button. + @param {Object} [settings.views] Control various views of the file queue. + @param {Boolean} [settings.views.list=true] Enable list view. + @param {Boolean} [settings.views.thumbs=false] Enable thumbs view. + @param {String} [settings.views.default='list'] Default view. + @param {Boolean} [settings.views.remember=true] Whether to remember the current view (requires jQuery Cookie plugin). + @param {Boolean} [settings.multiple_queues=true] Re-activate the widget after each upload procedure. + @param {Number} [settings.max_file_count=0] Limit the number of files user is able to upload in one go, autosets _multiple_queues_ to _false_ (default is 0 - no limit). +*/ +(function(window, document, plupload, o, $) { + +/** +Dispatched when the widget is initialized and ready. + +@event ready +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched when file dialog is closed. + +@event selected +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of selected files represented by plupload.File objects +*/ + +/** +Dispatched when file dialog is closed. + +@event removed +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of removed files represented by plupload.File objects +*/ + +/** +Dispatched when upload is started. + +@event start +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched when upload is stopped. + +@event stop +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched during the upload process. + +@event progress +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {plupload.File} file File that is being uploaded (includes loaded and percent properties among others). + @param {Number} size Total file size in bytes. + @param {Number} loaded Number of bytes uploaded of the files total size. + @param {Number} percent Number of percentage uploaded of the file. +*/ + +/** +Dispatched when file is uploaded. + +@event uploaded +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {plupload.File} file File that was uploaded. + @param {Enum} status Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. +*/ + +/** +Dispatched when upload of the whole queue is complete. + +@event complete +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of uploaded files represented by plupload.File objects +*/ + +/** +Dispatched when the view is changed, e.g. from `list` to `thumbs` or vice versa. + +@event viewchanged +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {String} type Current view type. +*/ + +/** +Dispatched when error of some kind is detected. + +@event error +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {String} error Error message. +@param {plupload.File} file File that was uploaded. + @param {Enum} status Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. +*/ + +var uploaders = {}; + +function _(str) { + return plupload.translate(str) || str; +} + +function renderUI(obj) { + obj.id = obj.attr('id'); + + obj.html( + '<div class="plupload_wrapper">' + + '<div class="ui-widget-content plupload_container">' + + '<div class="ui-state-default ui-widget-header plupload_header">' + + '<div class="plupload_header_content">' + + '<div class="plupload_logo"> </div>' + + '<div class="plupload_header_title">' + _('Select files') + '</div>' + + '<div class="plupload_header_text">' + _('Add files to the upload queue and click the start button.') + '</div>' + + '<div class="plupload_view_switch">' + + '<input type="radio" id="'+obj.id+'_view_list" name="view_mode_'+obj.id+'" checked="checked" /><label class="plupload_button" for="'+obj.id+'_view_list" data-view="list">' + _('List') + '</label>' + + '<input type="radio" id="'+obj.id+'_view_thumbs" name="view_mode_'+obj.id+'" /><label class="plupload_button" for="'+obj.id+'_view_thumbs" data-view="thumbs">' + _('Thumbnails') + '</label>' + + '</div>' + + '</div>' + + '</div>' + + + '<table class="plupload_filelist plupload_filelist_header ui-widget-header">' + + '<tr>' + + '<td class="plupload_cell plupload_file_name">' + _('Filename') + '</td>' + + '<td class="plupload_cell plupload_file_status">' + _('Status') + '</td>' + + '<td class="plupload_cell plupload_file_size">' + _('Size') + '</td>' + + '<td class="plupload_cell plupload_file_action"> </td>' + + '</tr>' + + '</table>' + + + '<div class="plupload_content">' + + '<div class="plupload_droptext">' + _("Drag files here.") + '</div>' + + '<ul class="plupload_filelist_content"> </ul>' + + '<div class="plupload_clearer"> </div>' + + '</div>' + + + '<table class="plupload_filelist plupload_filelist_footer ui-widget-header">' + + '<tr>' + + '<td class="plupload_cell plupload_file_name">' + + '<div class="plupload_buttons"><!-- Visible -->' + + '<a class="plupload_button plupload_add">' + _('Add Files') + '</a> ' + + '<a class="plupload_button plupload_start">' + _('Start Upload') + '</a> ' + + '<a class="plupload_button plupload_stop plupload_hidden">'+_('Stop Upload') + '</a> ' + + '</div>' + + + '<div class="plupload_started plupload_hidden"><!-- Hidden -->' + + '<div class="plupload_progress plupload_right">' + + '<div class="plupload_progress_container"></div>' + + '</div>' + + + '<div class="plupload_cell plupload_upload_status"></div>' + + + '<div class="plupload_clearer"> </div>' + + '</div>' + + '</td>' + + '<td class="plupload_file_status"><span class="plupload_total_status">0%</span></td>' + + '<td class="plupload_file_size"><span class="plupload_total_file_size">0 kb</span></td>' + + '<td class="plupload_file_action"></td>' + + '</tr>' + + '</table>' + + + '</div>' + + '<input class="plupload_count" value="0" type="hidden">' + + '</div>' + ); +} + + +$.widget("ui.plupload", { + + widgetEventPrefix: '', + + contents_bak: '', + + options: { + browse_button_hover: 'ui-state-hover', + browse_button_active: 'ui-state-active', + + // widget specific + dragdrop : true, + multiple_queues: true, // re-use widget by default + buttons: { + browse: true, + start: true, + stop: true + }, + views: { + list: true, + thumbs: false, + active: 'list', + remember: true // requires: https://github.com/carhartl/jquery-cookie, otherwise disabled even if set to true + }, + autostart: false, + sortable: false, + rename: false, + max_file_count: 0 // unlimited + }, + + FILE_COUNT_ERROR: -9001, + + _create: function() { + var id = this.element.attr('id'); + if (!id) { + id = plupload.guid(); + this.element.attr('id', id); + } + this.id = id; + + // backup the elements initial state + this.contents_bak = this.element.html(); + renderUI(this.element); + + // container, just in case + this.container = $('.plupload_container', this.element).attr('id', id + '_container'); + + this.content = $('.plupload_content', this.element); + + if ($.fn.resizable) { + this.container.resizable({ + handles: 's', + minHeight: 300 + }); + } + + // list of files, may become sortable + this.filelist = $('.plupload_filelist_content', this.container) + .attr({ + id: id + '_filelist', + unselectable: 'on' + }); + + + // buttons + this.browse_button = $('.plupload_add', this.container).attr('id', id + '_browse'); + this.start_button = $('.plupload_start', this.container).attr('id', id + '_start'); + this.stop_button = $('.plupload_stop', this.container).attr('id', id + '_stop'); + this.thumbs_switcher = $('#' + id + '_view_thumbs'); + this.list_switcher = $('#' + id + '_view_list'); + + if ($.ui.button) { + this.browse_button.button({ + icons: { primary: 'ui-icon-circle-plus' }, + disabled: true + }); + + this.start_button.button({ + icons: { primary: 'ui-icon-circle-arrow-e' }, + disabled: true + }); + + this.stop_button.button({ + icons: { primary: 'ui-icon-circle-close' } + }); + + this.list_switcher.button({ + text: false, + icons: { secondary: "ui-icon-grip-dotted-horizontal" } + }); + + this.thumbs_switcher.button({ + text: false, + icons: { secondary: "ui-icon-image" } + }); + } + + // progressbar + this.progressbar = $('.plupload_progress_container', this.container); + + if ($.ui.progressbar) { + this.progressbar.progressbar(); + } + + // counter + this.counter = $('.plupload_count', this.element) + .attr({ + id: id + '_count', + name: id + '_count' + }); + + // initialize uploader instance + this._initUploader(); + }, + + _initUploader: function() { + var self = this + , id = this.id + , uploader + , options = { + container: id + '_buttons', + browse_button: id + '_browse' + } + ; + + $('.plupload_buttons', this.element).attr('id', id + '_buttons'); + + if (self.options.dragdrop) { + this.filelist.parent().attr('id', this.id + '_dropbox'); + options.drop_element = this.id + '_dropbox'; + } + + uploader = this.uploader = uploaders[id] = new plupload.Uploader($.extend(this.options, options)); + + if (self.options.views.thumbs) { + uploader.settings.required_features.display_media = true; + } + + + uploader.bind('Error', function(up, err) { + var message, details = ""; + + message = '<strong>' + err.message + '</strong>'; + + switch (err.code) { + case plupload.FILE_EXTENSION_ERROR: + details = o.sprintf(_("File: %s"), err.file.name); + break; + + case plupload.FILE_SIZE_ERROR: + details = o.sprintf(_("File: %s, size: %d, max file size: %d"), err.file.name, err.file.size, plupload.parseSize(self.options.max_file_size)); + break; + + case plupload.FILE_DUPLICATE_ERROR: + details = o.sprintf(_("%s already present in the queue."), err.file.name); + break; + + case self.FILE_COUNT_ERROR: + details = o.sprintf(_("Upload element accepts only %d file(s) at a time. Extra files were stripped."), self.options.max_file_count); + break; + + case plupload.IMAGE_FORMAT_ERROR : + details = _("Image format either wrong or not supported."); + break; + + case plupload.IMAGE_MEMORY_ERROR : + details = _("Runtime ran out of available memory."); + break; + + /* // This needs a review + case plupload.IMAGE_DIMENSIONS_ERROR : + details = o.sprintf(_('Resoultion out of boundaries! <b>%s</b> runtime supports images only up to %wx%hpx.'), up.runtime, up.features.maxWidth, up.features.maxHeight); + break; */ + + case plupload.HTTP_ERROR: + details = _("Upload URL might be wrong or doesn't exist."); + break; + } + + message += " <br /><i>" + details + "</i>"; + + self._trigger('error', null, { up: up, error: err } ); + + // do not show UI if no runtime can be initialized + if (err.code === plupload.INIT_ERROR) { + setTimeout(function() { + self.destroy(); + }, 1); + } else { + self.notify('error', message); + } + }); + + + uploader.bind('PostInit', function(up) { + // all buttons are optional, so they can be disabled and hidden + if (!self.options.buttons.browse) { + self.browse_button.button('disable').hide(); + up.disableBrowse(true); + } else { + self.browse_button.button('enable'); + } + + if (!self.options.buttons.start) { + self.start_button.button('disable').hide(); + } + + if (!self.options.buttons.stop) { + self.stop_button.button('disable').hide(); + } + + if (!self.options.unique_names && self.options.rename) { + self._enableRenaming(); + } + + if (self.options.dragdrop && up.features.dragdrop) { + self.filelist.parent().addClass('plupload_dropbox'); + } + + self._enableViewSwitcher(); + + self.start_button.click(function(e) { + if (!$(this).button('option', 'disabled')) { + self.start(); + } + e.preventDefault(); + }); + + self.stop_button.click(function(e) { + self.stop(); + e.preventDefault(); + }); + + self._trigger('ready', null, { up: up }); + }); + + + // check if file count doesn't exceed the limit + if (self.options.max_file_count) { + self.options.multiple_queues = false; // one go only + + uploader.bind('FilesAdded', function(up, selectedFiles) { + var selectedCount = selectedFiles.length + , extraCount = up.files.length + selectedCount - self.options.max_file_count + ; + + if (extraCount > 0) { + selectedFiles.splice(selectedCount - extraCount, extraCount); + + up.trigger('Error', { + code : self.FILE_COUNT_ERROR, + message : _('File count error.') + }); + } + }); + } + + // uploader internal events must run first + uploader.init(); + + uploader.bind('FileFiltered', function(up, file) { + self._addFiles(file); + }); + + uploader.bind('FilesAdded', function(up, files) { + self._trigger('selected', null, { up: up, files: files } ); + + // re-enable sortable + if (self.options.sortable && $.ui.sortable) { + self._enableSortingList(); + } + + self._trigger('updatelist', null, { filelist: self.filelist }); + + if (self.options.autostart) { + // set a little delay to make sure that QueueChanged triggered by the core has time to complete + setTimeout(function() { + self.start(); + }, 10); + } + }); + + uploader.bind('FilesRemoved', function(up, files) { + self._trigger('removed', null, { up: up, files: files } ); + }); + + uploader.bind('QueueChanged StateChanged', function() { + self._handleState(); + }); + + uploader.bind('UploadFile', function(up, file) { + self._handleFileStatus(file); + }); + + uploader.bind('FileUploaded', function(up, file) { + self._handleFileStatus(file); + self._trigger('uploaded', null, { up: up, file: file } ); + }); + + uploader.bind('UploadProgress', function(up, file) { + self._handleFileStatus(file); + self._updateTotalProgress(); + self._trigger('progress', null, { up: up, file: file } ); + }); + + uploader.bind('UploadComplete', function(up, files) { + self._addFormFields(); + self._trigger('complete', null, { up: up, files: files } ); + }); + }, + + + _setOption: function(key, value) { + var self = this; + + if (key == 'buttons' && typeof(value) == 'object') { + value = $.extend(self.options.buttons, value); + + if (!value.browse) { + self.browse_button.button('disable').hide(); + self.uploader.disableBrowse(true); + } else { + self.browse_button.button('enable').show(); + self.uploader.disableBrowse(false); + } + + if (!value.start) { + self.start_button.button('disable').hide(); + } else { + self.start_button.button('enable').show(); + } + + if (!value.stop) { + self.stop_button.button('disable').hide(); + } else { + self.start_button.button('enable').show(); + } + } + + self.uploader.settings[key] = value; + }, + + + /** + Start upload. Triggers `start` event. + + @method start + */ + start: function() { + this.uploader.start(); + this._trigger('start', null, { up: this.uploader }); + }, + + + /** + Stop upload. Triggers `stop` event. + + @method stop + */ + stop: function() { + this.uploader.stop(); + this._trigger('stop', null, { up: this.uploader }); + }, + + + /** + Enable browse button. + + @method enable + */ + enable: function() { + this.browse_button.button('enable'); + this.uploader.disableBrowse(false); + }, + + + /** + Disable browse button. + + @method disable + */ + disable: function() { + this.browse_button.button('disable'); + this.uploader.disableBrowse(true); + }, + + + /** + Retrieve file by it's unique id. + + @method getFile + @param {String} id Unique id of the file + @return {plupload.File} + */ + getFile: function(id) { + var file; + + if (typeof id === 'number') { + file = this.uploader.files[id]; + } else { + file = this.uploader.getFile(id); + } + return file; + }, + + /** + Return array of files currently in the queue. + + @method getFiles + @return {Array} Array of files in the queue represented by plupload.File objects + */ + getFiles: function() { + return this.uploader.files; + }, + + + /** + Remove the file from the queue. + + @method removeFile + @param {plupload.File|String} file File to remove, might be specified directly or by it's unique id + */ + removeFile: function(file) { + if (plupload.typeOf(file) === 'string') { + file = this.getFile(file); + } + this._removeFiles(file); + }, + + + /** + Clear the file queue. + + @method clearQueue + */ + clearQueue: function() { + this.uploader.splice(); + }, + + + /** + Retrieve internal plupload.Uploader object (usually not required). + + @method getUploader + @return {plupload.Uploader} + */ + getUploader: function() { + return this.uploader; + }, + + + /** + Trigger refresh procedure, specifically browse_button re-measure and re-position operations. + Might get handy, when UI Widget is placed within the popup, that is constantly hidden and shown + again - without calling this method after each show operation, dialog trigger might get displaced + and disfunctional. + + @method refresh + */ + refresh: function() { + this.uploader.refresh(); + }, + + + /** + Display a message in notification area. + + @method notify + @param {Enum} type Type of the message, either `error` or `info` + @param {String} message The text message to display. + */ + notify: function(type, message) { + var popup = $( + '<div class="plupload_message">' + + '<span class="plupload_message_close ui-icon ui-icon-circle-close" title="'+_('Close')+'"></span>' + + '<p><span class="ui-icon"></span>' + message + '</p>' + + '</div>' + ); + + popup + .addClass('ui-state-' + (type === 'error' ? 'error' : 'highlight')) + .find('p .ui-icon') + .addClass('ui-icon-' + (type === 'error' ? 'alert' : 'info')) + .end() + .find('.plupload_message_close') + .click(function() { + popup.remove(); + }) + .end(); + + $('.plupload_header', this.container).append(popup); + }, + + + /** + Destroy the widget, the uploader, free associated resources and bring back original html. + + @method destroy + */ + destroy: function() { + this._removeFiles([].slice.call(this.uploader.files)); + + // destroy uploader instance + this.uploader.destroy(); + + // unbind all button events + $('.plupload_button', this.element).unbind(); + + // destroy buttons + if ($.ui.button) { + $('.plupload_add, .plupload_start, .plupload_stop', this.container) + .button('destroy'); + } + + // destroy progressbar + if ($.ui.progressbar) { + this.progressbar.progressbar('destroy'); + } + + // destroy sortable behavior + if ($.ui.sortable && this.options.sortable) { + $('tbody', this.filelist).sortable('destroy'); + } + + // restore the elements initial state + this.element + .empty() + .html(this.contents_bak); + this.contents_bak = ''; + + $.Widget.prototype.destroy.apply(this); + }, + + + _handleState: function() { + var up = this.uploader; + + if (up.state === plupload.STARTED) { + $(this.start_button).button('disable'); + + $([]) + .add(this.stop_button) + .add('.plupload_started') + .removeClass('plupload_hidden'); + + $('.plupload_upload_status', this.element).html(o.sprintf(_('Uploaded %d/%d files'), up.total.uploaded, up.files.length)); + $('.plupload_header_content', this.element).addClass('plupload_header_content_bw'); + } else if (up.state === plupload.STOPPED) { + $([]) + .add(this.stop_button) + .add('.plupload_started') + .addClass('plupload_hidden'); + + if (this.options.multiple_queues) { + $('.plupload_header_content', this.element).removeClass('plupload_header_content_bw'); + } else { + $([]) + .add(this.browse_button) + .add(this.start_button) + .button('disable'); + + up.disableBrowse(); + } + + if (up.files.length === (up.total.uploaded + up.total.failed)) { + this.start_button.button('disable'); + } else { + this.start_button.button('enable'); + } + + this._updateTotalProgress(); + } + + if (up.total.queued === 0) { + $('.ui-button-text', this.browse_button).html(_('Add Files')); + } else { + $('.ui-button-text', this.browse_button).html(o.sprintf(_('%d files queued'), up.total.queued)); + } + + up.refresh(); + }, + + + _handleFileStatus: function(file) { + var self = this, actionClass, iconClass; + + // since this method might be called asynchronously, file row might not yet be rendered + if (!$('#' + file.id).length) { + return; + } + + switch (file.status) { + case plupload.DONE: + actionClass = 'plupload_done'; + iconClass = 'ui-icon ui-icon-circle-check'; + break; + + case plupload.FAILED: + actionClass = 'ui-state-error plupload_failed'; + iconClass = 'ui-icon ui-icon-alert'; + break; + + case plupload.QUEUED: + actionClass = 'plupload_delete'; + iconClass = 'ui-icon ui-icon-circle-minus'; + break; + + case plupload.UPLOADING: + actionClass = 'ui-state-highlight plupload_uploading'; + iconClass = 'ui-icon ui-icon-circle-arrow-w'; + + // scroll uploading file into the view if its bottom boundary is out of it + var scroller = $('.plupload_scroll', this.container) + , scrollTop = scroller.scrollTop() + , scrollerHeight = scroller.height() + , rowOffset = $('#' + file.id).position().top + $('#' + file.id).height() + ; + + if (scrollerHeight < rowOffset) { + scroller.scrollTop(scrollTop + rowOffset - scrollerHeight); + } + + // Set file specific progress + $('#' + file.id) + .find('.plupload_file_percent') + .html(file.percent + '%') + .end() + .find('.plupload_file_progress') + .css('width', file.percent + '%') + .end() + .find('.plupload_file_size') + .html(plupload.formatSize(file.size)); + break; + } + actionClass += ' ui-state-default plupload_file'; + + $('#' + file.id) + .attr('class', actionClass) + .find('.ui-icon') + .attr('class', iconClass) + .end() + .filter('.plupload_delete, .plupload_done, .plupload_failed') + .find('.ui-icon') + .click(function(e) { + self._removeFiles(file); + e.preventDefault(); + }); + }, + + + _updateTotalProgress: function() { + var up = this.uploader; + + // Scroll to end of file list + this.filelist[0].scrollTop = this.filelist[0].scrollHeight; + + this.progressbar.progressbar('value', up.total.percent); + + this.element + .find('.plupload_total_status') + .html(up.total.percent + '%') + .end() + .find('.plupload_total_file_size') + .html(plupload.formatSize(up.total.size)) + .end() + .find('.plupload_upload_status') + .html(o.sprintf(_('Uploaded %d/%d files'), up.total.uploaded, up.files.length)); + }, + + + _displayThumbs: function() { + var self = this + , tw, th // thumb width/height + , cols + , num = 0 // number of simultaneously visible thumbs + , thumbs = [] // array of thumbs to preload at any given moment + , loading = false + ; + + if (!this.options.views.thumbs) { + return; + } + + + function onLast(el, eventName, cb) { + var timer; + + el.on(eventName, function() { + clearTimeout(timer); + timer = setTimeout(function() { + clearTimeout(timer); + cb(); + }, 300); + }); + } + + + // calculate number of simultaneously visible thumbs + function measure() { + if (!tw || !th) { + var wrapper = $('.plupload_file:eq(0)', self.filelist); + tw = wrapper.outerWidth(true); + th = wrapper.outerHeight(true); + } + + var aw = self.content.width(), ah = self.content.height(); + cols = Math.floor(aw / tw); + num = cols * (Math.ceil(ah / th) + 1); + } + + + function pickThumbsToLoad() { + // calculate index of virst visible thumb + var startIdx = Math.floor(self.content.scrollTop() / th) * cols; + // get potentially visible thumbs that are not yet visible + thumbs = $('.plupload_file', self.filelist) + .slice(startIdx, startIdx + num) + .filter(':not(.plupload_file_thumb_loaded)') + .get(); + } + + + function init() { + function mpl() { + if (self.view_mode !== 'thumbs') { + return; + } + measure(); + pickThumbsToLoad(); + lazyLoad(); + } + + if ($.fn.resizable) { + onLast(self.container, 'resize', mpl); + } + + onLast(self.window, 'resize', mpl); + onLast(self.content, 'scroll', mpl); + + self.element.on('viewchanged selected', mpl); + + mpl(); + } + + + function preloadThumb(file, cb) { + var img = new o.Image(); + + img.onload = function() { + var thumb = $('#' + file.id + ' .plupload_file_thumb', self.filelist).html(''); + this.embed(thumb[0], { + width: 100, + height: 60, + crop: true, + swf_url: o.resolveUrl(self.options.flash_swf_url), + xap_url: o.resolveUrl(self.options.silverlight_xap_url) + }); + }; + + img.bind("embedded error", function() { + $('#' + file.id, self.filelist).addClass('plupload_file_thumb_loaded'); + this.destroy(); + setTimeout(cb, 1); // detach, otherwise ui might hang (in SilverLight for example) + }); + + img.load(file.getSource()); + } + + + function lazyLoad() { + if (self.view_mode !== 'thumbs' || loading) { + return; + } + + pickThumbsToLoad(); + if (!thumbs.length) { + return; + } + + loading = true; + + preloadThumb(self.getFile($(thumbs.shift()).attr('id')), function() { + loading = false; + lazyLoad(); + }); + } + + // this has to run only once to measure structures and bind listeners + this.element.on('selected', function onselected() { + self.element.off('selected', onselected); + init(); + }); + }, + + + _addFiles: function(files) { + var self = this, file_html; + + file_html = '<li class="plupload_file ui-state-default" id="%id%">' + + '<div class="plupload_file_thumb">' + + '<div class="plupload_file_dummy ui-widget-content"><span class="ui-state-disabled">%ext%</span></div>' + + '</div>' + + '<div class="plupload_file_name" title="%name%"><span class="plupload_file_namespan">%name%</span></div>' + + '<div class="plupload_file_action"><div class="ui-icon"> </div></div>' + + '<div class="plupload_file_size">%size% </div>' + + '<div class="plupload_file_status">' + + '<div class="plupload_file_progress ui-widget-header" style="width: 0%"> </div>' + + '<span class="plupload_file_percent">%percent% </span>' + + '</div>' + + '<div class="plupload_file_fields"> </div>' + + '</li>'; + + if (plupload.typeOf(files) !== 'array') { + files = [files]; + } + + $.each(files, function(i, file) { + var ext = o.Mime.getFileExtension(file.name) || 'none'; + + self.filelist.append(file_html.replace(/%(\w+)%/g, function($0, $1) { + if ('size' === $1) { + return plupload.formatSize(file.size); + } else if ('ext' === $1) { + return ext; + } else { + return file[$1] || ''; + } + })); + + self._handleFileStatus(file); + }); + }, + + + _removeFiles: function(files) { + var self = this, up = this.uploader; + + if (plupload.typeOf(files) !== 'array') { + files = [files]; + } + + // destroy sortable if enabled + if ($.ui.sortable && this.options.sortable) { + $('tbody', self.filelist).sortable('destroy'); + } + + $.each(files, function(i, file) { + $('#' + file.id).toggle("highlight", function() { + this.remove(); + }); + up.removeFile(file); + }); + + + if (up.files.length) { + // re-initialize sortable + if (this.options.sortable && $.ui.sortable) { + this._enableSortingList(); + } + } + + this._trigger('updatelist', null, { filelist: this.filelist }); + }, + + + _addFormFields: function() { + var self = this; + + // re-add from fresh + $('.plupload_file_fields', this.filelist).html(''); + + plupload.each(this.uploader.files, function(file, count) { + var fields = '' + , id = self.id + '_' + count + ; + + if (file.target_name) { + fields += '<input type="hidden" name="' + id + '_tmpname" value="'+plupload.xmlEncode(file.target_name)+'" />'; + } + fields += '<input type="hidden" name="' + id + '_name" value="'+plupload.xmlEncode(file.name)+'" />'; + fields += '<input type="hidden" name="' + id + '_status" value="' + (file.status === plupload.DONE ? 'done' : 'failed') + '" />'; + + $('#' + file.id).find('.plupload_file_fields').html(fields); + }); + + this.counter.val(this.uploader.files.length); + }, + + + _viewChanged: function(view) { + // update or write a new cookie + if (this.options.views.remember && $.cookie) { + $.cookie('plupload_ui_view', view, { expires: 7, path: '/' }); + } + + // ugly fix for IE6 - make content area stretchable + if (o.Env.browser === 'IE' && o.Env.version < 7) { + this.content.attr('style', 'height:expression(document.getElementById("' + this.id + '_container' + '").clientHeight - ' + (view === 'list' ? 133 : 103) + ');'); + } + + this.container.removeClass('plupload_view_list plupload_view_thumbs').addClass('plupload_view_' + view); + this.view_mode = view; + this._trigger('viewchanged', null, { view: view }); + }, + + + _enableViewSwitcher: function() { + var self = this + , view + , switcher = $('.plupload_view_switch', this.container) + , buttons + , button + ; + + plupload.each(['list', 'thumbs'], function(view) { + if (!self.options.views[view]) { + switcher.find('[for="' + self.id + '_view_' + view + '"], #'+ self.id +'_view_' + view).remove(); + } + }); + + // check if any visible left + buttons = switcher.find('.plupload_button'); + + if (buttons.length === 1) { + switcher.hide(); + view = buttons.eq(0).data('view'); + this._viewChanged(view); + } else if ($.ui.button && buttons.length > 1) { + if (this.options.views.remember && $.cookie) { + view = $.cookie('plupload_ui_view'); + } + + // if wierd case, bail out to default + if (!~plupload.inArray(view, ['list', 'thumbs'])) { + view = this.options.views.active; + } + + switcher + .show() + .buttonset() + .find('.ui-button') + .click(function(e) { + view = $(this).data('view'); + self._viewChanged(view); + e.preventDefault(); // avoid auto scrolling to widget in IE and FF (see #850) + }); + + // if view not active - happens when switcher wasn't clicked manually + button = switcher.find('[for="' + self.id + '_view_'+view+'"]'); + if (button.length) { + button.trigger('click'); + } + } else { + switcher.show(); + this._viewChanged(this.options.views.active); + } + + // initialize thumb viewer if requested + if (this.options.views.thumbs) { + this._displayThumbs(); + } + }, + + + _enableRenaming: function() { + var self = this; + + this.filelist.dblclick(function(e) { + var nameSpan = $(e.target), nameInput, file, parts, name, ext = ""; + + if (!nameSpan.hasClass('plupload_file_namespan')) { + return; + } + + // Get file name and split out name and extension + file = self.uploader.getFile(nameSpan.closest('.plupload_file')[0].id); + name = file.name; + parts = /^(.+)(\.[^.]+)$/.exec(name); + if (parts) { + name = parts[1]; + ext = parts[2]; + } + + // Display input element + nameInput = $('<input class="plupload_file_rename" type="text" />').width(nameSpan.width()).insertAfter(nameSpan.hide()); + nameInput.val(name).blur(function() { + nameSpan.show().parent().scrollLeft(0).end().next().remove(); + }).keydown(function(e) { + var nameInput = $(this); + + if ($.inArray(e.keyCode, [13, 27]) !== -1) { + e.preventDefault(); + + // Rename file and glue extension back on + if (e.keyCode === 13) { + file.name = nameInput.val() + ext; + nameSpan.html(file.name); + } + nameInput.blur(); + } + })[0].focus(); + }); + }, + + + _enableSortingList: function() { + var self = this; + + if ($('.plupload_file', this.filelist).length < 2) { + return; + } + + // destroy sortable if enabled + $('tbody', this.filelist).sortable('destroy'); + + // enable + this.filelist.sortable({ + items: '.plupload_delete', + + cancel: 'object, .plupload_clearer', + + stop: function() { + var files = []; + + $.each($(this).sortable('toArray'), function(i, id) { + files[files.length] = self.uploader.getFile(id); + }); + + files.unshift(files.length); + files.unshift(0); + + // re-populate files array + Array.prototype.splice.apply(self.uploader.files, files); + } + }); + } +}); + +} (window, document, plupload, mOxie, jQuery)); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/jquery.ui.plupload.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/jquery.ui.plupload.min.js new file mode 100755 index 0000000000000000000000000000000000000000..c7be0ece61b96e793030428671f0f6d17a833caf --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/jquery.ui.plupload/jquery.ui.plupload.min.js @@ -0,0 +1 @@ +;(function(e,t,n,r,i){function o(e){return n.translate(e)||e}function u(e){e.id=e.attr("id"),e.html('<div class="plupload_wrapper"><div class="ui-widget-content plupload_container"><div class="ui-state-default ui-widget-header plupload_header"><div class="plupload_header_content"><div class="plupload_logo"> </div><div class="plupload_header_title">'+o("Select files")+"</div>"+'<div class="plupload_header_text">'+o("Add files to the upload queue and click the start button.")+"</div>"+'<div class="plupload_view_switch">'+'<input type="radio" id="'+e.id+'_view_list" name="view_mode_'+e.id+'" checked="checked" /><label class="plupload_button" for="'+e.id+'_view_list" data-view="list">'+o("List")+"</label>"+'<input type="radio" id="'+e.id+'_view_thumbs" name="view_mode_'+e.id+'" /><label class="plupload_button" for="'+e.id+'_view_thumbs" data-view="thumbs">'+o("Thumbnails")+"</label>"+"</div>"+"</div>"+"</div>"+'<table class="plupload_filelist plupload_filelist_header ui-widget-header">'+"<tr>"+'<td class="plupload_cell plupload_file_name">'+o("Filename")+"</td>"+'<td class="plupload_cell plupload_file_status">'+o("Status")+"</td>"+'<td class="plupload_cell plupload_file_size">'+o("Size")+"</td>"+'<td class="plupload_cell plupload_file_action"> </td>'+"</tr>"+"</table>"+'<div class="plupload_content">'+'<div class="plupload_droptext">'+o("Drag files here.")+"</div>"+'<ul class="plupload_filelist_content"> </ul>'+'<div class="plupload_clearer"> </div>'+"</div>"+'<table class="plupload_filelist plupload_filelist_footer ui-widget-header">'+"<tr>"+'<td class="plupload_cell plupload_file_name">'+'<div class="plupload_buttons"><!-- Visible -->'+'<a class="plupload_button plupload_add">'+o("Add Files")+"</a> "+'<a class="plupload_button plupload_start">'+o("Start Upload")+"</a> "+'<a class="plupload_button plupload_stop plupload_hidden">'+o("Stop Upload")+"</a> "+"</div>"+'<div class="plupload_started plupload_hidden"><!-- Hidden -->'+'<div class="plupload_progress plupload_right">'+'<div class="plupload_progress_container"></div>'+"</div>"+'<div class="plupload_cell plupload_upload_status"></div>'+'<div class="plupload_clearer"> </div>'+"</div>"+"</td>"+'<td class="plupload_file_status"><span class="plupload_total_status">0%</span></td>'+'<td class="plupload_file_size"><span class="plupload_total_file_size">0 kb</span></td>'+'<td class="plupload_file_action"></td>'+"</tr>"+"</table>"+"</div>"+'<input class="plupload_count" value="0" type="hidden">'+"</div>")}var s={};i.widget("ui.plupload",{widgetEventPrefix:"",contents_bak:"",options:{browse_button_hover:"ui-state-hover",browse_button_active:"ui-state-active",dragdrop:!0,multiple_queues:!0,buttons:{browse:!0,start:!0,stop:!0},views:{list:!0,thumbs:!1,active:"list",remember:!0},autostart:!1,sortable:!1,rename:!1,max_file_count:0},FILE_COUNT_ERROR:-9001,_create:function(){var e=this.element.attr("id");e||(e=n.guid(),this.element.attr("id",e)),this.id=e,this.contents_bak=this.element.html(),u(this.element),this.container=i(".plupload_container",this.element).attr("id",e+"_container"),this.content=i(".plupload_content",this.element),i.fn.resizable&&this.container.resizable({handles:"s",minHeight:300}),this.filelist=i(".plupload_filelist_content",this.container).attr({id:e+"_filelist",unselectable:"on"}),this.browse_button=i(".plupload_add",this.container).attr("id",e+"_browse"),this.start_button=i(".plupload_start",this.container).attr("id",e+"_start"),this.stop_button=i(".plupload_stop",this.container).attr("id",e+"_stop"),this.thumbs_switcher=i("#"+e+"_view_thumbs"),this.list_switcher=i("#"+e+"_view_list"),i.ui.button&&(this.browse_button.button({icons:{primary:"ui-icon-circle-plus"},disabled:!0}),this.start_button.button({icons:{primary:"ui-icon-circle-arrow-e"},disabled:!0}),this.stop_button.button({icons:{primary:"ui-icon-circle-close"}}),this.list_switcher.button({text:!1,icons:{secondary:"ui-icon-grip-dotted-horizontal"}}),this.thumbs_switcher.button({text:!1,icons:{secondary:"ui-icon-image"}})),this.progressbar=i(".plupload_progress_container",this.container),i.ui.progressbar&&this.progressbar.progressbar(),this.counter=i(".plupload_count",this.element).attr({id:e+"_count",name:e+"_count"}),this._initUploader()},_initUploader:function(){var e=this,t=this.id,u,a={container:t+"_buttons",browse_button:t+"_browse"};i(".plupload_buttons",this.element).attr("id",t+"_buttons"),e.options.dragdrop&&(this.filelist.parent().attr("id",this.id+"_dropbox"),a.drop_element=this.id+"_dropbox"),u=this.uploader=s[t]=new n.Uploader(i.extend(this.options,a)),e.options.views.thumbs&&(u.settings.required_features.display_media=!0),u.bind("Error",function(t,i){var s,u="";s="<strong>"+i.message+"</strong>";switch(i.code){case n.FILE_EXTENSION_ERROR:u=r.sprintf(o("File: %s"),i.file.name);break;case n.FILE_SIZE_ERROR:u=r.sprintf(o("File: %s, size: %d, max file size: %d"),i.file.name,i.file.size,n.parseSize(e.options.max_file_size));break;case n.FILE_DUPLICATE_ERROR:u=r.sprintf(o("%s already present in the queue."),i.file.name);break;case e.FILE_COUNT_ERROR:u=r.sprintf(o("Upload element accepts only %d file(s) at a time. Extra files were stripped."),e.options.max_file_count);break;case n.IMAGE_FORMAT_ERROR:u=o("Image format either wrong or not supported.");break;case n.IMAGE_MEMORY_ERROR:u=o("Runtime ran out of available memory.");break;case n.HTTP_ERROR:u=o("Upload URL might be wrong or doesn't exist.")}s+=" <br /><i>"+u+"</i>",e._trigger("error",null,{up:t,error:i}),i.code===n.INIT_ERROR?setTimeout(function(){e.destroy()},1):e.notify("error",s)}),u.bind("PostInit",function(t){e.options.buttons.browse?e.browse_button.button("enable"):(e.browse_button.button("disable").hide(),t.disableBrowse(!0)),e.options.buttons.start||e.start_button.button("disable").hide(),e.options.buttons.stop||e.stop_button.button("disable").hide(),!e.options.unique_names&&e.options.rename&&e._enableRenaming(),e.options.dragdrop&&t.features.dragdrop&&e.filelist.parent().addClass("plupload_dropbox"),e._enableViewSwitcher(),e.start_button.click(function(t){i(this).button("option","disabled")||e.start(),t.preventDefault()}),e.stop_button.click(function(t){e.stop(),t.preventDefault()}),e._trigger("ready",null,{up:t})}),e.options.max_file_count&&(e.options.multiple_queues=!1,u.bind("FilesAdded",function(t,n){var r=n.length,i=t.files.length+r-e.options.max_file_count;i>0&&(n.splice(r-i,i),t.trigger("Error",{code:e.FILE_COUNT_ERROR,message:o("File count error.")}))})),u.init(),u.bind("FileFiltered",function(t,n){e._addFiles(n)}),u.bind("FilesAdded",function(t,n){e._trigger("selected",null,{up:t,files:n}),e.options.sortable&&i.ui.sortable&&e._enableSortingList(),e._trigger("updatelist",null,{filelist:e.filelist}),e.options.autostart&&setTimeout(function(){e.start()},10)}),u.bind("FilesRemoved",function(t,n){e._trigger("removed",null,{up:t,files:n})}),u.bind("QueueChanged StateChanged",function(){e._handleState()}),u.bind("UploadFile",function(t,n){e._handleFileStatus(n)}),u.bind("FileUploaded",function(t,n){e._handleFileStatus(n),e._trigger("uploaded",null,{up:t,file:n})}),u.bind("UploadProgress",function(t,n){e._handleFileStatus(n),e._updateTotalProgress(),e._trigger("progress",null,{up:t,file:n})}),u.bind("UploadComplete",function(t,n){e._addFormFields(),e._trigger("complete",null,{up:t,files:n})})},_setOption:function(e,t){var n=this;e=="buttons"&&typeof t=="object"&&(t=i.extend(n.options.buttons,t),t.browse?(n.browse_button.button("enable").show(),n.uploader.disableBrowse(!1)):(n.browse_button.button("disable").hide(),n.uploader.disableBrowse(!0)),t.start?n.start_button.button("enable").show():n.start_button.button("disable").hide(),t.stop?n.start_button.button("enable").show():n.stop_button.button("disable").hide()),n.uploader.settings[e]=t},start:function(){this.uploader.start(),this._trigger("start",null,{up:this.uploader})},stop:function(){this.uploader.stop(),this._trigger("stop",null,{up:this.uploader})},enable:function(){this.browse_button.button("enable"),this.uploader.disableBrowse(!1)},disable:function(){this.browse_button.button("disable"),this.uploader.disableBrowse(!0)},getFile:function(e){var t;return typeof e=="number"?t=this.uploader.files[e]:t=this.uploader.getFile(e),t},getFiles:function(){return this.uploader.files},removeFile:function(e){n.typeOf(e)==="string"&&(e=this.getFile(e)),this._removeFiles(e)},clearQueue:function(){this.uploader.splice()},getUploader:function(){return this.uploader},refresh:function(){this.uploader.refresh()},notify:function(e,t){var n=i('<div class="plupload_message"><span class="plupload_message_close ui-icon ui-icon-circle-close" title="'+o("Close")+'"></span>'+'<p><span class="ui-icon"></span>'+t+"</p>"+"</div>");n.addClass("ui-state-"+(e==="error"?"error":"highlight")).find("p .ui-icon").addClass("ui-icon-"+(e==="error"?"alert":"info")).end().find(".plupload_message_close").click(function(){n.remove()}).end(),i(".plupload_header",this.container).append(n)},destroy:function(){this._removeFiles([].slice.call(this.uploader.files)),this.uploader.destroy(),i(".plupload_button",this.element).unbind(),i.ui.button&&i(".plupload_add, .plupload_start, .plupload_stop",this.container).button("destroy"),i.ui.progressbar&&this.progressbar.progressbar("destroy"),i.ui.sortable&&this.options.sortable&&i("tbody",this.filelist).sortable("destroy"),this.element.empty().html(this.contents_bak),this.contents_bak="",i.Widget.prototype.destroy.apply(this)},_handleState:function(){var e=this.uploader;e.state===n.STARTED?(i(this.start_button).button("disable"),i([]).add(this.stop_button).add(".plupload_started").removeClass("plupload_hidden"),i(".plupload_upload_status",this.element).html(r.sprintf(o("Uploaded %d/%d files"),e.total.uploaded,e.files.length)),i(".plupload_header_content",this.element).addClass("plupload_header_content_bw")):e.state===n.STOPPED&&(i([]).add(this.stop_button).add(".plupload_started").addClass("plupload_hidden"),this.options.multiple_queues?i(".plupload_header_content",this.element).removeClass("plupload_header_content_bw"):(i([]).add(this.browse_button).add(this.start_button).button("disable"),e.disableBrowse()),e.files.length===e.total.uploaded+e.total.failed?this.start_button.button("disable"):this.start_button.button("enable"),this._updateTotalProgress()),e.total.queued===0?i(".ui-button-text",this.browse_button).html(o("Add Files")):i(".ui-button-text",this.browse_button).html(r.sprintf(o("%d files queued"),e.total.queued)),e.refresh()},_handleFileStatus:function(e){var t=this,r,s;if(!i("#"+e.id).length)return;switch(e.status){case n.DONE:r="plupload_done",s="ui-icon ui-icon-circle-check";break;case n.FAILED:r="ui-state-error plupload_failed",s="ui-icon ui-icon-alert";break;case n.QUEUED:r="plupload_delete",s="ui-icon ui-icon-circle-minus";break;case n.UPLOADING:r="ui-state-highlight plupload_uploading",s="ui-icon ui-icon-circle-arrow-w";var o=i(".plupload_scroll",this.container),u=o.scrollTop(),a=o.height(),f=i("#"+e.id).position().top+i("#"+e.id).height();a<f&&o.scrollTop(u+f-a),i("#"+e.id).find(".plupload_file_percent").html(e.percent+"%").end().find(".plupload_file_progress").css("width",e.percent+"%").end().find(".plupload_file_size").html(n.formatSize(e.size))}r+=" ui-state-default plupload_file",i("#"+e.id).attr("class",r).find(".ui-icon").attr("class",s).end().filter(".plupload_delete, .plupload_done, .plupload_failed").find(".ui-icon").click(function(n){t._removeFiles(e),n.preventDefault()})},_updateTotalProgress:function(){var e=this.uploader;this.filelist[0].scrollTop=this.filelist[0].scrollHeight,this.progressbar.progressbar("value",e.total.percent),this.element.find(".plupload_total_status").html(e.total.percent+"%").end().find(".plupload_total_file_size").html(n.formatSize(e.total.size)).end().find(".plupload_upload_status").html(r.sprintf(o("Uploaded %d/%d files"),e.total.uploaded,e.files.length))},_displayThumbs:function(){function f(e,t,n){var r;e.on(t,function(){clearTimeout(r),r=setTimeout(function(){clearTimeout(r),n()},300)})}function l(){if(!t||!n){var r=i(".plupload_file:eq(0)",e.filelist);t=r.outerWidth(!0),n=r.outerHeight(!0)}var u=e.content.width(),a=e.content.height();s=Math.floor(u/t),o=s*(Math.ceil(a/n)+1)}function c(){var t=Math.floor(e.content.scrollTop()/n)*s;u=i(".plupload_file",e.filelist).slice(t,t+o).filter(":not(.plupload_file_thumb_loaded)").get()}function h(){function t(){if(e.view_mode!=="thumbs")return;l(),c(),d()}i.fn.resizable&&f(e.container,"resize",t),f(e.window,"resize",t),f(e.content,"scroll",t),e.element.on("viewchanged selected",t),t()}function p(t,n){var s=new r.Image;s.onload=function(){var n=i("#"+t.id+" .plupload_file_thumb",e.filelist).html("");this.embed(n[0],{width:100,height:60,crop:!0,swf_url:r.resolveUrl(e.options.flash_swf_url),xap_url:r.resolveUrl(e.options.silverlight_xap_url)})},s.bind("embedded error",function(){i("#"+t.id,e.filelist).addClass("plupload_file_thumb_loaded"),this.destroy(),setTimeout(n,1)}),s.load(t.getSource())}function d(){if(e.view_mode!=="thumbs"||a)return;c();if(!u.length)return;a=!0,p(e.getFile(i(u.shift()).attr("id")),function(){a=!1,d()})}var e=this,t,n,s,o=0,u=[],a=!1;if(!this.options.views.thumbs)return;this.element.on("selected",function v(){e.element.off("selected",v),h()})},_addFiles:function(e){var t=this,s;s='<li class="plupload_file ui-state-default" id="%id%"><div class="plupload_file_thumb"><div class="plupload_file_dummy ui-widget-content"><span class="ui-state-disabled">%ext%</span></div></div><div class="plupload_file_name" title="%name%"><span class="plupload_file_namespan">%name%</span></div><div class="plupload_file_action"><div class="ui-icon"> </div></div><div class="plupload_file_size">%size% </div><div class="plupload_file_status"><div class="plupload_file_progress ui-widget-header" style="width: 0%"> </div><span class="plupload_file_percent">%percent% </span></div><div class="plupload_file_fields"> </div></li>',n.typeOf(e)!=="array"&&(e=[e]),i.each(e,function(e,i){var o=r.Mime.getFileExtension(i.name)||"none";t.filelist.append(s.replace(/%(\w+)%/g,function(e,t){return"size"===t?n.formatSize(i.size):"ext"===t?o:i[t]||""})),t._handleFileStatus(i)})},_removeFiles:function(e){var t=this,r=this.uploader;n.typeOf(e)!=="array"&&(e=[e]),i.ui.sortable&&this.options.sortable&&i("tbody",t.filelist).sortable("destroy"),i.each(e,function(e,t){i("#"+t.id).toggle("highlight",function(){this.remove()}),r.removeFile(t)}),r.files.length&&this.options.sortable&&i.ui.sortable&&this._enableSortingList(),this._trigger("updatelist",null,{filelist:this.filelist})},_addFormFields:function(){var e=this;i(".plupload_file_fields",this.filelist).html(""),n.each(this.uploader.files,function(t,r){var s="",o=e.id+"_"+r;t.target_name&&(s+='<input type="hidden" name="'+o+'_tmpname" value="'+n.xmlEncode(t.target_name)+'" />'),s+='<input type="hidden" name="'+o+'_name" value="'+n.xmlEncode(t.name)+'" />',s+='<input type="hidden" name="'+o+'_status" value="'+(t.status===n.DONE?"done":"failed")+'" />',i("#"+t.id).find(".plupload_file_fields").html(s)}),this.counter.val(this.uploader.files.length)},_viewChanged:function(e){this.options.views.remember&&i.cookie&&i.cookie("plupload_ui_view",e,{expires:7,path:"/"}),r.Env.browser==="IE"&&r.Env.version<7&&this.content.attr("style",'height:expression(document.getElementById("'+this.id+"_container"+'").clientHeight - '+(e==="list"?133:103)+");"),this.container.removeClass("plupload_view_list plupload_view_thumbs").addClass("plupload_view_"+e),this.view_mode=e,this._trigger("viewchanged",null,{view:e})},_enableViewSwitcher:function(){var e=this,t,r=i(".plupload_view_switch",this.container),s,o;n.each(["list","thumbs"],function(t){e.options.views[t]||r.find('[for="'+e.id+"_view_"+t+'"], #'+e.id+"_view_"+t).remove()}),s=r.find(".plupload_button"),s.length===1?(r.hide(),t=s.eq(0).data("view"),this._viewChanged(t)):i.ui.button&&s.length>1?(this.options.views.remember&&i.cookie&&(t=i.cookie("plupload_ui_view")),~n.inArray(t,["list","thumbs"])||(t=this.options.views.active),r.show().buttonset().find(".ui-button").click(function(n){t=i(this).data("view"),e._viewChanged(t),n.preventDefault()}),o=r.find('[for="'+e.id+"_view_"+t+'"]'),o.length&&o.trigger("click")):(r.show(),this._viewChanged(this.options.views.active)),this.options.views.thumbs&&this._displayThumbs()},_enableRenaming:function(){var e=this;this.filelist.dblclick(function(t){var n=i(t.target),r,s,o,u,a="";if(!n.hasClass("plupload_file_namespan"))return;s=e.uploader.getFile(n.closest(".plupload_file")[0].id),u=s.name,o=/^(.+)(\.[^.]+)$/.exec(u),o&&(u=o[1],a=o[2]),r=i('<input class="plupload_file_rename" type="text" />').width(n.width()).insertAfter(n.hide()),r.val(u).blur(function(){n.show().parent().scrollLeft(0).end().next().remove()}).keydown(function(e){var t=i(this);i.inArray(e.keyCode,[13,27])!==-1&&(e.preventDefault(),e.keyCode===13&&(s.name=t.val()+a,n.html(s.name)),t.blur())})[0].focus()})},_enableSortingList:function(){var e=this;if(i(".plupload_file",this.filelist).length<2)return;i("tbody",this.filelist).sortable("destroy"),this.filelist.sortable({items:".plupload_delete",cancel:"object, .plupload_clearer",stop:function(){var t=[];i.each(i(this).sortable("toArray"),function(n,r){t[t.length]=e.uploader.getFile(r)}),t.unshift(t.length),t.unshift(0),Array.prototype.splice.apply(e.uploader.files,t)}})}})})(window,document,plupload,mOxie,jQuery); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.js new file mode 100755 index 0000000000000000000000000000000000000000..afd0aec44359407b496c5d8c99ad7122d84db33f --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.js @@ -0,0 +1,10684 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.2.0 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2014-01-16 + */ +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + for (var i = 0; i < ids.length; i++) { + var target = exports; + var id = ids[i]; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + } + +// Included from: src/javascript/core/utils/Basic.js + +/** + * Basic.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Basic', [], function() { + /** + Gets the true type of the built-in object (better version of typeof). + @author Angus Croll (http://javascriptweblog.wordpress.com/) + + @method typeOf + @for Utils + @static + @param {Object} o Object to check. + @return {String} Object [[Class]] + */ + var typeOf = function(o) { + var undef; + + if (o === undef) { + return 'undefined'; + } else if (o === null) { + return 'null'; + } else if (o.nodeType) { + return 'node'; + } + + // the snippet below is awesome, however it fails to detect null, undefined and arguments types in IE lte 8 + return ({}).toString.call(o).match(/\s([a-z|A-Z]+)/)[1].toLowerCase(); + }; + + /** + Extends the specified object with another object. + + @method extend + @static + @param {Object} target Object to extend. + @param {Object} [obj]* Multiple objects to extend with. + @return {Object} Same as target, the extended object. + */ + var extend = function(target) { + var undef; + + each(arguments, function(arg, i) { + if (i > 0) { + each(arg, function(value, key) { + if (value !== undef) { + if (typeOf(target[key]) === typeOf(value) && !!~inArray(typeOf(value), ['array', 'object'])) { + extend(target[key], value); + } else { + target[key] = value; + } + } + }); + } + }); + return target; + }; + + /** + Executes the callback function for each item in array/object. If you return false in the + callback it will break the loop. + + @method each + @static + @param {Object} obj Object to iterate. + @param {function} callback Callback function to execute for each item. + */ + var each = function(obj, callback) { + var length, key, i, undef; + + if (obj) { + try { + length = obj.length; + } catch(ex) { + length = undef; + } + + if (length === undef) { + // Loop object items + for (key in obj) { + if (obj.hasOwnProperty(key)) { + if (callback(obj[key], key) === false) { + return; + } + } + } + } else { + // Loop array items + for (i = 0; i < length; i++) { + if (callback(obj[i], i) === false) { + return; + } + } + } + } + }; + + /** + Checks if object is empty. + + @method isEmptyObj + @static + @param {Object} o Object to check. + @return {Boolean} + */ + var isEmptyObj = function(obj) { + var prop; + + if (!obj || typeOf(obj) !== 'object') { + return true; + } + + for (prop in obj) { + return false; + } + + return true; + }; + + /** + Recieve an array of functions (usually async) to call in sequence, each function + receives a callback as first argument that it should call, when it completes. Finally, + after everything is complete, main callback is called. Passing truthy value to the + callback as a first argument will interrupt the sequence and invoke main callback + immediately. + + @method inSeries + @static + @param {Array} queue Array of functions to call in sequence + @param {Function} cb Main callback that is called in the end, or in case of erro + */ + var inSeries = function(queue, cb) { + var i = 0, length = queue.length; + + if (typeOf(cb) !== 'function') { + cb = function() {}; + } + + if (!queue || !queue.length) { + cb(); + } + + function callNext(i) { + if (typeOf(queue[i]) === 'function') { + queue[i](function(error) { + /*jshint expr:true */ + ++i < length && !error ? callNext(i) : cb(error); + }); + } + } + callNext(i); + }; + + + /** + Recieve an array of functions (usually async) to call in parallel, each function + receives a callback as first argument that it should call, when it completes. After + everything is complete, main callback is called. Passing truthy value to the + callback as a first argument will interrupt the process and invoke main callback + immediately. + + @method inParallel + @static + @param {Array} queue Array of functions to call in sequence + @param {Function} cb Main callback that is called in the end, or in case of erro + */ + var inParallel = function(queue, cb) { + var count = 0, num = queue.length, cbArgs = new Array(num); + + each(queue, function(fn, i) { + fn(function(error) { + if (error) { + return cb(error); + } + + var args = [].slice.call(arguments); + args.shift(); // strip error - undefined or not + + cbArgs[i] = args; + count++; + + if (count === num) { + cbArgs.unshift(null); + cb.apply(this, cbArgs); + } + }); + }); + }; + + + /** + Find an element in array and return it's index if present, otherwise return -1. + + @method inArray + @static + @param {Mixed} needle Element to find + @param {Array} array + @return {Int} Index of the element, or -1 if not found + */ + var inArray = function(needle, array) { + if (array) { + if (Array.prototype.indexOf) { + return Array.prototype.indexOf.call(array, needle); + } + + for (var i = 0, length = array.length; i < length; i++) { + if (array[i] === needle) { + return i; + } + } + } + return -1; + }; + + + /** + Returns elements of first array if they are not present in second. And false - otherwise. + + @private + @method arrayDiff + @param {Array} needles + @param {Array} array + @return {Array|Boolean} + */ + var arrayDiff = function(needles, array) { + var diff = []; + + if (typeOf(needles) !== 'array') { + needles = [needles]; + } + + if (typeOf(array) !== 'array') { + array = [array]; + } + + for (var i in needles) { + if (inArray(needles[i], array) === -1) { + diff.push(needles[i]); + } + } + return diff.length ? diff : false; + }; + + + /** + Find intersection of two arrays. + + @private + @method arrayIntersect + @param {Array} array1 + @param {Array} array2 + @return {Array} Intersection of two arrays or null if there is none + */ + var arrayIntersect = function(array1, array2) { + var result = []; + each(array1, function(item) { + if (inArray(item, array2) !== -1) { + result.push(item); + } + }); + return result.length ? result : null; + }; + + + /** + Forces anything into an array. + + @method toArray + @static + @param {Object} obj Object with length field. + @return {Array} Array object containing all items. + */ + var toArray = function(obj) { + var i, arr = []; + + for (i = 0; i < obj.length; i++) { + arr[i] = obj[i]; + } + + return arr; + }; + + + /** + Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers. + The only way a user would be able to get the same ID is if the two persons at the same exact milisecond manages + to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique. + It's more probable for the earth to be hit with an ansteriod. Y + + @method guid + @static + @param {String} prefix to prepend (by default 'o' will be prepended). + @method guid + @return {String} Virtually unique id. + */ + var guid = (function() { + var counter = 0; + + return function(prefix) { + var guid = new Date().getTime().toString(32), i; + + for (i = 0; i < 5; i++) { + guid += Math.floor(Math.random() * 65535).toString(32); + } + + return (prefix || 'o_') + guid + (counter++).toString(32); + }; + }()); + + + /** + Trims white spaces around the string + + @method trim + @static + @param {String} str + @return {String} + */ + var trim = function(str) { + if (!str) { + return str; + } + return String.prototype.trim ? String.prototype.trim.call(str) : str.toString().replace(/^\s*/, '').replace(/\s*$/, ''); + }; + + + /** + Parses the specified size string into a byte value. For example 10kb becomes 10240. + + @method parseSizeStr + @static + @param {String/Number} size String to parse or number to just pass through. + @return {Number} Size in bytes. + */ + var parseSizeStr = function(size) { + if (typeof(size) !== 'string') { + return size; + } + + var muls = { + t: 1099511627776, + g: 1073741824, + m: 1048576, + k: 1024 + }, + mul; + + size = /^([0-9]+)([mgk]?)$/.exec(size.toLowerCase().replace(/[^0-9mkg]/g, '')); + mul = size[2]; + size = +size[1]; + + if (muls.hasOwnProperty(mul)) { + size *= muls[mul]; + } + return size; + }; + + + return { + guid: guid, + typeOf: typeOf, + extend: extend, + each: each, + isEmptyObj: isEmptyObj, + inSeries: inSeries, + inParallel: inParallel, + inArray: inArray, + arrayDiff: arrayDiff, + arrayIntersect: arrayIntersect, + toArray: toArray, + trim: trim, + parseSizeStr: parseSizeStr + }; +}); + +// Included from: src/javascript/core/I18n.js + +/** + * I18n.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/I18n", [ + "moxie/core/utils/Basic" +], function(Basic) { + var i18n = {}; + + return { + /** + * Extends the language pack object with new items. + * + * @param {Object} pack Language pack items to add. + * @return {Object} Extended language pack object. + */ + addI18n: function(pack) { + return Basic.extend(i18n, pack); + }, + + /** + * Translates the specified string by checking for the english string in the language pack lookup. + * + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + translate: function(str) { + return i18n[str] || str; + }, + + /** + * Shortcut for translate function + * + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + _: function(str) { + return this.translate(str); + }, + + /** + * Pseudo sprintf implementation - simple way to replace tokens with specified values. + * + * @param {String} str String with tokens + * @return {String} String with replaced tokens + */ + sprintf: function(str) { + var args = [].slice.call(arguments, 1); + + return str.replace(/%[a-z]/g, function() { + var value = args.shift(); + return Basic.typeOf(value) !== 'undefined' ? value : ''; + }); + } + }; +}); + +// Included from: src/javascript/core/utils/Mime.js + +/** + * Mime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/utils/Mime", [ + "moxie/core/utils/Basic", + "moxie/core/I18n" +], function(Basic, I18n) { + + var mimeData = "" + + "application/msword,doc dot," + + "application/pdf,pdf," + + "application/pgp-signature,pgp," + + "application/postscript,ps ai eps," + + "application/rtf,rtf," + + "application/vnd.ms-excel,xls xlb," + + "application/vnd.ms-powerpoint,ppt pps pot," + + "application/zip,zip," + + "application/x-shockwave-flash,swf swfl," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx," + + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx," + + "application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx," + + "application/vnd.openxmlformats-officedocument.presentationml.template,potx," + + "application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx," + + "application/x-javascript,js," + + "application/json,json," + + "audio/mpeg,mp3 mpga mpega mp2," + + "audio/x-wav,wav," + + "audio/x-m4a,m4a," + + "audio/ogg,oga ogg," + + "audio/aiff,aiff aif," + + "audio/flac,flac," + + "audio/aac,aac," + + "audio/ac3,ac3," + + "audio/x-ms-wma,wma," + + "image/bmp,bmp," + + "image/gif,gif," + + "image/jpeg,jpg jpeg jpe," + + "image/photoshop,psd," + + "image/png,png," + + "image/svg+xml,svg svgz," + + "image/tiff,tiff tif," + + "text/plain,asc txt text diff log," + + "text/html,htm html xhtml," + + "text/css,css," + + "text/csv,csv," + + "text/rtf,rtf," + + "video/mpeg,mpeg mpg mpe m2v," + + "video/quicktime,qt mov," + + "video/mp4,mp4," + + "video/x-m4v,m4v," + + "video/x-flv,flv," + + "video/x-ms-wmv,wmv," + + "video/avi,avi," + + "video/webm,webm," + + "video/3gpp,3gpp 3gp," + + "video/3gpp2,3g2," + + "video/vnd.rn-realvideo,rv," + + "video/ogg,ogv," + + "video/x-matroska,mkv," + + "application/vnd.oasis.opendocument.formula-template,otf," + + "application/octet-stream,exe"; + + + var Mime = { + + mimes: {}, + + extensions: {}, + + // Parses the default mime types string into a mimes and extensions lookup maps + addMimeType: function (mimeData) { + var items = mimeData.split(/,/), i, ii, ext; + + for (i = 0; i < items.length; i += 2) { + ext = items[i + 1].split(/ /); + + // extension to mime lookup + for (ii = 0; ii < ext.length; ii++) { + this.mimes[ext[ii]] = items[i]; + } + // mime to extension lookup + this.extensions[items[i]] = ext; + } + }, + + + extList2mimes: function (filters, addMissingExtensions) { + var self = this, ext, i, ii, type, mimes = []; + + // convert extensions to mime types list + for (i = 0; i < filters.length; i++) { + ext = filters[i].extensions.split(/\s*,\s*/); + + for (ii = 0; ii < ext.length; ii++) { + + // if there's an asterisk in the list, then accept attribute is not required + if (ext[ii] === '*') { + return []; + } + + type = self.mimes[ext[ii]]; + if (!type) { + if (addMissingExtensions && /^\w+$/.test(ext[ii])) { + mimes.push('.' + ext[ii]); + } else { + return []; // accept all + } + } else if (Basic.inArray(type, mimes) === -1) { + mimes.push(type); + } + } + } + return mimes; + }, + + + mimes2exts: function(mimes) { + var self = this, exts = []; + + Basic.each(mimes, function(mime) { + if (mime === '*') { + exts = []; + return false; + } + + // check if this thing looks like mime type + var m = mime.match(/^(\w+)\/(\*|\w+)$/); + if (m) { + if (m[2] === '*') { + // wildcard mime type detected + Basic.each(self.extensions, function(arr, mime) { + if ((new RegExp('^' + m[1] + '/')).test(mime)) { + [].push.apply(exts, self.extensions[mime]); + } + }); + } else if (self.extensions[mime]) { + [].push.apply(exts, self.extensions[mime]); + } + } + }); + return exts; + }, + + + mimes2extList: function(mimes) { + var accept = [], exts = []; + + if (Basic.typeOf(mimes) === 'string') { + mimes = Basic.trim(mimes).split(/\s*,\s*/); + } + + exts = this.mimes2exts(mimes); + + accept.push({ + title: I18n.translate('Files'), + extensions: exts.length ? exts.join(',') : '*' + }); + + // save original mimes string + accept.mimes = mimes; + + return accept; + }, + + + getFileExtension: function(fileName) { + var matches = fileName && fileName.match(/\.([^.]+)$/); + if (matches) { + return matches[1].toLowerCase(); + } + return ''; + }, + + getFileMime: function(fileName) { + return this.mimes[this.getFileExtension(fileName)] || ''; + } + }; + + Mime.addMimeType(mimeData); + + return Mime; +}); + +// Included from: src/javascript/core/utils/Env.js + +/** + * Env.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/utils/Env", [ + "moxie/core/utils/Basic" +], function(Basic) { + + // UAParser.js v0.6.2 + // Lightweight JavaScript-based User-Agent string parser + // https://github.com/faisalman/ua-parser-js + // + // Copyright © 2012-2013 Faisalman <fyzlman@gmail.com> + // Dual licensed under GPLv2 & MIT + + var UAParser = (function (undefined) { + + ////////////// + // Constants + ///////////// + + + var EMPTY = '', + UNKNOWN = '?', + FUNC_TYPE = 'function', + UNDEF_TYPE = 'undefined', + OBJ_TYPE = 'object', + MAJOR = 'major', + MODEL = 'model', + NAME = 'name', + TYPE = 'type', + VENDOR = 'vendor', + VERSION = 'version', + ARCHITECTURE= 'architecture', + CONSOLE = 'console', + MOBILE = 'mobile', + TABLET = 'tablet'; + + + /////////// + // Helper + ////////// + + + var util = { + has : function (str1, str2) { + return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1; + }, + lowerize : function (str) { + return str.toLowerCase(); + } + }; + + + /////////////// + // Map helper + ////////////// + + + var mapper = { + + rgx : function () { + + // loop through all regexes maps + for (var result, i = 0, j, k, p, q, matches, match, args = arguments; i < args.length; i += 2) { + + var regex = args[i], // even sequence (0,2,4,..) + props = args[i + 1]; // odd sequence (1,3,5,..) + + // construct object barebones + if (typeof(result) === UNDEF_TYPE) { + result = {}; + for (p in props) { + q = props[p]; + if (typeof(q) === OBJ_TYPE) { + result[q[0]] = undefined; + } else { + result[q] = undefined; + } + } + } + + // try matching uastring with regexes + for (j = k = 0; j < regex.length; j++) { + matches = regex[j].exec(this.getUA()); + if (!!matches) { + for (p = 0; p < props.length; p++) { + match = matches[++k]; + q = props[p]; + // check if given property is actually array + if (typeof(q) === OBJ_TYPE && q.length > 0) { + if (q.length == 2) { + if (typeof(q[1]) == FUNC_TYPE) { + // assign modified match + result[q[0]] = q[1].call(this, match); + } else { + // assign given value, ignore regex match + result[q[0]] = q[1]; + } + } else if (q.length == 3) { + // check whether function or regex + if (typeof(q[1]) === FUNC_TYPE && !(q[1].exec && q[1].test)) { + // call function (usually string mapper) + result[q[0]] = match ? q[1].call(this, match, q[2]) : undefined; + } else { + // sanitize match using given regex + result[q[0]] = match ? match.replace(q[1], q[2]) : undefined; + } + } else if (q.length == 4) { + result[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined; + } + } else { + result[q] = match ? match : undefined; + } + } + break; + } + } + + if(!!matches) break; // break the loop immediately if match found + } + return result; + }, + + str : function (str, map) { + + for (var i in map) { + // check if array + if (typeof(map[i]) === OBJ_TYPE && map[i].length > 0) { + for (var j = 0; j < map[i].length; j++) { + if (util.has(map[i][j], str)) { + return (i === UNKNOWN) ? undefined : i; + } + } + } else if (util.has(map[i], str)) { + return (i === UNKNOWN) ? undefined : i; + } + } + return str; + } + }; + + + /////////////// + // String map + ////////////// + + + var maps = { + + browser : { + oldsafari : { + major : { + '1' : ['/8', '/1', '/3'], + '2' : '/4', + '?' : '/' + }, + version : { + '1.0' : '/8', + '1.2' : '/1', + '1.3' : '/3', + '2.0' : '/412', + '2.0.2' : '/416', + '2.0.3' : '/417', + '2.0.4' : '/419', + '?' : '/' + } + } + }, + + device : { + sprint : { + model : { + 'Evo Shift 4G' : '7373KT' + }, + vendor : { + 'HTC' : 'APA', + 'Sprint' : 'Sprint' + } + } + }, + + os : { + windows : { + version : { + 'ME' : '4.90', + 'NT 3.11' : 'NT3.51', + 'NT 4.0' : 'NT4.0', + '2000' : 'NT 5.0', + 'XP' : ['NT 5.1', 'NT 5.2'], + 'Vista' : 'NT 6.0', + '7' : 'NT 6.1', + '8' : 'NT 6.2', + '8.1' : 'NT 6.3', + 'RT' : 'ARM' + } + } + } + }; + + + ////////////// + // Regex map + ///////////// + + + var regexes = { + + browser : [[ + + // Presto based + /(opera\smini)\/((\d+)?[\w\.-]+)/i, // Opera Mini + /(opera\s[mobiletab]+).+version\/((\d+)?[\w\.-]+)/i, // Opera Mobi/Tablet + /(opera).+version\/((\d+)?[\w\.]+)/i, // Opera > 9.80 + /(opera)[\/\s]+((\d+)?[\w\.]+)/i // Opera < 9.80 + + ], [NAME, VERSION, MAJOR], [ + + /\s(opr)\/((\d+)?[\w\.]+)/i // Opera Webkit + ], [[NAME, 'Opera'], VERSION, MAJOR], [ + + // Mixed + /(kindle)\/((\d+)?[\w\.]+)/i, // Kindle + /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?((\d+)?[\w\.]+)*/i, + // Lunascape/Maxthon/Netfront/Jasmine/Blazer + + // Trident based + /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?((\d+)?[\w\.]*)/i, + // Avant/IEMobile/SlimBrowser/Baidu + /(?:ms|\()(ie)\s((\d+)?[\w\.]+)/i, // Internet Explorer + + // Webkit/KHTML based + /(rekonq)((?:\/)[\w\.]+)*/i, // Rekonq + /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron)\/((\d+)?[\w\.-]+)/i + // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron + ], [NAME, VERSION, MAJOR], [ + + /(trident).+rv[:\s]((\d+)?[\w\.]+).+like\sgecko/i // IE11 + ], [[NAME, 'IE'], VERSION, MAJOR], [ + + /(yabrowser)\/((\d+)?[\w\.]+)/i // Yandex + ], [[NAME, 'Yandex'], VERSION, MAJOR], [ + + /(comodo_dragon)\/((\d+)?[\w\.]+)/i // Comodo Dragon + ], [[NAME, /_/g, ' '], VERSION, MAJOR], [ + + /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i + // Chrome/OmniWeb/Arora/Tizen/Nokia + ], [NAME, VERSION, MAJOR], [ + + /(dolfin)\/((\d+)?[\w\.]+)/i // Dolphin + ], [[NAME, 'Dolphin'], VERSION, MAJOR], [ + + /((?:android.+)crmo|crios)\/((\d+)?[\w\.]+)/i // Chrome for Android/iOS + ], [[NAME, 'Chrome'], VERSION, MAJOR], [ + + /((?:android.+))version\/((\d+)?[\w\.]+)\smobile\ssafari/i // Android Browser + ], [[NAME, 'Android Browser'], VERSION, MAJOR], [ + + /version\/((\d+)?[\w\.]+).+?mobile\/\w+\s(safari)/i // Mobile Safari + ], [VERSION, MAJOR, [NAME, 'Mobile Safari']], [ + + /version\/((\d+)?[\w\.]+).+?(mobile\s?safari|safari)/i // Safari & Safari Mobile + ], [VERSION, MAJOR, NAME], [ + + /webkit.+?(mobile\s?safari|safari)((\/[\w\.]+))/i // Safari < 3.0 + ], [NAME, [MAJOR, mapper.str, maps.browser.oldsafari.major], [VERSION, mapper.str, maps.browser.oldsafari.version]], [ + + /(konqueror)\/((\d+)?[\w\.]+)/i, // Konqueror + /(webkit|khtml)\/((\d+)?[\w\.]+)/i + ], [NAME, VERSION, MAJOR], [ + + // Gecko based + /(navigator|netscape)\/((\d+)?[\w\.-]+)/i // Netscape + ], [[NAME, 'Netscape'], VERSION, MAJOR], [ + /(swiftfox)/i, // Swiftfox + /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?((\d+)?[\w\.\+]+)/i, + // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror + /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.-]+)/i, + // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix + /(mozilla)\/((\d+)?[\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla + + // Other + /(uc\s?browser|polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|qqbrowser)[\/\s]?((\d+)?[\w\.]+)/i, + // UCBrowser/Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/QQBrowser + /(links)\s\(((\d+)?[\w\.]+)/i, // Links + /(gobrowser)\/?((\d+)?[\w\.]+)*/i, // GoBrowser + /(ice\s?browser)\/v?((\d+)?[\w\._]+)/i, // ICE Browser + /(mosaic)[\/\s]((\d+)?[\w\.]+)/i // Mosaic + ], [NAME, VERSION, MAJOR] + ], + + engine : [[ + + /(presto)\/([\w\.]+)/i, // Presto + /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m + /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links + /(icab)[\/\s]([23]\.[\d\.]+)/i // iCab + ], [NAME, VERSION], [ + + /rv\:([\w\.]+).*(gecko)/i // Gecko + ], [VERSION, NAME] + ], + + os : [[ + + // Windows based + /(windows)\snt\s6\.2;\s(arm)/i, // Windows RT + /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i + ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [ + /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i + ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [ + + // Mobile/Embedded OS + /\((bb)(10);/i // BlackBerry 10 + ], [[NAME, 'BlackBerry'], VERSION], [ + /(blackberry)\w*\/?([\w\.]+)*/i, // Blackberry + /(tizen)\/([\w\.]+)/i, // Tizen + /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego)[\/\s-]?([\w\.]+)*/i + // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo + ], [NAME, VERSION], [ + /(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i // Symbian + ], [[NAME, 'Symbian'], VERSION],[ + /mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS + ], [[NAME, 'Firefox OS'], VERSION], [ + + // Console + /(nintendo|playstation)\s([wids3portablevu]+)/i, // Nintendo/Playstation + + // GNU/Linux based + /(mint)[\/\s\(]?(\w+)*/i, // Mint + /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk)[\/\s-]?([\w\.-]+)*/i, + // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware + // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk + /(hurd|linux)\s?([\w\.]+)*/i, // Hurd/Linux + /(gnu)\s?([\w\.]+)*/i // GNU + ], [NAME, VERSION], [ + + /(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS + ], [[NAME, 'Chromium OS'], VERSION],[ + + // Solaris + /(sunos)\s?([\w\.]+\d)*/i // Solaris + ], [[NAME, 'Solaris'], VERSION], [ + + // BSD based + /\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly + ], [NAME, VERSION],[ + + /(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i // iOS + ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [ + + /(mac\sos\sx)\s?([\w\s\.]+\w)*/i // Mac OS + ], [NAME, [VERSION, /_/g, '.']], [ + + // Other + /(haiku)\s(\w+)/i, // Haiku + /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, // AIX + /(macintosh|mac(?=_powerpc)|plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos)/i, + // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS + /(unix)\s?([\w\.]+)*/i // UNIX + ], [NAME, VERSION] + ] + }; + + + ///////////////// + // Constructor + //////////////// + + + var UAParser = function (uastring) { + + var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY); + + this.getBrowser = function () { + return mapper.rgx.apply(this, regexes.browser); + }; + this.getEngine = function () { + return mapper.rgx.apply(this, regexes.engine); + }; + this.getOS = function () { + return mapper.rgx.apply(this, regexes.os); + }; + this.getResult = function() { + return { + ua : this.getUA(), + browser : this.getBrowser(), + engine : this.getEngine(), + os : this.getOS() + }; + }; + this.getUA = function () { + return ua; + }; + this.setUA = function (uastring) { + ua = uastring; + return this; + }; + this.setUA(ua); + }; + + return new UAParser().getResult(); + })(); + + + function version_compare(v1, v2, operator) { + // From: http://phpjs.org/functions + // + original by: Philippe Jausions (http://pear.php.net/user/jausions) + // + original by: Aidan Lister (http://aidanlister.com/) + // + reimplemented by: Kankrelune (http://www.webfaktory.info/) + // + improved by: Brett Zamir (http://brett-zamir.me) + // + improved by: Scott Baker + // + improved by: Theriault + // * example 1: version_compare('8.2.5rc', '8.2.5a'); + // * returns 1: 1 + // * example 2: version_compare('8.2.50', '8.2.52', '<'); + // * returns 2: true + // * example 3: version_compare('5.3.0-dev', '5.3.0'); + // * returns 3: -1 + // * example 4: version_compare('4.1.0.52','4.01.0.51'); + // * returns 4: 1 + + // Important: compare must be initialized at 0. + var i = 0, + x = 0, + compare = 0, + // vm maps textual PHP versions to negatives so they're less than 0. + // PHP currently defines these as CASE-SENSITIVE. It is important to + // leave these as negatives so that they can come before numerical versions + // and as if no letters were there to begin with. + // (1alpha is < 1 and < 1.1 but > 1dev1) + // If a non-numerical value can't be mapped to this table, it receives + // -7 as its value. + vm = { + 'dev': -6, + 'alpha': -5, + 'a': -5, + 'beta': -4, + 'b': -4, + 'RC': -3, + 'rc': -3, + '#': -2, + 'p': 1, + 'pl': 1 + }, + // This function will be called to prepare each version argument. + // It replaces every _, -, and + with a dot. + // It surrounds any nonsequence of numbers/dots with dots. + // It replaces sequences of dots with a single dot. + // version_compare('4..0', '4.0') == 0 + // Important: A string of 0 length needs to be converted into a value + // even less than an unexisting value in vm (-7), hence [-8]. + // It's also important to not strip spaces because of this. + // version_compare('', ' ') == 1 + prepVersion = function (v) { + v = ('' + v).replace(/[_\-+]/g, '.'); + v = v.replace(/([^.\d]+)/g, '.$1.').replace(/\.{2,}/g, '.'); + return (!v.length ? [-8] : v.split('.')); + }, + // This converts a version component to a number. + // Empty component becomes 0. + // Non-numerical component becomes a negative number. + // Numerical component becomes itself as an integer. + numVersion = function (v) { + return !v ? 0 : (isNaN(v) ? vm[v] || -7 : parseInt(v, 10)); + }; + + v1 = prepVersion(v1); + v2 = prepVersion(v2); + x = Math.max(v1.length, v2.length); + for (i = 0; i < x; i++) { + if (v1[i] == v2[i]) { + continue; + } + v1[i] = numVersion(v1[i]); + v2[i] = numVersion(v2[i]); + if (v1[i] < v2[i]) { + compare = -1; + break; + } else if (v1[i] > v2[i]) { + compare = 1; + break; + } + } + if (!operator) { + return compare; + } + + // Important: operator is CASE-SENSITIVE. + // "No operator" seems to be treated as "<." + // Any other values seem to make the function return null. + switch (operator) { + case '>': + case 'gt': + return (compare > 0); + case '>=': + case 'ge': + return (compare >= 0); + case '<=': + case 'le': + return (compare <= 0); + case '==': + case '=': + case 'eq': + return (compare === 0); + case '<>': + case '!=': + case 'ne': + return (compare !== 0); + case '': + case '<': + case 'lt': + return (compare < 0); + default: + return null; + } + } + + + var can = (function() { + var caps = { + define_property: (function() { + /* // currently too much extra code required, not exactly worth it + try { // as of IE8, getters/setters are supported only on DOM elements + var obj = {}; + if (Object.defineProperty) { + Object.defineProperty(obj, 'prop', { + enumerable: true, + configurable: true + }); + return true; + } + } catch(ex) {} + + if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) { + return true; + }*/ + return false; + }()), + + create_canvas: (function() { + // On the S60 and BB Storm, getContext exists, but always returns undefined + // so we actually have to call getContext() to verify + // github.com/Modernizr/Modernizr/issues/issue/97/ + var el = document.createElement('canvas'); + return !!(el.getContext && el.getContext('2d')); + }()), + + return_response_type: function(responseType) { + try { + if (Basic.inArray(responseType, ['', 'text', 'document']) !== -1) { + return true; + } else if (window.XMLHttpRequest) { + var xhr = new XMLHttpRequest(); + xhr.open('get', '/'); // otherwise Gecko throws an exception + if ('responseType' in xhr) { + xhr.responseType = responseType; + // as of 23.0.1271.64, Chrome switched from throwing exception to merely logging it to the console (why? o why?) + if (xhr.responseType !== responseType) { + return false; + } + return true; + } + } + } catch (ex) {} + return false; + }, + + // ideas for this heavily come from Modernizr (http://modernizr.com/) + use_data_uri: (function() { + var du = new Image(); + + du.onload = function() { + caps.use_data_uri = (du.width === 1 && du.height === 1); + }; + + setTimeout(function() { + du.src = "data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="; + }, 1); + return false; + }()), + + use_data_uri_over32kb: function() { // IE8 + return caps.use_data_uri && (Env.browser !== 'IE' || Env.version >= 9); + }, + + use_data_uri_of: function(bytes) { + return (caps.use_data_uri && bytes < 33000 || caps.use_data_uri_over32kb()); + }, + + use_fileinput: function() { + var el = document.createElement('input'); + el.setAttribute('type', 'file'); + return !el.disabled; + } + }; + + return function(cap) { + var args = [].slice.call(arguments); + args.shift(); // shift of cap + return Basic.typeOf(caps[cap]) === 'function' ? caps[cap].apply(this, args) : !!caps[cap]; + }; + }()); + + + var Env = { + can: can, + + browser: UAParser.browser.name, + version: parseFloat(UAParser.browser.major), + os: UAParser.os.name, // everybody intuitively types it in a lowercase for some reason + osVersion: UAParser.os.version, + + verComp: version_compare, + + swf_url: "../flash/Moxie.swf", + xap_url: "../silverlight/Moxie.xap", + global_event_dispatcher: "moxie.core.EventTarget.instance.dispatchEvent" + }; + + // for backward compatibility + // @deprecated Use `Env.os` instead + Env.OS = Env.os; + + return Env; +}); + +// Included from: src/javascript/core/utils/Dom.js + +/** + * Dom.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Dom', ['moxie/core/utils/Env'], function(Env) { + + /** + Get DOM Element by it's id. + + @method get + @for Utils + @param {String} id Identifier of the DOM Element + @return {DOMElement} + */ + var get = function(id) { + if (typeof id !== 'string') { + return id; + } + return document.getElementById(id); + }; + + /** + Checks if specified DOM element has specified class. + + @method hasClass + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Class name + */ + var hasClass = function(obj, name) { + if (!obj.className) { + return false; + } + + var regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)"); + return regExp.test(obj.className); + }; + + /** + Adds specified className to specified DOM element. + + @method addClass + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Class name + */ + var addClass = function(obj, name) { + if (!hasClass(obj, name)) { + obj.className = !obj.className ? name : obj.className.replace(/\s+$/, '') + ' ' + name; + } + }; + + /** + Removes specified className from specified DOM element. + + @method removeClass + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Class name + */ + var removeClass = function(obj, name) { + if (obj.className) { + var regExp = new RegExp("(^|\\s+)"+name+"(\\s+|$)"); + obj.className = obj.className.replace(regExp, function($0, $1, $2) { + return $1 === ' ' && $2 === ' ' ? ' ' : ''; + }); + } + }; + + /** + Returns a given computed style of a DOM element. + + @method getStyle + @static + @param {Object} obj DOM element like object. + @param {String} name Style you want to get from the DOM element + */ + var getStyle = function(obj, name) { + if (obj.currentStyle) { + return obj.currentStyle[name]; + } else if (window.getComputedStyle) { + return window.getComputedStyle(obj, null)[name]; + } + }; + + + /** + Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields. + + @method getPos + @static + @param {Element} node HTML element or element id to get x, y position from. + @param {Element} root Optional root element to stop calculations at. + @return {object} Absolute position of the specified element object with x, y fields. + */ + var getPos = function(node, root) { + var x = 0, y = 0, parent, doc = document, nodeRect, rootRect; + + node = node; + root = root || doc.body; + + // Returns the x, y cordinate for an element on IE 6 and IE 7 + function getIEPos(node) { + var bodyElm, rect, x = 0, y = 0; + + if (node) { + rect = node.getBoundingClientRect(); + bodyElm = doc.compatMode === "CSS1Compat" ? doc.documentElement : doc.body; + x = rect.left + bodyElm.scrollLeft; + y = rect.top + bodyElm.scrollTop; + } + + return { + x : x, + y : y + }; + } + + // Use getBoundingClientRect on IE 6 and IE 7 but not on IE 8 in standards mode + if (node && node.getBoundingClientRect && Env.browser === 'IE' && (!doc.documentMode || doc.documentMode < 8)) { + nodeRect = getIEPos(node); + rootRect = getIEPos(root); + + return { + x : nodeRect.x - rootRect.x, + y : nodeRect.y - rootRect.y + }; + } + + parent = node; + while (parent && parent != root && parent.nodeType) { + x += parent.offsetLeft || 0; + y += parent.offsetTop || 0; + parent = parent.offsetParent; + } + + parent = node.parentNode; + while (parent && parent != root && parent.nodeType) { + x -= parent.scrollLeft || 0; + y -= parent.scrollTop || 0; + parent = parent.parentNode; + } + + return { + x : x, + y : y + }; + }; + + /** + Returns the size of the specified node in pixels. + + @method getSize + @static + @param {Node} node Node to get the size of. + @return {Object} Object with a w and h property. + */ + var getSize = function(node) { + return { + w : node.offsetWidth || node.clientWidth, + h : node.offsetHeight || node.clientHeight + }; + }; + + return { + get: get, + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + getStyle: getStyle, + getPos: getPos, + getSize: getSize + }; +}); + +// Included from: src/javascript/core/Exceptions.js + +/** + * Exceptions.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/Exceptions', [ + 'moxie/core/utils/Basic' +], function(Basic) { + function _findKey(obj, value) { + var key; + for (key in obj) { + if (obj[key] === value) { + return key; + } + } + return null; + } + + return { + RuntimeError: (function() { + var namecodes = { + NOT_INIT_ERR: 1, + NOT_SUPPORTED_ERR: 9, + JS_ERR: 4 + }; + + function RuntimeError(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": RuntimeError " + this.code; + } + + Basic.extend(RuntimeError, namecodes); + RuntimeError.prototype = Error.prototype; + return RuntimeError; + }()), + + OperationNotAllowedException: (function() { + + function OperationNotAllowedException(code) { + this.code = code; + this.name = 'OperationNotAllowedException'; + } + + Basic.extend(OperationNotAllowedException, { + NOT_ALLOWED_ERR: 1 + }); + + OperationNotAllowedException.prototype = Error.prototype; + + return OperationNotAllowedException; + }()), + + ImageError: (function() { + var namecodes = { + WRONG_FORMAT: 1, + MAX_RESOLUTION_ERR: 2 + }; + + function ImageError(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": ImageError " + this.code; + } + + Basic.extend(ImageError, namecodes); + ImageError.prototype = Error.prototype; + + return ImageError; + }()), + + FileException: (function() { + var namecodes = { + NOT_FOUND_ERR: 1, + SECURITY_ERR: 2, + ABORT_ERR: 3, + NOT_READABLE_ERR: 4, + ENCODING_ERR: 5, + NO_MODIFICATION_ALLOWED_ERR: 6, + INVALID_STATE_ERR: 7, + SYNTAX_ERR: 8 + }; + + function FileException(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": FileException " + this.code; + } + + Basic.extend(FileException, namecodes); + FileException.prototype = Error.prototype; + return FileException; + }()), + + DOMException: (function() { + var namecodes = { + INDEX_SIZE_ERR: 1, + DOMSTRING_SIZE_ERR: 2, + HIERARCHY_REQUEST_ERR: 3, + WRONG_DOCUMENT_ERR: 4, + INVALID_CHARACTER_ERR: 5, + NO_DATA_ALLOWED_ERR: 6, + NO_MODIFICATION_ALLOWED_ERR: 7, + NOT_FOUND_ERR: 8, + NOT_SUPPORTED_ERR: 9, + INUSE_ATTRIBUTE_ERR: 10, + INVALID_STATE_ERR: 11, + SYNTAX_ERR: 12, + INVALID_MODIFICATION_ERR: 13, + NAMESPACE_ERR: 14, + INVALID_ACCESS_ERR: 15, + VALIDATION_ERR: 16, + TYPE_MISMATCH_ERR: 17, + SECURITY_ERR: 18, + NETWORK_ERR: 19, + ABORT_ERR: 20, + URL_MISMATCH_ERR: 21, + QUOTA_EXCEEDED_ERR: 22, + TIMEOUT_ERR: 23, + INVALID_NODE_TYPE_ERR: 24, + DATA_CLONE_ERR: 25 + }; + + function DOMException(code) { + this.code = code; + this.name = _findKey(namecodes, code); + this.message = this.name + ": DOMException " + this.code; + } + + Basic.extend(DOMException, namecodes); + DOMException.prototype = Error.prototype; + return DOMException; + }()), + + EventException: (function() { + function EventException(code) { + this.code = code; + this.name = 'EventException'; + } + + Basic.extend(EventException, { + UNSPECIFIED_EVENT_TYPE_ERR: 0 + }); + + EventException.prototype = Error.prototype; + + return EventException; + }()) + }; +}); + +// Included from: src/javascript/core/EventTarget.js + +/** + * EventTarget.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/EventTarget', [ + 'moxie/core/Exceptions', + 'moxie/core/utils/Basic' +], function(x, Basic) { + /** + Parent object for all event dispatching components and objects + + @class EventTarget + @constructor EventTarget + */ + function EventTarget() { + // hash of event listeners by object uid + var eventpool = {}; + + Basic.extend(this, { + + /** + Unique id of the event dispatcher, usually overriden by children + + @property uid + @type String + */ + uid: null, + + /** + Can be called from within a child in order to acquire uniqie id in automated manner + + @method init + */ + init: function() { + if (!this.uid) { + this.uid = Basic.guid('uid_'); + } + }, + + /** + Register a handler to a specific event dispatched by the object + + @method addEventListener + @param {String} type Type or basically a name of the event to subscribe to + @param {Function} fn Callback function that will be called when event happens + @param {Number} [priority=0] Priority of the event handler - handlers with higher priorities will be called first + @param {Object} [scope=this] A scope to invoke event handler in + */ + addEventListener: function(type, fn, priority, scope) { + var self = this, list; + + type = Basic.trim(type); + + if (/\s/.test(type)) { + // multiple event types were passed for one handler + Basic.each(type.split(/\s+/), function(type) { + self.addEventListener(type, fn, priority, scope); + }); + return; + } + + type = type.toLowerCase(); + priority = parseInt(priority, 10) || 0; + + list = eventpool[this.uid] && eventpool[this.uid][type] || []; + list.push({fn : fn, priority : priority, scope : scope || this}); + + if (!eventpool[this.uid]) { + eventpool[this.uid] = {}; + } + eventpool[this.uid][type] = list; + }, + + /** + Check if any handlers were registered to the specified event + + @method hasEventListener + @param {String} type Type or basically a name of the event to check + @return {Mixed} Returns a handler if it was found and false, if - not + */ + hasEventListener: function(type) { + return type ? !!(eventpool[this.uid] && eventpool[this.uid][type]) : !!eventpool[this.uid]; + }, + + /** + Unregister the handler from the event, or if former was not specified - unregister all handlers + + @method removeEventListener + @param {String} type Type or basically a name of the event + @param {Function} [fn] Handler to unregister + */ + removeEventListener: function(type, fn) { + type = type.toLowerCase(); + + var list = eventpool[this.uid] && eventpool[this.uid][type], i; + + if (list) { + if (fn) { + for (i = list.length - 1; i >= 0; i--) { + if (list[i].fn === fn) { + list.splice(i, 1); + break; + } + } + } else { + list = []; + } + + // delete event list if it has become empty + if (!list.length) { + delete eventpool[this.uid][type]; + + // and object specific entry in a hash if it has no more listeners attached + if (Basic.isEmptyObj(eventpool[this.uid])) { + delete eventpool[this.uid]; + } + } + } + }, + + /** + Remove all event handlers from the object + + @method removeAllEventListeners + */ + removeAllEventListeners: function() { + if (eventpool[this.uid]) { + delete eventpool[this.uid]; + } + }, + + /** + Dispatch the event + + @method dispatchEvent + @param {String/Object} Type of event or event object to dispatch + @param {Mixed} [...] Variable number of arguments to be passed to a handlers + @return {Boolean} true by default and false if any handler returned false + */ + dispatchEvent: function(type) { + var uid, list, args, tmpEvt, evt = {}, result = true, undef; + + if (Basic.typeOf(type) !== 'string') { + // we can't use original object directly (because of Silverlight) + tmpEvt = type; + + if (Basic.typeOf(tmpEvt.type) === 'string') { + type = tmpEvt.type; + + if (tmpEvt.total !== undef && tmpEvt.loaded !== undef) { // progress event + evt.total = tmpEvt.total; + evt.loaded = tmpEvt.loaded; + } + evt.async = tmpEvt.async || false; + } else { + throw new x.EventException(x.EventException.UNSPECIFIED_EVENT_TYPE_ERR); + } + } + + // check if event is meant to be dispatched on an object having specific uid + if (type.indexOf('::') !== -1) { + (function(arr) { + uid = arr[0]; + type = arr[1]; + }(type.split('::'))); + } else { + uid = this.uid; + } + + type = type.toLowerCase(); + + list = eventpool[uid] && eventpool[uid][type]; + + if (list) { + // sort event list by prority + list.sort(function(a, b) { return b.priority - a.priority; }); + + args = [].slice.call(arguments); + + // first argument will be pseudo-event object + args.shift(); + evt.type = type; + args.unshift(evt); + + // Dispatch event to all listeners + var queue = []; + Basic.each(list, function(handler) { + // explicitly set the target, otherwise events fired from shims do not get it + args[0].target = handler.scope; + // if event is marked as async, detach the handler + if (evt.async) { + queue.push(function(cb) { + setTimeout(function() { + cb(handler.fn.apply(handler.scope, args) === false); + }, 1); + }); + } else { + queue.push(function(cb) { + cb(handler.fn.apply(handler.scope, args) === false); // if handler returns false stop propagation + }); + } + }); + if (queue.length) { + Basic.inSeries(queue, function(err) { + result = !err; + }); + } + } + return result; + }, + + /** + Alias for addEventListener + + @method bind + @protected + */ + bind: function() { + this.addEventListener.apply(this, arguments); + }, + + /** + Alias for removeEventListener + + @method unbind + @protected + */ + unbind: function() { + this.removeEventListener.apply(this, arguments); + }, + + /** + Alias for removeAllEventListeners + + @method unbindAll + @protected + */ + unbindAll: function() { + this.removeAllEventListeners.apply(this, arguments); + }, + + /** + Alias for dispatchEvent + + @method trigger + @protected + */ + trigger: function() { + return this.dispatchEvent.apply(this, arguments); + }, + + + /** + Converts properties of on[event] type to corresponding event handlers, + is used to avoid extra hassle around the process of calling them back + + @method convertEventPropsToHandlers + @private + */ + convertEventPropsToHandlers: function(handlers) { + var h; + + if (Basic.typeOf(handlers) !== 'array') { + handlers = [handlers]; + } + + for (var i = 0; i < handlers.length; i++) { + h = 'on' + handlers[i]; + + if (Basic.typeOf(this[h]) === 'function') { + this.addEventListener(handlers[i], this[h]); + } else if (Basic.typeOf(this[h]) === 'undefined') { + this[h] = null; // object must have defined event properties, even if it doesn't make use of them + } + } + } + + }); + } + + EventTarget.instance = new EventTarget(); + + return EventTarget; +}); + +// Included from: src/javascript/core/utils/Encode.js + +/** + * Encode.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Encode', [], function() { + + /** + Encode string with UTF-8 + + @method utf8_encode + @for Utils + @static + @param {String} str String to encode + @return {String} UTF-8 encoded string + */ + var utf8_encode = function(str) { + return unescape(encodeURIComponent(str)); + }; + + /** + Decode UTF-8 encoded string + + @method utf8_decode + @static + @param {String} str String to decode + @return {String} Decoded string + */ + var utf8_decode = function(str_data) { + return decodeURIComponent(escape(str_data)); + }; + + /** + Decode Base64 encoded string (uses browser's default method if available), + from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_decode.js + + @method atob + @static + @param {String} data String to decode + @return {String} Decoded string + */ + var atob = function(data, utf8) { + if (typeof(window.atob) === 'function') { + return utf8 ? utf8_decode(window.atob(data)) : window.atob(data); + } + + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Thunder.m + // + input by: Aman Gupta + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Onno Marsman + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + input by: Brett Zamir (http://brett-zamir.me) + // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); + // * returns 1: 'Kevin van Zonneveld' + // mozilla has this native + // - but breaks in 2.0.0.12! + //if (typeof this.window.atob == 'function') { + // return atob(data); + //} + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + dec = "", + tmp_arr = []; + + if (!data) { + return data; + } + + data += ''; + + do { // unpack four hexets into three octets using index points in b64 + h1 = b64.indexOf(data.charAt(i++)); + h2 = b64.indexOf(data.charAt(i++)); + h3 = b64.indexOf(data.charAt(i++)); + h4 = b64.indexOf(data.charAt(i++)); + + bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; + + o1 = bits >> 16 & 0xff; + o2 = bits >> 8 & 0xff; + o3 = bits & 0xff; + + if (h3 == 64) { + tmp_arr[ac++] = String.fromCharCode(o1); + } else if (h4 == 64) { + tmp_arr[ac++] = String.fromCharCode(o1, o2); + } else { + tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); + } + } while (i < data.length); + + dec = tmp_arr.join(''); + + return utf8 ? utf8_decode(dec) : dec; + }; + + /** + Base64 encode string (uses browser's default method if available), + from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_encode.js + + @method btoa + @static + @param {String} data String to encode + @return {String} Base64 encoded string + */ + var btoa = function(data, utf8) { + if (utf8) { + utf8_encode(data); + } + + if (typeof(window.btoa) === 'function') { + return window.btoa(data); + } + + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Bayron Guevara + // + improved by: Thunder.m + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + improved by: Rafał Kukawski (http://kukawski.pl) + // * example 1: base64_encode('Kevin van Zonneveld'); + // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' + // mozilla has this native + // - but breaks in 2.0.0.12! + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + enc = "", + tmp_arr = []; + + if (!data) { + return data; + } + + do { // pack three octets into four hexets + o1 = data.charCodeAt(i++); + o2 = data.charCodeAt(i++); + o3 = data.charCodeAt(i++); + + bits = o1 << 16 | o2 << 8 | o3; + + h1 = bits >> 18 & 0x3f; + h2 = bits >> 12 & 0x3f; + h3 = bits >> 6 & 0x3f; + h4 = bits & 0x3f; + + // use hexets to index into b64, and append result to encoded string + tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); + } while (i < data.length); + + enc = tmp_arr.join(''); + + var r = data.length % 3; + + return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); + }; + + + return { + utf8_encode: utf8_encode, + utf8_decode: utf8_decode, + atob: atob, + btoa: btoa + }; +}); + +// Included from: src/javascript/runtime/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/Runtime', [ + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/EventTarget" +], function(Basic, Dom, EventTarget) { + var runtimeConstructors = {}, runtimes = {}; + + /** + Common set of methods and properties for every runtime instance + + @class Runtime + + @param {Object} options + @param {String} type Sanitized name of the runtime + @param {Object} [caps] Set of capabilities that differentiate specified runtime + @param {Object} [modeCaps] Set of capabilities that do require specific operational mode + @param {String} [preferredMode='browser'] Preferred operational mode to choose if no required capabilities were requested + */ + function Runtime(options, type, caps, modeCaps, preferredMode) { + /** + Dispatched when runtime is initialized and ready. + Results in RuntimeInit on a connected component. + + @event Init + */ + + /** + Dispatched when runtime fails to initialize. + Results in RuntimeError on a connected component. + + @event Error + */ + + var self = this + , _shim + , _uid = Basic.guid(type + '_') + , defaultMode = preferredMode || 'browser' + ; + + options = options || {}; + + // register runtime in private hash + runtimes[_uid] = this; + + /** + Default set of capabilities, which can be redifined later by specific runtime + + @private + @property caps + @type Object + */ + caps = Basic.extend({ + // Runtime can: + // provide access to raw binary data of the file + access_binary: false, + // provide access to raw binary data of the image (image extension is optional) + access_image_binary: false, + // display binary data as thumbs for example + display_media: false, + // make cross-domain requests + do_cors: false, + // accept files dragged and dropped from the desktop + drag_and_drop: false, + // filter files in selection dialog by their extensions + filter_by_extension: true, + // resize image (and manipulate it raw data of any file in general) + resize_image: false, + // periodically report how many bytes of total in the file were uploaded (loaded) + report_upload_progress: false, + // provide access to the headers of http response + return_response_headers: false, + // support response of specific type, which should be passed as an argument + // e.g. runtime.can('return_response_type', 'blob') + return_response_type: false, + // return http status code of the response + return_status_code: true, + // send custom http header with the request + send_custom_headers: false, + // pick up the files from a dialog + select_file: false, + // select whole folder in file browse dialog + select_folder: false, + // select multiple files at once in file browse dialog + select_multiple: true, + // send raw binary data, that is generated after image resizing or manipulation of other kind + send_binary_string: false, + // send cookies with http request and therefore retain session + send_browser_cookies: true, + // send data formatted as multipart/form-data + send_multipart: true, + // slice the file or blob to smaller parts + slice_blob: false, + // upload file without preloading it to memory, stream it out directly from disk + stream_upload: false, + // programmatically trigger file browse dialog + summon_file_dialog: false, + // upload file of specific size, size should be passed as argument + // e.g. runtime.can('upload_filesize', '500mb') + upload_filesize: true, + // initiate http request with specific http method, method should be passed as argument + // e.g. runtime.can('use_http_method', 'put') + use_http_method: true + }, caps); + + + // default to the mode that is compatible with preferred caps + if (options.preferred_caps) { + defaultMode = Runtime.getMode(modeCaps, options.preferred_caps, defaultMode); + } + + // small extension factory here (is meant to be extended with actual extensions constructors) + _shim = (function() { + var objpool = {}; + return { + exec: function(uid, comp, fn, args) { + if (_shim[comp]) { + if (!objpool[uid]) { + objpool[uid] = { + context: this, + instance: new _shim[comp]() + }; + } + if (objpool[uid].instance[fn]) { + return objpool[uid].instance[fn].apply(this, args); + } + } + }, + + removeInstance: function(uid) { + delete objpool[uid]; + }, + + removeAllInstances: function() { + var self = this; + Basic.each(objpool, function(obj, uid) { + if (Basic.typeOf(obj.instance.destroy) === 'function') { + obj.instance.destroy.call(obj.context); + } + self.removeInstance(uid); + }); + } + }; + }()); + + + // public methods + Basic.extend(this, { + /** + Specifies whether runtime instance was initialized or not + + @property initialized + @type {Boolean} + @default false + */ + initialized: false, // shims require this flag to stop initialization retries + + /** + Unique ID of the runtime + + @property uid + @type {String} + */ + uid: _uid, + + /** + Runtime type (e.g. flash, html5, etc) + + @property type + @type {String} + */ + type: type, + + /** + Runtime (not native one) may operate in browser or client mode. + + @property mode + @private + @type {String|Boolean} current mode or false, if none possible + */ + mode: Runtime.getMode(modeCaps, (options.required_caps), defaultMode), + + /** + id of the DOM container for the runtime (if available) + + @property shimid + @type {String} + */ + shimid: _uid + '_container', + + /** + Number of connected clients. If equal to zero, runtime can be destroyed + + @property clients + @type {Number} + */ + clients: 0, + + /** + Runtime initialization options + + @property options + @type {Object} + */ + options: options, + + /** + Checks if the runtime has specific capability + + @method can + @param {String} cap Name of capability to check + @param {Mixed} [value] If passed, capability should somehow correlate to the value + @param {Object} [refCaps] Set of capabilities to check the specified cap against (defaults to internal set) + @return {Boolean} true if runtime has such capability and false, if - not + */ + can: function(cap, value) { + var refCaps = arguments[2] || caps; + + // if cap var is a comma-separated list of caps, convert it to object (key/value) + if (Basic.typeOf(cap) === 'string' && Basic.typeOf(value) === 'undefined') { + cap = Runtime.parseCaps(cap); + } + + if (Basic.typeOf(cap) === 'object') { + for (var key in cap) { + if (!this.can(key, cap[key], refCaps)) { + return false; + } + } + return true; + } + + // check the individual cap + if (Basic.typeOf(refCaps[cap]) === 'function') { + return refCaps[cap].call(this, value); + } else { + return (value === refCaps[cap]); + } + }, + + /** + Returns container for the runtime as DOM element + + @method getShimContainer + @return {DOMElement} + */ + getShimContainer: function() { + var container, shimContainer = Dom.get(this.shimid); + + // if no container for shim, create one + if (!shimContainer) { + container = this.options.container ? Dom.get(this.options.container) : document.body; + + // create shim container and insert it at an absolute position into the outer container + shimContainer = document.createElement('div'); + shimContainer.id = this.shimid; + shimContainer.className = 'moxie-shim moxie-shim-' + this.type; + + Basic.extend(shimContainer.style, { + position: 'absolute', + top: '0px', + left: '0px', + width: '1px', + height: '1px', + overflow: 'hidden' + }); + + container.appendChild(shimContainer); + container = null; + } + + return shimContainer; + }, + + /** + Returns runtime as DOM element (if appropriate) + + @method getShim + @return {DOMElement} + */ + getShim: function() { + return _shim; + }, + + /** + Invokes a method within the runtime itself (might differ across the runtimes) + + @method shimExec + @param {Mixed} [] + @protected + @return {Mixed} Depends on the action and component + */ + shimExec: function(component, action) { + var args = [].slice.call(arguments, 2); + return self.getShim().exec.call(this, this.uid, component, action, args); + }, + + /** + Operaional interface that is used by components to invoke specific actions on the runtime + (is invoked in the scope of component) + + @method exec + @param {Mixed} []* + @protected + @return {Mixed} Depends on the action and component + */ + exec: function(component, action) { // this is called in the context of component, not runtime + var args = [].slice.call(arguments, 2); + + if (self[component] && self[component][action]) { + return self[component][action].apply(this, args); + } + return self.shimExec.apply(this, arguments); + }, + + /** + Destroys the runtime (removes all events and deletes DOM structures) + + @method destroy + */ + destroy: function() { + if (!self) { + return; // obviously already destroyed + } + + var shimContainer = Dom.get(this.shimid); + if (shimContainer) { + shimContainer.parentNode.removeChild(shimContainer); + } + + if (_shim) { + _shim.removeAllInstances(); + } + + this.unbindAll(); + delete runtimes[this.uid]; + this.uid = null; // mark this runtime as destroyed + _uid = self = _shim = shimContainer = null; + } + }); + + // once we got the mode, test against all caps + if (this.mode && options.required_caps && !this.can(options.required_caps)) { + this.mode = false; + } + } + + + /** + Default order to try different runtime types + + @property order + @type String + @static + */ + Runtime.order = 'html5,flash,silverlight,html4'; + + + /** + Retrieves runtime from private hash by it's uid + + @method getRuntime + @private + @static + @param {String} uid Unique identifier of the runtime + @return {Runtime|Boolean} Returns runtime, if it exists and false, if - not + */ + Runtime.getRuntime = function(uid) { + return runtimes[uid] ? runtimes[uid] : false; + }; + + + /** + Register constructor for the Runtime of new (or perhaps modified) type + + @method addConstructor + @static + @param {String} type Runtime type (e.g. flash, html5, etc) + @param {Function} construct Constructor for the Runtime type + */ + Runtime.addConstructor = function(type, constructor) { + constructor.prototype = EventTarget.instance; + runtimeConstructors[type] = constructor; + }; + + + /** + Get the constructor for the specified type. + + method getConstructor + @static + @param {String} type Runtime type (e.g. flash, html5, etc) + @return {Function} Constructor for the Runtime type + */ + Runtime.getConstructor = function(type) { + return runtimeConstructors[type] || null; + }; + + + /** + Get info about the runtime (uid, type, capabilities) + + @method getInfo + @static + @param {String} uid Unique identifier of the runtime + @return {Mixed} Info object or null if runtime doesn't exist + */ + Runtime.getInfo = function(uid) { + var runtime = Runtime.getRuntime(uid); + + if (runtime) { + return { + uid: runtime.uid, + type: runtime.type, + mode: runtime.mode, + can: function() { + return runtime.can.apply(runtime, arguments); + } + }; + } + return null; + }; + + + /** + Convert caps represented by a comma-separated string to the object representation. + + @method parseCaps + @static + @param {String} capStr Comma-separated list of capabilities + @return {Object} + */ + Runtime.parseCaps = function(capStr) { + var capObj = {}; + + if (Basic.typeOf(capStr) !== 'string') { + return capStr || {}; + } + + Basic.each(capStr.split(','), function(key) { + capObj[key] = true; // we assume it to be - true + }); + + return capObj; + }; + + /** + Test the specified runtime for specific capabilities. + + @method can + @static + @param {String} type Runtime type (e.g. flash, html5, etc) + @param {String|Object} caps Set of capabilities to check + @return {Boolean} Result of the test + */ + Runtime.can = function(type, caps) { + var runtime + , constructor = Runtime.getConstructor(type) + , mode + ; + if (constructor) { + runtime = new constructor({ + required_caps: caps + }); + mode = runtime.mode; + runtime.destroy(); + return !!mode; + } + return false; + }; + + + /** + Figure out a runtime that supports specified capabilities. + + @method thatCan + @static + @param {String|Object} caps Set of capabilities to check + @param {String} [runtimeOrder] Comma-separated list of runtimes to check against + @return {String} Usable runtime identifier or null + */ + Runtime.thatCan = function(caps, runtimeOrder) { + var types = (runtimeOrder || Runtime.order).split(/\s*,\s*/); + for (var i in types) { + if (Runtime.can(types[i], caps)) { + return types[i]; + } + } + return null; + }; + + + /** + Figure out an operational mode for the specified set of capabilities. + + @method getMode + @static + @param {Object} modeCaps Set of capabilities that depend on particular runtime mode + @param {Object} [requiredCaps] Supplied set of capabilities to find operational mode for + @param {String|Boolean} [defaultMode='browser'] Default mode to use + @return {String|Boolean} Compatible operational mode + */ + Runtime.getMode = function(modeCaps, requiredCaps, defaultMode) { + var mode = null; + + if (Basic.typeOf(defaultMode) === 'undefined') { // only if not specified + defaultMode = 'browser'; + } + + if (requiredCaps && !Basic.isEmptyObj(modeCaps)) { + // loop over required caps and check if they do require the same mode + Basic.each(requiredCaps, function(value, cap) { + if (modeCaps.hasOwnProperty(cap)) { + var capMode = modeCaps[cap](value); + + // make sure we always have an array + if (typeof(capMode) === 'string') { + capMode = [capMode]; + } + + if (!mode) { + mode = capMode; + } else if (!(mode = Basic.arrayIntersect(mode, capMode))) { + // if cap requires conflicting mode - runtime cannot fulfill required caps + return (mode = false); + } + } + }); + + if (mode) { + return Basic.inArray(defaultMode, mode) !== -1 ? defaultMode : mode[0]; + } else if (mode === false) { + return false; + } + } + return defaultMode; + }; + + + /** + Capability check that always returns true + + @private + @static + @return {True} + */ + Runtime.capTrue = function() { + return true; + }; + + /** + Capability check that always returns false + + @private + @static + @return {False} + */ + Runtime.capFalse = function() { + return false; + }; + + /** + Evaluate the expression to boolean value and create a function that always returns it. + + @private + @static + @param {Mixed} expr Expression to evaluate + @return {Function} Function returning the result of evaluation + */ + Runtime.capTest = function(expr) { + return function() { + return !!expr; + }; + }; + + return Runtime; +}); + +// Included from: src/javascript/runtime/RuntimeClient.js + +/** + * RuntimeClient.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/RuntimeClient', [ + 'moxie/core/Exceptions', + 'moxie/core/utils/Basic', + 'moxie/runtime/Runtime' +], function(x, Basic, Runtime) { + /** + Set of methods and properties, required by a component to acquire ability to connect to a runtime + + @class RuntimeClient + */ + return function RuntimeClient() { + var runtime; + + Basic.extend(this, { + /** + Connects to the runtime specified by the options. Will either connect to existing runtime or create a new one. + Increments number of clients connected to the specified runtime. + + @method connectRuntime + @param {Mixed} options Can be a runtme uid or a set of key-value pairs defining requirements and pre-requisites + */ + connectRuntime: function(options) { + var comp = this, ruid; + + function initialize(items) { + var type, constructor; + + // if we ran out of runtimes + if (!items.length) { + comp.trigger('RuntimeError', new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + runtime = null; + return; + } + + type = items.shift(); + constructor = Runtime.getConstructor(type); + if (!constructor) { + initialize(items); + return; + } + + // try initializing the runtime + runtime = new constructor(options); + + runtime.bind('Init', function() { + // mark runtime as initialized + runtime.initialized = true; + + // jailbreak ... + setTimeout(function() { + runtime.clients++; + // this will be triggered on component + comp.trigger('RuntimeInit', runtime); + }, 1); + }); + + runtime.bind('Error', function() { + runtime.destroy(); // runtime cannot destroy itself from inside at a right moment, thus we do it here + initialize(items); + }); + + /*runtime.bind('Exception', function() { });*/ + + // check if runtime managed to pick-up operational mode + if (!runtime.mode) { + runtime.trigger('Error'); + return; + } + + runtime.init(); + } + + // check if a particular runtime was requested + if (Basic.typeOf(options) === 'string') { + ruid = options; + } else if (Basic.typeOf(options.ruid) === 'string') { + ruid = options.ruid; + } + + if (ruid) { + runtime = Runtime.getRuntime(ruid); + if (runtime) { + runtime.clients++; + return runtime; + } else { + // there should be a runtime and there's none - weird case + throw new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR); + } + } + + // initialize a fresh one, that fits runtime list and required features best + initialize((options.runtime_order || Runtime.order).split(/\s*,\s*/)); + }, + + /** + Returns the runtime to which the client is currently connected. + + @method getRuntime + @return {Runtime} Runtime or null if client is not connected + */ + getRuntime: function() { + if (runtime && runtime.uid) { + return runtime; + } + runtime = null; // make sure we do not leave zombies rambling around + return null; + }, + + /** + Disconnects from the runtime. Decrements number of clients connected to the specified runtime. + + @method disconnectRuntime + */ + disconnectRuntime: function() { + if (runtime && --runtime.clients <= 0) { + runtime.destroy(); + runtime = null; + } + } + + }); + }; + + +}); + +// Included from: src/javascript/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/Blob', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Encode', + 'moxie/runtime/RuntimeClient' +], function(Basic, Encode, RuntimeClient) { + + var blobpool = {}; + + /** + @class Blob + @constructor + @param {String} ruid Unique id of the runtime, to which this blob belongs to + @param {Object} blob Object "Native" blob object, as it is represented in the runtime + */ + function Blob(ruid, blob) { + + function _sliceDetached(start, end, type) { + var blob, data = blobpool[this.uid]; + + if (Basic.typeOf(data) !== 'string' || !data.length) { + return null; // or throw exception + } + + blob = new Blob(null, { + type: type, + size: end - start + }); + blob.detach(data.substr(start, blob.size)); + + return blob; + } + + RuntimeClient.call(this); + + if (ruid) { + this.connectRuntime(ruid); + } + + if (!blob) { + blob = {}; + } else if (Basic.typeOf(blob) === 'string') { // dataUrl or binary string + blob = { data: blob }; + } + + Basic.extend(this, { + + /** + Unique id of the component + + @property uid + @type {String} + */ + uid: blob.uid || Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if falsy, then runtime will have to be initialized + before this Blob can be used, modified or sent + + @property ruid + @type {String} + */ + ruid: ruid, + + /** + Size of blob + + @property size + @type {Number} + @default 0 + */ + size: blob.size || 0, + + /** + Mime type of blob + + @property type + @type {String} + @default '' + */ + type: blob.type || '', + + /** + @method slice + @param {Number} [start=0] + */ + slice: function(start, end, type) { + if (this.isDetached()) { + return _sliceDetached.apply(this, arguments); + } + return this.getRuntime().exec.call(this, 'Blob', 'slice', this.getSource(), start, end, type); + }, + + /** + Returns "native" blob object (as it is represented in connected runtime) or null if not found + + @method getSource + @return {Blob} Returns "native" blob object or null if not found + */ + getSource: function() { + if (!blobpool[this.uid]) { + return null; + } + return blobpool[this.uid]; + }, + + /** + Detaches blob from any runtime that it depends on and initialize with standalone value + + @method detach + @protected + @param {DOMString} [data=''] Standalone value + */ + detach: function(data) { + if (this.ruid) { + this.getRuntime().exec.call(this, 'Blob', 'destroy', blobpool[this.uid]); + this.disconnectRuntime(); + this.ruid = null; + } + + data = data || ''; + + // if dataUrl, convert to binary string + var matches = data.match(/^data:([^;]*);base64,/); + if (matches) { + this.type = matches[1]; + data = Encode.atob(data.substring(data.indexOf('base64,') + 7)); + } + + this.size = data.length; + + blobpool[this.uid] = data; + }, + + /** + Checks if blob is standalone (detached of any runtime) + + @method isDetached + @protected + @return {Boolean} + */ + isDetached: function() { + return !this.ruid && Basic.typeOf(blobpool[this.uid]) === 'string'; + }, + + /** + Destroy Blob and free any resources it was using + + @method destroy + */ + destroy: function() { + this.detach(); + delete blobpool[this.uid]; + } + }); + + + if (blob.data) { + this.detach(blob.data); // auto-detach if payload has been passed + } else { + blobpool[this.uid] = blob; + } + } + + return Blob; +}); + +// Included from: src/javascript/file/File.js + +/** + * File.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/File', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Mime', + 'moxie/file/Blob' +], function(Basic, Mime, Blob) { + /** + @class File + @extends Blob + @constructor + @param {String} ruid Unique id of the runtime, to which this blob belongs to + @param {Object} file Object "Native" file object, as it is represented in the runtime + */ + function File(ruid, file) { + var name, type; + + if (!file) { // avoid extra errors in case we overlooked something + file = {}; + } + + // figure out the type + if (file.type && file.type !== '') { + type = file.type; + } else { + type = Mime.getFileMime(file.name); + } + + // sanitize file name or generate new one + if (file.name) { + name = file.name.replace(/\\/g, '/'); + name = name.substr(name.lastIndexOf('/') + 1); + } else { + var prefix = type.split('/')[0]; + name = Basic.guid((prefix !== '' ? prefix : 'file') + '_'); + + if (Mime.extensions[type]) { + name += '.' + Mime.extensions[type][0]; // append proper extension if possible + } + } + + Blob.apply(this, arguments); + + Basic.extend(this, { + /** + File mime type + + @property type + @type {String} + @default '' + */ + type: type || '', + + /** + File name + + @property name + @type {String} + @default UID + */ + name: name || Basic.guid('file_'), + + /** + Date of last modification + + @property lastModifiedDate + @type {String} + @default now + */ + lastModifiedDate: file.lastModifiedDate || (new Date()).toLocaleString() // Thu Aug 23 2012 19:40:00 GMT+0400 (GET) + }); + } + + File.prototype = Blob.prototype; + + return File; +}); + +// Included from: src/javascript/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileInput', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Mime', + 'moxie/core/utils/Dom', + 'moxie/core/Exceptions', + 'moxie/core/EventTarget', + 'moxie/core/I18n', + 'moxie/file/File', + 'moxie/runtime/Runtime', + 'moxie/runtime/RuntimeClient' +], function(Basic, Mime, Dom, x, EventTarget, I18n, File, Runtime, RuntimeClient) { + /** + Provides a convenient way to create cross-browser file-picker. Generates file selection dialog on click, + converts selected files to _File_ objects, to be used in conjunction with _Image_, preloaded in memory + with _FileReader_ or uploaded to a server through _XMLHttpRequest_. + + @class FileInput + @constructor + @extends EventTarget + @uses RuntimeClient + @param {Object|String|DOMElement} options If options is string or node, argument is considered as _browse\_button_. + @param {String|DOMElement} options.browse_button DOM Element to turn into file picker. + @param {Array} [options.accept] Array of mime types to accept. By default accepts all. + @param {String} [options.file='file'] Name of the file field (not the filename). + @param {Boolean} [options.multiple=false] Enable selection of multiple files. + @param {Boolean} [options.directory=false] Turn file input into the folder input (cannot be both at the same time). + @param {String|DOMElement} [options.container] DOM Element to use as a container for file-picker. Defaults to parentNode + for _browse\_button_. + @param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support. + + @example + <div id="container"> + <a id="file-picker" href="javascript:;">Browse...</a> + </div> + + <script> + var fileInput = new mOxie.FileInput({ + browse_button: 'file-picker', // or document.getElementById('file-picker') + container: 'container', + accept: [ + {title: "Image files", extensions: "jpg,gif,png"} // accept only images + ], + multiple: true // allow multiple file selection + }); + + fileInput.onchange = function(e) { + // do something to files array + console.info(e.target.files); // or this.files or fileInput.files + }; + + fileInput.init(); // initialize + </script> + */ + var dispatches = [ + /** + Dispatched when runtime is connected and file-picker is ready to be used. + + @event ready + @param {Object} event + */ + 'ready', + + /** + Dispatched right after [ready](#event_ready) event, and whenever [refresh()](#method_refresh) is invoked. + Check [corresponding documentation entry](#method_refresh) for more info. + + @event refresh + @param {Object} event + */ + + /** + Dispatched when selection of files in the dialog is complete. + + @event change + @param {Object} event + */ + 'change', + + 'cancel', // TODO: might be useful + + /** + Dispatched when mouse cursor enters file-picker area. Can be used to style element + accordingly. + + @event mouseenter + @param {Object} event + */ + 'mouseenter', + + /** + Dispatched when mouse cursor leaves file-picker area. Can be used to style element + accordingly. + + @event mouseleave + @param {Object} event + */ + 'mouseleave', + + /** + Dispatched when functional mouse button is pressed on top of file-picker area. + + @event mousedown + @param {Object} event + */ + 'mousedown', + + /** + Dispatched when functional mouse button is released on top of file-picker area. + + @event mouseup + @param {Object} event + */ + 'mouseup' + ]; + + function FileInput(options) { + var self = this, + container, browseButton, defaults; + + // if flat argument passed it should be browse_button id + if (Basic.inArray(Basic.typeOf(options), ['string', 'node']) !== -1) { + options = { browse_button : options }; + } + + // this will help us to find proper default container + browseButton = Dom.get(options.browse_button); + if (!browseButton) { + // browse button is required + throw new x.DOMException(x.DOMException.NOT_FOUND_ERR); + } + + // figure out the options + defaults = { + accept: [{ + title: I18n.translate('All Files'), + extensions: '*' + }], + name: 'file', + multiple: false, + required_caps: false, + container: browseButton.parentNode || document.body + }; + + options = Basic.extend({}, defaults, options); + + // convert to object representation + if (typeof(options.required_caps) === 'string') { + options.required_caps = Runtime.parseCaps(options.required_caps); + } + + // normalize accept option (could be list of mime types or array of title/extensions pairs) + if (typeof(options.accept) === 'string') { + options.accept = Mime.mimes2extList(options.accept); + } + + container = Dom.get(options.container); + // make sure we have container + if (!container) { + container = document.body; + } + + // make container relative, if it's not + if (Dom.getStyle(container, 'position') === 'static') { + container.style.position = 'relative'; + } + + container = browseButton = null; // IE + + RuntimeClient.call(self); + + Basic.extend(self, { + /** + Unique id of the component + + @property uid + @protected + @readOnly + @type {String} + @default UID + */ + uid: Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if any. + + @property ruid + @protected + @type {String} + */ + ruid: null, + + /** + Unique id of the runtime container. Useful to get hold of it for various manipulations. + + @property shimid + @protected + @type {String} + */ + shimid: null, + + /** + Array of selected mOxie.File objects + + @property files + @type {Array} + @default null + */ + files: null, + + /** + Initializes the file-picker, connects it to runtime and dispatches event ready when done. + + @method init + */ + init: function() { + self.convertEventPropsToHandlers(dispatches); + + self.bind('RuntimeInit', function(e, runtime) { + self.ruid = runtime.uid; + self.shimid = runtime.shimid; + + self.bind("Ready", function() { + self.trigger("Refresh"); + }, 999); + + self.bind("Change", function() { + var files = runtime.exec.call(self, 'FileInput', 'getFiles'); + + self.files = []; + + Basic.each(files, function(file) { + // ignore empty files (IE10 for example hangs if you try to send them via XHR) + if (file.size === 0) { + return true; + } + self.files.push(new File(self.ruid, file)); + }); + }, 999); + + // re-position and resize shim container + self.bind('Refresh', function() { + var pos, size, browseButton, shimContainer; + + browseButton = Dom.get(options.browse_button); + shimContainer = Dom.get(runtime.shimid); // do not use runtime.getShimContainer(), since it will create container if it doesn't exist + + if (browseButton) { + pos = Dom.getPos(browseButton, Dom.get(options.container)); + size = Dom.getSize(browseButton); + + if (shimContainer) { + Basic.extend(shimContainer.style, { + top : pos.y + 'px', + left : pos.x + 'px', + width : size.w + 'px', + height : size.h + 'px' + }); + } + } + shimContainer = browseButton = null; + }); + + runtime.exec.call(self, 'FileInput', 'init', options); + }); + + // runtime needs: options.required_features, options.runtime_order and options.container + self.connectRuntime(Basic.extend({}, options, { + required_caps: { + select_file: true + } + })); + }, + + /** + Disables file-picker element, so that it doesn't react to mouse clicks. + + @method disable + @param {Boolean} [state=true] Disable component if - true, enable if - false + */ + disable: function(state) { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileInput', 'disable', Basic.typeOf(state) === 'undefined' ? true : state); + } + }, + + + /** + Reposition and resize dialog trigger to match the position and size of browse_button element. + + @method refresh + */ + refresh: function() { + self.trigger("Refresh"); + }, + + + /** + Destroy component. + + @method destroy + */ + destroy: function() { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileInput', 'destroy'); + this.disconnectRuntime(); + } + + if (Basic.typeOf(this.files) === 'array') { + // no sense in leaving associated files behind + Basic.each(this.files, function(file) { + file.destroy(); + }); + } + this.files = null; + } + }); + } + + FileInput.prototype = EventTarget.instance; + + return FileInput; +}); + +// Included from: src/javascript/file/FileDrop.js + +/** + * FileDrop.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileDrop', [ + 'moxie/core/I18n', + 'moxie/core/utils/Dom', + 'moxie/core/Exceptions', + 'moxie/core/utils/Basic', + 'moxie/file/File', + 'moxie/runtime/RuntimeClient', + 'moxie/core/EventTarget', + 'moxie/core/utils/Mime' +], function(I18n, Dom, x, Basic, File, RuntimeClient, EventTarget, Mime) { + /** + Turn arbitrary DOM element to a drop zone accepting files. Converts selected files to _File_ objects, to be used + in conjunction with _Image_, preloaded in memory with _FileReader_ or uploaded to a server through + _XMLHttpRequest_. + + @example + <div id="drop_zone"> + Drop files here + </div> + <br /> + <div id="filelist"></div> + + <script type="text/javascript"> + var fileDrop = new mOxie.FileDrop('drop_zone'), fileList = mOxie.get('filelist'); + + fileDrop.ondrop = function() { + mOxie.each(this.files, function(file) { + fileList.innerHTML += '<div>' + file.name + '</div>'; + }); + }; + + fileDrop.init(); + </script> + + @class FileDrop + @constructor + @extends EventTarget + @uses RuntimeClient + @param {Object|String} options If options has typeof string, argument is considered as options.drop_zone + @param {String|DOMElement} options.drop_zone DOM Element to turn into a drop zone + @param {Array} [options.accept] Array of mime types to accept. By default accepts all + @param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support + */ + var dispatches = [ + /** + Dispatched when runtime is connected and drop zone is ready to accept files. + + @event ready + @param {Object} event + */ + 'ready', + + /** + Dispatched when dragging cursor enters the drop zone. + + @event dragenter + @param {Object} event + */ + 'dragenter', + + /** + Dispatched when dragging cursor leaves the drop zone. + + @event dragleave + @param {Object} event + */ + 'dragleave', + + /** + Dispatched when file is dropped onto the drop zone. + + @event drop + @param {Object} event + */ + 'drop', + + /** + Dispatched if error occurs. + + @event error + @param {Object} event + */ + 'error' + ]; + + function FileDrop(options) { + var self = this, defaults; + + // if flat argument passed it should be drop_zone id + if (typeof(options) === 'string') { + options = { drop_zone : options }; + } + + // figure out the options + defaults = { + accept: [{ + title: I18n.translate('All Files'), + extensions: '*' + }], + required_caps: { + drag_and_drop: true + } + }; + + options = typeof(options) === 'object' ? Basic.extend({}, defaults, options) : defaults; + + // this will help us to find proper default container + options.container = Dom.get(options.drop_zone) || document.body; + + // make container relative, if it is not + if (Dom.getStyle(options.container, 'position') === 'static') { + options.container.style.position = 'relative'; + } + + // normalize accept option (could be list of mime types or array of title/extensions pairs) + if (typeof(options.accept) === 'string') { + options.accept = Mime.mimes2extList(options.accept); + } + + RuntimeClient.call(self); + + Basic.extend(self, { + uid: Basic.guid('uid_'), + + ruid: null, + + files: null, + + init: function() { + + self.convertEventPropsToHandlers(dispatches); + + self.bind('RuntimeInit', function(e, runtime) { + self.ruid = runtime.uid; + + self.bind("Drop", function() { + var files = runtime.exec.call(self, 'FileDrop', 'getFiles'); + + self.files = []; + + Basic.each(files, function(file) { + self.files.push(new File(self.ruid, file)); + }); + }, 999); + + runtime.exec.call(self, 'FileDrop', 'init', options); + + self.dispatchEvent('ready'); + }); + + // runtime needs: options.required_features, options.runtime_order and options.container + self.connectRuntime(options); // throws RuntimeError + }, + + destroy: function() { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileDrop', 'destroy'); + this.disconnectRuntime(); + } + this.files = null; + } + }); + } + + FileDrop.prototype = EventTarget.instance; + + return FileDrop; +}); + +// Included from: src/javascript/runtime/RuntimeTarget.js + +/** + * RuntimeTarget.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/RuntimeTarget', [ + 'moxie/core/utils/Basic', + 'moxie/runtime/RuntimeClient', + "moxie/core/EventTarget" +], function(Basic, RuntimeClient, EventTarget) { + /** + Instance of this class can be used as a target for the events dispatched by shims, + when allowing them onto components is for either reason inappropriate + + @class RuntimeTarget + @constructor + @protected + @extends EventTarget + */ + function RuntimeTarget() { + this.uid = Basic.guid('uid_'); + + RuntimeClient.call(this); + + this.destroy = function() { + this.disconnectRuntime(); + this.unbindAll(); + }; + } + + RuntimeTarget.prototype = EventTarget.instance; + + return RuntimeTarget; +}); + +// Included from: src/javascript/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileReader', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Encode', + 'moxie/core/Exceptions', + 'moxie/core/EventTarget', + 'moxie/file/Blob', + 'moxie/file/File', + 'moxie/runtime/RuntimeTarget' +], function(Basic, Encode, x, EventTarget, Blob, File, RuntimeTarget) { + /** + Utility for preloading o.Blob/o.File objects in memory. By design closely follows [W3C FileReader](http://www.w3.org/TR/FileAPI/#dfn-filereader) + interface. Where possible uses native FileReader, where - not falls back to shims. + + @class FileReader + @constructor FileReader + @extends EventTarget + @uses RuntimeClient + */ + var dispatches = [ + + /** + Dispatched when the read starts. + + @event loadstart + @param {Object} event + */ + 'loadstart', + + /** + Dispatched while reading (and decoding) blob, and reporting partial Blob data (progess.loaded/progress.total). + + @event progress + @param {Object} event + */ + 'progress', + + /** + Dispatched when the read has successfully completed. + + @event load + @param {Object} event + */ + 'load', + + /** + Dispatched when the read has been aborted. For instance, by invoking the abort() method. + + @event abort + @param {Object} event + */ + 'abort', + + /** + Dispatched when the read has failed. + + @event error + @param {Object} event + */ + 'error', + + /** + Dispatched when the request has completed (either in success or failure). + + @event loadend + @param {Object} event + */ + 'loadend' + ]; + + function FileReader() { + var self = this, _fr; + + Basic.extend(this, { + /** + UID of the component instance. + + @property uid + @type {String} + */ + uid: Basic.guid('uid_'), + + /** + Contains current state of FileReader object. Can take values of FileReader.EMPTY, FileReader.LOADING + and FileReader.DONE. + + @property readyState + @type {Number} + @default FileReader.EMPTY + */ + readyState: FileReader.EMPTY, + + /** + Result of the successful read operation. + + @property result + @type {String} + */ + result: null, + + /** + Stores the error of failed asynchronous read operation. + + @property error + @type {DOMError} + */ + error: null, + + /** + Initiates reading of File/Blob object contents to binary string. + + @method readAsBinaryString + @param {Blob|File} blob Object to preload + */ + readAsBinaryString: function(blob) { + _read.call(this, 'readAsBinaryString', blob); + }, + + /** + Initiates reading of File/Blob object contents to dataURL string. + + @method readAsDataURL + @param {Blob|File} blob Object to preload + */ + readAsDataURL: function(blob) { + _read.call(this, 'readAsDataURL', blob); + }, + + /** + Initiates reading of File/Blob object contents to string. + + @method readAsText + @param {Blob|File} blob Object to preload + */ + readAsText: function(blob) { + _read.call(this, 'readAsText', blob); + }, + + /** + Aborts preloading process. + + @method abort + */ + abort: function() { + this.result = null; + + if (Basic.inArray(this.readyState, [FileReader.EMPTY, FileReader.DONE]) !== -1) { + return; + } else if (this.readyState === FileReader.LOADING) { + this.readyState = FileReader.DONE; + } + + if (_fr) { + _fr.getRuntime().exec.call(this, 'FileReader', 'abort'); + } + + this.trigger('abort'); + this.trigger('loadend'); + }, + + /** + Destroy component and release resources. + + @method destroy + */ + destroy: function() { + this.abort(); + + if (_fr) { + _fr.getRuntime().exec.call(this, 'FileReader', 'destroy'); + _fr.disconnectRuntime(); + } + + self = _fr = null; + } + }); + + + function _read(op, blob) { + _fr = new RuntimeTarget(); + + function error(err) { + self.readyState = FileReader.DONE; + self.error = err; + self.trigger('error'); + loadEnd(); + } + + function loadEnd() { + _fr.destroy(); + _fr = null; + self.trigger('loadend'); + } + + function exec(runtime) { + _fr.bind('Error', function(e, err) { + error(err); + }); + + _fr.bind('Progress', function(e) { + self.result = runtime.exec.call(_fr, 'FileReader', 'getResult'); + self.trigger(e); + }); + + _fr.bind('Load', function(e) { + self.readyState = FileReader.DONE; + self.result = runtime.exec.call(_fr, 'FileReader', 'getResult'); + self.trigger(e); + loadEnd(); + }); + + runtime.exec.call(_fr, 'FileReader', 'read', op, blob); + } + + this.convertEventPropsToHandlers(dispatches); + + if (this.readyState === FileReader.LOADING) { + return error(new x.DOMException(x.DOMException.INVALID_STATE_ERR)); + } + + this.readyState = FileReader.LOADING; + this.trigger('loadstart'); + + // if source is o.Blob/o.File + if (blob instanceof Blob) { + if (blob.isDetached()) { + var src = blob.getSource(); + switch (op) { + case 'readAsText': + case 'readAsBinaryString': + this.result = src; + break; + case 'readAsDataURL': + this.result = 'data:' + blob.type + ';base64,' + Encode.btoa(src); + break; + } + this.readyState = FileReader.DONE; + this.trigger('load'); + loadEnd(); + } else { + exec(_fr.connectRuntime(blob.ruid)); + } + } else { + error(new x.DOMException(x.DOMException.NOT_FOUND_ERR)); + } + } + } + + /** + Initial FileReader state + + @property EMPTY + @type {Number} + @final + @static + @default 0 + */ + FileReader.EMPTY = 0; + + /** + FileReader switches to this state when it is preloading the source + + @property LOADING + @type {Number} + @final + @static + @default 1 + */ + FileReader.LOADING = 1; + + /** + Preloading is complete, this is a final state + + @property DONE + @type {Number} + @final + @static + @default 2 + */ + FileReader.DONE = 2; + + FileReader.prototype = EventTarget.instance; + + return FileReader; +}); + +// Included from: src/javascript/core/utils/Url.js + +/** + * Url.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Url', [], function() { + /** + Parse url into separate components and fill in absent parts with parts from current url, + based on https://raw.github.com/kvz/phpjs/master/functions/url/parse_url.js + + @method parseUrl + @for Utils + @static + @param {String} url Url to parse (defaults to empty string if undefined) + @return {Object} Hash containing extracted uri components + */ + var parseUrl = function(url, currentUrl) { + var key = ['source', 'scheme', 'authority', 'userInfo', 'user', 'pass', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'fragment'] + , i = key.length + , ports = { + http: 80, + https: 443 + } + , uri = {} + , regex = /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/ + , m = regex.exec(url || '') + ; + + while (i--) { + if (m[i]) { + uri[key[i]] = m[i]; + } + } + + // when url is relative, we set the origin and the path ourselves + if (!uri.scheme) { + // come up with defaults + if (!currentUrl || typeof(currentUrl) === 'string') { + currentUrl = parseUrl(currentUrl || document.location.href); + } + + uri.scheme = currentUrl.scheme; + uri.host = currentUrl.host; + uri.port = currentUrl.port; + + var path = ''; + // for urls without trailing slash we need to figure out the path + if (/^[^\/]/.test(uri.path)) { + path = currentUrl.path; + // if path ends with a filename, strip it + if (!/(\/|\/[^\.]+)$/.test(path)) { + path = path.replace(/\/[^\/]+$/, '/'); + } else { + path += '/'; + } + } + uri.path = path + (uri.path || ''); // site may reside at domain.com or domain.com/subdir + } + + if (!uri.port) { + uri.port = ports[uri.scheme] || 80; + } + + uri.port = parseInt(uri.port, 10); + + if (!uri.path) { + uri.path = "/"; + } + + delete uri.source; + + return uri; + }; + + /** + Resolve url - among other things will turn relative url to absolute + + @method resolveUrl + @static + @param {String} url Either absolute or relative + @return {String} Resolved, absolute url + */ + var resolveUrl = function(url) { + var ports = { // we ignore default ports + http: 80, + https: 443 + } + , urlp = parseUrl(url) + ; + + return urlp.scheme + '://' + urlp.host + (urlp.port !== ports[urlp.scheme] ? ':' + urlp.port : '') + urlp.path + (urlp.query ? urlp.query : ''); + }; + + /** + Check if specified url has the same origin as the current document + + @method hasSameOrigin + @param {String|Object} url + @return {Boolean} + */ + var hasSameOrigin = function(url) { + function origin(url) { + return [url.scheme, url.host, url.port].join('/'); + } + + if (typeof url === 'string') { + url = parseUrl(url); + } + + return origin(parseUrl()) === origin(url); + }; + + return { + parseUrl: parseUrl, + resolveUrl: resolveUrl, + hasSameOrigin: hasSameOrigin + }; +}); + +// Included from: src/javascript/file/FileReaderSync.js + +/** + * FileReaderSync.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileReaderSync', [ + 'moxie/core/utils/Basic', + 'moxie/runtime/RuntimeClient', + 'moxie/core/utils/Encode' +], function(Basic, RuntimeClient, Encode) { + /** + Synchronous FileReader implementation. Something like this is available in WebWorkers environment, here + it can be used to read only preloaded blobs/files and only below certain size (not yet sure what that'd be, + but probably < 1mb). Not meant to be used directly by user. + + @class FileReaderSync + @private + @constructor + */ + return function() { + RuntimeClient.call(this); + + Basic.extend(this, { + uid: Basic.guid('uid_'), + + readAsBinaryString: function(blob) { + return _read.call(this, 'readAsBinaryString', blob); + }, + + readAsDataURL: function(blob) { + return _read.call(this, 'readAsDataURL', blob); + }, + + /*readAsArrayBuffer: function(blob) { + return _read.call(this, 'readAsArrayBuffer', blob); + },*/ + + readAsText: function(blob) { + return _read.call(this, 'readAsText', blob); + } + }); + + function _read(op, blob) { + if (blob.isDetached()) { + var src = blob.getSource(); + switch (op) { + case 'readAsBinaryString': + return src; + case 'readAsDataURL': + return 'data:' + blob.type + ';base64,' + Encode.btoa(src); + case 'readAsText': + var txt = ''; + for (var i = 0, length = src.length; i < length; i++) { + txt += String.fromCharCode(src[i]); + } + return txt; + } + } else { + var result = this.connectRuntime(blob.ruid).exec.call(this, 'FileReaderSync', 'read', op, blob); + this.disconnectRuntime(); + return result; + } + } + }; +}); + +// Included from: src/javascript/xhr/FormData.js + +/** + * FormData.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/xhr/FormData", [ + "moxie/core/Exceptions", + "moxie/core/utils/Basic", + "moxie/file/Blob" +], function(x, Basic, Blob) { + /** + FormData + + @class FormData + @constructor + */ + function FormData() { + var _blob, _fields = []; + + Basic.extend(this, { + /** + Append another key-value pair to the FormData object + + @method append + @param {String} name Name for the new field + @param {String|Blob|Array|Object} value Value for the field + */ + append: function(name, value) { + var self = this, valueType = Basic.typeOf(value); + + // according to specs value might be either Blob or String + if (value instanceof Blob) { + _blob = { + name: name, + value: value // unfortunately we can only send single Blob in one FormData + }; + } else if ('array' === valueType) { + name += '[]'; + + Basic.each(value, function(value) { + self.append(name, value); + }); + } else if ('object' === valueType) { + Basic.each(value, function(value, key) { + self.append(name + '[' + key + ']', value); + }); + } else if ('null' === valueType || 'undefined' === valueType || 'number' === valueType && isNaN(value)) { + self.append(name, "false"); + } else { + _fields.push({ + name: name, + value: value.toString() + }); + } + }, + + /** + Checks if FormData contains Blob. + + @method hasBlob + @return {Boolean} + */ + hasBlob: function() { + return !!this.getBlob(); + }, + + /** + Retrieves blob. + + @method getBlob + @return {Object} Either Blob if found or null + */ + getBlob: function() { + return _blob && _blob.value || null; + }, + + /** + Retrieves blob field name. + + @method getBlobName + @return {String} Either Blob field name or null + */ + getBlobName: function() { + return _blob && _blob.name || null; + }, + + /** + Loop over the fields in FormData and invoke the callback for each of them. + + @method each + @param {Function} cb Callback to call for each field + */ + each: function(cb) { + Basic.each(_fields, function(field) { + cb(field.value, field.name); + }); + + if (_blob) { + cb(_blob.value, _blob.name); + } + }, + + destroy: function() { + _blob = null; + _fields = []; + } + }); + } + + return FormData; +}); + +// Included from: src/javascript/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/xhr/XMLHttpRequest", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/core/EventTarget", + "moxie/core/utils/Encode", + "moxie/core/utils/Url", + "moxie/runtime/Runtime", + "moxie/runtime/RuntimeTarget", + "moxie/file/Blob", + "moxie/file/FileReaderSync", + "moxie/xhr/FormData", + "moxie/core/utils/Env", + "moxie/core/utils/Mime" +], function(Basic, x, EventTarget, Encode, Url, Runtime, RuntimeTarget, Blob, FileReaderSync, FormData, Env, Mime) { + + var httpCode = { + 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' + }; + + function XMLHttpRequestUpload() { + this.uid = Basic.guid('uid_'); + } + + XMLHttpRequestUpload.prototype = EventTarget.instance; + + /** + Implementation of XMLHttpRequest + + @class XMLHttpRequest + @constructor + @uses RuntimeClient + @extends EventTarget + */ + var dispatches = ['loadstart', 'progress', 'abort', 'error', 'load', 'timeout', 'loadend']; // & readystatechange (for historical reasons) + + var NATIVE = 1, RUNTIME = 2; + + function XMLHttpRequest() { + var self = this, + // this (together with _p() @see below) is here to gracefully upgrade to setter/getter syntax where possible + props = { + /** + The amount of milliseconds a request can take before being terminated. Initially zero. Zero means there is no timeout. + + @property timeout + @type Number + @default 0 + */ + timeout: 0, + + /** + Current state, can take following values: + UNSENT (numeric value 0) + The object has been constructed. + + OPENED (numeric value 1) + The open() method has been successfully invoked. During this state request headers can be set using setRequestHeader() and the request can be made using the send() method. + + HEADERS_RECEIVED (numeric value 2) + All redirects (if any) have been followed and all HTTP headers of the final response have been received. Several response members of the object are now available. + + LOADING (numeric value 3) + The response entity body is being received. + + DONE (numeric value 4) + + @property readyState + @type Number + @default 0 (UNSENT) + */ + readyState: XMLHttpRequest.UNSENT, + + /** + True when user credentials are to be included in a cross-origin request. False when they are to be excluded + in a cross-origin request and when cookies are to be ignored in its response. Initially false. + + @property withCredentials + @type Boolean + @default false + */ + withCredentials: false, + + /** + Returns the HTTP status code. + + @property status + @type Number + @default 0 + */ + status: 0, + + /** + Returns the HTTP status text. + + @property statusText + @type String + */ + statusText: "", + + /** + Returns the response type. Can be set to change the response type. Values are: + the empty string (default), "arraybuffer", "blob", "document", "json", and "text". + + @property responseType + @type String + */ + responseType: "", + + /** + Returns the document response entity body. + + Throws an "InvalidStateError" exception if responseType is not the empty string or "document". + + @property responseXML + @type Document + */ + responseXML: null, + + /** + Returns the text response entity body. + + Throws an "InvalidStateError" exception if responseType is not the empty string or "text". + + @property responseText + @type String + */ + responseText: null, + + /** + Returns the response entity body (http://www.w3.org/TR/XMLHttpRequest/#response-entity-body). + Can become: ArrayBuffer, Blob, Document, JSON, Text + + @property response + @type Mixed + */ + response: null + }, + + _async = true, + _url, + _method, + _headers = {}, + _user, + _password, + _encoding = null, + _mimeType = null, + + // flags + _sync_flag = false, + _send_flag = false, + _upload_events_flag = false, + _upload_complete_flag = false, + _error_flag = false, + _same_origin_flag = false, + + // times + _start_time, + _timeoutset_time, + + _finalMime = null, + _finalCharset = null, + + _options = {}, + _xhr, + _responseHeaders = '', + _responseHeadersBag + ; + + + Basic.extend(this, props, { + /** + Unique id of the component + + @property uid + @type String + */ + uid: Basic.guid('uid_'), + + /** + Target for Upload events + + @property upload + @type XMLHttpRequestUpload + */ + upload: new XMLHttpRequestUpload(), + + + /** + Sets the request method, request URL, synchronous flag, request username, and request password. + + Throws a "SyntaxError" exception if one of the following is true: + + method is not a valid HTTP method. + url cannot be resolved. + url contains the "user:password" format in the userinfo production. + Throws a "SecurityError" exception if method is a case-insensitive match for CONNECT, TRACE or TRACK. + + Throws an "InvalidAccessError" exception if one of the following is true: + + Either user or password is passed as argument and the origin of url does not match the XMLHttpRequest origin. + There is an associated XMLHttpRequest document and either the timeout attribute is not zero, + the withCredentials attribute is true, or the responseType attribute is not the empty string. + + + @method open + @param {String} method HTTP method to use on request + @param {String} url URL to request + @param {Boolean} [async=true] If false request will be done in synchronous manner. Asynchronous by default. + @param {String} [user] Username to use in HTTP authentication process on server-side + @param {String} [password] Password to use in HTTP authentication process on server-side + */ + open: function(method, url, async, user, password) { + var urlp; + + // first two arguments are required + if (!method || !url) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 2 - check if any code point in method is higher than U+00FF or after deflating method it does not match the method + if (/[\u0100-\uffff]/.test(method) || Encode.utf8_encode(method) !== method) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 3 + if (!!~Basic.inArray(method.toUpperCase(), ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'TRACE', 'TRACK'])) { + _method = method.toUpperCase(); + } + + + // 4 - allowing these methods poses a security risk + if (!!~Basic.inArray(_method, ['CONNECT', 'TRACE', 'TRACK'])) { + throw new x.DOMException(x.DOMException.SECURITY_ERR); + } + + // 5 + url = Encode.utf8_encode(url); + + // 6 - Resolve url relative to the XMLHttpRequest base URL. If the algorithm returns an error, throw a "SyntaxError". + urlp = Url.parseUrl(url); + + _same_origin_flag = Url.hasSameOrigin(urlp); + + // 7 - manually build up absolute url + _url = Url.resolveUrl(url); + + // 9-10, 12-13 + if ((user || password) && !_same_origin_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + _user = user || urlp.user; + _password = password || urlp.pass; + + // 11 + _async = async || true; + + if (_async === false && (_p('timeout') || _p('withCredentials') || _p('responseType') !== "")) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // 14 - terminate abort() + + // 15 - terminate send() + + // 18 + _sync_flag = !_async; + _send_flag = false; + _headers = {}; + _reset.call(this); + + // 19 + _p('readyState', XMLHttpRequest.OPENED); + + // 20 + this.convertEventPropsToHandlers(['readystatechange']); // unify event handlers + this.dispatchEvent('readystatechange'); + }, + + /** + Appends an header to the list of author request headers, or if header is already + in the list of author request headers, combines its value with value. + + Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set. + Throws a "SyntaxError" exception if header is not a valid HTTP header field name or if value + is not a valid HTTP header field value. + + @method setRequestHeader + @param {String} header + @param {String|Number} value + */ + setRequestHeader: function(header, value) { + var uaHeaders = [ // these headers are controlled by the user agent + "accept-charset", + "accept-encoding", + "access-control-request-headers", + "access-control-request-method", + "connection", + "content-length", + "cookie", + "cookie2", + "content-transfer-encoding", + "date", + "expect", + "host", + "keep-alive", + "origin", + "referer", + "te", + "trailer", + "transfer-encoding", + "upgrade", + "user-agent", + "via" + ]; + + // 1-2 + if (_p('readyState') !== XMLHttpRequest.OPENED || _send_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 3 + if (/[\u0100-\uffff]/.test(header) || Encode.utf8_encode(header) !== header) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 4 + /* this step is seemingly bypassed in browsers, probably to allow various unicode characters in header values + if (/[\u0100-\uffff]/.test(value) || Encode.utf8_encode(value) !== value) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + }*/ + + header = Basic.trim(header).toLowerCase(); + + // setting of proxy-* and sec-* headers is prohibited by spec + if (!!~Basic.inArray(header, uaHeaders) || /^(proxy\-|sec\-)/.test(header)) { + return false; + } + + // camelize + // browsers lowercase header names (at least for custom ones) + // header = header.replace(/\b\w/g, function($1) { return $1.toUpperCase(); }); + + if (!_headers[header]) { + _headers[header] = value; + } else { + // http://tools.ietf.org/html/rfc2616#section-4.2 (last paragraph) + _headers[header] += ', ' + value; + } + return true; + }, + + /** + Returns all headers from the response, with the exception of those whose field name is Set-Cookie or Set-Cookie2. + + @method getAllResponseHeaders + @return {String} reponse headers or empty string + */ + getAllResponseHeaders: function() { + return _responseHeaders || ''; + }, + + /** + Returns the header field value from the response of which the field name matches header, + unless the field name is Set-Cookie or Set-Cookie2. + + @method getResponseHeader + @param {String} header + @return {String} value(s) for the specified header or null + */ + getResponseHeader: function(header) { + header = header.toLowerCase(); + + if (_error_flag || !!~Basic.inArray(header, ['set-cookie', 'set-cookie2'])) { + return null; + } + + if (_responseHeaders && _responseHeaders !== '') { + // if we didn't parse response headers until now, do it and keep for later + if (!_responseHeadersBag) { + _responseHeadersBag = {}; + Basic.each(_responseHeaders.split(/\r\n/), function(line) { + var pair = line.split(/:\s+/); + if (pair.length === 2) { // last line might be empty, omit + pair[0] = Basic.trim(pair[0]); // just in case + _responseHeadersBag[pair[0].toLowerCase()] = { // simply to retain header name in original form + header: pair[0], + value: Basic.trim(pair[1]) + }; + } + }); + } + if (_responseHeadersBag.hasOwnProperty(header)) { + return _responseHeadersBag[header].header + ': ' + _responseHeadersBag[header].value; + } + } + return null; + }, + + /** + Sets the Content-Type header for the response to mime. + Throws an "InvalidStateError" exception if the state is LOADING or DONE. + Throws a "SyntaxError" exception if mime is not a valid media type. + + @method overrideMimeType + @param String mime Mime type to set + */ + overrideMimeType: function(mime) { + var matches, charset; + + // 1 + if (!!~Basic.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2 + mime = Basic.trim(mime.toLowerCase()); + + if (/;/.test(mime) && (matches = mime.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))) { + mime = matches[1]; + if (matches[2]) { + charset = matches[2]; + } + } + + if (!Mime.mimes[mime]) { + throw new x.DOMException(x.DOMException.SYNTAX_ERR); + } + + // 3-4 + _finalMime = mime; + _finalCharset = charset; + }, + + /** + Initiates the request. The optional argument provides the request entity body. + The argument is ignored if request method is GET or HEAD. + + Throws an "InvalidStateError" exception if the state is not OPENED or if the send() flag is set. + + @method send + @param {Blob|Document|String|FormData} [data] Request entity body + @param {Object} [options] Set of requirements and pre-requisities for runtime initialization + */ + send: function(data, options) { + if (Basic.typeOf(options) === 'string') { + _options = { ruid: options }; + } else if (!options) { + _options = {}; + } else { + _options = options; + } + + this.convertEventPropsToHandlers(dispatches); + this.upload.convertEventPropsToHandlers(dispatches); + + // 1-2 + if (this.readyState !== XMLHttpRequest.OPENED || _send_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 3 + // sending Blob + if (data instanceof Blob) { + _options.ruid = data.ruid; + _mimeType = data.type || 'application/octet-stream'; + } + + // FormData + else if (data instanceof FormData) { + if (data.hasBlob()) { + var blob = data.getBlob(); + _options.ruid = blob.ruid; + _mimeType = blob.type || 'application/octet-stream'; + } + } + + // DOMString + else if (typeof data === 'string') { + _encoding = 'UTF-8'; + _mimeType = 'text/plain;charset=UTF-8'; + + // data should be converted to Unicode and encoded as UTF-8 + data = Encode.utf8_encode(data); + } + + // if withCredentials not set, but requested, set it automatically + if (!this.withCredentials) { + this.withCredentials = (_options.required_caps && _options.required_caps.send_browser_cookies) && !_same_origin_flag; + } + + // 4 - storage mutex + // 5 + _upload_events_flag = (!_sync_flag && this.upload.hasEventListener()); // DSAP + // 6 + _error_flag = false; + // 7 + _upload_complete_flag = !data; + // 8 - Asynchronous steps + if (!_sync_flag) { + // 8.1 + _send_flag = true; + // 8.2 + // this.dispatchEvent('loadstart'); // will be dispatched either by native or runtime xhr + // 8.3 + //if (!_upload_complete_flag) { + // this.upload.dispatchEvent('loadstart'); // will be dispatched either by native or runtime xhr + //} + } + // 8.5 - Return the send() method call, but continue running the steps in this algorithm. + _doXHR.call(this, data); + }, + + /** + Cancels any network activity. + + @method abort + */ + abort: function() { + _error_flag = true; + _sync_flag = false; + + if (!~Basic.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED, XMLHttpRequest.DONE])) { + _p('readyState', XMLHttpRequest.DONE); + _send_flag = false; + + if (_xhr) { + _xhr.getRuntime().exec.call(_xhr, 'XMLHttpRequest', 'abort', _upload_complete_flag); + } else { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + _upload_complete_flag = true; + } else { + _p('readyState', XMLHttpRequest.UNSENT); + } + }, + + destroy: function() { + if (_xhr) { + if (Basic.typeOf(_xhr.destroy) === 'function') { + _xhr.destroy(); + } + _xhr = null; + } + + this.unbindAll(); + + if (this.upload) { + this.upload.unbindAll(); + this.upload = null; + } + } + }); + + /* this is nice, but maybe too lengthy + + // if supported by JS version, set getters/setters for specific properties + o.defineProperty(this, 'readyState', { + configurable: false, + + get: function() { + return _p('readyState'); + } + }); + + o.defineProperty(this, 'timeout', { + configurable: false, + + get: function() { + return _p('timeout'); + }, + + set: function(value) { + + if (_sync_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // timeout still should be measured relative to the start time of request + _timeoutset_time = (new Date).getTime(); + + _p('timeout', value); + } + }); + + // the withCredentials attribute has no effect when fetching same-origin resources + o.defineProperty(this, 'withCredentials', { + configurable: false, + + get: function() { + return _p('withCredentials'); + }, + + set: function(value) { + // 1-2 + if (!~o.inArray(_p('readyState'), [XMLHttpRequest.UNSENT, XMLHttpRequest.OPENED]) || _send_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 3-4 + if (_anonymous_flag || _sync_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // 5 + _p('withCredentials', value); + } + }); + + o.defineProperty(this, 'status', { + configurable: false, + + get: function() { + return _p('status'); + } + }); + + o.defineProperty(this, 'statusText', { + configurable: false, + + get: function() { + return _p('statusText'); + } + }); + + o.defineProperty(this, 'responseType', { + configurable: false, + + get: function() { + return _p('responseType'); + }, + + set: function(value) { + // 1 + if (!!~o.inArray(_p('readyState'), [XMLHttpRequest.LOADING, XMLHttpRequest.DONE])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2 + if (_sync_flag) { + throw new x.DOMException(x.DOMException.INVALID_ACCESS_ERR); + } + + // 3 + _p('responseType', value.toLowerCase()); + } + }); + + o.defineProperty(this, 'responseText', { + configurable: false, + + get: function() { + // 1 + if (!~o.inArray(_p('responseType'), ['', 'text'])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2-3 + if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + return _p('responseText'); + } + }); + + o.defineProperty(this, 'responseXML', { + configurable: false, + + get: function() { + // 1 + if (!~o.inArray(_p('responseType'), ['', 'document'])) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // 2-3 + if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + return _p('responseXML'); + } + }); + + o.defineProperty(this, 'response', { + configurable: false, + + get: function() { + if (!!~o.inArray(_p('responseType'), ['', 'text'])) { + if (_p('readyState') !== XMLHttpRequest.DONE && _p('readyState') !== XMLHttpRequest.LOADING || _error_flag) { + return ''; + } + } + + if (_p('readyState') !== XMLHttpRequest.DONE || _error_flag) { + return null; + } + + return _p('response'); + } + }); + + */ + + function _p(prop, value) { + if (!props.hasOwnProperty(prop)) { + return; + } + if (arguments.length === 1) { // get + return Env.can('define_property') ? props[prop] : self[prop]; + } else { // set + if (Env.can('define_property')) { + props[prop] = value; + } else { + self[prop] = value; + } + } + } + + /* + function _toASCII(str, AllowUnassigned, UseSTD3ASCIIRules) { + // TODO: http://tools.ietf.org/html/rfc3490#section-4.1 + return str.toLowerCase(); + } + */ + + + function _doXHR(data) { + var self = this; + + _start_time = new Date().getTime(); + + _xhr = new RuntimeTarget(); + + function loadEnd() { + _xhr.destroy(); + _xhr = null; + self.dispatchEvent('loadend'); + self = null; + } + + function exec(runtime) { + _xhr.bind('LoadStart', function(e) { + _p('readyState', XMLHttpRequest.LOADING); + self.dispatchEvent('readystatechange'); + + self.dispatchEvent(e); + + if (_upload_events_flag) { + self.upload.dispatchEvent(e); + } + }); + + _xhr.bind('Progress', function(e) { + if (_p('readyState') !== XMLHttpRequest.LOADING) { + _p('readyState', XMLHttpRequest.LOADING); // LoadStart unreliable (in Flash for example) + self.dispatchEvent('readystatechange'); + } + self.dispatchEvent(e); + }); + + _xhr.bind('UploadProgress', function(e) { + if (_upload_events_flag) { + self.upload.dispatchEvent({ + type: 'progress', + lengthComputable: false, + total: e.total, + loaded: e.loaded + }); + } + }); + + _xhr.bind('Load', function(e) { + _p('readyState', XMLHttpRequest.DONE); + _p('status', Number(runtime.exec.call(_xhr, 'XMLHttpRequest', 'getStatus') || 0)); + _p('statusText', httpCode[_p('status')] || ""); + + _p('response', runtime.exec.call(_xhr, 'XMLHttpRequest', 'getResponse', _p('responseType'))); + + if (!!~Basic.inArray(_p('responseType'), ['text', ''])) { + _p('responseText', _p('response')); + } else if (_p('responseType') === 'document') { + _p('responseXML', _p('response')); + } + + _responseHeaders = runtime.exec.call(_xhr, 'XMLHttpRequest', 'getAllResponseHeaders'); + + self.dispatchEvent('readystatechange'); + + if (_p('status') > 0) { // status 0 usually means that server is unreachable + if (_upload_events_flag) { + self.upload.dispatchEvent(e); + } + self.dispatchEvent(e); + } else { + _error_flag = true; + self.dispatchEvent('error'); + } + loadEnd(); + }); + + _xhr.bind('Abort', function(e) { + self.dispatchEvent(e); + loadEnd(); + }); + + _xhr.bind('Error', function(e) { + _error_flag = true; + _p('readyState', XMLHttpRequest.DONE); + self.dispatchEvent('readystatechange'); + _upload_complete_flag = true; + self.dispatchEvent(e); + loadEnd(); + }); + + runtime.exec.call(_xhr, 'XMLHttpRequest', 'send', { + url: _url, + method: _method, + async: _async, + user: _user, + password: _password, + headers: _headers, + mimeType: _mimeType, + encoding: _encoding, + responseType: self.responseType, + withCredentials: self.withCredentials, + options: _options + }, data); + } + + // clarify our requirements + if (typeof(_options.required_caps) === 'string') { + _options.required_caps = Runtime.parseCaps(_options.required_caps); + } + + _options.required_caps = Basic.extend({}, _options.required_caps, { + return_response_type: self.responseType + }); + + if (data instanceof FormData) { + _options.required_caps.send_multipart = true; + } + + if (!_same_origin_flag) { + _options.required_caps.do_cors = true; + } + + + if (_options.ruid) { // we do not need to wait if we can connect directly + exec(_xhr.connectRuntime(_options)); + } else { + _xhr.bind('RuntimeInit', function(e, runtime) { + exec(runtime); + }); + _xhr.bind('RuntimeError', function(e, err) { + self.dispatchEvent('RuntimeError', err); + }); + _xhr.connectRuntime(_options); + } + } + + + function _reset() { + _p('responseText', ""); + _p('responseXML', null); + _p('response', null); + _p('status', 0); + _p('statusText', ""); + _start_time = _timeoutset_time = null; + } + } + + XMLHttpRequest.UNSENT = 0; + XMLHttpRequest.OPENED = 1; + XMLHttpRequest.HEADERS_RECEIVED = 2; + XMLHttpRequest.LOADING = 3; + XMLHttpRequest.DONE = 4; + + XMLHttpRequest.prototype = EventTarget.instance; + + return XMLHttpRequest; +}); + +// Included from: src/javascript/runtime/Transporter.js + +/** + * Transporter.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/runtime/Transporter", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Encode", + "moxie/runtime/RuntimeClient", + "moxie/core/EventTarget" +], function(Basic, Encode, RuntimeClient, EventTarget) { + function Transporter() { + var mod, _runtime, _data, _size, _pos, _chunk_size; + + RuntimeClient.call(this); + + Basic.extend(this, { + uid: Basic.guid('uid_'), + + state: Transporter.IDLE, + + result: null, + + transport: function(data, type, options) { + var self = this; + + options = Basic.extend({ + chunk_size: 204798 + }, options); + + // should divide by three, base64 requires this + if ((mod = options.chunk_size % 3)) { + options.chunk_size += 3 - mod; + } + + _chunk_size = options.chunk_size; + + _reset.call(this); + _data = data; + _size = data.length; + + if (Basic.typeOf(options) === 'string' || options.ruid) { + _run.call(self, type, this.connectRuntime(options)); + } else { + // we require this to run only once + var cb = function(e, runtime) { + self.unbind("RuntimeInit", cb); + _run.call(self, type, runtime); + }; + this.bind("RuntimeInit", cb); + this.connectRuntime(options); + } + }, + + abort: function() { + var self = this; + + self.state = Transporter.IDLE; + if (_runtime) { + _runtime.exec.call(self, 'Transporter', 'clear'); + self.trigger("TransportingAborted"); + } + + _reset.call(self); + }, + + + destroy: function() { + this.unbindAll(); + _runtime = null; + this.disconnectRuntime(); + _reset.call(this); + } + }); + + function _reset() { + _size = _pos = 0; + _data = this.result = null; + } + + function _run(type, runtime) { + var self = this; + + _runtime = runtime; + + //self.unbind("RuntimeInit"); + + self.bind("TransportingProgress", function(e) { + _pos = e.loaded; + + if (_pos < _size && Basic.inArray(self.state, [Transporter.IDLE, Transporter.DONE]) === -1) { + _transport.call(self); + } + }, 999); + + self.bind("TransportingComplete", function() { + _pos = _size; + self.state = Transporter.DONE; + _data = null; // clean a bit + self.result = _runtime.exec.call(self, 'Transporter', 'getAsBlob', type || ''); + }, 999); + + self.state = Transporter.BUSY; + self.trigger("TransportingStarted"); + _transport.call(self); + } + + function _transport() { + var self = this, + chunk, + bytesLeft = _size - _pos; + + if (_chunk_size > bytesLeft) { + _chunk_size = bytesLeft; + } + + chunk = Encode.btoa(_data.substr(_pos, _chunk_size)); + _runtime.exec.call(self, 'Transporter', 'receive', chunk, _size); + } + } + + Transporter.IDLE = 0; + Transporter.BUSY = 1; + Transporter.DONE = 2; + + Transporter.prototype = EventTarget.instance; + + return Transporter; +}); + +// Included from: src/javascript/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/image/Image", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/Exceptions", + "moxie/file/FileReaderSync", + "moxie/xhr/XMLHttpRequest", + "moxie/runtime/Runtime", + "moxie/runtime/RuntimeClient", + "moxie/runtime/Transporter", + "moxie/core/utils/Env", + "moxie/core/EventTarget", + "moxie/file/Blob", + "moxie/file/File", + "moxie/core/utils/Encode" +], function(Basic, Dom, x, FileReaderSync, XMLHttpRequest, Runtime, RuntimeClient, Transporter, Env, EventTarget, Blob, File, Encode) { + /** + Image preloading and manipulation utility. Additionally it provides access to image meta info (Exif, GPS) and raw binary data. + + @class Image + @constructor + @extends EventTarget + */ + var dispatches = [ + 'progress', + + /** + Dispatched when loading is complete. + + @event load + @param {Object} event + */ + 'load', + + 'error', + + /** + Dispatched when resize operation is complete. + + @event resize + @param {Object} event + */ + 'resize', + + /** + Dispatched when visual representation of the image is successfully embedded + into the corresponsing container. + + @event embedded + @param {Object} event + */ + 'embedded' + ]; + + function Image() { + RuntimeClient.call(this); + + Basic.extend(this, { + /** + Unique id of the component + + @property uid + @type {String} + */ + uid: Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if any. + + @property ruid + @type {String} + */ + ruid: null, + + /** + Name of the file, that was used to create an image, if available. If not equals to empty string. + + @property name + @type {String} + @default "" + */ + name: "", + + /** + Size of the image in bytes. Actual value is set only after image is preloaded. + + @property size + @type {Number} + @default 0 + */ + size: 0, + + /** + Width of the image. Actual value is set only after image is preloaded. + + @property width + @type {Number} + @default 0 + */ + width: 0, + + /** + Height of the image. Actual value is set only after image is preloaded. + + @property height + @type {Number} + @default 0 + */ + height: 0, + + /** + Mime type of the image. Currently only image/jpeg and image/png are supported. Actual value is set only after image is preloaded. + + @property type + @type {String} + @default "" + */ + type: "", + + /** + Holds meta info (Exif, GPS). Is populated only for image/jpeg. Actual value is set only after image is preloaded. + + @property meta + @type {Object} + @default {} + */ + meta: {}, + + /** + Alias for load method, that takes another mOxie.Image object as a source (see load). + + @method clone + @param {Image} src Source for the image + @param {Boolean} [exact=false] Whether to activate in-depth clone mode + */ + clone: function() { + this.load.apply(this, arguments); + }, + + /** + Loads image from various sources. Currently the source for new image can be: mOxie.Image, mOxie.Blob/mOxie.File, + native Blob/File, dataUrl or URL. Depending on the type of the source, arguments - differ. When source is URL, + Image will be downloaded from remote destination and loaded in memory. + + @example + var img = new mOxie.Image(); + img.onload = function() { + var blob = img.getAsBlob(); + + var formData = new mOxie.FormData(); + formData.append('file', blob); + + var xhr = new mOxie.XMLHttpRequest(); + xhr.onload = function() { + // upload complete + }; + xhr.open('post', 'upload.php'); + xhr.send(formData); + }; + img.load("http://www.moxiecode.com/images/mox-logo.jpg"); // notice file extension (.jpg) + + + @method load + @param {Image|Blob|File|String} src Source for the image + @param {Boolean|Object} [mixed] + */ + load: function() { + // this is here because to bind properly we need an uid first, which is created above + this.bind('Load Resize', function() { + _updateInfo.call(this); + }, 999); + + this.convertEventPropsToHandlers(dispatches); + + _load.apply(this, arguments); + }, + + /** + Downsizes the image to fit the specified width/height. If crop is supplied, image will be cropped to exact dimensions. + + @method downsize + @param {Number} width Resulting width + @param {Number} [height=width] Resulting height (optional, if not supplied will default to width) + @param {Boolean} [crop=false] Whether to crop the image to exact dimensions + @param {Boolean} [preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize) + */ + downsize: function(width, height, crop, preserveHeaders) { + try { + if (!this.size) { // only preloaded image objects can be used as source + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + // no way to reliably intercept the crash due to high resolution, so we simply avoid it + if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) { + throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR); + } + + if (!width && !height || Basic.typeOf(crop) === 'undefined') { + crop = false; + } + + width = width || this.width; + height = height || this.height; + + preserveHeaders = (Basic.typeOf(preserveHeaders) === 'undefined' ? true : !!preserveHeaders); + + this.getRuntime().exec.call(this, 'Image', 'downsize', width, height, crop, preserveHeaders); + } catch(ex) { + // for now simply trigger error event + this.trigger('error', ex); + } + }, + + /** + Alias for downsize(width, height, true). (see downsize) + + @method crop + @param {Number} width Resulting width + @param {Number} [height=width] Resulting height (optional, if not supplied will default to width) + @param {Boolean} [preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize) + */ + crop: function(width, height, preserveHeaders) { + this.downsize(width, height, true, preserveHeaders); + }, + + getAsCanvas: function() { + if (!Env.can('create_canvas')) { + throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR); + } + + var runtime = this.connectRuntime(this.ruid); + return runtime.exec.call(this, 'Image', 'getAsCanvas'); + }, + + /** + Retrieves image in it's current state as mOxie.Blob object. Cannot be run on empty or image in progress (throws + DOMException.INVALID_STATE_ERR). + + @method getAsBlob + @param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png + @param {Number} [quality=90] Applicable only together with mime type image/jpeg + @return {Blob} Image as Blob + */ + getAsBlob: function(type, quality) { + if (!this.size) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + if (!type) { + type = 'image/jpeg'; + } + + if (type === 'image/jpeg' && !quality) { + quality = 90; + } + + return this.getRuntime().exec.call(this, 'Image', 'getAsBlob', type, quality); + }, + + /** + Retrieves image in it's current state as dataURL string. Cannot be run on empty or image in progress (throws + DOMException.INVALID_STATE_ERR). + + @method getAsDataURL + @param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png + @param {Number} [quality=90] Applicable only together with mime type image/jpeg + @return {String} Image as dataURL string + */ + getAsDataURL: function(type, quality) { + if (!this.size) { + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + return this.getRuntime().exec.call(this, 'Image', 'getAsDataURL', type, quality); + }, + + /** + Retrieves image in it's current state as binary string. Cannot be run on empty or image in progress (throws + DOMException.INVALID_STATE_ERR). + + @method getAsBinaryString + @param {String} [type="image/jpeg"] Mime type of resulting blob. Can either be image/jpeg or image/png + @param {Number} [quality=90] Applicable only together with mime type image/jpeg + @return {String} Image as binary string + */ + getAsBinaryString: function(type, quality) { + var dataUrl = this.getAsDataURL(type, quality); + return Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)); + }, + + /** + Embeds the image, or better to say, it's visual representation into the specified node. Depending on the runtime + in use, might be a canvas, or image (actual ) element or shim object (Flash or SilverLight - very rare, used for + legacy browsers that do not have canvas or proper dataURI support). + + @method embed + @param {DOMElement} el DOM element to insert the image object into + @param {Object} options Set of key/value pairs controlling the mime type, dimensions and cropping factor of resulting + representation + */ + embed: function(el) { + var self = this + , imgCopy + , type, quality, crop + , options = arguments[1] || {} + , width = this.width + , height = this.height + , runtime // this has to be outside of all the closures to contain proper runtime + ; + + function onResize() { + // if possible, embed a canvas element directly + if (Env.can('create_canvas')) { + var canvas = imgCopy.getAsCanvas(); + if (canvas) { + el.appendChild(canvas); + canvas = null; + imgCopy.destroy(); + self.trigger('embedded'); + return; + } + } + + var dataUrl = imgCopy.getAsDataURL(type, quality); + if (!dataUrl) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + + if (Env.can('use_data_uri_of', dataUrl.length)) { + el.innerHTML = '<img src="' + dataUrl + '" width="' + imgCopy.width + '" height="' + imgCopy.height + '" />'; + imgCopy.destroy(); + self.trigger('embedded'); + } else { + var tr = new Transporter(); + + tr.bind("TransportingComplete", function() { + runtime = self.connectRuntime(this.result.ruid); + + self.bind("Embedded", function() { + // position and size properly + Basic.extend(runtime.getShimContainer().style, { + //position: 'relative', + top: '0px', + left: '0px', + width: imgCopy.width + 'px', + height: imgCopy.height + 'px' + }); + + // some shims (Flash/SilverLight) reinitialize, if parent element is hidden, reordered or it's + // position type changes (in Gecko), but since we basically need this only in IEs 6/7 and + // sometimes 8 and they do not have this problem, we can comment this for now + /*tr.bind("RuntimeInit", function(e, runtime) { + tr.destroy(); + runtime.destroy(); + onResize.call(self); // re-feed our image data + });*/ + + runtime = null; + }, 999); + + runtime.exec.call(self, "ImageView", "display", this.result.uid, width, height); + imgCopy.destroy(); + }); + + tr.transport(Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)), type, Basic.extend({}, options, { + required_caps: { + display_media: true + }, + runtime_order: 'flash,silverlight', + container: el + })); + } + } + + try { + if (!(el = Dom.get(el))) { + throw new x.DOMException(x.DOMException.INVALID_NODE_TYPE_ERR); + } + + if (!this.size) { // only preloaded image objects can be used as source + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + + if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) { + throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR); + } + + type = options.type || this.type || 'image/jpeg'; + quality = options.quality || 90; + crop = Basic.typeOf(options.crop) !== 'undefined' ? options.crop : false; + + // figure out dimensions for the thumb + if (options.width) { + width = options.width; + height = options.height || width; + } else { + // if container element has > 0 dimensions, take them + var dimensions = Dom.getSize(el); + if (dimensions.w && dimensions.h) { // both should be > 0 + width = dimensions.w; + height = dimensions.h; + } + } + + imgCopy = new Image(); + + imgCopy.bind("Resize", function() { + onResize.call(self); + }); + + imgCopy.bind("Load", function() { + imgCopy.downsize(width, height, crop, false); + }); + + imgCopy.clone(this, false); + + return imgCopy; + } catch(ex) { + // for now simply trigger error event + this.trigger('error', ex); + } + }, + + /** + Properly destroys the image and frees resources in use. If any. Recommended way to dispose mOxie.Image object. + + @method destroy + */ + destroy: function() { + if (this.ruid) { + this.getRuntime().exec.call(this, 'Image', 'destroy'); + this.disconnectRuntime(); + } + this.unbindAll(); + } + }); + + + function _updateInfo(info) { + if (!info) { + info = this.getRuntime().exec.call(this, 'Image', 'getInfo'); + } + + this.size = info.size; + this.width = info.width; + this.height = info.height; + this.type = info.type; + this.meta = info.meta; + + // update file name, only if empty + if (this.name === '') { + this.name = info.name; + } + } + + + function _load(src) { + var srcType = Basic.typeOf(src); + + try { + // if source is Image + if (src instanceof Image) { + if (!src.size) { // only preloaded image objects can be used as source + throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); + } + _loadFromImage.apply(this, arguments); + } + // if source is o.Blob/o.File + else if (src instanceof Blob) { + if (!~Basic.inArray(src.type, ['image/jpeg', 'image/png'])) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + _loadFromBlob.apply(this, arguments); + } + // if native blob/file + else if (Basic.inArray(srcType, ['blob', 'file']) !== -1) { + _load.call(this, new File(null, src), arguments[1]); + } + // if String + else if (srcType === 'string') { + // if dataUrl String + if (/^data:[^;]*;base64,/.test(src)) { + _load.call(this, new Blob(null, { data: src }), arguments[1]); + } + // else assume Url, either relative or absolute + else { + _loadFromUrl.apply(this, arguments); + } + } + // if source seems to be an img node + else if (srcType === 'node' && src.nodeName.toLowerCase() === 'img') { + _load.call(this, src.src, arguments[1]); + } + else { + throw new x.DOMException(x.DOMException.TYPE_MISMATCH_ERR); + } + } catch(ex) { + // for now simply trigger error event + this.trigger('error', ex); + } + } + + + function _loadFromImage(img, exact) { + var runtime = this.connectRuntime(img.ruid); + this.ruid = runtime.uid; + runtime.exec.call(this, 'Image', 'loadFromImage', img, (Basic.typeOf(exact) === 'undefined' ? true : exact)); + } + + + function _loadFromBlob(blob, options) { + var self = this; + + self.name = blob.name || ''; + + function exec(runtime) { + self.ruid = runtime.uid; + runtime.exec.call(self, 'Image', 'loadFromBlob', blob); + } + + if (blob.isDetached()) { + this.bind('RuntimeInit', function(e, runtime) { + exec(runtime); + }); + + // convert to object representation + if (options && typeof(options.required_caps) === 'string') { + options.required_caps = Runtime.parseCaps(options.required_caps); + } + + this.connectRuntime(Basic.extend({ + required_caps: { + access_image_binary: true, + resize_image: true + } + }, options)); + } else { + exec(this.connectRuntime(blob.ruid)); + } + } + + + function _loadFromUrl(url, options) { + var self = this, xhr; + + xhr = new XMLHttpRequest(); + + xhr.open('get', url); + xhr.responseType = 'blob'; + + xhr.onprogress = function(e) { + self.trigger(e); + }; + + xhr.onload = function() { + _loadFromBlob.call(self, xhr.response, true); + }; + + xhr.onerror = function(e) { + self.trigger(e); + }; + + xhr.onloadend = function() { + xhr.destroy(); + }; + + xhr.bind('RuntimeError', function(e, err) { + self.trigger('RuntimeError', err); + }); + + xhr.send(null, options); + } + } + + // virtual world will crash on you if image has a resolution higher than this: + Image.MAX_RESIZE_WIDTH = 6500; + Image.MAX_RESIZE_HEIGHT = 6500; + + Image.prototype = EventTarget.instance; + + return Image; +}); + +// Included from: src/javascript/runtime/html5/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global File:true */ + +/** +Defines constructor for HTML5 runtime. + +@class moxie/runtime/html5/Runtime +@private +*/ +define("moxie/runtime/html5/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/Runtime", + "moxie/core/utils/Env" +], function(Basic, x, Runtime, Env) { + + var type = "html5", extensions = {}; + + function Html5Runtime(options) { + var I = this + , Test = Runtime.capTest + , True = Runtime.capTrue + ; + + var caps = Basic.extend({ + access_binary: Test(window.FileReader || window.File && window.File.getAsDataURL), + access_image_binary: function() { + return I.can('access_binary') && !!extensions.Image; + }, + display_media: Test(Env.can('create_canvas') || Env.can('use_data_uri_over32kb')), + do_cors: Test(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()), + drag_and_drop: Test(function() { + // this comes directly from Modernizr: http://www.modernizr.com/ + var div = document.createElement('div'); + // IE has support for drag and drop since version 5, but doesn't support dropping files from desktop + return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && (Env.browser !== 'IE' || Env.version > 9); + }()), + filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest + return (Env.browser === 'Chrome' && Env.version >= 28) || (Env.browser === 'IE' && Env.version >= 10); + }()), + return_response_headers: True, + return_response_type: function(responseType) { + if (responseType === 'json' && !!window.JSON) { // we can fake this one even if it's not supported + return true; + } + return Env.can('return_response_type', responseType); + }, + return_status_code: True, + report_upload_progress: Test(window.XMLHttpRequest && new XMLHttpRequest().upload), + resize_image: function() { + return I.can('access_binary') && Env.can('create_canvas'); + }, + select_file: function() { + return Env.can('use_fileinput') && window.File; + }, + select_folder: function() { + return I.can('select_file') && Env.browser === 'Chrome' && Env.version >= 21; + }, + select_multiple: function() { + // it is buggy on Safari Windows and iOS + return I.can('select_file') && + !(Env.browser === 'Safari' && Env.os === 'Windows') && + !(Env.os === 'iOS' && Env.verComp(Env.osVersion, "7.0.4", '<')); + }, + send_binary_string: Test(window.XMLHttpRequest && (new XMLHttpRequest().sendAsBinary || (window.Uint8Array && window.ArrayBuffer))), + send_custom_headers: Test(window.XMLHttpRequest), + send_multipart: function() { + return !!(window.XMLHttpRequest && new XMLHttpRequest().upload && window.FormData) || I.can('send_binary_string'); + }, + slice_blob: Test(window.File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice)), + stream_upload: function(){ + return I.can('slice_blob') && I.can('send_multipart'); + }, + summon_file_dialog: Test(function() { // yeah... some dirty sniffing here... + return (Env.browser === 'Firefox' && Env.version >= 4) || + (Env.browser === 'Opera' && Env.version >= 12) || + (Env.browser === 'IE' && Env.version >= 10) || + !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']); + }()), + upload_filesize: True + }, + arguments[2] + ); + + Runtime.call(this, options, (arguments[1] || type), caps); + + + Basic.extend(this, { + + init : function() { + this.trigger("Init"); + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + destroy = I = null; + }; + }(this.destroy)) + }); + + Basic.extend(this.getShim(), extensions); + } + + Runtime.addConstructor(type, Html5Runtime); + + return extensions; +}); + +// Included from: src/javascript/runtime/html5/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/Blob +@private +*/ +define("moxie/runtime/html5/file/Blob", [ + "moxie/runtime/html5/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + function HTML5Blob() { + function w3cBlobSlice(blob, start, end) { + var blobSlice; + + if (window.File.prototype.slice) { + try { + blob.slice(); // depricated version will throw WRONG_ARGUMENTS_ERR exception + return blob.slice(start, end); + } catch (e) { + // depricated slice method + return blob.slice(start, end - start); + } + // slice method got prefixed: https://bugzilla.mozilla.org/show_bug.cgi?id=649672 + } else if ((blobSlice = window.File.prototype.webkitSlice || window.File.prototype.mozSlice)) { + return blobSlice.call(blob, start, end); + } else { + return null; // or throw some exception + } + } + + this.slice = function() { + return new Blob(this.getRuntime().uid, w3cBlobSlice.apply(this, arguments)); + }; + } + + return (extensions.Blob = HTML5Blob); +}); + +// Included from: src/javascript/core/utils/Events.js + +/** + * Events.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Events', [ + 'moxie/core/utils/Basic' +], function(Basic) { + var eventhash = {}, uid = 'moxie_' + Basic.guid(); + + // IE W3C like event funcs + function preventDefault() { + this.returnValue = false; + } + + function stopPropagation() { + this.cancelBubble = true; + } + + /** + Adds an event handler to the specified object and store reference to the handler + in objects internal Plupload registry (@see removeEvent). + + @method addEvent + @for Utils + @static + @param {Object} obj DOM element like object to add handler to. + @param {String} name Name to add event listener to. + @param {Function} callback Function to call when event occurs. + @param {String} [key] that might be used to add specifity to the event record. + */ + var addEvent = function(obj, name, callback, key) { + var func, events; + + name = name.toLowerCase(); + + // Add event listener + if (obj.addEventListener) { + func = callback; + + obj.addEventListener(name, func, false); + } else if (obj.attachEvent) { + func = function() { + var evt = window.event; + + if (!evt.target) { + evt.target = evt.srcElement; + } + + evt.preventDefault = preventDefault; + evt.stopPropagation = stopPropagation; + + callback(evt); + }; + + obj.attachEvent('on' + name, func); + } + + // Log event handler to objects internal mOxie registry + if (!obj[uid]) { + obj[uid] = Basic.guid(); + } + + if (!eventhash.hasOwnProperty(obj[uid])) { + eventhash[obj[uid]] = {}; + } + + events = eventhash[obj[uid]]; + + if (!events.hasOwnProperty(name)) { + events[name] = []; + } + + events[name].push({ + func: func, + orig: callback, // store original callback for IE + key: key + }); + }; + + + /** + Remove event handler from the specified object. If third argument (callback) + is not specified remove all events with the specified name. + + @method removeEvent + @static + @param {Object} obj DOM element to remove event listener(s) from. + @param {String} name Name of event listener to remove. + @param {Function|String} [callback] might be a callback or unique key to match. + */ + var removeEvent = function(obj, name, callback) { + var type, undef; + + name = name.toLowerCase(); + + if (obj[uid] && eventhash[obj[uid]] && eventhash[obj[uid]][name]) { + type = eventhash[obj[uid]][name]; + } else { + return; + } + + for (var i = type.length - 1; i >= 0; i--) { + // undefined or not, key should match + if (type[i].orig === callback || type[i].key === callback) { + if (obj.removeEventListener) { + obj.removeEventListener(name, type[i].func, false); + } else if (obj.detachEvent) { + obj.detachEvent('on'+name, type[i].func); + } + + type[i].orig = null; + type[i].func = null; + type.splice(i, 1); + + // If callback was passed we are done here, otherwise proceed + if (callback !== undef) { + break; + } + } + } + + // If event array got empty, remove it + if (!type.length) { + delete eventhash[obj[uid]][name]; + } + + // If mOxie registry has become empty, remove it + if (Basic.isEmptyObj(eventhash[obj[uid]])) { + delete eventhash[obj[uid]]; + + // IE doesn't let you remove DOM object property with - delete + try { + delete obj[uid]; + } catch(e) { + obj[uid] = undef; + } + } + }; + + + /** + Remove all kind of events from the specified object + + @method removeAllEvents + @static + @param {Object} obj DOM element to remove event listeners from. + @param {String} [key] unique key to match, when removing events. + */ + var removeAllEvents = function(obj, key) { + if (!obj || !obj[uid]) { + return; + } + + Basic.each(eventhash[obj[uid]], function(events, name) { + removeEvent(obj, name, key); + }); + }; + + return { + addEvent: addEvent, + removeEvent: removeEvent, + removeAllEvents: removeAllEvents + }; +}); + +// Included from: src/javascript/runtime/html5/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/FileInput +@private +*/ +define("moxie/runtime/html5/file/FileInput", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Events", + "moxie/core/utils/Mime", + "moxie/core/utils/Env" +], function(extensions, Basic, Dom, Events, Mime, Env) { + + function FileInput() { + var _files = [], _options; + + Basic.extend(this, { + init: function(options) { + var comp = this, I = comp.getRuntime(), input, shimContainer, mimes, browseButton, zIndex, top; + + _options = options; + _files = []; + + // figure out accept string + mimes = _options.accept.mimes || Mime.extList2mimes(_options.accept, I.can('filter_by_extension')); + + shimContainer = I.getShimContainer(); + + shimContainer.innerHTML = '<input id="' + I.uid +'" type="file" style="font-size:999px;opacity:0;"' + + (_options.multiple && I.can('select_multiple') ? 'multiple' : '') + + (_options.directory && I.can('select_folder') ? 'webkitdirectory directory' : '') + // Chrome 11+ + (mimes ? ' accept="' + mimes.join(',') + '"' : '') + ' />'; + + input = Dom.get(I.uid); + + // prepare file input to be placed underneath the browse_button element + Basic.extend(input.style, { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%' + }); + + + browseButton = Dom.get(_options.browse_button); + + // Route click event to the input[type=file] element for browsers that support such behavior + if (I.can('summon_file_dialog')) { + if (Dom.getStyle(browseButton, 'position') === 'static') { + browseButton.style.position = 'relative'; + } + + zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1; + + browseButton.style.zIndex = zIndex; + shimContainer.style.zIndex = zIndex - 1; + + Events.addEvent(browseButton, 'click', function(e) { + var input = Dom.get(I.uid); + if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file] + input.click(); + } + e.preventDefault(); + }, comp.uid); + } + + /* Since we have to place input[type=file] on top of the browse_button for some browsers, + browse_button loses interactivity, so we restore it here */ + top = I.can('summon_file_dialog') ? browseButton : shimContainer; + + Events.addEvent(top, 'mouseover', function() { + comp.trigger('mouseenter'); + }, comp.uid); + + Events.addEvent(top, 'mouseout', function() { + comp.trigger('mouseleave'); + }, comp.uid); + + Events.addEvent(top, 'mousedown', function() { + comp.trigger('mousedown'); + }, comp.uid); + + Events.addEvent(Dom.get(_options.container), 'mouseup', function() { + comp.trigger('mouseup'); + }, comp.uid); + + + input.onchange = function onChange() { // there should be only one handler for this + _files = []; + + if (_options.directory) { + // folders are represented by dots, filter them out (Chrome 11+) + Basic.each(this.files, function(file) { + if (file.name !== ".") { // if it doesn't looks like a folder + _files.push(file); + } + }); + } else { + _files = [].slice.call(this.files); + } + + // clearing the value enables the user to select the same file again if they want to + if (Env.browser !== 'IE') { + this.value = ''; + } else { + // in IE input[type="file"] is read-only so the only way to reset it is to re-insert it + var clone = this.cloneNode(true); + this.parentNode.replaceChild(clone, this); + clone.onchange = onChange; + } + comp.trigger('change'); + }; + + // ready event is perfectly asynchronous + comp.trigger({ + type: 'ready', + async: true + }); + + shimContainer = null; + }, + + getFiles: function() { + return _files; + }, + + disable: function(state) { + var I = this.getRuntime(), input; + + if ((input = Dom.get(I.uid))) { + input.disabled = !!state; + } + }, + + destroy: function() { + var I = this.getRuntime() + , shim = I.getShim() + , shimContainer = I.getShimContainer() + ; + + Events.removeAllEvents(shimContainer, this.uid); + Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); + Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid); + + if (shimContainer) { + shimContainer.innerHTML = ''; + } + + shim.removeInstance(this.uid); + + _files = _options = shimContainer = shim = null; + } + }); + } + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/html5/file/FileDrop.js + +/** + * FileDrop.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/FileDrop +@private +*/ +define("moxie/runtime/html5/file/FileDrop", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Events", + "moxie/core/utils/Mime" +], function(extensions, Basic, Dom, Events, Mime) { + + function FileDrop() { + var _files = [], _allowedExts = [], _options; + + Basic.extend(this, { + init: function(options) { + var comp = this, dropZone; + + _options = options; + _allowedExts = _extractExts(_options.accept); + dropZone = _options.container; + + Events.addEvent(dropZone, 'dragover', function(e) { + e.preventDefault(); + e.stopPropagation(); + e.dataTransfer.dropEffect = 'copy'; + }, comp.uid); + + Events.addEvent(dropZone, 'drop', function(e) { + e.preventDefault(); + e.stopPropagation(); + + _files = []; + + // Chrome 21+ accepts folders via Drag'n'Drop + if (e.dataTransfer.items && e.dataTransfer.items[0].webkitGetAsEntry) { + _readItems(e.dataTransfer.items, function() { + comp.trigger("drop"); + }); + } else { + Basic.each(e.dataTransfer.files, function(file) { + if (_isAcceptable(file)) { + _files.push(file); + } + }); + comp.trigger("drop"); + } + }, comp.uid); + + Events.addEvent(dropZone, 'dragenter', function(e) { + e.preventDefault(); + e.stopPropagation(); + comp.trigger("dragenter"); + }, comp.uid); + + Events.addEvent(dropZone, 'dragleave', function(e) { + e.preventDefault(); + e.stopPropagation(); + comp.trigger("dragleave"); + }, comp.uid); + }, + + getFiles: function() { + return _files; + }, + + destroy: function() { + Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); + _files = _allowedExts = _options = null; + } + }); + + + function _extractExts(accept) { + var exts = []; + for (var i = 0; i < accept.length; i++) { + [].push.apply(exts, accept[i].extensions.split(/\s*,\s*/)); + } + return Basic.inArray('*', exts) === -1 ? exts : []; + } + + + function _isAcceptable(file) { + var ext = Mime.getFileExtension(file.name); + return !ext || !_allowedExts.length || Basic.inArray(ext, _allowedExts) !== -1; + } + + + function _readItems(items, cb) { + var entries = []; + Basic.each(items, function(item) { + var entry = item.webkitGetAsEntry(); + // Address #998 (https://code.google.com/p/chromium/issues/detail?id=332579) + if (entry) { + // file() fails on OSX when the filename contains a special character (e.g. umlaut): see #61 + if (entry.isFile) { + var file = item.getAsFile(); + if (_isAcceptable(file)) { + _files.push(file); + } + } else { + entries.push(entry); + } + } + }); + + if (entries.length) { + _readEntries(entries, cb); + } else { + cb(); + } + } + + + function _readEntries(entries, cb) { + var queue = []; + Basic.each(entries, function(entry) { + queue.push(function(cbcb) { + _readEntry(entry, cbcb); + }); + }); + Basic.inSeries(queue, function() { + cb(); + }); + } + + function _readEntry(entry, cb) { + if (entry.isFile) { + entry.file(function(file) { + if (_isAcceptable(file)) { + _files.push(file); + } + cb(); + }, function() { + // fire an error event maybe + cb(); + }); + } else if (entry.isDirectory) { + _readDirEntry(entry, cb); + } else { + cb(); // not file, not directory? what then?.. + } + } + + function _readDirEntry(dirEntry, cb) { + var entries = [], dirReader = dirEntry.createReader(); + + // keep quering recursively till no more entries + function getEntries(cbcb) { + dirReader.readEntries(function(moreEntries) { + if (moreEntries.length) { + [].push.apply(entries, moreEntries); + getEntries(cbcb); + } else { + cbcb(); + } + }, cbcb); + } + + // ...and you thought FileReader was crazy... + getEntries(function() { + _readEntries(entries, cb); + }); + } + } + + return (extensions.FileDrop = FileDrop); +}); + +// Included from: src/javascript/runtime/html5/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/FileReader +@private +*/ +define("moxie/runtime/html5/file/FileReader", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Encode", + "moxie/core/utils/Basic" +], function(extensions, Encode, Basic) { + + function FileReader() { + var _fr, _convertToBinary = false; + + Basic.extend(this, { + + read: function(op, blob) { + var target = this; + + _fr = new window.FileReader(); + + _fr.addEventListener('progress', function(e) { + target.trigger(e); + }); + + _fr.addEventListener('load', function(e) { + target.trigger(e); + }); + + _fr.addEventListener('error', function(e) { + target.trigger(e, _fr.error); + }); + + _fr.addEventListener('loadend', function() { + _fr = null; + }); + + if (Basic.typeOf(_fr[op]) === 'function') { + _convertToBinary = false; + _fr[op](blob.getSource()); + } else if (op === 'readAsBinaryString') { // readAsBinaryString is depricated in general and never existed in IE10+ + _convertToBinary = true; + _fr.readAsDataURL(blob.getSource()); + } + }, + + getResult: function() { + return _fr && _fr.result ? (_convertToBinary ? _toBinary(_fr.result) : _fr.result) : null; + }, + + abort: function() { + if (_fr) { + _fr.abort(); + } + }, + + destroy: function() { + _fr = null; + } + }); + + function _toBinary(str) { + return Encode.atob(str.substring(str.indexOf('base64,') + 7)); + } + } + + return (extensions.FileReader = FileReader); +}); + +// Included from: src/javascript/runtime/html5/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global ActiveXObject:true */ + +/** +@class moxie/runtime/html5/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/html5/xhr/XMLHttpRequest", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Mime", + "moxie/core/utils/Url", + "moxie/file/File", + "moxie/file/Blob", + "moxie/xhr/FormData", + "moxie/core/Exceptions", + "moxie/core/utils/Env" +], function(extensions, Basic, Mime, Url, File, Blob, FormData, x, Env) { + + function XMLHttpRequest() { + var self = this + , _xhr + , _filename + ; + + Basic.extend(this, { + send: function(meta, data) { + var target = this + , isGecko2_5_6 = (Env.browser === 'Mozilla' && Env.version >= 4 && Env.version < 7) + , isAndroidBrowser = Env.browser === 'Android Browser' + , mustSendAsBinary = false + ; + + // extract file name + _filename = meta.url.replace(/^.+?\/([\w\-\.]+)$/, '$1').toLowerCase(); + + _xhr = _getNativeXHR(); + _xhr.open(meta.method, meta.url, meta.async, meta.user, meta.password); + + + // prepare data to be sent + if (data instanceof Blob) { + if (data.isDetached()) { + mustSendAsBinary = true; + } + data = data.getSource(); + } else if (data instanceof FormData) { + + if (data.hasBlob()) { + if (data.getBlob().isDetached()) { + data = _prepareMultipart.call(target, data); // _xhr must be instantiated and be in OPENED state + mustSendAsBinary = true; + } else if ((isGecko2_5_6 || isAndroidBrowser) && Basic.typeOf(data.getBlob().getSource()) === 'blob' && window.FileReader) { + // Gecko 2/5/6 can't send blob in FormData: https://bugzilla.mozilla.org/show_bug.cgi?id=649150 + // Android browsers (default one and Dolphin) seem to have the same issue, see: #613 + _preloadAndSend.call(target, meta, data); + return; // _preloadAndSend will reinvoke send() with transmutated FormData =%D + } + } + + // transfer fields to real FormData + if (data instanceof FormData) { // if still a FormData, e.g. not mangled by _prepareMultipart() + var fd = new window.FormData(); + data.each(function(value, name) { + if (value instanceof Blob) { + fd.append(name, value.getSource()); + } else { + fd.append(name, value); + } + }); + data = fd; + } + } + + + // if XHR L2 + if (_xhr.upload) { + if (meta.withCredentials) { + _xhr.withCredentials = true; + } + + _xhr.addEventListener('load', function(e) { + target.trigger(e); + }); + + _xhr.addEventListener('error', function(e) { + target.trigger(e); + }); + + // additionally listen to progress events + _xhr.addEventListener('progress', function(e) { + target.trigger(e); + }); + + _xhr.upload.addEventListener('progress', function(e) { + target.trigger({ + type: 'UploadProgress', + loaded: e.loaded, + total: e.total + }); + }); + // ... otherwise simulate XHR L2 + } else { + _xhr.onreadystatechange = function onReadyStateChange() { + + // fake Level 2 events + switch (_xhr.readyState) { + + case 1: // XMLHttpRequest.OPENED + // readystatechanged is fired twice for OPENED state (in IE and Mozilla) - neu + break; + + // looks like HEADERS_RECEIVED (state 2) is not reported in Opera (or it's old versions) - neu + case 2: // XMLHttpRequest.HEADERS_RECEIVED + break; + + case 3: // XMLHttpRequest.LOADING + // try to fire progress event for not XHR L2 + var total, loaded; + + try { + if (Url.hasSameOrigin(meta.url)) { // Content-Length not accessible for cross-domain on some browsers + total = _xhr.getResponseHeader('Content-Length') || 0; // old Safari throws an exception here + } + + if (_xhr.responseText) { // responseText was introduced in IE7 + loaded = _xhr.responseText.length; + } + } catch(ex) { + total = loaded = 0; + } + + target.trigger({ + type: 'progress', + lengthComputable: !!total, + total: parseInt(total, 10), + loaded: loaded + }); + break; + + case 4: // XMLHttpRequest.DONE + // release readystatechange handler (mostly for IE) + _xhr.onreadystatechange = function() {}; + + // usually status 0 is returned when server is unreachable, but FF also fails to status 0 for 408 timeout + if (_xhr.status === 0) { + target.trigger('error'); + } else { + target.trigger('load'); + } + break; + } + }; + } + + + // set request headers + if (!Basic.isEmptyObj(meta.headers)) { + Basic.each(meta.headers, function(value, header) { + _xhr.setRequestHeader(header, value); + }); + } + + // request response type + if ("" !== meta.responseType && 'responseType' in _xhr) { + if ('json' === meta.responseType && !Env.can('return_response_type', 'json')) { // we can fake this one + _xhr.responseType = 'text'; + } else { + _xhr.responseType = meta.responseType; + } + } + + // send ... + if (!mustSendAsBinary) { + _xhr.send(data); + } else { + if (_xhr.sendAsBinary) { // Gecko + _xhr.sendAsBinary(data); + } else { // other browsers having support for typed arrays + (function() { + // mimic Gecko's sendAsBinary + var ui8a = new Uint8Array(data.length); + for (var i = 0; i < data.length; i++) { + ui8a[i] = (data.charCodeAt(i) & 0xff); + } + _xhr.send(ui8a.buffer); + }()); + } + } + + target.trigger('loadstart'); + }, + + getStatus: function() { + // according to W3C spec it should return 0 for readyState < 3, but instead it throws an exception + try { + if (_xhr) { + return _xhr.status; + } + } catch(ex) {} + return 0; + }, + + getResponse: function(responseType) { + var I = this.getRuntime(); + + try { + switch (responseType) { + case 'blob': + var file = new File(I.uid, _xhr.response); + + // try to extract file name from content-disposition if possible (might be - not, if CORS for example) + var disposition = _xhr.getResponseHeader('Content-Disposition'); + if (disposition) { + // extract filename from response header if available + var match = disposition.match(/filename=([\'\"'])([^\1]+)\1/); + if (match) { + _filename = match[2]; + } + } + file.name = _filename; + + // pre-webkit Opera doesn't set type property on the blob response + if (!file.type) { + file.type = Mime.getFileMime(_filename); + } + return file; + + case 'json': + if (!Env.can('return_response_type', 'json')) { + return _xhr.status === 200 && !!window.JSON ? JSON.parse(_xhr.responseText) : null; + } + return _xhr.response; + + case 'document': + return _getDocument(_xhr); + + default: + return _xhr.responseText !== '' ? _xhr.responseText : null; // against the specs, but for consistency across the runtimes + } + } catch(ex) { + return null; + } + }, + + getAllResponseHeaders: function() { + try { + return _xhr.getAllResponseHeaders(); + } catch(ex) {} + return ''; + }, + + abort: function() { + if (_xhr) { + _xhr.abort(); + } + }, + + destroy: function() { + self = _filename = null; + } + }); + + + // here we go... ugly fix for ugly bug + function _preloadAndSend(meta, data) { + var target = this, blob, fr; + + // get original blob + blob = data.getBlob().getSource(); + + // preload blob in memory to be sent as binary string + fr = new window.FileReader(); + fr.onload = function() { + // overwrite original blob + data.append(data.getBlobName(), new Blob(null, { + type: blob.type, + data: fr.result + })); + // invoke send operation again + self.send.call(target, meta, data); + }; + fr.readAsBinaryString(blob); + } + + + function _getNativeXHR() { + if (window.XMLHttpRequest && !(Env.browser === 'IE' && Env.version < 8)) { // IE7 has native XHR but it's buggy + return new window.XMLHttpRequest(); + } else { + return (function() { + var progIDs = ['Msxml2.XMLHTTP.6.0', 'Microsoft.XMLHTTP']; // if 6.0 available, use it, otherwise failback to default 3.0 + for (var i = 0; i < progIDs.length; i++) { + try { + return new ActiveXObject(progIDs[i]); + } catch (ex) {} + } + })(); + } + } + + // @credits Sergey Ilinsky (http://www.ilinsky.com/) + function _getDocument(xhr) { + var rXML = xhr.responseXML; + var rText = xhr.responseText; + + // Try parsing responseText (@see: http://www.ilinsky.com/articles/XMLHttpRequest/#bugs-ie-responseXML-content-type) + if (Env.browser === 'IE' && rText && rXML && !rXML.documentElement && /[^\/]+\/[^\+]+\+xml/.test(xhr.getResponseHeader("Content-Type"))) { + rXML = new window.ActiveXObject("Microsoft.XMLDOM"); + rXML.async = false; + rXML.validateOnParse = false; + rXML.loadXML(rText); + } + + // Check if there is no error in document + if (rXML) { + if ((Env.browser === 'IE' && rXML.parseError !== 0) || !rXML.documentElement || rXML.documentElement.tagName === "parsererror") { + return null; + } + } + return rXML; + } + + + function _prepareMultipart(fd) { + var boundary = '----moxieboundary' + new Date().getTime() + , dashdash = '--' + , crlf = '\r\n' + , multipart = '' + , I = this.getRuntime() + ; + + if (!I.can('send_binary_string')) { + throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR); + } + + _xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary); + + // append multipart parameters + fd.each(function(value, name) { + // Firefox 3.6 failed to convert multibyte characters to UTF-8 in sendAsBinary(), + // so we try it here ourselves with: unescape(encodeURIComponent(value)) + if (value instanceof Blob) { + // Build RFC2388 blob + multipart += dashdash + boundary + crlf + + 'Content-Disposition: form-data; name="' + name + '"; filename="' + unescape(encodeURIComponent(value.name || 'blob')) + '"' + crlf + + 'Content-Type: ' + (value.type || 'application/octet-stream') + crlf + crlf + + value.getSource() + crlf; + } else { + multipart += dashdash + boundary + crlf + + 'Content-Disposition: form-data; name="' + name + '"' + crlf + crlf + + unescape(encodeURIComponent(value)) + crlf; + } + }); + + multipart += dashdash + boundary + dashdash + crlf; + + return multipart; + } + } + + return (extensions.XMLHttpRequest = XMLHttpRequest); +}); + +// Included from: src/javascript/runtime/html5/utils/BinaryReader.js + +/** + * BinaryReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/utils/BinaryReader +@private +*/ +define("moxie/runtime/html5/utils/BinaryReader", [], function() { + return function() { + var II = false, bin; + + // Private functions + function read(idx, size) { + var mv = II ? 0 : -8 * (size - 1), sum = 0, i; + + for (i = 0; i < size; i++) { + sum |= (bin.charCodeAt(idx + i) << Math.abs(mv + i*8)); + } + + return sum; + } + + function putstr(segment, idx, length) { + length = arguments.length === 3 ? length : bin.length - idx - 1; + bin = bin.substr(0, idx) + segment + bin.substr(length + idx); + } + + function write(idx, num, size) { + var str = '', mv = II ? 0 : -8 * (size - 1), i; + + for (i = 0; i < size; i++) { + str += String.fromCharCode((num >> Math.abs(mv + i*8)) & 255); + } + + putstr(str, idx, size); + } + + // Public functions + return { + II: function(order) { + if (order === undefined) { + return II; + } else { + II = order; + } + }, + + init: function(binData) { + II = false; + bin = binData; + }, + + SEGMENT: function(idx, length, segment) { + switch (arguments.length) { + case 1: + return bin.substr(idx, bin.length - idx - 1); + case 2: + return bin.substr(idx, length); + case 3: + putstr(segment, idx, length); + break; + default: return bin; + } + }, + + BYTE: function(idx) { + return read(idx, 1); + }, + + SHORT: function(idx) { + return read(idx, 2); + }, + + LONG: function(idx, num) { + if (num === undefined) { + return read(idx, 4); + } else { + write(idx, num, 4); + } + }, + + SLONG: function(idx) { // 2's complement notation + var num = read(idx, 4); + + return (num > 2147483647 ? num - 4294967296 : num); + }, + + STRING: function(idx, size) { + var str = ''; + + for (size += idx; idx < size; idx++) { + str += String.fromCharCode(read(idx, 1)); + } + + return str; + } + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/JPEGHeaders.js + +/** + * JPEGHeaders.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/JPEGHeaders +@private +*/ +define("moxie/runtime/html5/image/JPEGHeaders", [ + "moxie/runtime/html5/utils/BinaryReader" +], function(BinaryReader) { + + return function JPEGHeaders(data) { + var headers = [], read, idx, marker, length = 0; + + read = new BinaryReader(); + read.init(data); + + // Check if data is jpeg + if (read.SHORT(0) !== 0xFFD8) { + return; + } + + idx = 2; + + while (idx <= data.length) { + marker = read.SHORT(idx); + + // omit RST (restart) markers + if (marker >= 0xFFD0 && marker <= 0xFFD7) { + idx += 2; + continue; + } + + // no headers allowed after SOS marker + if (marker === 0xFFDA || marker === 0xFFD9) { + break; + } + + length = read.SHORT(idx + 2) + 2; + + // APPn marker detected + if (marker >= 0xFFE1 && marker <= 0xFFEF) { + headers.push({ + hex: marker, + name: 'APP' + (marker & 0x000F), + start: idx, + length: length, + segment: read.SEGMENT(idx, length) + }); + } + + idx += length; + } + + read.init(null); // free memory + + return { + headers: headers, + + restore: function(data) { + var max, i; + + read.init(data); + + idx = read.SHORT(2) == 0xFFE0 ? 4 + read.SHORT(4) : 2; + + for (i = 0, max = headers.length; i < max; i++) { + read.SEGMENT(idx, 0, headers[i].segment); + idx += headers[i].length; + } + + data = read.SEGMENT(); + read.init(null); + return data; + }, + + strip: function(data) { + var headers, jpegHeaders, i; + + jpegHeaders = new JPEGHeaders(data); + headers = jpegHeaders.headers; + jpegHeaders.purge(); + + read.init(data); + + i = headers.length; + while (i--) { + read.SEGMENT(headers[i].start, headers[i].length, ''); + } + + data = read.SEGMENT(); + read.init(null); + return data; + }, + + get: function(name) { + var array = []; + + for (var i = 0, max = headers.length; i < max; i++) { + if (headers[i].name === name.toUpperCase()) { + array.push(headers[i].segment); + } + } + return array; + }, + + set: function(name, segment) { + var array = [], i, ii, max; + + if (typeof(segment) === 'string') { + array.push(segment); + } else { + array = segment; + } + + for (i = ii = 0, max = headers.length; i < max; i++) { + if (headers[i].name === name.toUpperCase()) { + headers[i].segment = array[ii]; + headers[i].length = array[ii].length; + ii++; + } + if (ii >= array.length) { + break; + } + } + }, + + purge: function() { + headers = []; + read.init(null); + read = null; + } + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/ExifParser.js + +/** + * ExifParser.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/ExifParser +@private +*/ +define("moxie/runtime/html5/image/ExifParser", [ + "moxie/core/utils/Basic", + "moxie/runtime/html5/utils/BinaryReader" +], function(Basic, BinaryReader) { + + return function ExifParser() { + // Private ExifParser fields + var data, tags, Tiff, offsets = {}, tagDescs; + + data = new BinaryReader(); + + tags = { + tiff : { + /* + The image orientation viewed in terms of rows and columns. + + 1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side. + 2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side. + 3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side. + 4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side. + 5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top. + 6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top. + 7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom. + 8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom. + */ + 0x0112: 'Orientation', + 0x010E: 'ImageDescription', + 0x010F: 'Make', + 0x0110: 'Model', + 0x0131: 'Software', + 0x8769: 'ExifIFDPointer', + 0x8825: 'GPSInfoIFDPointer' + }, + exif : { + 0x9000: 'ExifVersion', + 0xA001: 'ColorSpace', + 0xA002: 'PixelXDimension', + 0xA003: 'PixelYDimension', + 0x9003: 'DateTimeOriginal', + 0x829A: 'ExposureTime', + 0x829D: 'FNumber', + 0x8827: 'ISOSpeedRatings', + 0x9201: 'ShutterSpeedValue', + 0x9202: 'ApertureValue' , + 0x9207: 'MeteringMode', + 0x9208: 'LightSource', + 0x9209: 'Flash', + 0x920A: 'FocalLength', + 0xA402: 'ExposureMode', + 0xA403: 'WhiteBalance', + 0xA406: 'SceneCaptureType', + 0xA404: 'DigitalZoomRatio', + 0xA408: 'Contrast', + 0xA409: 'Saturation', + 0xA40A: 'Sharpness' + }, + gps : { + 0x0000: 'GPSVersionID', + 0x0001: 'GPSLatitudeRef', + 0x0002: 'GPSLatitude', + 0x0003: 'GPSLongitudeRef', + 0x0004: 'GPSLongitude' + } + }; + + tagDescs = { + 'ColorSpace': { + 1: 'sRGB', + 0: 'Uncalibrated' + }, + + 'MeteringMode': { + 0: 'Unknown', + 1: 'Average', + 2: 'CenterWeightedAverage', + 3: 'Spot', + 4: 'MultiSpot', + 5: 'Pattern', + 6: 'Partial', + 255: 'Other' + }, + + 'LightSource': { + 1: 'Daylight', + 2: 'Fliorescent', + 3: 'Tungsten', + 4: 'Flash', + 9: 'Fine weather', + 10: 'Cloudy weather', + 11: 'Shade', + 12: 'Daylight fluorescent (D 5700 - 7100K)', + 13: 'Day white fluorescent (N 4600 -5400K)', + 14: 'Cool white fluorescent (W 3900 - 4500K)', + 15: 'White fluorescent (WW 3200 - 3700K)', + 17: 'Standard light A', + 18: 'Standard light B', + 19: 'Standard light C', + 20: 'D55', + 21: 'D65', + 22: 'D75', + 23: 'D50', + 24: 'ISO studio tungsten', + 255: 'Other' + }, + + 'Flash': { + 0x0000: 'Flash did not fire.', + 0x0001: 'Flash fired.', + 0x0005: 'Strobe return light not detected.', + 0x0007: 'Strobe return light detected.', + 0x0009: 'Flash fired, compulsory flash mode', + 0x000D: 'Flash fired, compulsory flash mode, return light not detected', + 0x000F: 'Flash fired, compulsory flash mode, return light detected', + 0x0010: 'Flash did not fire, compulsory flash mode', + 0x0018: 'Flash did not fire, auto mode', + 0x0019: 'Flash fired, auto mode', + 0x001D: 'Flash fired, auto mode, return light not detected', + 0x001F: 'Flash fired, auto mode, return light detected', + 0x0020: 'No flash function', + 0x0041: 'Flash fired, red-eye reduction mode', + 0x0045: 'Flash fired, red-eye reduction mode, return light not detected', + 0x0047: 'Flash fired, red-eye reduction mode, return light detected', + 0x0049: 'Flash fired, compulsory flash mode, red-eye reduction mode', + 0x004D: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected', + 0x004F: 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected', + 0x0059: 'Flash fired, auto mode, red-eye reduction mode', + 0x005D: 'Flash fired, auto mode, return light not detected, red-eye reduction mode', + 0x005F: 'Flash fired, auto mode, return light detected, red-eye reduction mode' + }, + + 'ExposureMode': { + 0: 'Auto exposure', + 1: 'Manual exposure', + 2: 'Auto bracket' + }, + + 'WhiteBalance': { + 0: 'Auto white balance', + 1: 'Manual white balance' + }, + + 'SceneCaptureType': { + 0: 'Standard', + 1: 'Landscape', + 2: 'Portrait', + 3: 'Night scene' + }, + + 'Contrast': { + 0: 'Normal', + 1: 'Soft', + 2: 'Hard' + }, + + 'Saturation': { + 0: 'Normal', + 1: 'Low saturation', + 2: 'High saturation' + }, + + 'Sharpness': { + 0: 'Normal', + 1: 'Soft', + 2: 'Hard' + }, + + // GPS related + 'GPSLatitudeRef': { + N: 'North latitude', + S: 'South latitude' + }, + + 'GPSLongitudeRef': { + E: 'East longitude', + W: 'West longitude' + } + }; + + function extractTags(IFD_offset, tags2extract) { + var length = data.SHORT(IFD_offset), i, ii, + tag, type, count, tagOffset, offset, value, values = [], hash = {}; + + for (i = 0; i < length; i++) { + // Set binary reader pointer to beginning of the next tag + offset = tagOffset = IFD_offset + 12 * i + 2; + + tag = tags2extract[data.SHORT(offset)]; + + if (tag === undefined) { + continue; // Not the tag we requested + } + + type = data.SHORT(offset+=2); + count = data.LONG(offset+=2); + + offset += 4; + values = []; + + switch (type) { + case 1: // BYTE + case 7: // UNDEFINED + if (count > 4) { + offset = data.LONG(offset) + offsets.tiffHeader; + } + + for (ii = 0; ii < count; ii++) { + values[ii] = data.BYTE(offset + ii); + } + + break; + + case 2: // STRING + if (count > 4) { + offset = data.LONG(offset) + offsets.tiffHeader; + } + + hash[tag] = data.STRING(offset, count - 1); + + continue; + + case 3: // SHORT + if (count > 2) { + offset = data.LONG(offset) + offsets.tiffHeader; + } + + for (ii = 0; ii < count; ii++) { + values[ii] = data.SHORT(offset + ii*2); + } + + break; + + case 4: // LONG + if (count > 1) { + offset = data.LONG(offset) + offsets.tiffHeader; + } + + for (ii = 0; ii < count; ii++) { + values[ii] = data.LONG(offset + ii*4); + } + + break; + + case 5: // RATIONAL + offset = data.LONG(offset) + offsets.tiffHeader; + + for (ii = 0; ii < count; ii++) { + values[ii] = data.LONG(offset + ii*4) / data.LONG(offset + ii*4 + 4); + } + + break; + + case 9: // SLONG + offset = data.LONG(offset) + offsets.tiffHeader; + + for (ii = 0; ii < count; ii++) { + values[ii] = data.SLONG(offset + ii*4); + } + + break; + + case 10: // SRATIONAL + offset = data.LONG(offset) + offsets.tiffHeader; + + for (ii = 0; ii < count; ii++) { + values[ii] = data.SLONG(offset + ii*4) / data.SLONG(offset + ii*4 + 4); + } + + break; + + default: + continue; + } + + value = (count == 1 ? values[0] : values); + + if (tagDescs.hasOwnProperty(tag) && typeof value != 'object') { + hash[tag] = tagDescs[tag][value]; + } else { + hash[tag] = value; + } + } + + return hash; + } + + function getIFDOffsets() { + var idx = offsets.tiffHeader; + + // Set read order of multi-byte data + data.II(data.SHORT(idx) == 0x4949); + + // Check if always present bytes are indeed present + if (data.SHORT(idx+=2) !== 0x002A) { + return false; + } + + offsets.IFD0 = offsets.tiffHeader + data.LONG(idx += 2); + Tiff = extractTags(offsets.IFD0, tags.tiff); + + if ('ExifIFDPointer' in Tiff) { + offsets.exifIFD = offsets.tiffHeader + Tiff.ExifIFDPointer; + delete Tiff.ExifIFDPointer; + } + + if ('GPSInfoIFDPointer' in Tiff) { + offsets.gpsIFD = offsets.tiffHeader + Tiff.GPSInfoIFDPointer; + delete Tiff.GPSInfoIFDPointer; + } + return true; + } + + // At the moment only setting of simple (LONG) values, that do not require offset recalculation, is supported + function setTag(ifd, tag, value) { + var offset, length, tagOffset, valueOffset = 0; + + // If tag name passed translate into hex key + if (typeof(tag) === 'string') { + var tmpTags = tags[ifd.toLowerCase()]; + for (var hex in tmpTags) { + if (tmpTags[hex] === tag) { + tag = hex; + break; + } + } + } + offset = offsets[ifd.toLowerCase() + 'IFD']; + length = data.SHORT(offset); + + for (var i = 0; i < length; i++) { + tagOffset = offset + 12 * i + 2; + + if (data.SHORT(tagOffset) == tag) { + valueOffset = tagOffset + 8; + break; + } + } + + if (!valueOffset) { + return false; + } + + data.LONG(valueOffset, value); + return true; + } + + + // Public functions + return { + init: function(segment) { + // Reset internal data + offsets = { + tiffHeader: 10 + }; + + if (segment === undefined || !segment.length) { + return false; + } + + data.init(segment); + + // Check if that's APP1 and that it has EXIF + if (data.SHORT(0) === 0xFFE1 && data.STRING(4, 5).toUpperCase() === "EXIF\0") { + return getIFDOffsets(); + } + return false; + }, + + TIFF: function() { + return Tiff; + }, + + EXIF: function() { + var Exif; + + // Populate EXIF hash + Exif = extractTags(offsets.exifIFD, tags.exif); + + // Fix formatting of some tags + if (Exif.ExifVersion && Basic.typeOf(Exif.ExifVersion) === 'array') { + for (var i = 0, exifVersion = ''; i < Exif.ExifVersion.length; i++) { + exifVersion += String.fromCharCode(Exif.ExifVersion[i]); + } + Exif.ExifVersion = exifVersion; + } + + return Exif; + }, + + GPS: function() { + var GPS; + + GPS = extractTags(offsets.gpsIFD, tags.gps); + + // iOS devices (and probably some others) do not put in GPSVersionID tag (why?..) + if (GPS.GPSVersionID && Basic.typeOf(GPS.GPSVersionID) === 'array') { + GPS.GPSVersionID = GPS.GPSVersionID.join('.'); + } + + return GPS; + }, + + setExif: function(tag, value) { + // Right now only setting of width/height is possible + if (tag !== 'PixelXDimension' && tag !== 'PixelYDimension') {return false;} + + return setTag('exif', tag, value); + }, + + + getBinary: function() { + return data.SEGMENT(); + }, + + purge: function() { + data.init(null); + data = Tiff = null; + offsets = {}; + } + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/JPEG.js + +/** + * JPEG.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/JPEG +@private +*/ +define("moxie/runtime/html5/image/JPEG", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/html5/image/JPEGHeaders", + "moxie/runtime/html5/utils/BinaryReader", + "moxie/runtime/html5/image/ExifParser" +], function(Basic, x, JPEGHeaders, BinaryReader, ExifParser) { + + function JPEG(binstr) { + var _binstr, _br, _hm, _ep, _info, hasExif; + + function _getDimensions() { + var idx = 0, marker, length; + + // examine all through the end, since some images might have very large APP segments + while (idx <= _binstr.length) { + marker = _br.SHORT(idx += 2); + + if (marker >= 0xFFC0 && marker <= 0xFFC3) { // SOFn + idx += 5; // marker (2 bytes) + length (2 bytes) + Sample precision (1 byte) + return { + height: _br.SHORT(idx), + width: _br.SHORT(idx += 2) + }; + } + length = _br.SHORT(idx += 2); + idx += length - 2; + } + return null; + } + + _binstr = binstr; + + _br = new BinaryReader(); + _br.init(_binstr); + + // check if it is jpeg + if (_br.SHORT(0) !== 0xFFD8) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + + // backup headers + _hm = new JPEGHeaders(binstr); + + // extract exif info + _ep = new ExifParser(); + hasExif = !!_ep.init(_hm.get('app1')[0]); + + // get dimensions + _info = _getDimensions.call(this); + + Basic.extend(this, { + type: 'image/jpeg', + + size: _binstr.length, + + width: _info && _info.width || 0, + + height: _info && _info.height || 0, + + setExif: function(tag, value) { + if (!hasExif) { + return false; // or throw an exception + } + + if (Basic.typeOf(tag) === 'object') { + Basic.each(tag, function(value, tag) { + _ep.setExif(tag, value); + }); + } else { + _ep.setExif(tag, value); + } + + // update internal headers + _hm.set('app1', _ep.getBinary()); + }, + + writeHeaders: function() { + if (!arguments.length) { + // if no arguments passed, update headers internally + return (_binstr = _hm.restore(_binstr)); + } + return _hm.restore(arguments[0]); + }, + + stripHeaders: function(binstr) { + return _hm.strip(binstr); + }, + + purge: function() { + _purge.call(this); + } + }); + + if (hasExif) { + this.meta = { + tiff: _ep.TIFF(), + exif: _ep.EXIF(), + gps: _ep.GPS() + }; + } + + function _purge() { + if (!_ep || !_hm || !_br) { + return; // ignore any repeating purge requests + } + _ep.purge(); + _hm.purge(); + _br.init(null); + _binstr = _info = _hm = _ep = _br = null; + } + } + + return JPEG; +}); + +// Included from: src/javascript/runtime/html5/image/PNG.js + +/** + * PNG.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/PNG +@private +*/ +define("moxie/runtime/html5/image/PNG", [ + "moxie/core/Exceptions", + "moxie/core/utils/Basic", + "moxie/runtime/html5/utils/BinaryReader" +], function(x, Basic, BinaryReader) { + + function PNG(binstr) { + var _binstr, _br, _hm, _ep, _info; + + _binstr = binstr; + + _br = new BinaryReader(); + _br.init(_binstr); + + // check if it's png + (function() { + var idx = 0, i = 0 + , signature = [0x8950, 0x4E47, 0x0D0A, 0x1A0A] + ; + + for (i = 0; i < signature.length; i++, idx += 2) { + if (signature[i] != _br.SHORT(idx)) { + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + } + } + }()); + + function _getDimensions() { + var chunk, idx; + + chunk = _getChunkAt.call(this, 8); + + if (chunk.type == 'IHDR') { + idx = chunk.start; + return { + width: _br.LONG(idx), + height: _br.LONG(idx += 4) + }; + } + return null; + } + + function _purge() { + if (!_br) { + return; // ignore any repeating purge requests + } + _br.init(null); + _binstr = _info = _hm = _ep = _br = null; + } + + _info = _getDimensions.call(this); + + Basic.extend(this, { + type: 'image/png', + + size: _binstr.length, + + width: _info.width, + + height: _info.height, + + purge: function() { + _purge.call(this); + } + }); + + // for PNG we can safely trigger purge automatically, as we do not keep any data for later + _purge.call(this); + + function _getChunkAt(idx) { + var length, type, start, CRC; + + length = _br.LONG(idx); + type = _br.STRING(idx += 4, 4); + start = idx += 4; + CRC = _br.LONG(idx + length); + + return { + length: length, + type: type, + start: start, + CRC: CRC + }; + } + } + + return PNG; +}); + +// Included from: src/javascript/runtime/html5/image/ImageInfo.js + +/** + * ImageInfo.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/ImageInfo +@private +*/ +define("moxie/runtime/html5/image/ImageInfo", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/html5/image/JPEG", + "moxie/runtime/html5/image/PNG" +], function(Basic, x, JPEG, PNG) { + /** + Optional image investigation tool for HTML5 runtime. Provides the following features: + - ability to distinguish image type (JPEG or PNG) by signature + - ability to extract image width/height directly from it's internals, without preloading in memory (fast) + - ability to extract APP headers from JPEGs (Exif, GPS, etc) + - ability to replace width/height tags in extracted JPEG headers + - ability to restore APP headers, that were for example stripped during image manipulation + + @class ImageInfo + @constructor + @param {String} binstr Image source as binary string + */ + return function(binstr) { + var _cs = [JPEG, PNG], _img; + + // figure out the format, throw: ImageError.WRONG_FORMAT if not supported + _img = (function() { + for (var i = 0; i < _cs.length; i++) { + try { + return new _cs[i](binstr); + } catch (ex) { + // console.info(ex); + } + } + throw new x.ImageError(x.ImageError.WRONG_FORMAT); + }()); + + Basic.extend(this, { + /** + Image Mime Type extracted from it's depths + + @property type + @type {String} + @default '' + */ + type: '', + + /** + Image size in bytes + + @property size + @type {Number} + @default 0 + */ + size: 0, + + /** + Image width extracted from image source + + @property width + @type {Number} + @default 0 + */ + width: 0, + + /** + Image height extracted from image source + + @property height + @type {Number} + @default 0 + */ + height: 0, + + /** + Sets Exif tag. Currently applicable only for width and height tags. Obviously works only with JPEGs. + + @method setExif + @param {String} tag Tag to set + @param {Mixed} value Value to assign to the tag + */ + setExif: function() {}, + + /** + Restores headers to the source. + + @method writeHeaders + @param {String} data Image source as binary string + @return {String} Updated binary string + */ + writeHeaders: function(data) { + return data; + }, + + /** + Strip all headers from the source. + + @method stripHeaders + @param {String} data Image source as binary string + @return {String} Updated binary string + */ + stripHeaders: function(data) { + return data; + }, + + /** + Dispose resources. + + @method purge + */ + purge: function() {} + }); + + Basic.extend(this, _img); + + this.purge = function() { + _img.purge(); + _img = null; + }; + }; +}); + +// Included from: src/javascript/runtime/html5/image/MegaPixel.js + +/** +(The MIT License) + +Copyright (c) 2012 Shinichi Tomita <shinichi.tomita@gmail.com>; + +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. +*/ + +/** + * Mega pixel image rendering library for iOS6 Safari + * + * Fixes iOS6 Safari's image file rendering issue for large size image (over mega-pixel), + * which causes unexpected subsampling when drawing it in canvas. + * By using this library, you can safely render the image with proper stretching. + * + * Copyright (c) 2012 Shinichi Tomita <shinichi.tomita@gmail.com> + * Released under the MIT license + */ + +/** +@class moxie/runtime/html5/image/MegaPixel +@private +*/ +define("moxie/runtime/html5/image/MegaPixel", [], function() { + + /** + * Rendering image element (with resizing) into the canvas element + */ + function renderImageToCanvas(img, canvas, options) { + var iw = img.naturalWidth, ih = img.naturalHeight; + var width = options.width, height = options.height; + var x = options.x || 0, y = options.y || 0; + var ctx = canvas.getContext('2d'); + if (detectSubsampling(img)) { + iw /= 2; + ih /= 2; + } + var d = 1024; // size of tiling canvas + var tmpCanvas = document.createElement('canvas'); + tmpCanvas.width = tmpCanvas.height = d; + var tmpCtx = tmpCanvas.getContext('2d'); + var vertSquashRatio = detectVerticalSquash(img, iw, ih); + var sy = 0; + while (sy < ih) { + var sh = sy + d > ih ? ih - sy : d; + var sx = 0; + while (sx < iw) { + var sw = sx + d > iw ? iw - sx : d; + tmpCtx.clearRect(0, 0, d, d); + tmpCtx.drawImage(img, -sx, -sy); + var dx = (sx * width / iw + x) << 0; + var dw = Math.ceil(sw * width / iw); + var dy = (sy * height / ih / vertSquashRatio + y) << 0; + var dh = Math.ceil(sh * height / ih / vertSquashRatio); + ctx.drawImage(tmpCanvas, 0, 0, sw, sh, dx, dy, dw, dh); + sx += d; + } + sy += d; + } + tmpCanvas = tmpCtx = null; + } + + /** + * Detect subsampling in loaded image. + * In iOS, larger images than 2M pixels may be subsampled in rendering. + */ + function detectSubsampling(img) { + var iw = img.naturalWidth, ih = img.naturalHeight; + if (iw * ih > 1024 * 1024) { // subsampling may happen over megapixel image + var canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1; + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, -iw + 1, 0); + // subsampled image becomes half smaller in rendering size. + // check alpha channel value to confirm image is covering edge pixel or not. + // if alpha value is 0 image is not covering, hence subsampled. + return ctx.getImageData(0, 0, 1, 1).data[3] === 0; + } else { + return false; + } + } + + + /** + * Detecting vertical squash in loaded image. + * Fixes a bug which squash image vertically while drawing into canvas for some images. + */ + function detectVerticalSquash(img, iw, ih) { + var canvas = document.createElement('canvas'); + canvas.width = 1; + canvas.height = ih; + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0); + var data = ctx.getImageData(0, 0, 1, ih).data; + // search image edge pixel position in case it is squashed vertically. + var sy = 0; + var ey = ih; + var py = ih; + while (py > sy) { + var alpha = data[(py - 1) * 4 + 3]; + if (alpha === 0) { + ey = py; + } else { + sy = py; + } + py = (ey + sy) >> 1; + } + canvas = null; + var ratio = (py / ih); + return (ratio === 0) ? 1 : ratio; + } + + return { + isSubsampled: detectSubsampling, + renderTo: renderImageToCanvas + }; +}); + +// Included from: src/javascript/runtime/html5/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/image/Image +@private +*/ +define("moxie/runtime/html5/image/Image", [ + "moxie/runtime/html5/Runtime", + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/core/utils/Encode", + "moxie/file/File", + "moxie/runtime/html5/image/ImageInfo", + "moxie/runtime/html5/image/MegaPixel", + "moxie/core/utils/Mime", + "moxie/core/utils/Env" +], function(extensions, Basic, x, Encode, File, ImageInfo, MegaPixel, Mime, Env) { + + function HTML5Image() { + var me = this + , _img, _imgInfo, _canvas, _binStr, _blob + , _modified = false // is set true whenever image is modified + , _preserveHeaders = true + ; + + Basic.extend(this, { + loadFromBlob: function(blob) { + var comp = this, I = comp.getRuntime() + , asBinary = arguments.length > 1 ? arguments[1] : true + ; + + if (!I.can('access_binary')) { + throw new x.RuntimeError(x.RuntimeError.NOT_SUPPORTED_ERR); + } + + _blob = blob; + + if (blob.isDetached()) { + _binStr = blob.getSource(); + _preload.call(this, _binStr); + return; + } else { + _readAsDataUrl.call(this, blob.getSource(), function(dataUrl) { + if (asBinary) { + _binStr = _toBinary(dataUrl); + } + _preload.call(comp, dataUrl); + }); + } + }, + + loadFromImage: function(img, exact) { + this.meta = img.meta; + + _blob = new File(null, { + name: img.name, + size: img.size, + type: img.type + }); + + _preload.call(this, exact ? (_binStr = img.getAsBinaryString()) : img.getAsDataURL()); + }, + + getInfo: function() { + var I = this.getRuntime(), info; + + if (!_imgInfo && _binStr && I.can('access_image_binary')) { + _imgInfo = new ImageInfo(_binStr); + } + + info = { + width: _getImg().width || 0, + height: _getImg().height || 0, + type: _blob.type || Mime.getFileMime(_blob.name), + size: _binStr && _binStr.length || _blob.size || 0, + name: _blob.name || '', + meta: _imgInfo && _imgInfo.meta || this.meta || {} + }; + + return info; + }, + + downsize: function() { + _downsize.apply(this, arguments); + }, + + getAsCanvas: function() { + if (_canvas) { + _canvas.id = this.uid + '_canvas'; + } + return _canvas; + }, + + getAsBlob: function(type, quality) { + if (type !== this.type) { + // if different mime type requested prepare image for conversion + _downsize.call(this, this.width, this.height, false); + } + return new File(null, { + name: _blob.name || '', + type: type, + data: me.getAsBinaryString.call(this, type, quality) + }); + }, + + getAsDataURL: function(type) { + var quality = arguments[1] || 90; + + // if image has not been modified, return the source right away + if (!_modified) { + return _img.src; + } + + if ('image/jpeg' !== type) { + return _canvas.toDataURL('image/png'); + } else { + try { + // older Geckos used to result in an exception on quality argument + return _canvas.toDataURL('image/jpeg', quality/100); + } catch (ex) { + return _canvas.toDataURL('image/jpeg'); + } + } + }, + + getAsBinaryString: function(type, quality) { + // if image has not been modified, return the source right away + if (!_modified) { + // if image was not loaded from binary string + if (!_binStr) { + _binStr = _toBinary(me.getAsDataURL(type, quality)); + } + return _binStr; + } + + if ('image/jpeg' !== type) { + _binStr = _toBinary(me.getAsDataURL(type, quality)); + } else { + var dataUrl; + + // if jpeg + if (!quality) { + quality = 90; + } + + try { + // older Geckos used to result in an exception on quality argument + dataUrl = _canvas.toDataURL('image/jpeg', quality/100); + } catch (ex) { + dataUrl = _canvas.toDataURL('image/jpeg'); + } + + _binStr = _toBinary(dataUrl); + + if (_imgInfo) { + _binStr = _imgInfo.stripHeaders(_binStr); + + if (_preserveHeaders) { + // update dimensions info in exif + if (_imgInfo.meta && _imgInfo.meta.exif) { + _imgInfo.setExif({ + PixelXDimension: this.width, + PixelYDimension: this.height + }); + } + + // re-inject the headers + _binStr = _imgInfo.writeHeaders(_binStr); + } + + // will be re-created from fresh on next getInfo call + _imgInfo.purge(); + _imgInfo = null; + } + } + + _modified = false; + + return _binStr; + }, + + destroy: function() { + me = null; + _purge.call(this); + this.getRuntime().getShim().removeInstance(this.uid); + } + }); + + + function _getImg() { + if (!_canvas && !_img) { + throw new x.ImageError(x.DOMException.INVALID_STATE_ERR); + } + return _canvas || _img; + } + + + function _toBinary(str) { + return Encode.atob(str.substring(str.indexOf('base64,') + 7)); + } + + + function _toDataUrl(str, type) { + return 'data:' + (type || '') + ';base64,' + Encode.btoa(str); + } + + + function _preload(str) { + var comp = this; + + _img = new Image(); + _img.onerror = function() { + _purge.call(this); + comp.trigger('error', new x.ImageError(x.ImageError.WRONG_FORMAT)); + }; + _img.onload = function() { + comp.trigger('load'); + }; + + _img.src = /^data:[^;]*;base64,/.test(str) ? str : _toDataUrl(str, _blob.type); + } + + + function _readAsDataUrl(file, callback) { + var comp = this, fr; + + // use FileReader if it's available + if (window.FileReader) { + fr = new FileReader(); + fr.onload = function() { + callback(this.result); + }; + fr.onerror = function() { + comp.trigger('error', new x.FileException(x.FileException.NOT_READABLE_ERR)); + }; + fr.readAsDataURL(file); + } else { + return callback(file.getAsDataURL()); + } + } + + function _downsize(width, height, crop, preserveHeaders) { + var self = this + , scale + , mathFn + , x = 0 + , y = 0 + , img + , destWidth + , destHeight + , orientation + ; + + _preserveHeaders = preserveHeaders; // we will need to check this on export (see getAsBinaryString()) + + // take into account orientation tag + orientation = (this.meta && this.meta.tiff && this.meta.tiff.Orientation) || 1; + + if (Basic.inArray(orientation, [5,6,7,8]) !== -1) { // values that require 90 degree rotation + // swap dimensions + var tmp = width; + width = height; + height = tmp; + } + + img = _getImg(); + + // unify dimensions + mathFn = !crop ? Math.min : Math.max; + scale = mathFn(width/img.width, height/img.height); + + // we only downsize here + if (scale > 1 && (!crop || preserveHeaders)) { // when cropping one of dimensions may still exceed max, so process it anyway + this.trigger('Resize'); + return; + } + + // prepare canvas if necessary + if (!_canvas) { + _canvas = document.createElement("canvas"); + } + + // calculate dimensions of proportionally resized image + destWidth = Math.round(img.width * scale); + destHeight = Math.round(img.height * scale); + + + // scale image and canvas + if (crop) { + _canvas.width = width; + _canvas.height = height; + + // if dimensions of the resulting image still larger than canvas, center it + if (destWidth > width) { + x = Math.round((destWidth - width) / 2); + } + + if (destHeight > height) { + y = Math.round((destHeight - height) / 2); + } + } else { + _canvas.width = destWidth; + _canvas.height = destHeight; + } + + // rotate if required, according to orientation tag + if (!_preserveHeaders) { + _rotateToOrientaion(_canvas.width, _canvas.height, orientation); + } + + _drawToCanvas.call(this, img, _canvas, -x, -y, destWidth, destHeight); + + this.width = _canvas.width; + this.height = _canvas.height; + + _modified = true; + self.trigger('Resize'); + } + + + function _drawToCanvas(img, canvas, x, y, w, h) { + if (Env.OS === 'iOS') { + // avoid squish bug in iOS6 + MegaPixel.renderTo(img, canvas, { width: w, height: h, x: x, y: y }); + } else { + var ctx = canvas.getContext('2d'); + ctx.drawImage(img, x, y, w, h); + } + } + + + /** + * Transform canvas coordination according to specified frame size and orientation + * Orientation value is from EXIF tag + * @author Shinichi Tomita <shinichi.tomita@gmail.com> + */ + function _rotateToOrientaion(width, height, orientation) { + switch (orientation) { + case 5: + case 6: + case 7: + case 8: + _canvas.width = height; + _canvas.height = width; + break; + default: + _canvas.width = width; + _canvas.height = height; + } + + /** + 1 = The 0th row is at the visual top of the image, and the 0th column is the visual left-hand side. + 2 = The 0th row is at the visual top of the image, and the 0th column is the visual right-hand side. + 3 = The 0th row is at the visual bottom of the image, and the 0th column is the visual right-hand side. + 4 = The 0th row is at the visual bottom of the image, and the 0th column is the visual left-hand side. + 5 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual top. + 6 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual top. + 7 = The 0th row is the visual right-hand side of the image, and the 0th column is the visual bottom. + 8 = The 0th row is the visual left-hand side of the image, and the 0th column is the visual bottom. + */ + + var ctx = _canvas.getContext('2d'); + switch (orientation) { + case 2: + // horizontal flip + ctx.translate(width, 0); + ctx.scale(-1, 1); + break; + case 3: + // 180 rotate left + ctx.translate(width, height); + ctx.rotate(Math.PI); + break; + case 4: + // vertical flip + ctx.translate(0, height); + ctx.scale(1, -1); + break; + case 5: + // vertical flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.scale(1, -1); + break; + case 6: + // 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(0, -height); + break; + case 7: + // horizontal flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(width, -height); + ctx.scale(-1, 1); + break; + case 8: + // 90 rotate left + ctx.rotate(-0.5 * Math.PI); + ctx.translate(-width, 0); + break; + } + } + + + function _purge() { + if (_imgInfo) { + _imgInfo.purge(); + _imgInfo = null; + } + _binStr = _img = _canvas = _blob = null; + _modified = false; + } + } + + return (extensions.Image = HTML5Image); +}); + +// Included from: src/javascript/runtime/flash/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global ActiveXObject:true */ + +/** +Defines constructor for Flash runtime. + +@class moxie/runtime/flash/Runtime +@private +*/ +define("moxie/runtime/flash/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Env", + "moxie/core/utils/Dom", + "moxie/core/Exceptions", + "moxie/runtime/Runtime" +], function(Basic, Env, Dom, x, Runtime) { + + var type = 'flash', extensions = {}; + + /** + Get the version of the Flash Player + + @method getShimVersion + @private + @return {Number} Flash Player version + */ + function getShimVersion() { + var version; + + try { + version = navigator.plugins['Shockwave Flash']; + version = version.description; + } catch (e1) { + try { + version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); + } catch (e2) { + version = '0.0'; + } + } + version = version.match(/\d+/g); + return parseFloat(version[0] + '.' + version[1]); + } + + /** + Constructor for the Flash Runtime + + @class FlashRuntime + @extends Runtime + */ + function FlashRuntime(options) { + var I = this, initTimer; + + options = Basic.extend({ swf_url: Env.swf_url }, options); + + Runtime.call(this, options, type, { + access_binary: function(value) { + return value && I.mode === 'browser'; + }, + access_image_binary: function(value) { + return value && I.mode === 'browser'; + }, + display_media: Runtime.capTrue, + do_cors: Runtime.capTrue, + drag_and_drop: false, + report_upload_progress: function() { + return I.mode === 'client'; + }, + resize_image: Runtime.capTrue, + return_response_headers: false, + return_response_type: function(responseType) { + if (responseType === 'json' && !!window.JSON) { + return true; + } + return !Basic.arrayDiff(responseType, ['', 'text', 'document']) || I.mode === 'browser'; + }, + return_status_code: function(code) { + return I.mode === 'browser' || !Basic.arrayDiff(code, [200, 404]); + }, + select_file: Runtime.capTrue, + select_multiple: Runtime.capTrue, + send_binary_string: function(value) { + return value && I.mode === 'browser'; + }, + send_browser_cookies: function(value) { + return value && I.mode === 'browser'; + }, + send_custom_headers: function(value) { + return value && I.mode === 'browser'; + }, + send_multipart: Runtime.capTrue, + slice_blob: Runtime.capTrue, + stream_upload: function(value) { + return value && I.mode === 'browser'; + }, + summon_file_dialog: false, + upload_filesize: function(size) { + return Basic.parseSizeStr(size) <= 2097152 || I.mode === 'client'; + }, + use_http_method: function(methods) { + return !Basic.arrayDiff(methods, ['GET', 'POST']); + } + }, { + // capabilities that require specific mode + access_binary: function(value) { + return value ? 'browser' : 'client'; + }, + access_image_binary: function(value) { + return value ? 'browser' : 'client'; + }, + report_upload_progress: function(value) { + return value ? 'browser' : 'client'; + }, + return_response_type: function(responseType) { + return Basic.arrayDiff(responseType, ['', 'text', 'json', 'document']) ? 'browser' : ['client', 'browser']; + }, + return_status_code: function(code) { + return Basic.arrayDiff(code, [200, 404]) ? 'browser' : ['client', 'browser']; + }, + send_binary_string: function(value) { + return value ? 'browser' : 'client'; + }, + send_browser_cookies: function(value) { + return value ? 'browser' : 'client'; + }, + send_custom_headers: function(value) { + return value ? 'browser' : 'client'; + }, + stream_upload: function(value) { + return value ? 'client' : 'browser'; + }, + upload_filesize: function(size) { + return Basic.parseSizeStr(size) >= 2097152 ? 'client' : 'browser'; + } + }, 'client'); + + + // minimal requirement for Flash Player version + if (getShimVersion() < 10) { + this.mode = false; // with falsy mode, runtime won't operable, no matter what the mode was before + } + + + Basic.extend(this, { + + getShim: function() { + return Dom.get(this.uid); + }, + + shimExec: function(component, action) { + var args = [].slice.call(arguments, 2); + return I.getShim().exec(this.uid, component, action, args); + }, + + init: function() { + var html, el, container; + + container = this.getShimContainer(); + + // if not the minimal height, shims are not initialized in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) + Basic.extend(container.style, { + position: 'absolute', + top: '-8px', + left: '-8px', + width: '9px', + height: '9px', + overflow: 'hidden' + }); + + // insert flash object + html = '<object id="' + this.uid + '" type="application/x-shockwave-flash" data="' + options.swf_url + '" '; + + if (Env.browser === 'IE') { + html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '; + } + + html += 'width="100%" height="100%" style="outline:0">' + + '<param name="movie" value="' + options.swf_url + '" />' + + '<param name="flashvars" value="uid=' + escape(this.uid) + '&target=' + Env.global_event_dispatcher + '" />' + + '<param name="wmode" value="transparent" />' + + '<param name="allowscriptaccess" value="always" />' + + '</object>'; + + if (Env.browser === 'IE') { + el = document.createElement('div'); + container.appendChild(el); + el.outerHTML = html; + el = container = null; // just in case + } else { + container.innerHTML = html; + } + + // Init is dispatched by the shim + initTimer = setTimeout(function() { + if (I && !I.initialized) { // runtime might be already destroyed by this moment + I.trigger("Error", new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + } + }, 5000); + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + clearTimeout(initTimer); // initialization check might be still onwait + options = initTimer = destroy = I = null; + }; + }(this.destroy)) + + }, extensions); + } + + Runtime.addConstructor(type, FlashRuntime); + + return extensions; +}); + +// Included from: src/javascript/runtime/flash/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/Blob +@private +*/ +define("moxie/runtime/flash/file/Blob", [ + "moxie/runtime/flash/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + var FlashBlob = { + slice: function(blob, start, end, type) { + var self = this.getRuntime(); + + if (start < 0) { + start = Math.max(blob.size + start, 0); + } else if (start > 0) { + start = Math.min(start, blob.size); + } + + if (end < 0) { + end = Math.max(blob.size + end, 0); + } else if (end > 0) { + end = Math.min(end, blob.size); + } + + blob = self.shimExec.call(this, 'Blob', 'slice', start, end, type || ''); + + if (blob) { + blob = new Blob(self.uid, blob); + } + return blob; + } + }; + + return (extensions.Blob = FlashBlob); +}); + +// Included from: src/javascript/runtime/flash/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileInput +@private +*/ +define("moxie/runtime/flash/file/FileInput", [ + "moxie/runtime/flash/Runtime" +], function(extensions) { + + var FileInput = { + init: function(options) { + this.getRuntime().shimExec.call(this, 'FileInput', 'init', { + name: options.name, + accept: options.accept, + multiple: options.multiple + }); + this.trigger('ready'); + } + }; + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/flash/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileReader +@private +*/ +define("moxie/runtime/flash/file/FileReader", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Encode" +], function(extensions, Encode) { + + var _result = ''; + + function _formatData(data, op) { + switch (op) { + case 'readAsText': + return Encode.atob(data, 'utf8'); + case 'readAsBinaryString': + return Encode.atob(data); + case 'readAsDataURL': + return data; + } + return null; + } + + var FileReader = { + read: function(op, blob) { + var target = this, self = target.getRuntime(); + + // special prefix for DataURL read mode + if (op === 'readAsDataURL') { + _result = 'data:' + (blob.type || '') + ';base64,'; + } + + target.bind('Progress', function(e, data) { + if (data) { + _result += _formatData(data, op); + } + }); + + return self.shimExec.call(this, 'FileReader', 'readAsBase64', blob.uid); + }, + + getResult: function() { + return _result; + }, + + destroy: function() { + _result = null; + } + }; + + return (extensions.FileReader = FileReader); +}); + +// Included from: src/javascript/runtime/flash/file/FileReaderSync.js + +/** + * FileReaderSync.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileReaderSync +@private +*/ +define("moxie/runtime/flash/file/FileReaderSync", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Encode" +], function(extensions, Encode) { + + function _formatData(data, op) { + switch (op) { + case 'readAsText': + return Encode.atob(data, 'utf8'); + case 'readAsBinaryString': + return Encode.atob(data); + case 'readAsDataURL': + return data; + } + return null; + } + + var FileReaderSync = { + read: function(op, blob) { + var result, self = this.getRuntime(); + + result = self.shimExec.call(this, 'FileReaderSync', 'readAsBase64', blob.uid); + if (!result) { + return null; // or throw ex + } + + // special prefix for DataURL read mode + if (op === 'readAsDataURL') { + result = 'data:' + (blob.type || '') + ';base64,' + result; + } + + return _formatData(result, op, blob.type); + } + }; + + return (extensions.FileReaderSync = FileReaderSync); +}); + +// Included from: src/javascript/runtime/flash/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/flash/xhr/XMLHttpRequest", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Basic", + "moxie/file/Blob", + "moxie/file/File", + "moxie/file/FileReaderSync", + "moxie/xhr/FormData", + "moxie/runtime/Transporter" +], function(extensions, Basic, Blob, File, FileReaderSync, FormData, Transporter) { + + var XMLHttpRequest = { + + send: function(meta, data) { + var target = this, self = target.getRuntime(); + + function send() { + meta.transport = self.mode; + self.shimExec.call(target, 'XMLHttpRequest', 'send', meta, data); + } + + + function appendBlob(name, blob) { + self.shimExec.call(target, 'XMLHttpRequest', 'appendBlob', name, blob.uid); + data = null; + send(); + } + + + function attachBlob(blob, cb) { + var tr = new Transporter(); + + tr.bind("TransportingComplete", function() { + cb(this.result); + }); + + tr.transport(blob.getSource(), blob.type, { + ruid: self.uid + }); + } + + // copy over the headers if any + if (!Basic.isEmptyObj(meta.headers)) { + Basic.each(meta.headers, function(value, header) { + self.shimExec.call(target, 'XMLHttpRequest', 'setRequestHeader', header, value.toString()); // Silverlight doesn't accept integers into the arguments of type object + }); + } + + // transfer over multipart params and blob itself + if (data instanceof FormData) { + var blobField; + data.each(function(value, name) { + if (value instanceof Blob) { + blobField = name; + } else { + self.shimExec.call(target, 'XMLHttpRequest', 'append', name, value); + } + }); + + if (!data.hasBlob()) { + data = null; + send(); + } else { + var blob = data.getBlob(); + if (blob.isDetached()) { + attachBlob(blob, function(attachedBlob) { + blob.destroy(); + appendBlob(blobField, attachedBlob); + }); + } else { + appendBlob(blobField, blob); + } + } + } else if (data instanceof Blob) { + if (data.isDetached()) { + attachBlob(data, function(attachedBlob) { + data.destroy(); + data = attachedBlob.uid; + send(); + }); + } else { + data = data.uid; + send(); + } + } else { + send(); + } + }, + + getResponse: function(responseType) { + var frs, blob, self = this.getRuntime(); + + blob = self.shimExec.call(this, 'XMLHttpRequest', 'getResponseAsBlob'); + + if (blob) { + blob = new File(self.uid, blob); + + if ('blob' === responseType) { + return blob; + } + + try { + frs = new FileReaderSync(); + + if (!!~Basic.inArray(responseType, ["", "text"])) { + return frs.readAsText(blob); + } else if ('json' === responseType && !!window.JSON) { + return JSON.parse(frs.readAsText(blob)); + } + } finally { + blob.destroy(); + } + } + return null; + }, + + abort: function(upload_complete_flag) { + var self = this.getRuntime(); + + self.shimExec.call(this, 'XMLHttpRequest', 'abort'); + + this.dispatchEvent('readystatechange'); + // this.dispatchEvent('progress'); + this.dispatchEvent('abort'); + + //if (!upload_complete_flag) { + // this.dispatchEvent('uploadprogress'); + //} + } + }; + + return (extensions.XMLHttpRequest = XMLHttpRequest); +}); + +// Included from: src/javascript/runtime/flash/runtime/Transporter.js + +/** + * Transporter.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/runtime/Transporter +@private +*/ +define("moxie/runtime/flash/runtime/Transporter", [ + "moxie/runtime/flash/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + var Transporter = { + getAsBlob: function(type) { + var self = this.getRuntime() + , blob = self.shimExec.call(this, 'Transporter', 'getAsBlob', type) + ; + if (blob) { + return new Blob(self.uid, blob); + } + return null; + } + }; + + return (extensions.Transporter = Transporter); +}); + +// Included from: src/javascript/runtime/flash/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/image/Image +@private +*/ +define("moxie/runtime/flash/image/Image", [ + "moxie/runtime/flash/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/Transporter", + "moxie/file/Blob", + "moxie/file/FileReaderSync" +], function(extensions, Basic, Transporter, Blob, FileReaderSync) { + + var Image = { + loadFromBlob: function(blob) { + var comp = this, self = comp.getRuntime(); + + function exec(srcBlob) { + self.shimExec.call(comp, 'Image', 'loadFromBlob', srcBlob.uid); + comp = self = null; + } + + if (blob.isDetached()) { // binary string + var tr = new Transporter(); + tr.bind("TransportingComplete", function() { + exec(tr.result.getSource()); + }); + tr.transport(blob.getSource(), blob.type, { ruid: self.uid }); + } else { + exec(blob.getSource()); + } + }, + + loadFromImage: function(img) { + var self = this.getRuntime(); + return self.shimExec.call(this, 'Image', 'loadFromImage', img.uid); + }, + + getAsBlob: function(type, quality) { + var self = this.getRuntime() + , blob = self.shimExec.call(this, 'Image', 'getAsBlob', type, quality) + ; + if (blob) { + return new Blob(self.uid, blob); + } + return null; + }, + + getAsDataURL: function() { + var self = this.getRuntime() + , blob = self.Image.getAsBlob.apply(this, arguments) + , frs + ; + if (!blob) { + return null; + } + frs = new FileReaderSync(); + return frs.readAsDataURL(blob); + } + }; + + return (extensions.Image = Image); +}); + +// Included from: src/javascript/runtime/silverlight/Runtime.js + +/** + * RunTime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global ActiveXObject:true */ + +/** +Defines constructor for Silverlight runtime. + +@class moxie/runtime/silverlight/Runtime +@private +*/ +define("moxie/runtime/silverlight/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/utils/Env", + "moxie/core/utils/Dom", + "moxie/core/Exceptions", + "moxie/runtime/Runtime" +], function(Basic, Env, Dom, x, Runtime) { + + var type = "silverlight", extensions = {}; + + function isInstalled(version) { + var isVersionSupported = false, control = null, actualVer, + actualVerArray, reqVerArray, requiredVersionPart, actualVersionPart, index = 0; + + try { + try { + control = new ActiveXObject('AgControl.AgControl'); + + if (control.IsVersionSupported(version)) { + isVersionSupported = true; + } + + control = null; + } catch (e) { + var plugin = navigator.plugins["Silverlight Plug-In"]; + + if (plugin) { + actualVer = plugin.description; + + if (actualVer === "1.0.30226.2") { + actualVer = "2.0.30226.2"; + } + + actualVerArray = actualVer.split("."); + + while (actualVerArray.length > 3) { + actualVerArray.pop(); + } + + while ( actualVerArray.length < 4) { + actualVerArray.push(0); + } + + reqVerArray = version.split("."); + + while (reqVerArray.length > 4) { + reqVerArray.pop(); + } + + do { + requiredVersionPart = parseInt(reqVerArray[index], 10); + actualVersionPart = parseInt(actualVerArray[index], 10); + index++; + } while (index < reqVerArray.length && requiredVersionPart === actualVersionPart); + + if (requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart)) { + isVersionSupported = true; + } + } + } + } catch (e2) { + isVersionSupported = false; + } + + return isVersionSupported; + } + + /** + Constructor for the Silverlight Runtime + + @class SilverlightRuntime + @extends Runtime + */ + function SilverlightRuntime(options) { + var I = this, initTimer; + + options = Basic.extend({ xap_url: Env.xap_url }, options); + + Runtime.call(this, options, type, { + access_binary: Runtime.capTrue, + access_image_binary: Runtime.capTrue, + display_media: Runtime.capTrue, + do_cors: Runtime.capTrue, + drag_and_drop: false, + report_upload_progress: Runtime.capTrue, + resize_image: Runtime.capTrue, + return_response_headers: function(value) { + return value && I.mode === 'client'; + }, + return_response_type: function(responseType) { + if (responseType !== 'json') { + return true; + } else { + return !!window.JSON; + } + }, + return_status_code: function(code) { + return I.mode === 'client' || !Basic.arrayDiff(code, [200, 404]); + }, + select_file: Runtime.capTrue, + select_multiple: Runtime.capTrue, + send_binary_string: Runtime.capTrue, + send_browser_cookies: function(value) { + return value && I.mode === 'browser'; + }, + send_custom_headers: function(value) { + return value && I.mode === 'client'; + }, + send_multipart: Runtime.capTrue, + slice_blob: Runtime.capTrue, + stream_upload: true, + summon_file_dialog: false, + upload_filesize: Runtime.capTrue, + use_http_method: function(methods) { + return I.mode === 'client' || !Basic.arrayDiff(methods, ['GET', 'POST']); + } + }, { + // capabilities that require specific mode + return_response_headers: function(value) { + return value ? 'client' : 'browser'; + }, + return_status_code: function(code) { + return Basic.arrayDiff(code, [200, 404]) ? 'client' : ['client', 'browser']; + }, + send_browser_cookies: function(value) { + return value ? 'browser' : 'client'; + }, + send_custom_headers: function(value) { + return value ? 'client' : 'browser'; + }, + use_http_method: function(methods) { + return Basic.arrayDiff(methods, ['GET', 'POST']) ? 'client' : ['client', 'browser']; + } + }); + + + // minimal requirement + if (!isInstalled('2.0.31005.0') || Env.browser === 'Opera') { + this.mode = false; + } + + + Basic.extend(this, { + getShim: function() { + return Dom.get(this.uid).content.Moxie; + }, + + shimExec: function(component, action) { + var args = [].slice.call(arguments, 2); + return I.getShim().exec(this.uid, component, action, args); + }, + + init : function() { + var container; + + container = this.getShimContainer(); + + container.innerHTML = '<object id="' + this.uid + '" data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%" style="outline:none;">' + + '<param name="source" value="' + options.xap_url + '"/>' + + '<param name="background" value="Transparent"/>' + + '<param name="windowless" value="true"/>' + + '<param name="enablehtmlaccess" value="true"/>' + + '<param name="initParams" value="uid=' + this.uid + ',target=' + Env.global_event_dispatcher + '"/>' + + '</object>'; + + // Init is dispatched by the shim + initTimer = setTimeout(function() { + if (I && !I.initialized) { // runtime might be already destroyed by this moment + I.trigger("Error", new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + } + }, Env.OS !== 'Windows'? 10000 : 5000); // give it more time to initialize in non Windows OS (like Mac) + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + clearTimeout(initTimer); // initialization check might be still onwait + options = initTimer = destroy = I = null; + }; + }(this.destroy)) + + }, extensions); + } + + Runtime.addConstructor(type, SilverlightRuntime); + + return extensions; +}); + +// Included from: src/javascript/runtime/silverlight/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/Blob +@private +*/ +define("moxie/runtime/silverlight/file/Blob", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/file/Blob" +], function(extensions, Basic, Blob) { + return (extensions.Blob = Basic.extend({}, Blob)); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileInput +@private +*/ +define("moxie/runtime/silverlight/file/FileInput", [ + "moxie/runtime/silverlight/Runtime" +], function(extensions) { + + var FileInput = { + init: function(options) { + + function toFilters(accept) { + var filter = ''; + for (var i = 0; i < accept.length; i++) { + filter += (filter !== '' ? '|' : '') + accept[i].title + " | *." + accept[i].extensions.replace(/,/g, ';*.'); + } + return filter; + } + + this.getRuntime().shimExec.call(this, 'FileInput', 'init', toFilters(options.accept), options.name, options.multiple); + this.trigger('ready'); + } + }; + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileDrop.js + +/** + * FileDrop.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileDrop +@private +*/ +define("moxie/runtime/silverlight/file/FileDrop", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Dom", + "moxie/core/utils/Events" +], function(extensions, Dom, Events) { + + // not exactly useful, since works only in safari (...crickets...) + var FileDrop = { + init: function() { + var comp = this, self = comp.getRuntime(), dropZone; + + dropZone = self.getShimContainer(); + + Events.addEvent(dropZone, 'dragover', function(e) { + e.preventDefault(); + e.stopPropagation(); + e.dataTransfer.dropEffect = 'copy'; + }, comp.uid); + + Events.addEvent(dropZone, 'dragenter', function(e) { + e.preventDefault(); + var flag = Dom.get(self.uid).dragEnter(e); + // If handled, then stop propagation of event in DOM + if (flag) { + e.stopPropagation(); + } + }, comp.uid); + + Events.addEvent(dropZone, 'drop', function(e) { + e.preventDefault(); + var flag = Dom.get(self.uid).dragDrop(e); + // If handled, then stop propagation of event in DOM + if (flag) { + e.stopPropagation(); + } + }, comp.uid); + + return self.shimExec.call(this, 'FileDrop', 'init'); + } + }; + + return (extensions.FileDrop = FileDrop); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileReader +@private +*/ +define("moxie/runtime/silverlight/file/FileReader", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/file/FileReader" +], function(extensions, Basic, FileReader) { + return (extensions.FileReader = Basic.extend({}, FileReader)); +}); + +// Included from: src/javascript/runtime/silverlight/file/FileReaderSync.js + +/** + * FileReaderSync.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileReaderSync +@private +*/ +define("moxie/runtime/silverlight/file/FileReaderSync", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/file/FileReaderSync" +], function(extensions, Basic, FileReaderSync) { + return (extensions.FileReaderSync = Basic.extend({}, FileReaderSync)); +}); + +// Included from: src/javascript/runtime/silverlight/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/silverlight/xhr/XMLHttpRequest", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/xhr/XMLHttpRequest" +], function(extensions, Basic, XMLHttpRequest) { + return (extensions.XMLHttpRequest = Basic.extend({}, XMLHttpRequest)); +}); + +// Included from: src/javascript/runtime/silverlight/runtime/Transporter.js + +/** + * Transporter.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/runtime/Transporter +@private +*/ +define("moxie/runtime/silverlight/runtime/Transporter", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/runtime/Transporter" +], function(extensions, Basic, Transporter) { + return (extensions.Transporter = Basic.extend({}, Transporter)); +}); + +// Included from: src/javascript/runtime/silverlight/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/image/Image +@private +*/ +define("moxie/runtime/silverlight/image/Image", [ + "moxie/runtime/silverlight/Runtime", + "moxie/core/utils/Basic", + "moxie/runtime/flash/image/Image" +], function(extensions, Basic, Image) { + return (extensions.Image = Basic.extend({}, Image, { + + getInfo: function() { + var self = this.getRuntime() + , grps = ['tiff', 'exif', 'gps'] + , info = { meta: {} } + , rawInfo = self.shimExec.call(this, 'Image', 'getInfo') + ; + + if (rawInfo.meta) { + Basic.each(grps, function(grp) { + var meta = rawInfo.meta[grp] + , tag + , i + , length + , value + ; + if (meta && meta.keys) { + info.meta[grp] = {}; + for (i = 0, length = meta.keys.length; i < length; i++) { + tag = meta.keys[i]; + value = meta[tag]; + if (value) { + // convert numbers + if (/^(\d|[1-9]\d+)$/.test(value)) { // integer (make sure doesn't start with zero) + value = parseInt(value, 10); + } else if (/^\d*\.\d+$/.test(value)) { // double + value = parseFloat(value); + } + info.meta[grp][tag] = value; + } + } + } + }); + } + + info.width = parseInt(rawInfo.width, 10); + info.height = parseInt(rawInfo.height, 10); + info.size = parseInt(rawInfo.size, 10); + info.type = rawInfo.type; + info.name = rawInfo.name; + + return info; + } + })); +}); + +// Included from: src/javascript/runtime/html4/Runtime.js + +/** + * Runtime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global File:true */ + +/** +Defines constructor for HTML4 runtime. + +@class moxie/runtime/html4/Runtime +@private +*/ +define("moxie/runtime/html4/Runtime", [ + "moxie/core/utils/Basic", + "moxie/core/Exceptions", + "moxie/runtime/Runtime", + "moxie/core/utils/Env" +], function(Basic, x, Runtime, Env) { + + var type = 'html4', extensions = {}; + + function Html4Runtime(options) { + var I = this + , Test = Runtime.capTest + , True = Runtime.capTrue + ; + + Runtime.call(this, options, type, { + access_binary: Test(window.FileReader || window.File && File.getAsDataURL), + access_image_binary: false, + display_media: Test(extensions.Image && (Env.can('create_canvas') || Env.can('use_data_uri_over32kb'))), + do_cors: false, + drag_and_drop: false, + filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest + return (Env.browser === 'Chrome' && Env.version >= 28) || (Env.browser === 'IE' && Env.version >= 10); + }()), + resize_image: function() { + return extensions.Image && I.can('access_binary') && Env.can('create_canvas'); + }, + report_upload_progress: false, + return_response_headers: false, + return_response_type: function(responseType) { + if (responseType === 'json' && !!window.JSON) { + return true; + } + return !!~Basic.inArray(responseType, ['text', 'document', '']); + }, + return_status_code: function(code) { + return !Basic.arrayDiff(code, [200, 404]); + }, + select_file: function() { + return Env.can('use_fileinput'); + }, + select_multiple: false, + send_binary_string: false, + send_custom_headers: false, + send_multipart: true, + slice_blob: false, + stream_upload: function() { + return I.can('select_file'); + }, + summon_file_dialog: Test(function() { // yeah... some dirty sniffing here... + return (Env.browser === 'Firefox' && Env.version >= 4) || + (Env.browser === 'Opera' && Env.version >= 12) || + !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']); + }()), + upload_filesize: True, + use_http_method: function(methods) { + return !Basic.arrayDiff(methods, ['GET', 'POST']); + } + }); + + + Basic.extend(this, { + init : function() { + this.trigger("Init"); + }, + + destroy: (function(destroy) { // extend default destroy method + return function() { + destroy.call(I); + destroy = I = null; + }; + }(this.destroy)) + }); + + Basic.extend(this.getShim(), extensions); + } + + Runtime.addConstructor(type, Html4Runtime); + + return extensions; +}); + +// Included from: src/javascript/runtime/html4/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/file/FileInput +@private +*/ +define("moxie/runtime/html4/file/FileInput", [ + "moxie/runtime/html4/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Events", + "moxie/core/utils/Mime", + "moxie/core/utils/Env" +], function(extensions, Basic, Dom, Events, Mime, Env) { + + function FileInput() { + var _uid, _files = [], _mimes = [], _options; + + function addInput() { + var comp = this, I = comp.getRuntime(), shimContainer, browseButton, currForm, form, input, uid; + + uid = Basic.guid('uid_'); + + shimContainer = I.getShimContainer(); // we get new ref everytime to avoid memory leaks in IE + + if (_uid) { // move previous form out of the view + currForm = Dom.get(_uid + '_form'); + if (currForm) { + Basic.extend(currForm.style, { top: '100%' }); + } + } + + // build form in DOM, since innerHTML version not able to submit file for some reason + form = document.createElement('form'); + form.setAttribute('id', uid + '_form'); + form.setAttribute('method', 'post'); + form.setAttribute('enctype', 'multipart/form-data'); + form.setAttribute('encoding', 'multipart/form-data'); + + Basic.extend(form.style, { + overflow: 'hidden', + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%' + }); + + input = document.createElement('input'); + input.setAttribute('id', uid); + input.setAttribute('type', 'file'); + input.setAttribute('name', _options.name || 'Filedata'); + input.setAttribute('accept', _mimes.join(',')); + + Basic.extend(input.style, { + fontSize: '999px', + opacity: 0 + }); + + form.appendChild(input); + shimContainer.appendChild(form); + + // prepare file input to be placed underneath the browse_button element + Basic.extend(input.style, { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%' + }); + + if (Env.browser === 'IE' && Env.version < 10) { + Basic.extend(input.style, { + filter : "progid:DXImageTransform.Microsoft.Alpha(opacity=0)" + }); + } + + input.onchange = function() { // there should be only one handler for this + var file; + + if (!this.value) { + return; + } + + if (this.files) { + file = this.files[0]; + } else { + file = { + name: this.value + }; + } + + _files = [file]; + + this.onchange = function() {}; // clear event handler + addInput.call(comp); + + // after file is initialized as o.File, we need to update form and input ids + comp.bind('change', function onChange() { + var input = Dom.get(uid), form = Dom.get(uid + '_form'), file; + + comp.unbind('change', onChange); + + if (comp.files.length && input && form) { + file = comp.files[0]; + + input.setAttribute('id', file.uid); + form.setAttribute('id', file.uid + '_form'); + + // set upload target + form.setAttribute('target', file.uid + '_iframe'); + } + input = form = null; + }, 998); + + input = form = null; + comp.trigger('change'); + }; + + + // route click event to the input + if (I.can('summon_file_dialog')) { + browseButton = Dom.get(_options.browse_button); + Events.removeEvent(browseButton, 'click', comp.uid); + Events.addEvent(browseButton, 'click', function(e) { + if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file] + input.click(); + } + e.preventDefault(); + }, comp.uid); + } + + _uid = uid; + + shimContainer = currForm = browseButton = null; + } + + Basic.extend(this, { + init: function(options) { + var comp = this, I = comp.getRuntime(), shimContainer; + + // figure out accept string + _options = options; + _mimes = options.accept.mimes || Mime.extList2mimes(options.accept, I.can('filter_by_extension')); + + shimContainer = I.getShimContainer(); + + (function() { + var browseButton, zIndex, top; + + browseButton = Dom.get(options.browse_button); + + // Route click event to the input[type=file] element for browsers that support such behavior + if (I.can('summon_file_dialog')) { + if (Dom.getStyle(browseButton, 'position') === 'static') { + browseButton.style.position = 'relative'; + } + + zIndex = parseInt(Dom.getStyle(browseButton, 'z-index'), 10) || 1; + + browseButton.style.zIndex = zIndex; + shimContainer.style.zIndex = zIndex - 1; + } + + /* Since we have to place input[type=file] on top of the browse_button for some browsers, + browse_button loses interactivity, so we restore it here */ + top = I.can('summon_file_dialog') ? browseButton : shimContainer; + + Events.addEvent(top, 'mouseover', function() { + comp.trigger('mouseenter'); + }, comp.uid); + + Events.addEvent(top, 'mouseout', function() { + comp.trigger('mouseleave'); + }, comp.uid); + + Events.addEvent(top, 'mousedown', function() { + comp.trigger('mousedown'); + }, comp.uid); + + Events.addEvent(Dom.get(options.container), 'mouseup', function() { + comp.trigger('mouseup'); + }, comp.uid); + + browseButton = null; + }()); + + addInput.call(this); + + shimContainer = null; + + // trigger ready event asynchronously + comp.trigger({ + type: 'ready', + async: true + }); + }, + + getFiles: function() { + return _files; + }, + + disable: function(state) { + var input; + + if ((input = Dom.get(_uid))) { + input.disabled = !!state; + } + }, + + destroy: function() { + var I = this.getRuntime() + , shim = I.getShim() + , shimContainer = I.getShimContainer() + ; + + Events.removeAllEvents(shimContainer, this.uid); + Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); + Events.removeAllEvents(_options && Dom.get(_options.browse_button), this.uid); + + if (shimContainer) { + shimContainer.innerHTML = ''; + } + + shim.removeInstance(this.uid); + + _uid = _files = _mimes = _options = shimContainer = shim = null; + } + }); + } + + return (extensions.FileInput = FileInput); +}); + +// Included from: src/javascript/runtime/html4/file/FileReader.js + +/** + * FileReader.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/file/FileReader +@private +*/ +define("moxie/runtime/html4/file/FileReader", [ + "moxie/runtime/html4/Runtime", + "moxie/runtime/html5/file/FileReader" +], function(extensions, FileReader) { + return (extensions.FileReader = FileReader); +}); + +// Included from: src/javascript/runtime/html4/xhr/XMLHttpRequest.js + +/** + * XMLHttpRequest.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/xhr/XMLHttpRequest +@private +*/ +define("moxie/runtime/html4/xhr/XMLHttpRequest", [ + "moxie/runtime/html4/Runtime", + "moxie/core/utils/Basic", + "moxie/core/utils/Dom", + "moxie/core/utils/Url", + "moxie/core/Exceptions", + "moxie/core/utils/Events", + "moxie/file/Blob", + "moxie/xhr/FormData" +], function(extensions, Basic, Dom, Url, x, Events, Blob, FormData) { + + function XMLHttpRequest() { + var _status, _response, _iframe; + + function cleanup(cb) { + var target = this, uid, form, inputs, i, hasFile = false; + + if (!_iframe) { + return; + } + + uid = _iframe.id.replace(/_iframe$/, ''); + + form = Dom.get(uid + '_form'); + if (form) { + inputs = form.getElementsByTagName('input'); + i = inputs.length; + + while (i--) { + switch (inputs[i].getAttribute('type')) { + case 'hidden': + inputs[i].parentNode.removeChild(inputs[i]); + break; + case 'file': + hasFile = true; // flag the case for later + break; + } + } + inputs = []; + + if (!hasFile) { // we need to keep the form for sake of possible retries + form.parentNode.removeChild(form); + } + form = null; + } + + // without timeout, request is marked as canceled (in console) + setTimeout(function() { + Events.removeEvent(_iframe, 'load', target.uid); + if (_iframe.parentNode) { // #382 + _iframe.parentNode.removeChild(_iframe); + } + + // check if shim container has any other children, if - not, remove it as well + var shimContainer = target.getRuntime().getShimContainer(); + if (!shimContainer.children.length) { + shimContainer.parentNode.removeChild(shimContainer); + } + + shimContainer = _iframe = null; + cb(); + }, 1); + } + + Basic.extend(this, { + send: function(meta, data) { + var target = this, I = target.getRuntime(), uid, form, input, blob; + + _status = _response = null; + + function createIframe() { + var container = I.getShimContainer() || document.body + , temp = document.createElement('div') + ; + + // IE 6 won't be able to set the name using setAttribute or iframe.name + temp.innerHTML = '<iframe id="' + uid + '_iframe" name="' + uid + '_iframe" src="javascript:""" style="display:none"></iframe>'; + _iframe = temp.firstChild; + container.appendChild(_iframe); + + /* _iframe.onreadystatechange = function() { + console.info(_iframe.readyState); + };*/ + + Events.addEvent(_iframe, 'load', function() { // _iframe.onload doesn't work in IE lte 8 + var el; + + try { + el = _iframe.contentWindow.document || _iframe.contentDocument || window.frames[_iframe.id].document; + + // try to detect some standard error pages + if (/^4(0[0-9]|1[0-7]|2[2346])\s/.test(el.title)) { // test if title starts with 4xx HTTP error + _status = el.title.replace(/^(\d+).*$/, '$1'); + } else { + _status = 200; + // get result + _response = Basic.trim(el.body.innerHTML); + + // we need to fire these at least once + target.trigger({ + type: 'progress', + loaded: _response.length, + total: _response.length + }); + + if (blob) { // if we were uploading a file + target.trigger({ + type: 'uploadprogress', + loaded: blob.size || 1025, + total: blob.size || 1025 + }); + } + } + } catch (ex) { + if (Url.hasSameOrigin(meta.url)) { + // if response is sent with error code, iframe in IE gets redirected to res://ieframe.dll/http_x.htm + // which obviously results to cross domain error (wtf?) + _status = 404; + } else { + cleanup.call(target, function() { + target.trigger('error'); + }); + return; + } + } + + cleanup.call(target, function() { + target.trigger('load'); + }); + }, target.uid); + } // end createIframe + + // prepare data to be sent and convert if required + if (data instanceof FormData && data.hasBlob()) { + blob = data.getBlob(); + uid = blob.uid; + input = Dom.get(uid); + form = Dom.get(uid + '_form'); + if (!form) { + throw new x.DOMException(x.DOMException.NOT_FOUND_ERR); + } + } else { + uid = Basic.guid('uid_'); + + form = document.createElement('form'); + form.setAttribute('id', uid + '_form'); + form.setAttribute('method', meta.method); + form.setAttribute('enctype', 'multipart/form-data'); + form.setAttribute('encoding', 'multipart/form-data'); + form.setAttribute('target', uid + '_iframe'); + + I.getShimContainer().appendChild(form); + } + + if (data instanceof FormData) { + data.each(function(value, name) { + if (value instanceof Blob) { + if (input) { + input.setAttribute('name', name); + } + } else { + var hidden = document.createElement('input'); + + Basic.extend(hidden, { + type : 'hidden', + name : name, + value : value + }); + + // make sure that input[type="file"], if it's there, comes last + if (input) { + form.insertBefore(hidden, input); + } else { + form.appendChild(hidden); + } + } + }); + } + + // set destination url + form.setAttribute("action", meta.url); + + createIframe(); + form.submit(); + target.trigger('loadstart'); + }, + + getStatus: function() { + return _status; + }, + + getResponse: function(responseType) { + if ('json' === responseType) { + // strip off <pre>..</pre> tags that might be enclosing the response + if (Basic.typeOf(_response) === 'string' && !!window.JSON) { + try { + return JSON.parse(_response.replace(/^\s*<pre[^>]*>/, '').replace(/<\/pre>\s*$/, '')); + } catch (ex) { + return null; + } + } + } else if ('document' === responseType) { + + } + return _response; + }, + + abort: function() { + var target = this; + + if (_iframe && _iframe.contentWindow) { + if (_iframe.contentWindow.stop) { // FireFox/Safari/Chrome + _iframe.contentWindow.stop(); + } else if (_iframe.contentWindow.document.execCommand) { // IE + _iframe.contentWindow.document.execCommand('Stop'); + } else { + _iframe.src = "about:blank"; + } + } + + cleanup.call(this, function() { + // target.dispatchEvent('readystatechange'); + target.dispatchEvent('abort'); + }); + } + }); + } + + return (extensions.XMLHttpRequest = XMLHttpRequest); +}); + +// Included from: src/javascript/runtime/html4/image/Image.js + +/** + * Image.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html4/image/Image +@private +*/ +define("moxie/runtime/html4/image/Image", [ + "moxie/runtime/html4/Runtime", + "moxie/runtime/html5/image/Image" +], function(extensions, Image) { + return (extensions.Image = Image); +}); + +expose(["moxie/core/utils/Basic","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/utils/Encode","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/Blob","moxie/file/File","moxie/file/FileInput","moxie/file/FileDrop","moxie/runtime/RuntimeTarget","moxie/file/FileReader","moxie/core/utils/Url","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"]); +})(this);/** + * o.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global moxie:true */ + +/** +Globally exposed namespace with the most frequently used public classes and handy methods. + +@class o +@static +@private +*/ +(function() { + "use strict"; + + var o = {}, inArray = moxie.core.utils.Basic.inArray; + + // directly add some public classes + // (we do it dynamically here, since for custom builds we cannot know beforehand what modules were included) + (function addAlias(ns) { + var name, itemType; + for (name in ns) { + itemType = typeof(ns[name]); + if (itemType === 'object' && !~inArray(name, ['Exceptions', 'Env', 'Mime'])) { + addAlias(ns[name]); + } else if (itemType === 'function') { + o[name] = ns[name]; + } + } + })(window.moxie); + + // add some manually + o.Env = window.moxie.core.utils.Env; + o.Mime = window.moxie.core.utils.Mime; + o.Exceptions = window.moxie.core.Exceptions; + + // expose globally + window.mOxie = o; + if (!window.o) { + window.o = o; + } + return o; +})(); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.min.js new file mode 100755 index 0000000000000000000000000000000000000000..99e119ef3d87cc84cf55f9871a7309079c44c441 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/moxie.min.js @@ -0,0 +1,15 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.2.0 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2014-01-16 + */ +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r<e.length;++r){if(n=s[e[r]]||o(e[r]),!n)throw"module definition dependecy not found: "+e[r];i.push(n)}t.apply(null,i)}function i(e,i,r){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(i===t)throw"invalid module definition, dependencies must be specified";if(r===t)throw"invalid module definition, definition function must be specified";n(i,function(){s[e]=r.apply(null,arguments)})}function r(e){return!!s[e]}function o(t){for(var n=e,i=t.split(/[.\/]/),r=0;r<i.length;++r){if(!n[i[r]])return;n=n[i[r]]}return n}function a(n){for(var i=0;i<n.length;i++){for(var r=e,o=n[i],a=o.split(/[.\/]/),u=0;u<a.length-1;++u)r[a[u]]===t&&(r[a[u]]={}),r=r[a[u]];r[a[a.length-1]]=s[o]}}var s={},u="moxie/core/utils/Basic",c="moxie/core/I18n",l="moxie/core/utils/Mime",d="moxie/core/utils/Env",f="moxie/core/utils/Dom",p="moxie/core/Exceptions",h="moxie/core/EventTarget",m="moxie/core/utils/Encode",g="moxie/runtime/Runtime",v="moxie/runtime/RuntimeClient",y="moxie/file/Blob",w="moxie/file/File",E="moxie/file/FileInput",_="moxie/file/FileDrop",x="moxie/runtime/RuntimeTarget",R="moxie/file/FileReader",b="moxie/core/utils/Url",T="moxie/file/FileReaderSync",S="moxie/xhr/FormData",A="moxie/xhr/XMLHttpRequest",O="moxie/runtime/Transporter",I="moxie/image/Image",D="moxie/runtime/html5/Runtime",N="moxie/runtime/html5/file/Blob",L="moxie/core/utils/Events",M="moxie/runtime/html5/file/FileInput",C="moxie/runtime/html5/file/FileDrop",F="moxie/runtime/html5/file/FileReader",H="moxie/runtime/html5/xhr/XMLHttpRequest",P="moxie/runtime/html5/utils/BinaryReader",k="moxie/runtime/html5/image/JPEGHeaders",U="moxie/runtime/html5/image/ExifParser",B="moxie/runtime/html5/image/JPEG",z="moxie/runtime/html5/image/PNG",G="moxie/runtime/html5/image/ImageInfo",q="moxie/runtime/html5/image/MegaPixel",X="moxie/runtime/html5/image/Image",j="moxie/runtime/flash/Runtime",V="moxie/runtime/flash/file/Blob",W="moxie/runtime/flash/file/FileInput",Y="moxie/runtime/flash/file/FileReader",$="moxie/runtime/flash/file/FileReaderSync",J="moxie/runtime/flash/xhr/XMLHttpRequest",Z="moxie/runtime/flash/runtime/Transporter",K="moxie/runtime/flash/image/Image",Q="moxie/runtime/silverlight/Runtime",et="moxie/runtime/silverlight/file/Blob",tt="moxie/runtime/silverlight/file/FileInput",nt="moxie/runtime/silverlight/file/FileDrop",it="moxie/runtime/silverlight/file/FileReader",rt="moxie/runtime/silverlight/file/FileReaderSync",ot="moxie/runtime/silverlight/xhr/XMLHttpRequest",at="moxie/runtime/silverlight/runtime/Transporter",st="moxie/runtime/silverlight/image/Image",ut="moxie/runtime/html4/Runtime",ct="moxie/runtime/html4/file/FileInput",lt="moxie/runtime/html4/file/FileReader",dt="moxie/runtime/html4/xhr/XMLHttpRequest",ft="moxie/runtime/html4/image/Image";i(u,[],function(){var e=function(e){var t;return e===t?"undefined":null===e?"null":e.nodeType?"node":{}.toString.call(e).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()},t=function(i){var r;return n(arguments,function(o,s){s>0&&n(o,function(n,o){n!==r&&(e(i[o])===e(n)&&~a(e(n),["array","object"])?t(i[o],n):i[o]=n)})}),i},n=function(e,t){var n,i,r,o;if(e){try{n=e.length}catch(a){n=o}if(n===o){for(i in e)if(e.hasOwnProperty(i)&&t(e[i],i)===!1)return}else for(r=0;n>r;r++)if(t(e[r],r)===!1)return}},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++r<o&&!e?i(r):n(e)})}var r=0,o=t.length;"function"!==e(n)&&(n=function(){}),t&&t.length||n(),i(r)},o=function(e,t){var i=0,r=e.length,o=new Array(r);n(e,function(e,n){e(function(e){if(e)return t(e);var a=[].slice.call(arguments);a.shift(),o[n]=a,i++,i===r&&(o.unshift(null),t.apply(this,o))})})},a=function(e,t){if(t){if(Array.prototype.indexOf)return Array.prototype.indexOf.call(t,e);for(var n=0,i=t.length;i>n;n++)if(t[n]===e)return n}return-1},s=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===a(t[r],n)&&i.push(t[r]);return i.length?i:!1},u=function(e,t){var i=[];return n(e,function(e){-1!==a(e,t)&&i.push(e)}),i.length?i:null},c=function(e){var t,n=[];for(t=0;t<e.length;t++)n[t]=e[t];return n},l=function(){var e=0;return function(t){var n=(new Date).getTime().toString(32),i;for(i=0;5>i;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),d=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},f=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9]+)([mgk]?)$/.exec(e.toLowerCase().replace(/[^0-9mkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),e};return{guid:l,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inParallel:o,inArray:a,arrayDiff:s,arrayIntersect:u,toArray:c,trim:d,parseSizeStr:f}}),i(c,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e.typeOf(t)?t:""})}}}),i(l,[u,c],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;n<t.length;n+=2){for(r=t[n+1].split(/ /),i=0;i<r.length;i++)this.mimes[r[i]]=t[n];this.extensions[t[n]]=r}},extList2mimes:function(t,n){var i=this,r,o,a,s,u=[];for(o=0;o<t.length;o++)for(r=t[o].extensions.split(/\s*,\s*/),a=0;a<r.length;a++){if("*"===r[a])return[];if(s=i.mimes[r[a]])-1===e.inArray(s,u)&&u.push(s);else{if(!n||!/^\w+$/.test(r[a]))return[];u.push("."+r[a])}}return u},mimes2exts:function(t){var n=this,i=[];return e.each(t,function(t){if("*"===t)return i=[],!1;var r=t.match(/^(\w+)\/(\*|\w+)$/);r&&("*"===r[2]?e.each(n.extensions,function(e,t){new RegExp("^"+r[1]+"/").test(t)&&[].push.apply(i,n.extensions[t])}):n.extensions[t]&&[].push.apply(i,n.extensions[t]))}),i},mimes2extList:function(n){var i=[],r=[];return"string"===e.typeOf(n)&&(n=e.trim(n).split(/\s*,\s*/)),r=this.mimes2exts(n),i.push({title:t.translate("Files"),extensions:r.length?r.join(","):"*"}),i.mimes=n,i},getFileExtension:function(e){var t=e&&e.match(/\.([^.]+)$/);return t?t[1].toLowerCase():""},getFileMime:function(e){return this.mimes[this.getFileExtension(e)]||""}};return i.addMimeType(n),i}),i(d,[u],function(e){function t(e,t,n){var i=0,r=0,o=0,a={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1},s=function(e){return e=(""+e).replace(/[_\-+]/g,"."),e=e.replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,"."),e.length?e.split("."):[-8]},u=function(e){return e?isNaN(e)?a[e]||-7:parseInt(e,10):0};for(e=s(e),t=s(t),r=Math.max(e.length,t.length),i=0;r>i;i++)if(e[i]!=t[i]){if(e[i]=u(e[i]),t[i]=u(t[i]),e[i]<t[i]){o=-1;break}if(e[i]>t[i]){o=1;break}}if(!n)return o;switch(n){case">":case"gt":return o>0;case">=":case"ge":return o>=0;case"<=":case"le":return 0>=o;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return 0>o;default:return null}}var n=function(e){var t="",n="?",i="function",r="undefined",o="object",a="major",s="model",u="name",c="type",l="vendor",d="version",f="architecture",p="console",h="mobile",m="tablet",g={has:function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},lowerize:function(e){return e.toLowerCase()}},v={rgx:function(){for(var t,n=0,a,s,u,c,l,d,f=arguments;n<f.length;n+=2){var p=f[n],h=f[n+1];if(typeof t===r){t={};for(u in h)c=h[u],typeof c===o?t[c[0]]=e:t[c]=e}for(a=s=0;a<p.length;a++)if(l=p[a].exec(this.getUA())){for(u=0;u<h.length;u++)d=l[++s],c=h[u],typeof c===o&&c.length>0?2==c.length?t[c[0]]=typeof c[1]==i?c[1].call(this,d):c[1]:3==c.length?t[c[0]]=typeof c[1]!==i||c[1].exec&&c[1].test?d?d.replace(c[1],c[2]):e:d?c[1].call(this,d,c[2]):e:4==c.length&&(t[c[0]]=d?c[3].call(this,d.replace(c[1],c[2])):e):t[c]=d?d:e;break}if(l)break}return t},str:function(t,i){for(var r in i)if(typeof i[r]===o&&i[r].length>0){for(var a=0;a<i[r].length;a++)if(g.has(i[r][a],t))return r===n?e:r}else if(g.has(i[r],t))return r===n?e:r;return t}},y={browser:{oldsafari:{major:{1:["/8","/1","/3"],2:"/4","?":"/"},version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2000:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",RT:"ARM"}}}},w={browser:[[/(opera\smini)\/((\d+)?[\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/((\d+)?[\w\.-]+)/i,/(opera).+version\/((\d+)?[\w\.]+)/i,/(opera)[\/\s]+((\d+)?[\w\.]+)/i],[u,d,a],[/\s(opr)\/((\d+)?[\w\.]+)/i],[[u,"Opera"],d,a],[/(kindle)\/((\d+)?[\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?((\d+)?[\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?((\d+)?[\w\.]*)/i,/(?:ms|\()(ie)\s((\d+)?[\w\.]+)/i,/(rekonq)((?:\/)[\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron)\/((\d+)?[\w\.-]+)/i],[u,d,a],[/(trident).+rv[:\s]((\d+)?[\w\.]+).+like\sgecko/i],[[u,"IE"],d,a],[/(yabrowser)\/((\d+)?[\w\.]+)/i],[[u,"Yandex"],d,a],[/(comodo_dragon)\/((\d+)?[\w\.]+)/i],[[u,/_/g," "],d,a],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i],[u,d,a],[/(dolfin)\/((\d+)?[\w\.]+)/i],[[u,"Dolphin"],d,a],[/((?:android.+)crmo|crios)\/((\d+)?[\w\.]+)/i],[[u,"Chrome"],d,a],[/((?:android.+))version\/((\d+)?[\w\.]+)\smobile\ssafari/i],[[u,"Android Browser"],d,a],[/version\/((\d+)?[\w\.]+).+?mobile\/\w+\s(safari)/i],[d,a,[u,"Mobile Safari"]],[/version\/((\d+)?[\w\.]+).+?(mobile\s?safari|safari)/i],[d,a,u],[/webkit.+?(mobile\s?safari|safari)((\/[\w\.]+))/i],[u,[a,v.str,y.browser.oldsafari.major],[d,v.str,y.browser.oldsafari.version]],[/(konqueror)\/((\d+)?[\w\.]+)/i,/(webkit|khtml)\/((\d+)?[\w\.]+)/i],[u,d,a],[/(navigator|netscape)\/((\d+)?[\w\.-]+)/i],[[u,"Netscape"],d,a],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?((\d+)?[\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.-]+)/i,/(mozilla)\/((\d+)?[\w\.]+).+rv\:.+gecko\/\d+/i,/(uc\s?browser|polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|qqbrowser)[\/\s]?((\d+)?[\w\.]+)/i,/(links)\s\(((\d+)?[\w\.]+)/i,/(gobrowser)\/?((\d+)?[\w\.]+)*/i,/(ice\s?browser)\/v?((\d+)?[\w\._]+)/i,/(mosaic)[\/\s]((\d+)?[\w\.]+)/i],[u,d,a]],engine:[[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[u,d],[/rv\:([\w\.]+).*(gecko)/i],[d,u]],os:[[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[u,[d,v.str,y.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[u,"Windows"],[d,v.str,y.os.windows.version]],[/\((bb)(10);/i],[[u,"BlackBerry"],d],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)\/([\w\.]+)/i,/(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego)[\/\s-]?([\w\.]+)*/i],[u,d],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[u,"Symbian"],d],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[u,"Firefox OS"],d],[/(nintendo|playstation)\s([wids3portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk)[\/\s-]?([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[u,d],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[u,"Chromium OS"],d],[/(sunos)\s?([\w\.]+\d)*/i],[[u,"Solaris"],d],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[u,d],[/(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i],[[u,"iOS"],[d,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i],[u,[d,/_/g,"."]],[/(haiku)\s(\w+)/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(macintosh|mac(?=_powerpc)|plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos)/i,/(unix)\s?([\w\.]+)*/i],[u,d]]},E=function(e){var n=e||(window&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:t);this.getBrowser=function(){return v.rgx.apply(this,w.browser)},this.getEngine=function(){return v.rgx.apply(this,w.engine)},this.getOS=function(){return v.rgx.apply(this,w.os)},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS()}},this.getUA=function(){return n},this.setUA=function(e){return n=e,this},this.setUA(n)};return(new E).getResult()}(),i=function(){var t={define_property:function(){return!1}(),create_canvas:function(){var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))}(),return_response_type:function(t){try{if(-1!==e.inArray(t,["","text","document"]))return!0;if(window.XMLHttpRequest){var n=new XMLHttpRequest;if(n.open("get","/"),"responseType"in n)return n.responseType=t,n.responseType!==t?!1:!0}}catch(i){}return!1},use_data_uri:function(){var e=new Image;return e.onload=function(){t.use_data_uri=1===e.width&&1===e.height},setTimeout(function(){e.src="data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="},1),!1}(),use_data_uri_over32kb:function(){return t.use_data_uri&&("IE"!==r.browser||r.version>=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),r={can:i,browser:n.browser.name,version:parseFloat(n.browser.major),os:n.os.name,osVersion:n.os.version,verComp:t,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return r.OS=r.os,r}),i(f,[d],function(e){var t=function(e){return"string"!=typeof e?e:document.getElementById(e)},n=function(e,t){if(!e.className)return!1;var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");return n.test(e.className)},i=function(e,t){n(e,t)||(e.className=e.className?e.className.replace(/\s+$/,"")+" "+t:t)},r=function(e,t){if(e.className){var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");e.className=e.className.replace(n,function(e,t,n){return" "===t&&" "===n?" ":""})}},o=function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},a=function(t,n){function i(e){var t,n,i=0,r=0;return e&&(n=e.getBoundingClientRect(),t="CSS1Compat"===s.compatMode?s.documentElement:s.body,i=n.left+t.scrollLeft,r=n.top+t.scrollTop),{x:i,y:r}}var r=0,o=0,a,s=document,u,c;if(t=t,n=n||s.body,t&&t.getBoundingClientRect&&"IE"===e.browser&&(!s.documentMode||s.documentMode<8))return u=i(t),c=i(n),{x:u.x-c.x,y:u.y-c.y};for(a=t;a&&a!=n&&a.nodeType;)r+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=t.parentNode;a&&a!=n&&a.nodeType;)r-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode;return{x:r,y:o}},s=function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}};return{get:t,hasClass:n,addClass:i,removeClass:r,getStyle:o,getPos:a,getSize:s}}),i(p,[u],function(e){function t(e,t){var n;for(n in e)if(e[n]===t)return n;return null}return{RuntimeError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": RuntimeError "+this.code}var i={NOT_INIT_ERR:1,NOT_SUPPORTED_ERR:9,JS_ERR:4};return e.extend(n,i),n.prototype=Error.prototype,n}(),OperationNotAllowedException:function(){function t(e){this.code=e,this.name="OperationNotAllowedException"}return e.extend(t,{NOT_ALLOWED_ERR:1}),t.prototype=Error.prototype,t}(),ImageError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": ImageError "+this.code}var i={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2};return e.extend(n,i),n.prototype=Error.prototype,n}(),FileException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": FileException "+this.code}var i={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return e.extend(n,i),n.prototype=Error.prototype,n}(),DOMException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": DOMException "+this.code}var i={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25};return e.extend(n,i),n.prototype=Error.prototype,n}(),EventException:function(){function t(e){this.code=e,this.name="EventException"}return e.extend(t,{UNSPECIFIED_EVENT_TYPE_ERR:0}),t.prototype=Error.prototype,t}()}}),i(h,[p,u],function(e,t){function n(){var n={};t.extend(this,{uid:null,init:function(){this.uid||(this.uid=t.guid("uid_"))},addEventListener:function(e,i,r,o){var a=this,s;return e=t.trim(e),/\s/.test(e)?(t.each(e.split(/\s+/),function(e){a.addEventListener(e,i,r,o)}),void 0):(e=e.toLowerCase(),r=parseInt(r,10)||0,s=n[this.uid]&&n[this.uid][e]||[],s.push({fn:i,priority:r,scope:o||this}),n[this.uid]||(n[this.uid]={}),n[this.uid][e]=s,void 0)},hasEventListener:function(e){return e?!(!n[this.uid]||!n[this.uid][e]):!!n[this.uid]},removeEventListener:function(e,i){e=e.toLowerCase();var r=n[this.uid]&&n[this.uid][e],o;if(r){if(i){for(o=r.length-1;o>=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete n[this.uid][e],t.isEmptyObj(n[this.uid])&&delete n[this.uid])}},removeAllEventListeners:function(){n[this.uid]&&delete n[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={},c=!0,l;if("string"!==t.typeOf(i)){if(s=i,"string"!==t.typeOf(s.type))throw new e.EventException(e.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total!==l&&s.loaded!==l&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=n[r]&&n[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var d=[];t.each(o,function(e){a[0].target=e.scope,u.async?d.push(function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}):d.push(function(t){t(e.fn.apply(e.scope,a)===!1)})}),d.length&&t.inSeries(d,function(e){c=!e})}return c},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},convertEventPropsToHandlers:function(e){var n;"array"!==t.typeOf(e)&&(e=[e]);for(var i=0;i<e.length;i++)n="on"+e[i],"function"===t.typeOf(this[n])?this.addEventListener(e[i],this[n]):"undefined"===t.typeOf(this[n])&&(this[n]=null)}})}return n.instance=new n,n}),i(m,[],function(){var e=function(e){return unescape(encodeURIComponent(e))},t=function(e){return decodeURIComponent(escape(e))},n=function(e,n){if("function"==typeof window.atob)return n?t(window.atob(e)):window.atob(e);var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r,o,a,s,u,c,l,d,f=0,p=0,h="",m=[];if(!e)return e;e+="";do s=i.indexOf(e.charAt(f++)),u=i.indexOf(e.charAt(f++)),c=i.indexOf(e.charAt(f++)),l=i.indexOf(e.charAt(f++)),d=s<<18|u<<12|c<<6|l,r=255&d>>16,o=255&d>>8,a=255&d,m[p++]=64==c?String.fromCharCode(r):64==l?String.fromCharCode(r,o):String.fromCharCode(r,o,a);while(f<e.length);return h=m.join(""),n?t(h):h},i=function(t,n){if(n&&e(t),"function"==typeof window.btoa)return window.btoa(t);var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r,o,a,s,u,c,l,d,f=0,p=0,h="",m=[];if(!t)return t;do r=t.charCodeAt(f++),o=t.charCodeAt(f++),a=t.charCodeAt(f++),d=r<<16|o<<8|a,s=63&d>>18,u=63&d>>12,c=63&d>>6,l=63&d,m[p++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(f<t.length);h=m.join("");var g=t.length%3;return(g?h.slice(0,g-3):h)+"===".slice(g||3)};return{utf8_encode:e,utf8_decode:t,atob:n,btoa:i}}),i(g,[u,f,h],function(e,t,n){function i(n,r,a,s,u){var c=this,l,d=e.guid(r+"_"),f=u||"browser";n=n||{},o[d]=this,a=e.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},a),n.preferred_caps&&(f=i.getMode(s,n.preferred_caps,f)),l=function(){var t={};return{exec:function(e,n,i,r){return l[n]&&(t[e]||(t[e]={context:this,instance:new l[n]}),t[e].instance[i])?t[e].instance[i].apply(this,r):void 0},removeInstance:function(e){delete t[e]},removeAllInstances:function(){var n=this;e.each(t,function(t,i){"function"===e.typeOf(t.instance.destroy)&&t.instance.destroy.call(t.context),n.removeInstance(i)})}}}(),e.extend(this,{initialized:!1,uid:d,type:r,mode:i.getMode(s,n.required_caps,f),shimid:d+"_container",clients:0,options:n,can:function(t,n){var r=arguments[2]||a;if("string"===e.typeOf(t)&&"undefined"===e.typeOf(n)&&(t=i.parseCaps(t)),"object"===e.typeOf(t)){for(var o in t)if(!this.can(o,t[o],r))return!1;return!0}return"function"===e.typeOf(r[t])?r[t].call(this,n):n===r[t]},getShimContainer:function(){var n,i=t.get(this.shimid);return i||(n=this.options.container?t.get(this.options.container):document.body,i=document.createElement("div"),i.id=this.shimid,i.className="moxie-shim moxie-shim-"+this.type,e.extend(i.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),n.appendChild(i),n=null),i},getShim:function(){return l},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec.call(this,this.uid,e,t,n)},exec:function(e,t){var n=[].slice.call(arguments,2);return c[e]&&c[e][t]?c[e][t].apply(this,n):c.shimExec.apply(this,arguments)},destroy:function(){if(c){var e=t.get(this.shimid);e&&e.parentNode.removeChild(e),l&&l.removeAllInstances(),this.unbindAll(),delete o[this.uid],this.uid=null,d=c=l=e=null}}}),this.mode&&n.required_caps&&!this.can(n.required_caps)&&(this.mode=!1)}var r={},o={};return i.order="html5,flash,silverlight,html4",i.getRuntime=function(e){return o[e]?o[e]:!1},i.addConstructor=function(e,t){t.prototype=n.instance,r[e]=t},i.getConstructor=function(e){return r[e]||null},i.getInfo=function(e){var t=i.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},i.parseCaps=function(t){var n={};return"string"!==e.typeOf(t)?t||{}:(e.each(t.split(","),function(e){n[e]=!0}),n)},i.can=function(e,t){var n,r=i.getConstructor(e),o;return r?(n=new r({required_caps:t}),o=n.mode,n.destroy(),!!o):!1},i.thatCan=function(e,t){var n=(t||i.order).split(/\s*,\s*/);for(var r in n)if(i.can(n[r],e))return n[r];return null},i.getMode=function(t,n,i){var r=null;if("undefined"===e.typeOf(i)&&(i="browser"),n&&!e.isEmptyObj(t)){if(e.each(n,function(n,i){if(t.hasOwnProperty(i)){var o=t[i](n);if("string"==typeof o&&(o=[o]),r){if(!(r=e.arrayIntersect(r,o)))return r=!1}else r=o}}),r)return-1!==e.inArray(i,r)?i:r[0];if(r===!1)return!1}return i},i.capTrue=function(){return!0},i.capFalse=function(){return!1},i.capTest=function(e){return function(){return!!e}},i}),i(v,[p,u,g],function(e,t,n){return function i(){var i;t.extend(this,{connectRuntime:function(r){function o(t){var s,u;return t.length?(s=t.shift(),(u=n.getConstructor(s))?(i=new u(r),i.bind("Init",function(){i.initialized=!0,setTimeout(function(){i.clients++,a.trigger("RuntimeInit",i)},1)}),i.bind("Error",function(){i.destroy(),o(t)}),i.mode?(i.init(),void 0):(i.trigger("Error"),void 0)):(o(t),void 0)):(a.trigger("RuntimeError",new e.RuntimeError(e.RuntimeError.NOT_INIT_ERR)),i=null,void 0)}var a=this,s;if("string"===t.typeOf(r)?s=r:"string"===t.typeOf(r.ruid)&&(s=r.ruid),s){if(i=n.getRuntime(s))return i.clients++,i;throw new e.RuntimeError(e.RuntimeError.NOT_INIT_ERR)}o((r.runtime_order||n.order).split(/\s*,\s*/))},getRuntime:function(){return i&&i.uid?i:(i=null,null)},disconnectRuntime:function(){i&&--i.clients<=0&&(i.destroy(),i=null)}})}}),i(y,[u,m,v],function(e,t,n){function i(o,a){function s(t,n,o){var a,s=r[this.uid];return"string"===e.typeOf(s)&&s.length?(a=new i(null,{type:o,size:n-t}),a.detach(s.substr(t,a.size)),a):null}n.call(this),o&&this.connectRuntime(o),a?"string"===e.typeOf(a)&&(a={data:a}):a={},e.extend(this,{uid:a.uid||e.guid("uid_"),ruid:o,size:a.size||0,type:a.type||"",slice:function(e,t,n){return this.isDetached()?s.apply(this,arguments):this.getRuntime().exec.call(this,"Blob","slice",this.getSource(),e,t,n)},getSource:function(){return r[this.uid]?r[this.uid]:null},detach:function(e){this.ruid&&(this.getRuntime().exec.call(this,"Blob","destroy",r[this.uid]),this.disconnectRuntime(),this.ruid=null),e=e||"";var n=e.match(/^data:([^;]*);base64,/);n&&(this.type=n[1],e=t.atob(e.substring(e.indexOf("base64,")+7))),this.size=e.length,r[this.uid]=e},isDetached:function(){return!this.ruid&&"string"===e.typeOf(r[this.uid])},destroy:function(){this.detach(),delete r[this.uid]}}),a.data?this.detach(a.data):r[this.uid]=a}var r={};return i}),i(w,[u,l,y],function(e,t,n){function i(i,r){var o,a;if(r||(r={}),a=r.type&&""!==r.type?r.type:t.getFileMime(r.name),r.name)o=r.name.replace(/\\/g,"/"),o=o.substr(o.lastIndexOf("/")+1);else{var s=a.split("/")[0];o=e.guid((""!==s?s:"file")+"_"),t.extensions[a]&&(o+="."+t.extensions[a][0])}n.apply(this,arguments),e.extend(this,{type:a||"",name:o||e.guid("file_"),lastModifiedDate:r.lastModifiedDate||(new Date).toLocaleString()})}return i.prototype=n.prototype,i}),i(E,[u,l,f,p,h,c,w,g,v],function(e,t,n,i,r,o,a,s,u){function c(r){var c=this,d,f,p;if(-1!==e.inArray(e.typeOf(r),["string","node"])&&(r={browse_button:r}),f=n.get(r.browse_button),!f)throw new i.DOMException(i.DOMException.NOT_FOUND_ERR);p={accept:[{title:o.translate("All Files"),extensions:"*"}],name:"file",multiple:!1,required_caps:!1,container:f.parentNode||document.body},r=e.extend({},p,r),"string"==typeof r.required_caps&&(r.required_caps=s.parseCaps(r.required_caps)),"string"==typeof r.accept&&(r.accept=t.mimes2extList(r.accept)),d=n.get(r.container),d||(d=document.body),"static"===n.getStyle(d,"position")&&(d.style.position="relative"),d=f=null,u.call(c),e.extend(c,{uid:e.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){c.convertEventPropsToHandlers(l),c.bind("RuntimeInit",function(t,i){c.ruid=i.uid,c.shimid=i.shimid,c.bind("Ready",function(){c.trigger("Refresh")},999),c.bind("Change",function(){var t=i.exec.call(c,"FileInput","getFiles");c.files=[],e.each(t,function(e){return 0===e.size?!0:(c.files.push(new a(c.ruid,e)),void 0)})},999),c.bind("Refresh",function(){var t,o,a,s;a=n.get(r.browse_button),s=n.get(i.shimid),a&&(t=n.getPos(a,n.get(r.container)),o=n.getSize(a),s&&e.extend(s.style,{top:t.y+"px",left:t.x+"px",width:o.w+"px",height:o.h+"px"})),s=a=null}),i.exec.call(c,"FileInput","init",r)}),c.connectRuntime(e.extend({},r,{required_caps:{select_file:!0}}))},disable:function(t){var n=this.getRuntime();n&&n.exec.call(this,"FileInput","disable","undefined"===e.typeOf(t)?!0:t)},refresh:function(){c.trigger("Refresh")},destroy:function(){var t=this.getRuntime();t&&(t.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===e.typeOf(this.files)&&e.each(this.files,function(e){e.destroy()}),this.files=null}})}var l=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];return c.prototype=r.instance,c}),i(_,[c,f,p,u,w,v,h,l],function(e,t,n,i,r,o,a,s){function u(n){var a=this,u;"string"==typeof n&&(n={drop_zone:n}),u={accept:[{title:e.translate("All Files"),extensions:"*"}],required_caps:{drag_and_drop:!0}},n="object"==typeof n?i.extend({},u,n):u,n.container=t.get(n.drop_zone)||document.body,"static"===t.getStyle(n.container,"position")&&(n.container.style.position="relative"),"string"==typeof n.accept&&(n.accept=s.mimes2extList(n.accept)),o.call(a),i.extend(a,{uid:i.guid("uid_"),ruid:null,files:null,init:function(){a.convertEventPropsToHandlers(c),a.bind("RuntimeInit",function(e,t){a.ruid=t.uid,a.bind("Drop",function(){var e=t.exec.call(a,"FileDrop","getFiles");a.files=[],i.each(e,function(e){a.files.push(new r(a.ruid,e))})},999),t.exec.call(a,"FileDrop","init",n),a.dispatchEvent("ready")}),a.connectRuntime(n)},destroy:function(){var e=this.getRuntime();e&&(e.exec.call(this,"FileDrop","destroy"),this.disconnectRuntime()),this.files=null}})}var c=["ready","dragenter","dragleave","drop","error"];return u.prototype=a.instance,u}),i(x,[u,v,h],function(e,t,n){function i(){this.uid=e.guid("uid_"),t.call(this),this.destroy=function(){this.disconnectRuntime(),this.unbindAll()}}return i.prototype=n.instance,i}),i(R,[u,m,p,h,y,w,x],function(e,t,n,i,r,o,a){function s(){function i(e,i){function l(e){o.readyState=s.DONE,o.error=e,o.trigger("error"),d()}function d(){c.destroy(),c=null,o.trigger("loadend")}function f(t){c.bind("Error",function(e,t){l(t)}),c.bind("Progress",function(e){o.result=t.exec.call(c,"FileReader","getResult"),o.trigger(e)}),c.bind("Load",function(e){o.readyState=s.DONE,o.result=t.exec.call(c,"FileReader","getResult"),o.trigger(e),d()}),t.exec.call(c,"FileReader","read",e,i)}if(c=new a,this.convertEventPropsToHandlers(u),this.readyState===s.LOADING)return l(new n.DOMException(n.DOMException.INVALID_STATE_ERR));if(this.readyState=s.LOADING,this.trigger("loadstart"),i instanceof r)if(i.isDetached()){var p=i.getSource();switch(e){case"readAsText":case"readAsBinaryString":this.result=p;break;case"readAsDataURL":this.result="data:"+i.type+";base64,"+t.btoa(p)}this.readyState=s.DONE,this.trigger("load"),d()}else f(c.connectRuntime(i.ruid));else l(new n.DOMException(n.DOMException.NOT_FOUND_ERR))}var o=this,c;e.extend(this,{uid:e.guid("uid_"),readyState:s.EMPTY,result:null,error:null,readAsBinaryString:function(e){i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){i.call(this,"readAsDataURL",e)},readAsText:function(e){i.call(this,"readAsText",e) +},abort:function(){this.result=null,-1===e.inArray(this.readyState,[s.EMPTY,s.DONE])&&(this.readyState===s.LOADING&&(this.readyState=s.DONE),c&&c.getRuntime().exec.call(this,"FileReader","abort"),this.trigger("abort"),this.trigger("loadend"))},destroy:function(){this.abort(),c&&(c.getRuntime().exec.call(this,"FileReader","destroy"),c.disconnectRuntime()),o=c=null}})}var u=["loadstart","progress","load","abort","error","loadend"];return s.EMPTY=0,s.LOADING=1,s.DONE=2,s.prototype=i.instance,s}),i(b,[],function(){var e=function(t,n){for(var i=["source","scheme","authority","userInfo","user","pass","host","port","relative","path","directory","file","query","fragment"],r=i.length,o={http:80,https:443},a={},s=/^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,u=s.exec(t||"");r--;)u[r]&&(a[i[r]]=u[r]);if(!a.scheme){n&&"string"!=typeof n||(n=e(n||document.location.href)),a.scheme=n.scheme,a.host=n.host,a.port=n.port;var c="";/^[^\/]/.test(a.path)&&(c=n.path,/(\/|\/[^\.]+)$/.test(c)?c+="/":c=c.replace(/\/[^\/]+$/,"/")),a.path=c+(a.path||"")}return a.port||(a.port=o[a.scheme]||80),a.port=parseInt(a.port,10),a.path||(a.path="/"),delete a.source,a},t=function(t){var n={http:80,https:443},i=e(t);return i.scheme+"://"+i.host+(i.port!==n[i.scheme]?":"+i.port:"")+i.path+(i.query?i.query:"")},n=function(t){function n(e){return[e.scheme,e.host,e.port].join("/")}return"string"==typeof t&&(t=e(t)),n(e())===n(t)};return{parseUrl:e,resolveUrl:t,hasSameOrigin:n}}),i(T,[u,v,m],function(e,t,n){return function(){function i(e,t){if(!t.isDetached()){var i=this.connectRuntime(t.ruid).exec.call(this,"FileReaderSync","read",e,t);return this.disconnectRuntime(),i}var r=t.getSource();switch(e){case"readAsBinaryString":return r;case"readAsDataURL":return"data:"+t.type+";base64,"+n.btoa(r);case"readAsText":for(var o="",a=0,s=r.length;s>a;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(S,[p,u,y],function(e,t,n){function i(){var e,i=[];t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?e={name:r,value:o}:"array"===s?(r+="[]",t.each(o,function(e){a.append(r,e)})):"object"===s?t.each(o,function(e,t){a.append(r+"["+t+"]",e)}):"null"===s||"undefined"===s||"number"===s&&isNaN(o)?a.append(r,"false"):i.push({name:r,value:o.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return e&&e.value||null},getBlobName:function(){return e&&e.name||null},each:function(n){t.each(i,function(e){n(e.value,e.name)}),e&&n(e.value,e.name)},destroy:function(){e=null,i=[]}})}return i}),i(A,[u,p,h,m,b,g,x,y,T,S,d,l],function(e,t,n,i,r,o,a,s,u,c,l,d){function f(){this.uid=e.guid("uid_")}function p(){function n(e,t){return y.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?y[e]:v[e]:(l.can("define_property")?y[e]=t:v[e]=t,void 0):void 0}function u(t){function i(){k.destroy(),k=null,s.dispatchEvent("loadend"),s=null}function r(r){k.bind("LoadStart",function(e){n("readyState",p.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),I&&s.upload.dispatchEvent(e)}),k.bind("Progress",function(e){n("readyState")!==p.LOADING&&(n("readyState",p.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),k.bind("UploadProgress",function(e){I&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),k.bind("Load",function(t){n("readyState",p.DONE),n("status",Number(r.exec.call(k,"XMLHttpRequest","getStatus")||0)),n("statusText",h[n("status")]||""),n("response",r.exec.call(k,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),U=r.exec.call(k,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(I&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(N=!0,s.dispatchEvent("error")),i()}),k.bind("Abort",function(e){s.dispatchEvent(e),i()}),k.bind("Error",function(e){N=!0,n("readyState",p.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(k,"XMLHttpRequest","send",{url:E,method:_,async:w,user:R,password:b,headers:x,mimeType:S,encoding:T,responseType:s.responseType,withCredentials:s.withCredentials,options:P},t)}var s=this;M=(new Date).getTime(),k=new a,"string"==typeof P.required_caps&&(P.required_caps=o.parseCaps(P.required_caps)),P.required_caps=e.extend({},P.required_caps,{return_response_type:s.responseType}),t instanceof c&&(P.required_caps.send_multipart=!0),L||(P.required_caps.do_cors=!0),P.ruid?r(k.connectRuntime(P)):(k.bind("RuntimeInit",function(e,t){r(t)}),k.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),k.connectRuntime(P))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),M=C=null}var v=this,y={timeout:0,readyState:p.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},w=!0,E,_,x={},R,b,T=null,S=null,A=!1,O=!1,I=!1,D=!1,N=!1,L=!1,M,C,F=null,H=null,P={},k,U="",B;e.extend(this,y,{uid:e.guid("uid_"),upload:new f,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(_=o.toUpperCase()),~e.inArray(_,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),L=r.hasSameOrigin(l),E=r.resolveUrl(a),(u||c)&&!L)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(R=u||l.user,b=c||l.pass,w=s||!0,w===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);A=!w,O=!1,x={},g.call(this),n("readyState",p.OPENED),this.convertEventPropsToHandlers(["readystatechange"]),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(x[r]?x[r]+=", "+o:x[r]=o,!0)},getAllResponseHeaders:function(){return U||""},getResponseHeader:function(t){return t=t.toLowerCase(),N||~e.inArray(t,["set-cookie","set-cookie2"])?null:U&&""!==U&&(B||(B={},e.each(U.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),B[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),B.hasOwnProperty(t))?B[t].header+": "+B[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[p.LOADING,p.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,H=o},send:function(n,r){if(P="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.convertEventPropsToHandlers(m),this.upload.convertEventPropsToHandlers(m),this.readyState!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)P.ruid=n.ruid,S=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();P.ruid=o.ruid,S=o.type||"application/octet-stream"}}else"string"==typeof n&&(T="UTF-8",S="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=P.required_caps&&P.required_caps.send_browser_cookies&&!L),I=!A&&this.upload.hasEventListener(),N=!1,D=!n,A||(O=!0),u.call(this,n)},abort:function(){if(N=!0,A=!1,~e.inArray(n("readyState"),[p.UNSENT,p.OPENED,p.DONE]))n("readyState",p.UNSENT);else{if(n("readyState",p.DONE),O=!1,!k)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);k.getRuntime().exec.call(k,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){k&&("function"===e.typeOf(k.destroy)&&k.destroy(),k=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}})}var h={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"};f.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return p.UNSENT=0,p.OPENED=1,p.HEADERS_RECEIVED=2,p.LOADING=3,p.DONE=4,p.prototype=n.instance,p}),i(O,[u,m,v,h],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;f>i&&(f=i),n=t.btoa(c.substr(d,f)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,f;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),f=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(I,[u,f,p,T,A,g,v,O,d,h,y,w,m],function(e,t,n,i,r,o,a,s,u,c,l,d,f){function p(){function i(e){e||(e=this.getRuntime().exec.call(this,"Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof p){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);m.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);g.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)/^data:[^;]*;base64,/.test(t)?c.call(this,new l(null,{data:t}),arguments[1]):v.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r)}}function m(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function g(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function v(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){g.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){this.bind("Load Resize",function(){i.call(this)},999),this.convertEventPropsToHandlers(h),c.apply(this,arguments)},downsize:function(t,i,r,o){try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>p.MAX_RESIZE_WIDTH||this.height>p.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);(!t&&!i||"undefined"===e.typeOf(r))&&(r=!1),t=t||this.width,i=i||this.height,o="undefined"===e.typeOf(o)?!0:!!o,this.getRuntime().exec.call(this,"Image","downsize",t,i,r,o)}catch(a){this.trigger("error",a)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return e||(e="image/jpeg"),"image/jpeg"!==e||t||(t=90),this.getRuntime().exec.call(this,"Image","getAsBlob",e,t)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.getRuntime().exec.call(this,"Image","getAsDataURL",e,t)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return f.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i){function r(){if(u.can("create_canvas")){var t=a.getAsCanvas();if(t)return i.appendChild(t),t=null,a.destroy(),o.trigger("embedded"),void 0}var r=a.getAsDataURL(c,l);if(!r)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",r.length))i.innerHTML='<img src="'+r+'" width="'+a.width+'" height="'+a.height+'" />',a.destroy(),o.trigger("embedded");else{var d=new s;d.bind("TransportingComplete",function(){v=o.connectRuntime(this.result.ruid),o.bind("Embedded",function(){e.extend(v.getShimContainer().style,{top:"0px",left:"0px",width:a.width+"px",height:a.height+"px"}),v=null},999),v.exec.call(o,"ImageView","display",this.result.uid,m,g),a.destroy()}),d.transport(f.atob(r.substring(r.indexOf("base64,")+7)),c,e.extend({},h,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i}))}}var o=this,a,c,l,d,h=arguments[1]||{},m=this.width,g=this.height,v;try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>p.MAX_RESIZE_WIDTH||this.height>p.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);if(c=h.type||this.type||"image/jpeg",l=h.quality||90,d="undefined"!==e.typeOf(h.crop)?h.crop:!1,h.width)m=h.width,g=h.height||m;else{var y=t.getSize(i);y.w&&y.h&&(m=y.w,g=y.h)}return a=new p,a.bind("Resize",function(){r.call(o)}),a.bind("Load",function(){a.downsize(m,g,d,!1)}),a.clone(this,!1),a}catch(w){this.trigger("error",w)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}})}var h=["progress","load","error","resize","embedded"];return p.MAX_RESIZE_WIDTH=6500,p.MAX_RESIZE_HEIGHT=6500,p.prototype=c.instance,p}),i(D,[u,p,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.version>9)}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),return_response_headers:u,return_response_type:function(e){return"json"===e&&window.JSON?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.version>=21},select_multiple:function(){return!(!r.can("select_file")||"Safari"===i.browser&&"Windows"===i.os||"iOS"===i.os&&i.verComp(i.osVersion,"7.0.4","<"))},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||"IE"===i.browser&&i.version>=10||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[D,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(L,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(M,[D,u,f,L,l,d],function(e,t,n,i,r,o){function a(){var e=[],a;t.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,f,p,h,m;a=s,e=[],f=a.accept.mimes||r.extList2mimes(a.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='<input id="'+c.uid+'" type="file" style="font-size:999px;opacity:0;"'+(a.multiple&&c.can("select_multiple")?"multiple":"")+(a.directory&&c.can("select_folder")?"webkitdirectory directory":"")+(f?' accept="'+f.join(",")+'"':"")+" />",l=n.get(c.uid),t.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),p=n.get(a.browse_button),c.can("summon_file_dialog")&&("static"===n.getStyle(p,"position")&&(p.style.position="relative"),h=parseInt(n.getStyle(p,"z-index"),10)||1,p.style.zIndex=h,d.style.zIndex=h-1,i.addEvent(p,"click",function(e){var t=n.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?p:d,i.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),i.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),i.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),i.addEvent(n.get(a.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(){if(e=[],a.directory?t.each(this.files,function(t){"."!==t.name&&e.push(t)}):e=[].slice.call(this.files),"IE"!==o.browser)this.value="";else{var n=this.cloneNode(!0);this.parentNode.replaceChild(n,this),n.onchange=g}u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},getFiles:function(){return e},disable:function(e){var t=this.getRuntime(),i;(i=n.get(t.uid))&&(i.disabled=!!e)},destroy:function(){var t=this.getRuntime(),r=t.getShim(),o=t.getShimContainer();i.removeAllEvents(o,this.uid),i.removeAllEvents(a&&n.get(a.container),this.uid),i.removeAllEvents(a&&n.get(a.browse_button),this.uid),o&&(o.innerHTML=""),r.removeInstance(this.uid),e=a=o=r=null}})}return e.FileInput=a}),i(C,[D,u,f,L,l],function(e,t,n,i,r){function o(){function e(e){for(var n=[],i=0;i<e.length;i++)[].push.apply(n,e[i].extensions.split(/\s*,\s*/));return-1===t.inArray("*",n)?n:[]}function o(e){var n=r.getFileExtension(e.name);return!n||!d.length||-1!==t.inArray(n,d)}function a(e,n){var i=[];t.each(e,function(e){var t=e.webkitGetAsEntry();if(t)if(t.isFile){var n=e.getAsFile();o(n)&&l.push(n)}else i.push(t)}),i.length?s(i,n):n()}function s(e,n){var i=[];t.each(e,function(e){i.push(function(t){u(e,t)})}),t.inSeries(i,function(){n()})}function u(e,t){e.isFile?e.file(function(e){o(e)&&l.push(e),t()},function(){t()}):e.isDirectory?c(e,t):t()}function c(e,t){function n(e){r.readEntries(function(t){t.length?([].push.apply(i,t),n(e)):e()},e)}var i=[],r=e.createReader();n(function(){s(i,t)})}var l=[],d=[],f;t.extend(this,{init:function(n){var r=this,s;f=n,d=e(f.accept),s=f.container,i.addEvent(s,"dragover",function(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy"},r.uid),i.addEvent(s,"drop",function(e){e.preventDefault(),e.stopPropagation(),l=[],e.dataTransfer.items&&e.dataTransfer.items[0].webkitGetAsEntry?a(e.dataTransfer.items,function(){r.trigger("drop")}):(t.each(e.dataTransfer.files,function(e){o(e)&&l.push(e)}),r.trigger("drop"))},r.uid),i.addEvent(s,"dragenter",function(e){e.preventDefault(),e.stopPropagation(),r.trigger("dragenter")},r.uid),i.addEvent(s,"dragleave",function(e){e.preventDefault(),e.stopPropagation(),r.trigger("dragleave")},r.uid)},getFiles:function(){return l},destroy:function(){i.removeAllEvents(f&&n.get(f.container),this.uid),l=d=f=null}})}return e.FileDrop=o}),i(F,[D,m,u],function(e,t,n){function i(){function e(e){return t.atob(e.substring(e.indexOf("base64,")+7))}var i,r=!1;n.extend(this,{read:function(e,t){var o=this;i=new window.FileReader,i.addEventListener("progress",function(e){o.trigger(e)}),i.addEventListener("load",function(e){o.trigger(e)}),i.addEventListener("error",function(e){o.trigger(e,i.error)}),i.addEventListener("loadend",function(){i=null}),"function"===n.typeOf(i[e])?(r=!1,i[e](t.getSource())):"readAsBinaryString"===e&&(r=!0,i.readAsDataURL(t.getSource()))},getResult:function(){return i&&i.result?r?e(i.result):i.result:null},abort:function(){i&&i.abort()},destroy:function(){i=null}})}return e.FileReader=i}),i(H,[D,u,l,b,w,y,S,p,d],function(e,t,n,i,r,o,a,s,u){function c(){function e(e,t){var n=this,i,r;i=t.getBlob().getSource(),r=new window.FileReader,r.onload=function(){t.append(t.getBlobName(),new o(null,{type:i.type,data:r.result})),f.send.call(n,e,t)},r.readAsBinaryString(i)}function c(){return!window.XMLHttpRequest||"IE"===u.browser&&u.version<8?function(){for(var e=["Msxml2.XMLHTTP.6.0","Microsoft.XMLHTTP"],t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(n){}}():new window.XMLHttpRequest}function l(e){var t=e.responseXML,n=e.responseText;return"IE"===u.browser&&n&&t&&!t.documentElement&&/[^\/]+\/[^\+]+\+xml/.test(e.getResponseHeader("Content-Type"))&&(t=new window.ActiveXObject("Microsoft.XMLDOM"),t.async=!1,t.validateOnParse=!1,t.loadXML(n)),t&&("IE"===u.browser&&0!==t.parseError||!t.documentElement||"parsererror"===t.documentElement.tagName)?null:t}function d(e){var t="----moxieboundary"+(new Date).getTime(),n="--",i="\r\n",r="",a=this.getRuntime();if(!a.can("send_binary_string"))throw new s.RuntimeError(s.RuntimeError.NOT_SUPPORTED_ERR);return p.setRequestHeader("Content-Type","multipart/form-data; boundary="+t),e.each(function(e,a){r+=e instanceof o?n+t+i+'Content-Disposition: form-data; name="'+a+'"; filename="'+unescape(encodeURIComponent(e.name||"blob"))+'"'+i+"Content-Type: "+(e.type||"application/octet-stream")+i+i+e.getSource()+i:n+t+i+'Content-Disposition: form-data; name="'+a+'"'+i+i+unescape(encodeURIComponent(e))+i}),r+=n+t+n+i}var f=this,p,h;t.extend(this,{send:function(n,r){var s=this,l="Mozilla"===u.browser&&u.version>=4&&u.version<7,f="Android Browser"===u.browser,m=!1;if(h=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),p=c(),p.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=d.call(s,r),m=!0;else if((l||f)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return e.call(s,n,r),void 0;if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}p.upload?(n.withCredentials&&(p.withCredentials=!0),p.addEventListener("load",function(e){s.trigger(e)}),p.addEventListener("error",function(e){s.trigger(e)}),p.addEventListener("progress",function(e){s.trigger(e)}),p.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):p.onreadystatechange=function v(){switch(p.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=p.getResponseHeader("Content-Length")||0),p.responseText&&(t=p.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:p.onreadystatechange=function(){},0===p.status?s.trigger("error"):s.trigger("load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){p.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in p&&(p.responseType="json"!==n.responseType||u.can("return_response_type","json")?n.responseType:"text"),m?p.sendAsBinary?p.sendAsBinary(r):function(){for(var e=new Uint8Array(r.length),t=0;t<r.length;t++)e[t]=255&r.charCodeAt(t);p.send(e.buffer)}():p.send(r),s.trigger("loadstart")},getStatus:function(){try{if(p)return p.status}catch(e){}return 0},getResponse:function(e){var t=this.getRuntime();try{switch(e){case"blob":var i=new r(t.uid,p.response),o=p.getResponseHeader("Content-Disposition");if(o){var a=o.match(/filename=([\'\"'])([^\1]+)\1/);a&&(h=a[2])}return i.name=h,i.type||(i.type=n.getFileMime(h)),i;case"json":return u.can("return_response_type","json")?p.response:200===p.status&&window.JSON?JSON.parse(p.responseText):null;case"document":return l(p);default:return""!==p.responseText?p.responseText:null}}catch(s){return null}},getAllResponseHeaders:function(){try{return p.getAllResponseHeaders()}catch(e){}return""},abort:function(){p&&p.abort()},destroy:function(){f=h=null}})}return e.XMLHttpRequest=c}),i(P,[],function(){return function(){function e(e,t){var n=r?0:-8*(t-1),i=0,a;for(a=0;t>a;a++)i|=o.charCodeAt(e+a)<<Math.abs(n+8*a);return i}function n(e,t,n){n=3===arguments.length?n:o.length-t-1,o=o.substr(0,t)+e+o.substr(n+t)}function i(e,t,i){var o="",a=r?0:-8*(i-1),s;for(s=0;i>s;s++)o+=String.fromCharCode(255&t>>Math.abs(a+8*s));n(o,e,i)}var r=!1,o;return{II:function(e){return e===t?r:(r=e,void 0)},init:function(e){r=!1,o=e},SEGMENT:function(e,t,i){switch(arguments.length){case 1:return o.substr(e,o.length-e-1);case 2:return o.substr(e,t);case 3:n(i,e,t);break;default:return o}},BYTE:function(t){return e(t,1)},SHORT:function(t){return e(t,2)},LONG:function(n,r){return r===t?e(n,4):(i(n,r,4),void 0)},SLONG:function(t){var n=e(t,4);return n>2147483647?n-4294967296:n},STRING:function(t,n){var i="";for(n+=t;n>t;t++)i+=String.fromCharCode(e(t,1));return i}}}}),i(k,[P],function(e){return function t(n){var i=[],r,o,a,s=0;if(r=new e,r.init(n),65496===r.SHORT(0)){for(o=2;o<=n.length;)if(a=r.SHORT(o),a>=65488&&65495>=a)o+=2;else{if(65498===a||65497===a)break;s=r.SHORT(o+2)+2,a>=65505&&65519>=a&&i.push({hex:a,name:"APP"+(15&a),start:o,length:s,segment:r.SEGMENT(o,s)}),o+=s}return r.init(null),{headers:i,restore:function(e){var t,n;for(r.init(e),o=65504==r.SHORT(2)?4+r.SHORT(4):2,n=0,t=i.length;t>n;n++)r.SEGMENT(o,0,i[n].segment),o+=i[n].length;return e=r.SEGMENT(),r.init(null),e},strip:function(e){var n,i,o;for(i=new t(e),n=i.headers,i.purge(),r.init(e),o=n.length;o--;)r.SEGMENT(n[o].start,n[o].length,"");return e=r.SEGMENT(),r.init(null),e},get:function(e){for(var t=[],n=0,r=i.length;r>n;n++)i[n].name===e.toUpperCase()&&t.push(i[n].segment);return t},set:function(e,t){var n=[],r,o,a;for("string"==typeof t?n.push(t):n=t,r=o=0,a=i.length;a>r&&(i[r].name===e.toUpperCase()&&(i[r].segment=n[o],i[r].length=n[o].length,o++),!(o>=n.length));r++);},purge:function(){i=[],r.init(null),r=null}}}}}),i(U,[u,P],function(e,n){return function i(){function i(e,n){var i=a.SHORT(e),r,o,s,u,d,f,p,h,m=[],g={};for(r=0;i>r;r++)if(p=f=e+12*r+2,s=n[a.SHORT(p)],s!==t){switch(u=a.SHORT(p+=2),d=a.LONG(p+=2),p+=4,m=[],u){case 1:case 7:for(d>4&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.BYTE(p+o);break;case 2:d>4&&(p=a.LONG(p)+c.tiffHeader),g[s]=a.STRING(p,d-1);continue;case 3:for(d>2&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.SHORT(p+2*o);break;case 4:for(d>1&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.LONG(p+4*o);break;case 5:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.LONG(p+4*o)/a.LONG(p+4*o+4);break;case 9:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o);break;case 10:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o)/a.SLONG(p+4*o+4);break;default:continue}h=1==d?m[0]:m,g[s]=l.hasOwnProperty(s)&&"object"!=typeof h?l[s][h]:h}return g}function r(){var e=c.tiffHeader;return a.II(18761==a.SHORT(e)),42!==a.SHORT(e+=2)?!1:(c.IFD0=c.tiffHeader+a.LONG(e+=2),u=i(c.IFD0,s.tiff),"ExifIFDPointer"in u&&(c.exifIFD=c.tiffHeader+u.ExifIFDPointer,delete u.ExifIFDPointer),"GPSInfoIFDPointer"in u&&(c.gpsIFD=c.tiffHeader+u.GPSInfoIFDPointer,delete u.GPSInfoIFDPointer),!0)}function o(e,t,n){var i,r,o,u=0;if("string"==typeof t){var l=s[e.toLowerCase()];for(var d in l)if(l[d]===t){t=d;break}}i=c[e.toLowerCase()+"IFD"],r=a.SHORT(i);for(var f=0;r>f;f++)if(o=i+12*f+2,a.SHORT(o)==t){u=o+8;break}return u?(a.LONG(u,n),!0):!1}var a,s,u,c={},l;return a=new n,s={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},{init:function(e){return c={tiffHeader:10},e!==t&&e.length?(a.init(e),65505===a.SHORT(0)&&"EXIF\0"===a.STRING(4,5).toUpperCase()?r():!1):!1 +},TIFF:function(){return u},EXIF:function(){var t;if(t=i(c.exifIFD,s.exif),t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var n=0,r="";n<t.ExifVersion.length;n++)r+=String.fromCharCode(t.ExifVersion[n]);t.ExifVersion=r}return t},GPS:function(){var t;return t=i(c.gpsIFD,s.gps),t.GPSVersionID&&"array"===e.typeOf(t.GPSVersionID)&&(t.GPSVersionID=t.GPSVersionID.join(".")),t},setExif:function(e,t){return"PixelXDimension"!==e&&"PixelYDimension"!==e?!1:o("exif",e,t)},getBinary:function(){return a.SEGMENT()},purge:function(){a.init(null),a=u=null,c={}}}}}),i(B,[u,p,k,P,U],function(e,t,n,i,r){function o(o){function a(){for(var e=0,t,n;e<=u.length;){if(t=c.SHORT(e+=2),t>=65472&&65475>=t)return e+=5,{height:c.SHORT(e),width:c.SHORT(e+=2)};n=c.SHORT(e+=2),e+=n-2}return null}function s(){d&&l&&c&&(d.purge(),l.purge(),c.init(null),u=f=l=d=c=null)}var u,c,l,d,f,p;if(u=o,c=new i,c.init(u),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o),d=new r,p=!!d.init(l.get("app1")[0]),f=a.call(this),e.extend(this,{type:"image/jpeg",size:u.length,width:f&&f.width||0,height:f&&f.height||0,setExif:function(t,n){return p?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e)}):d.setExif(t,n),l.set("app1",d.getBinary()),void 0):!1},writeHeaders:function(){return arguments.length?l.restore(arguments[0]):u=l.restore(u)},stripHeaders:function(e){return l.strip(e)},purge:function(){s.call(this)}}),p&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS()})}return o}),i(z,[p,u,P],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:u.LONG(t),height:u.LONG(t+=4)}):null}function o(){u&&(u.init(null),s=d=c=l=u=null)}function a(e){var t,n,i,r;return t=u.LONG(e),n=u.STRING(e+=4,4),i=e+=4,r=u.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l,d;s=i,u=new n,u.init(s),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;n<i.length;n++,t+=2)if(i[n]!=u.SHORT(t))throw new e.ImageError(e.ImageError.WRONG_FORMAT)}(),d=r.call(this),t.extend(this,{type:"image/png",size:s.length,width:d.width,height:d.height,purge:function(){o.call(this)}}),o.call(this)}return i}),i(G,[u,p,B,z],function(e,t,n,i){return function(r){var o=[n,i],a;a=function(){for(var e=0;e<o.length;e++)try{return new o[e](r)}catch(n){}throw new t.ImageError(t.ImageError.WRONG_FORMAT)}(),e.extend(this,{type:"",size:0,width:0,height:0,setExif:function(){},writeHeaders:function(e){return e},stripHeaders:function(e){return e},purge:function(){}}),e.extend(this,a),this.purge=function(){a.purge(),a=null}}}),i(q,[],function(){function e(e,i,r){var o=e.naturalWidth,a=e.naturalHeight,s=r.width,u=r.height,c=r.x||0,l=r.y||0,d=i.getContext("2d");t(e)&&(o/=2,a/=2);var f=1024,p=document.createElement("canvas");p.width=p.height=f;for(var h=p.getContext("2d"),m=n(e,o,a),g=0;a>g;){for(var v=g+f>a?a-g:f,y=0;o>y;){var w=y+f>o?o-y:f;h.clearRect(0,0,f,f),h.drawImage(e,-y,-g);var E=y*s/o+c<<0,_=Math.ceil(w*s/o),x=g*u/a/m+l<<0,R=Math.ceil(v*u/a/m);d.drawImage(p,0,0,w,v,E,x,_,R),y+=f}g+=f}p=h=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(X,[D,u,p,m,w,G,q,l,d],function(e,t,n,i,r,o,a,s,u){function c(){function e(){if(!E&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return E||y}function c(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function l(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function d(e){var t=this;y=new Image,y.onerror=function(){g.call(this),t.trigger("error",new n.ImageError(n.ImageError.WRONG_FORMAT))},y.onload=function(){t.trigger("load")},y.src=/^data:[^;]*;base64,/.test(e)?e:l(e,x.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",new n.FileException(n.FileException.NOT_READABLE_ERR))},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function p(n,i,r,o){var a=this,s,u,c=0,l=0,d,f,p,g;if(b=o,g=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(g,[5,6,7,8])){var v=n;n=i,i=v}return d=e(),u=r?Math.max:Math.min,s=u(n/d.width,i/d.height),s>1&&(!r||o)?(this.trigger("Resize"),void 0):(E||(E=document.createElement("canvas")),f=Math.round(d.width*s),p=Math.round(d.height*s),r?(E.width=n,E.height=i,f>n&&(c=Math.round((f-n)/2)),p>i&&(l=Math.round((p-i)/2))):(E.width=f,E.height=p),b||m(E.width,E.height,g),h.call(this,d,E,-c,-l,f,p),this.width=E.width,this.height=E.height,R=!0,a.trigger("Resize"),void 0)}function h(e,t,n,i,r,o){if("iOS"===u.OS)a.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var s=t.getContext("2d");s.drawImage(e,n,i,r,o)}}function m(e,t,n){switch(n){case 5:case 6:case 7:case 8:E.width=t,E.height=e;break;default:E.width=e,E.height=t}var i=E.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function g(){w&&(w.purge(),w=null),_=y=E=x=null,R=!1}var v=this,y,w,E,_,x,R=!1,b=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return x=e,e.isDetached()?(_=e.getSource(),d.call(this,_),void 0):(f.call(this,e.getSource(),function(e){r&&(_=c(e)),d.call(t,e)}),void 0)},loadFromImage:function(e,t){this.meta=e.meta,x=new r(null,{name:e.name,size:e.size,type:e.type}),d.call(this,t?_=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!w&&_&&t.can("access_image_binary")&&(w=new o(_)),n={width:e().width||0,height:e().height||0,type:x.type||s.getFileMime(x.name),size:_&&_.length||x.size||0,name:x.name||"",meta:w&&w.meta||this.meta||{}}},downsize:function(){p.apply(this,arguments)},getAsCanvas:function(){return E&&(E.id=this.uid+"_canvas"),E},getAsBlob:function(e,t){return e!==this.type&&p.call(this,this.width,this.height,!1),new r(null,{name:x.name||"",type:e,data:v.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!R)return y.src;if("image/jpeg"!==e)return E.toDataURL("image/png");try{return E.toDataURL("image/jpeg",t/100)}catch(n){return E.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!R)return _||(_=c(v.getAsDataURL(e,t))),_;if("image/jpeg"!==e)_=c(v.getAsDataURL(e,t));else{var n;t||(t=90);try{n=E.toDataURL("image/jpeg",t/100)}catch(i){n=E.toDataURL("image/jpeg")}_=c(n),w&&(_=w.stripHeaders(_),b&&(w.meta&&w.meta.exif&&w.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),_=w.writeHeaders(_)),w.purge(),w=null)}return R=!1,_},destroy:function(){v=null,g.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=c}),i(j,[u,d,f,p,g],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(a){var c=this,l;a=e.extend({swf_url:t.swf_url},a),r.call(this,a,s,{access_binary:function(e){return e&&"browser"===c.mode},access_image_binary:function(e){return e&&"browser"===c.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===c.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!e.arrayDiff(t,["","text","document"])||"browser"===c.mode},return_status_code:function(t){return"browser"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===c.mode},send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"browser"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:function(e){return e&&"browser"===c.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===c.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n='<object id="'+this.uid+'" type="application/x-shockwave-flash" data="'+a.swf_url+'" ',"IE"===t.browser&&(n+='classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '),n+='width="100%" height="100%" style="outline:0"><param name="movie" value="'+a.swf_url+'" />'+'<param name="flashvars" value="uid='+escape(this.uid)+"&target="+t.global_event_dispatcher+'" />'+'<param name="wmode" value="transparent" />'+'<param name="allowscriptaccess" value="always" />'+"</object>","IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="flash",u={};return r.addConstructor(s,a),u}),i(V,[j,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(W,[j],function(e){var t={init:function(e){this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=t}),i(Y,[j,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i="",r={read:function(e,t){var r=this,o=r.getRuntime();return"readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"),r.bind("Progress",function(t,r){r&&(i+=n(r,e))}),o.shimExec.call(this,"FileReader","readAsBase64",t.uid)},getResult:function(){return i},destroy:function(){i=null}};return e.FileReader=r}),i($,[j,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(J,[j,u,y,w,T,S,O],function(e,t,n,i,r,o,a){var s={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var f=i.getBlob();f.isDetached()?u(f,function(e){f.destroy(),s(d,e)}):s(d,f)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;try{if(n=new r,~t.inArray(e,["","text"]))return n.readAsText(o);if("json"===e&&window.JSON)return JSON.parse(n.readAsText(o))}finally{o.destroy()}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=s}),i(Z,[j,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(K,[j,u,O,y,T],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(Q,[u,d,f,p,g],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u<o.length&&a===s);s>=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:function(e){return"json"!==e?!0:!!window.JSON},return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML='<object id="'+this.uid+'" data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%" style="outline:none;">'+'<param name="source" value="'+a.xap_url+'"/>'+'<param name="background" value="Transparent"/>'+'<param name="windowless" value="true"/>'+'<param name="enablehtmlaccess" value="true"/>'+'<param name="initParams" value="uid='+this.uid+",target="+t.global_event_dispatcher+'"/>'+"</object>",l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(et,[Q,u,V],function(e,t,n){return e.Blob=t.extend({},n)}),i(tt,[Q],function(e){var t={init:function(e){function t(e){for(var t="",n=0;n<e.length;n++)t+=(""!==t?"|":"")+e[n].title+" | *."+e[n].extensions.replace(/,/g,";*.");return t}this.getRuntime().shimExec.call(this,"FileInput","init",t(e.accept),e.name,e.multiple),this.trigger("ready")}};return e.FileInput=t}),i(nt,[Q,f,L],function(e,t,n){var i={init:function(){var e=this,i=e.getRuntime(),r;return r=i.getShimContainer(),n.addEvent(r,"dragover",function(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy"},e.uid),n.addEvent(r,"dragenter",function(e){e.preventDefault();var n=t.get(i.uid).dragEnter(e);n&&e.stopPropagation()},e.uid),n.addEvent(r,"drop",function(e){e.preventDefault();var n=t.get(i.uid).dragDrop(e);n&&e.stopPropagation()},e.uid),i.shimExec.call(this,"FileDrop","init")}};return e.FileDrop=i}),i(it,[Q,u,Y],function(e,t,n){return e.FileReader=t.extend({},n)}),i(rt,[Q,u,$],function(e,t,n){return e.FileReaderSync=t.extend({},n)}),i(ot,[Q,u,J],function(e,t,n){return e.XMLHttpRequest=t.extend({},n)}),i(at,[Q,u,Z],function(e,t,n){return e.Transporter=t.extend({},n)}),i(st,[Q,u,K],function(e,t,n){return e.Image=t.extend({},n,{getInfo:function(){var e=this.getRuntime(),n=["tiff","exif","gps"],i={meta:{}},r=e.shimExec.call(this,"Image","getInfo");return r.meta&&t.each(n,function(e){var t=r.meta[e],n,o,a,s;if(t&&t.keys)for(i.meta[e]={},o=0,a=t.keys.length;a>o;o++)n=t.keys[o],s=t[n],s&&(/^(\d|[1-9]\d+)$/.test(s)?s=parseInt(s,10):/^\d*\.\d+$/.test(s)&&(s=parseFloat(s)),i.meta[e][n]=s)}),i.width=parseInt(r.width,10),i.height=parseInt(r.height,10),i.size=parseInt(r.size,10),i.type=r.type,i.name=r.name,i}})}),i(ut,[u,p,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue;n.call(this,t,o,{access_binary:s(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:s(a.Image&&(i.can("create_canvas")||i.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!!~e.inArray(t,["text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(ct,[ut,u,f,L,l,d],function(e,t,n,i,r,o){function a(){function e(){var r=this,l=r.getRuntime(),d,f,p,h,m,g;g=t.guid("uid_"),d=l.getShimContainer(),a&&(p=n.get(a+"_form"),p&&t.extend(p.style,{top:"100%"})),h=document.createElement("form"),h.setAttribute("id",g+"_form"),h.setAttribute("method","post"),h.setAttribute("enctype","multipart/form-data"),h.setAttribute("encoding","multipart/form-data"),t.extend(h.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name",c.name||"Filedata"),m.setAttribute("accept",u.join(",")),t.extend(m.style,{fontSize:"999px",opacity:0}),h.appendChild(m),d.appendChild(h),t.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===o.browser&&o.version<10&&t.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var t;this.value&&(t=this.files?this.files[0]:{name:this.value},s=[t],this.onchange=function(){},e.call(r),r.bind("change",function i(){var e=n.get(g),t=n.get(g+"_form"),o;r.unbind("change",i),r.files.length&&e&&t&&(o=r.files[0],e.setAttribute("id",o.uid),t.setAttribute("id",o.uid+"_form"),t.setAttribute("target",o.uid+"_iframe")),e=t=null},998),m=h=null,r.trigger("change"))},l.can("summon_file_dialog")&&(f=n.get(c.browse_button),i.removeEvent(f,"click",r.uid),i.addEvent(f,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},r.uid)),a=g,d=p=f=null}var a,s=[],u=[],c;t.extend(this,{init:function(t){var o=this,a=o.getRuntime(),s;c=t,u=t.accept.mimes||r.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,r,u;e=n.get(t.browse_button),a.can("summon_file_dialog")&&("static"===n.getStyle(e,"position")&&(e.style.position="relative"),r=parseInt(n.getStyle(e,"z-index"),10)||1,e.style.zIndex=r,s.style.zIndex=r-1),u=a.can("summon_file_dialog")?e:s,i.addEvent(u,"mouseover",function(){o.trigger("mouseenter")},o.uid),i.addEvent(u,"mouseout",function(){o.trigger("mouseleave")},o.uid),i.addEvent(u,"mousedown",function(){o.trigger("mousedown")},o.uid),i.addEvent(n.get(t.container),"mouseup",function(){o.trigger("mouseup")},o.uid),e=null}(),e.call(this),s=null,o.trigger({type:"ready",async:!0})},getFiles:function(){return s},disable:function(e){var t;(t=n.get(a))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),r=e.getShimContainer();i.removeAllEvents(r,this.uid),i.removeAllEvents(c&&n.get(c.container),this.uid),i.removeAllEvents(c&&n.get(c.browse_button),this.uid),r&&(r.innerHTML=""),t.removeInstance(this.uid),a=s=u=c=r=t=null}})}return e.FileInput=a}),i(lt,[ut,F],function(e,t){return e.FileReader=t}),i(dt,[ut,u,f,b,p,L,y,S],function(e,t,n,i,r,o,a,s){function u(){function e(e){var t=this,i,r,a,s,u=!1;if(l){if(i=l.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(l,"load",t.uid),l.parentNode&&l.parentNode.removeChild(l);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=l=null,e()},1)}}var u,c,l;t.extend(this,{send:function(d,f){function p(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='<iframe id="'+g+'_iframe" name="'+g+'_iframe" src="javascript:""" style="display:none"></iframe>',l=r.firstChild,n.appendChild(l),o.addEvent(l,"load",function(){var n;try{n=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(n.title)?u=n.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(n.body.innerHTML),h.trigger({type:"progress",loaded:c.length,total:c.length}),w&&h.trigger({type:"uploadprogress",loaded:w.size||1025,total:w.size||1025}))}catch(r){if(!i.hasSameOrigin(d.url))return e.call(h,function(){h.trigger("error")}),void 0;u=404}e.call(h,function(){h.trigger("load")})},h.uid)}var h=this,m=h.getRuntime(),g,v,y,w;if(u=c=null,f instanceof s&&f.hasBlob()){if(w=f.getBlob(),g=w.uid,y=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",d.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),v.setAttribute("target",g+"_iframe"),m.getShimContainer().appendChild(v);f instanceof s&&f.each(function(e,n){if(e instanceof a)y&&y.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),y?v.insertBefore(i,y):v.appendChild(i)}}),v.setAttribute("action",d.url),p(),v.submit(),h.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{return JSON.parse(c.replace(/^\s*<pre[^>]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=u}),i(ft,[ut,X],function(e,t){return e.Image=t}),a([u,c,l,d,f,p,h,m,g,v,y,w,E,_,x,R,b,T,S,A,O,I,L])}(this);;(function(){"use strict";var e={},t=moxie.core.utils.Basic.inArray;return function n(r){var i,s;for(i in r)s=typeof r[i],s==="object"&&!~t(i,["Exceptions","Env","Mime"])?n(r[i]):s==="function"&&(e[i]=r[i])}(window.moxie),e.Env=window.moxie.core.utils.Env,e.Mime=window.moxie.core.utils.Mime,e.Exceptions=window.moxie.core.Exceptions,window.mOxie=e,window.o||(window.o=e),e})(); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.dev.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.dev.js new file mode 100755 index 0000000000000000000000000000000000000000..9531989681c72814ed7b42d422d24bff6121651d --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.dev.js @@ -0,0 +1,2273 @@ +/** + * Plupload - multi-runtime File Uploader + * v2.1.1 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2014-01-16 + */ +/** + * Plupload.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/*global mOxie:true */ + +;(function(window, o, undef) { + +var delay = window.setTimeout +, fileFilters = {} +; + +// convert plupload features to caps acceptable by mOxie +function normalizeCaps(settings) { + var features = settings.required_features, caps = {}; + + function resolve(feature, value, strict) { + // Feature notation is deprecated, use caps (this thing here is required for backward compatibility) + var map = { + chunks: 'slice_blob', + jpgresize: 'send_binary_string', + pngresize: 'send_binary_string', + progress: 'report_upload_progress', + multi_selection: 'select_multiple', + dragdrop: 'drag_and_drop', + drop_element: 'drag_and_drop', + headers: 'send_custom_headers', + canSendBinary: 'send_binary', + triggerDialog: 'summon_file_dialog' + }; + + if (map[feature]) { + caps[map[feature]] = value; + } else if (!strict) { + caps[feature] = value; + } + } + + if (typeof(features) === 'string') { + plupload.each(features.split(/\s*,\s*/), function(feature) { + resolve(feature, true); + }); + } else if (typeof(features) === 'object') { + plupload.each(features, function(value, feature) { + resolve(feature, value); + }); + } else if (features === true) { + // check settings for required features + if (!settings.multipart) { // special care for multipart: false + caps.send_binary_string = true; + } + + if (settings.chunk_size > 0) { + caps.slice_blob = true; + } + + if (settings.resize.enabled) { + caps.send_binary_string = true; + } + + plupload.each(settings, function(value, feature) { + resolve(feature, !!value, true); // strict check + }); + } + + return caps; +} + +/** + * @module plupload + * @static + */ +var plupload = { + /** + * Plupload version will be replaced on build. + * + * @property VERSION + * @for Plupload + * @static + * @final + */ + VERSION : '2.1.1', + + /** + * Inital state of the queue and also the state ones it's finished all it's uploads. + * + * @property STOPPED + * @static + * @final + */ + STOPPED : 1, + + /** + * Upload process is running + * + * @property STARTED + * @static + * @final + */ + STARTED : 2, + + /** + * File is queued for upload + * + * @property QUEUED + * @static + * @final + */ + QUEUED : 1, + + /** + * File is being uploaded + * + * @property UPLOADING + * @static + * @final + */ + UPLOADING : 2, + + /** + * File has failed to be uploaded + * + * @property FAILED + * @static + * @final + */ + FAILED : 4, + + /** + * File has been uploaded successfully + * + * @property DONE + * @static + * @final + */ + DONE : 5, + + // Error constants used by the Error event + + /** + * Generic error for example if an exception is thrown inside Silverlight. + * + * @property GENERIC_ERROR + * @static + * @final + */ + GENERIC_ERROR : -100, + + /** + * HTTP transport error. For example if the server produces a HTTP status other than 200. + * + * @property HTTP_ERROR + * @static + * @final + */ + HTTP_ERROR : -200, + + /** + * Generic I/O error. For exampe if it wasn't possible to open the file stream on local machine. + * + * @property IO_ERROR + * @static + * @final + */ + IO_ERROR : -300, + + /** + * Generic I/O error. For exampe if it wasn't possible to open the file stream on local machine. + * + * @property SECURITY_ERROR + * @static + * @final + */ + SECURITY_ERROR : -400, + + /** + * Initialization error. Will be triggered if no runtime was initialized. + * + * @property INIT_ERROR + * @static + * @final + */ + INIT_ERROR : -500, + + /** + * File size error. If the user selects a file that is too large it will be blocked and an error of this type will be triggered. + * + * @property FILE_SIZE_ERROR + * @static + * @final + */ + FILE_SIZE_ERROR : -600, + + /** + * File extension error. If the user selects a file that isn't valid according to the filters setting. + * + * @property FILE_EXTENSION_ERROR + * @static + * @final + */ + FILE_EXTENSION_ERROR : -601, + + /** + * Duplicate file error. If prevent_duplicates is set to true and user selects the same file again. + * + * @property FILE_DUPLICATE_ERROR + * @static + * @final + */ + FILE_DUPLICATE_ERROR : -602, + + /** + * Runtime will try to detect if image is proper one. Otherwise will throw this error. + * + * @property IMAGE_FORMAT_ERROR + * @static + * @final + */ + IMAGE_FORMAT_ERROR : -700, + + /** + * While working on the image runtime will try to detect if the operation may potentially run out of memeory and will throw this error. + * + * @property IMAGE_MEMORY_ERROR + * @static + * @final + */ + IMAGE_MEMORY_ERROR : -701, + + /** + * Each runtime has an upper limit on a dimension of the image it can handle. If bigger, will throw this error. + * + * @property IMAGE_DIMENSIONS_ERROR + * @static + * @final + */ + IMAGE_DIMENSIONS_ERROR : -702, + + /** + * Mime type lookup table. + * + * @property mimeTypes + * @type Object + * @final + */ + mimeTypes : o.mimes, + + /** + * In some cases sniffing is the only way around :( + */ + ua: o.ua, + + /** + * Gets the true type of the built-in object (better version of typeof). + * @credits Angus Croll (http://javascriptweblog.wordpress.com/) + * + * @method typeOf + * @static + * @param {Object} o Object to check. + * @return {String} Object [[Class]] + */ + typeOf: o.typeOf, + + /** + * Extends the specified object with another object. + * + * @method extend + * @static + * @param {Object} target Object to extend. + * @param {Object..} obj Multiple objects to extend with. + * @return {Object} Same as target, the extended object. + */ + extend : o.extend, + + /** + * Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers. + * The only way a user would be able to get the same ID is if the two persons at the same exact milisecond manages + * to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique. + * It's more probable for the earth to be hit with an ansteriod. You can also if you want to be 100% sure set the plupload.guidPrefix property + * to an user unique key. + * + * @method guid + * @static + * @return {String} Virtually unique id. + */ + guid : o.guid, + + /** + * Get array of DOM Elements by their ids. + * + * @method get + * @for Utils + * @param {String} id Identifier of the DOM Element + * @return {Array} + */ + get : function get(ids) { + var els = [], el; + + if (o.typeOf(ids) !== 'array') { + ids = [ids]; + } + + var i = ids.length; + while (i--) { + el = o.get(ids[i]); + if (el) { + els.push(el); + } + } + + return els.length ? els : null; + }, + + /** + * Executes the callback function for each item in array/object. If you return false in the + * callback it will break the loop. + * + * @method each + * @static + * @param {Object} obj Object to iterate. + * @param {function} callback Callback function to execute for each item. + */ + each : o.each, + + /** + * Returns the absolute x, y position of an Element. The position will be returned in a object with x, y fields. + * + * @method getPos + * @static + * @param {Element} node HTML element or element id to get x, y position from. + * @param {Element} root Optional root element to stop calculations at. + * @return {object} Absolute position of the specified element object with x, y fields. + */ + getPos : o.getPos, + + /** + * Returns the size of the specified node in pixels. + * + * @method getSize + * @static + * @param {Node} node Node to get the size of. + * @return {Object} Object with a w and h property. + */ + getSize : o.getSize, + + /** + * Encodes the specified string. + * + * @method xmlEncode + * @static + * @param {String} s String to encode. + * @return {String} Encoded string. + */ + xmlEncode : function(str) { + var xmlEncodeChars = {'<' : 'lt', '>' : 'gt', '&' : 'amp', '"' : 'quot', '\'' : '#39'}, xmlEncodeRegExp = /[<>&\"\']/g; + + return str ? ('' + str).replace(xmlEncodeRegExp, function(chr) { + return xmlEncodeChars[chr] ? '&' + xmlEncodeChars[chr] + ';' : chr; + }) : str; + }, + + /** + * Forces anything into an array. + * + * @method toArray + * @static + * @param {Object} obj Object with length field. + * @return {Array} Array object containing all items. + */ + toArray : o.toArray, + + /** + * Find an element in array and return it's index if present, otherwise return -1. + * + * @method inArray + * @static + * @param {mixed} needle Element to find + * @param {Array} array + * @return {Int} Index of the element, or -1 if not found + */ + inArray : o.inArray, + + /** + * Extends the language pack object with new items. + * + * @method addI18n + * @static + * @param {Object} pack Language pack items to add. + * @return {Object} Extended language pack object. + */ + addI18n : o.addI18n, + + /** + * Translates the specified string by checking for the english string in the language pack lookup. + * + * @method translate + * @static + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + translate : o.translate, + + /** + * Checks if object is empty. + * + * @method isEmptyObj + * @static + * @param {Object} obj Object to check. + * @return {Boolean} + */ + isEmptyObj : o.isEmptyObj, + + /** + * Checks if specified DOM element has specified class. + * + * @method hasClass + * @static + * @param {Object} obj DOM element like object to add handler to. + * @param {String} name Class name + */ + hasClass : o.hasClass, + + /** + * Adds specified className to specified DOM element. + * + * @method addClass + * @static + * @param {Object} obj DOM element like object to add handler to. + * @param {String} name Class name + */ + addClass : o.addClass, + + /** + * Removes specified className from specified DOM element. + * + * @method removeClass + * @static + * @param {Object} obj DOM element like object to add handler to. + * @param {String} name Class name + */ + removeClass : o.removeClass, + + /** + * Returns a given computed style of a DOM element. + * + * @method getStyle + * @static + * @param {Object} obj DOM element like object. + * @param {String} name Style you want to get from the DOM element + */ + getStyle : o.getStyle, + + /** + * Adds an event handler to the specified object and store reference to the handler + * in objects internal Plupload registry (@see removeEvent). + * + * @method addEvent + * @static + * @param {Object} obj DOM element like object to add handler to. + * @param {String} name Name to add event listener to. + * @param {Function} callback Function to call when event occurs. + * @param {String} (optional) key that might be used to add specifity to the event record. + */ + addEvent : o.addEvent, + + /** + * Remove event handler from the specified object. If third argument (callback) + * is not specified remove all events with the specified name. + * + * @method removeEvent + * @static + * @param {Object} obj DOM element to remove event listener(s) from. + * @param {String} name Name of event listener to remove. + * @param {Function|String} (optional) might be a callback or unique key to match. + */ + removeEvent: o.removeEvent, + + /** + * Remove all kind of events from the specified object + * + * @method removeAllEvents + * @static + * @param {Object} obj DOM element to remove event listeners from. + * @param {String} (optional) unique key to match, when removing events. + */ + removeAllEvents: o.removeAllEvents, + + /** + * Cleans the specified name from national characters (diacritics). The result will be a name with only a-z, 0-9 and _. + * + * @method cleanName + * @static + * @param {String} s String to clean up. + * @return {String} Cleaned string. + */ + cleanName : function(name) { + var i, lookup; + + // Replace diacritics + lookup = [ + /[\300-\306]/g, 'A', /[\340-\346]/g, 'a', + /\307/g, 'C', /\347/g, 'c', + /[\310-\313]/g, 'E', /[\350-\353]/g, 'e', + /[\314-\317]/g, 'I', /[\354-\357]/g, 'i', + /\321/g, 'N', /\361/g, 'n', + /[\322-\330]/g, 'O', /[\362-\370]/g, 'o', + /[\331-\334]/g, 'U', /[\371-\374]/g, 'u' + ]; + + for (i = 0; i < lookup.length; i += 2) { + name = name.replace(lookup[i], lookup[i + 1]); + } + + // Replace whitespace + name = name.replace(/\s+/g, '_'); + + // Remove anything else + name = name.replace(/[^a-z0-9_\-\.]+/gi, ''); + + return name; + }, + + /** + * Builds a full url out of a base URL and an object with items to append as query string items. + * + * @method buildUrl + * @static + * @param {String} url Base URL to append query string items to. + * @param {Object} items Name/value object to serialize as a querystring. + * @return {String} String with url + serialized query string items. + */ + buildUrl : function(url, items) { + var query = ''; + + plupload.each(items, function(value, name) { + query += (query ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value); + }); + + if (query) { + url += (url.indexOf('?') > 0 ? '&' : '?') + query; + } + + return url; + }, + + /** + * Formats the specified number as a size string for example 1024 becomes 1 KB. + * + * @method formatSize + * @static + * @param {Number} size Size to format as string. + * @return {String} Formatted size string. + */ + formatSize : function(size) { + + if (size === undef || /\D/.test(size)) { + return plupload.translate('N/A'); + } + + function round(num, precision) { + return Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision); + } + + var boundary = Math.pow(1024, 4); + + // TB + if (size > boundary) { + return round(size / boundary, 1) + " " + plupload.translate('tb'); + } + + // GB + if (size > (boundary/=1024)) { + return round(size / boundary, 1) + " " + plupload.translate('gb'); + } + + // MB + if (size > (boundary/=1024)) { + return round(size / boundary, 1) + " " + plupload.translate('mb'); + } + + // KB + if (size > 1024) { + return Math.round(size / 1024) + " " + plupload.translate('kb'); + } + + return size + " " + plupload.translate('b'); + }, + + + /** + * Parses the specified size string into a byte value. For example 10kb becomes 10240. + * + * @method parseSize + * @static + * @param {String|Number} size String to parse or number to just pass through. + * @return {Number} Size in bytes. + */ + parseSize : o.parseSizeStr, + + + /** + * A way to predict what runtime will be choosen in the current environment with the + * specified settings. + * + * @method predictRuntime + * @static + * @param {Object|String} config Plupload settings to check + * @param {String} [runtimes] Comma-separated list of runtimes to check against + * @return {String} Type of compatible runtime + */ + predictRuntime : function(config, runtimes) { + var up, runtime; + + up = new plupload.Uploader(config); + runtime = o.Runtime.thatCan(up.getOption().required_features, runtimes || config.runtimes); + up.destroy(); + return runtime; + }, + + /** + * Registers a filter that will be executed for each file added to the queue. + * If callback returns false, file will not be added. + * + * Callback receives two arguments: a value for the filter as it was specified in settings.filters + * and a file to be filtered. Callback is executed in the context of uploader instance. + * + * @method addFileFilter + * @static + * @param {String} name Name of the filter by which it can be referenced in settings.filters + * @param {String} cb Callback - the actual routine that every added file must pass + */ + addFileFilter: function(name, cb) { + fileFilters[name] = cb; + } +}; + + +plupload.addFileFilter('mime_types', function(filters, file, cb) { + if (filters.length && !filters.regexp.test(file.name)) { + this.trigger('Error', { + code : plupload.FILE_EXTENSION_ERROR, + message : plupload.translate('File extension error.'), + file : file + }); + cb(false); + } else { + cb(true); + } +}); + + +plupload.addFileFilter('max_file_size', function(maxSize, file, cb) { + var undef; + + maxSize = plupload.parseSize(maxSize); + + // Invalid file size + if (file.size !== undef && maxSize && file.size > maxSize) { + this.trigger('Error', { + code : plupload.FILE_SIZE_ERROR, + message : plupload.translate('File size error.'), + file : file + }); + cb(false); + } else { + cb(true); + } +}); + + +plupload.addFileFilter('prevent_duplicates', function(value, file, cb) { + if (value) { + var ii = this.files.length; + while (ii--) { + // Compare by name and size (size might be 0 or undefined, but still equivalent for both) + if (file.name === this.files[ii].name && file.size === this.files[ii].size) { + this.trigger('Error', { + code : plupload.FILE_DUPLICATE_ERROR, + message : plupload.translate('Duplicate file error.'), + file : file + }); + cb(false); + return; + } + } + } + cb(true); +}); + + +/** +@class Uploader +@constructor + +@param {Object} settings For detailed information about each option check documentation. + @param {String|DOMElement} settings.browse_button id of the DOM element or DOM element itself to use as file dialog trigger. + @param {String} settings.url URL of the server-side upload handler. + @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. + @param {String} [settings.container] id of the DOM element to use as a container for uploader structures. Defaults to document.body. + @param {String|DOMElement} [settings.drop_element] id of the DOM element or DOM element itself to use as a drop zone for Drag-n-Drop. + @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. + @param {Object} [settings.filters={}] Set of file type filters. + @param {Array} [settings.filters.mime_types=[]] List of file types to accept, each one defined by title and list of extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR` + @param {String|Number} [settings.filters.max_file_size=0] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Boolean} [settings.filters.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {String} [settings.flash_swf_url] URL of the Flash swf. + @param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs. + @param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event. + @param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message. + @param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload. + @param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog. + @param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess. + @param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}` + @param {Number} [settings.resize.width] If image is bigger, it will be resized. + @param {Number} [settings.resize.height] If image is bigger, it will be resized. + @param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100). + @param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally. + @param {String} [settings.runtimes="html5,flash,silverlight,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails. + @param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. + @param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files. +*/ +plupload.Uploader = function(options) { + /** + * Fires when the current RunTime has been initialized. + * + * @event Init + * @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + * Fires after the init event incase you need to perform actions there. + * + * @event PostInit + * @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + * Fires when the option is changed in via uploader.setOption(). + * + * @event OptionChanged + * @since 2.1 + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {String} name Name of the option that was changed + * @param {Mixed} value New value for the specified option + * @param {Mixed} oldValue Previous value of the option + */ + + /** + * Fires when the silverlight/flash or other shim needs to move. + * + * @event Refresh + * @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + * Fires when the overall state is being changed for the upload queue. + * + * @event StateChanged + * @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + * Fires when a file is to be uploaded by the runtime. + * + * @event UploadFile + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {plupload.File} file File to be uploaded. + */ + + /** + * Fires when just before a file is uploaded. This event enables you to override settings + * on the uploader instance before the file is uploaded. + * + * @event BeforeUpload + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {plupload.File} file File to be uploaded. + */ + + /** + * Fires when the file queue is changed. In other words when files are added/removed to the files array of the uploader instance. + * + * @event QueueChanged + * @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + + /** + * Fires while a file is being uploaded. Use this event to update the current file upload progress. + * + * @event UploadProgress + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {plupload.File} file File that is currently being uploaded. + */ + + /** + * Fires when file is removed from the queue. + * + * @event FilesRemoved + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {Array} files Array of files that got removed. + */ + + /** + * Fires for every filtered file before it is added to the queue. + * + * @event FileFiltered + * @since 2.1 + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {plupload.File} file Another file that has to be added to the queue. + */ + + /** + * Fires after files were filtered and added to the queue. + * + * @event FilesAdded + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {Array} files Array of file objects that were added to queue by the user. + */ + + /** + * Fires when a file is successfully uploaded. + * + * @event FileUploaded + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {plupload.File} file File that was uploaded. + * @param {Object} response Object with response properties. + */ + + /** + * Fires when file chunk is uploaded. + * + * @event ChunkUploaded + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {plupload.File} file File that the chunk was uploaded for. + * @param {Object} response Object with response properties. + */ + + /** + * Fires when all files in a queue are uploaded. + * + * @event UploadComplete + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {Array} files Array of file objects that was added to queue/selected by the user. + */ + + /** + * Fires when a error occurs. + * + * @event Error + * @param {plupload.Uploader} uploader Uploader instance sending the event. + * @param {Object} error Contains code, message and sometimes file and other details. + */ + + /** + * Fires when destroy method is called. + * + * @event Destroy + * @param {plupload.Uploader} uploader Uploader instance sending the event. + */ + var uid = plupload.guid() + , settings + , files = [] + , preferred_caps = {} + , fileInputs = [] + , fileDrops = [] + , startTime + , total + , disabled = false + , xhr + ; + + + // Private methods + function uploadNext() { + var file, count = 0, i; + + if (this.state == plupload.STARTED) { + // Find first QUEUED file + for (i = 0; i < files.length; i++) { + if (!file && files[i].status == plupload.QUEUED) { + file = files[i]; + if (this.trigger("BeforeUpload", file)) { + file.status = plupload.UPLOADING; + this.trigger("UploadFile", file); + } + } else { + count++; + } + } + + // All files are DONE or FAILED + if (count == files.length) { + if (this.state !== plupload.STOPPED) { + this.state = plupload.STOPPED; + this.trigger("StateChanged"); + } + this.trigger("UploadComplete", files); + } + } + } + + + function calcFile(file) { + file.percent = file.size > 0 ? Math.ceil(file.loaded / file.size * 100) : 100; + calc(); + } + + + function calc() { + var i, file; + + // Reset stats + total.reset(); + + // Check status, size, loaded etc on all files + for (i = 0; i < files.length; i++) { + file = files[i]; + + if (file.size !== undef) { + // We calculate totals based on original file size + total.size += file.origSize; + + // Since we cannot predict file size after resize, we do opposite and + // interpolate loaded amount to match magnitude of total + total.loaded += file.loaded * file.origSize / file.size; + } else { + total.size = undef; + } + + if (file.status == plupload.DONE) { + total.uploaded++; + } else if (file.status == plupload.FAILED) { + total.failed++; + } else { + total.queued++; + } + } + + // If we couldn't calculate a total file size then use the number of files to calc percent + if (total.size === undef) { + total.percent = files.length > 0 ? Math.ceil(total.uploaded / files.length * 100) : 0; + } else { + total.bytesPerSec = Math.ceil(total.loaded / ((+new Date() - startTime || 1) / 1000.0)); + total.percent = total.size > 0 ? Math.ceil(total.loaded / total.size * 100) : 0; + } + } + + + function getRUID() { + var ctrl = fileInputs[0] || fileDrops[0]; + if (ctrl) { + return ctrl.getRuntime().uid; + } + return false; + } + + + function runtimeCan(file, cap) { + if (file.ruid) { + var info = o.Runtime.getInfo(file.ruid); + if (info) { + return info.can(cap); + } + } + return false; + } + + + function bindEventListeners() { + this.bind('FilesAdded', onFilesAdded); + + this.bind('CancelUpload', onCancelUpload); + + this.bind('BeforeUpload', onBeforeUpload); + + this.bind('UploadFile', onUploadFile); + + this.bind('UploadProgress', onUploadProgress); + + this.bind('StateChanged', onStateChanged); + + this.bind('QueueChanged', calc); + + this.bind('Error', onError); + + this.bind('FileUploaded', onFileUploaded); + + this.bind('Destroy', onDestroy); + } + + + function initControls(settings, cb) { + var self = this, inited = 0, queue = []; + + // common settings + var options = { + accept: settings.filters.mime_types, + runtime_order: settings.runtimes, + required_caps: settings.required_features, + preferred_caps: preferred_caps, + swf_url: settings.flash_swf_url, + xap_url: settings.silverlight_xap_url + }; + + // add runtime specific options if any + plupload.each(settings.runtimes.split(/\s*,\s*/), function(runtime) { + if (settings[runtime]) { + options[runtime] = settings[runtime]; + } + }); + + // initialize file pickers - there can be many + if (settings.browse_button) { + plupload.each(settings.browse_button, function(el) { + queue.push(function(cb) { + var fileInput = new o.FileInput(plupload.extend({}, options, { + name: settings.file_data_name, + multiple: settings.multi_selection, + container: settings.container, + browse_button: el + })); + + fileInput.onready = function() { + var info = o.Runtime.getInfo(this.ruid); + + // for backward compatibility + o.extend(self.features, { + chunks: info.can('slice_blob'), + multipart: info.can('send_multipart'), + multi_selection: info.can('select_multiple') + }); + + inited++; + fileInputs.push(this); + cb(); + }; + + fileInput.onchange = function() { + self.addFile(this.files); + }; + + fileInput.bind('mouseenter mouseleave mousedown mouseup', function(e) { + if (!disabled) { + if (settings.browse_button_hover) { + if ('mouseenter' === e.type) { + o.addClass(el, settings.browse_button_hover); + } else if ('mouseleave' === e.type) { + o.removeClass(el, settings.browse_button_hover); + } + } + + if (settings.browse_button_active) { + if ('mousedown' === e.type) { + o.addClass(el, settings.browse_button_active); + } else if ('mouseup' === e.type) { + o.removeClass(el, settings.browse_button_active); + } + } + } + }); + + fileInput.bind('error runtimeerror', function() { + fileInput = null; + cb(); + }); + + fileInput.init(); + }); + }); + } + + // initialize drop zones + if (settings.drop_element) { + plupload.each(settings.drop_element, function(el) { + queue.push(function(cb) { + var fileDrop = new o.FileDrop(plupload.extend({}, options, { + drop_zone: el + })); + + fileDrop.onready = function() { + var info = o.Runtime.getInfo(this.ruid); + + self.features.dragdrop = info.can('drag_and_drop'); // for backward compatibility + + inited++; + fileDrops.push(this); + cb(); + }; + + fileDrop.ondrop = function() { + self.addFile(this.files); + }; + + fileDrop.bind('error runtimeerror', function() { + fileDrop = null; + cb(); + }); + + fileDrop.init(); + }); + }); + } + + + o.inSeries(queue, function() { + if (typeof(cb) === 'function') { + cb(inited); + } + }); + } + + + function resizeImage(blob, params, cb) { + var img = new o.Image(); + + try { + img.onload = function() { + img.downsize(params.width, params.height, params.crop, params.preserve_headers); + }; + + img.onresize = function() { + cb(this.getAsBlob(blob.type, params.quality)); + this.destroy(); + }; + + img.onerror = function() { + cb(blob); + }; + + img.load(blob); + } catch(ex) { + cb(blob); + } + } + + + function setOption(option, value, init) { + var self = this, reinitRequired = false; + + function _setOption(option, value, init) { + var oldValue = settings[option]; + + switch (option) { + case 'max_file_size': + if (option === 'max_file_size') { + settings.max_file_size = settings.filters.max_file_size = value; + } + break; + + case 'chunk_size': + if (value = plupload.parseSize(value)) { + settings[option] = value; + } + break; + + case 'filters': + // for sake of backward compatibility + if (plupload.typeOf(value) === 'array') { + value = { + mime_types: value + }; + } + + if (init) { + plupload.extend(settings.filters, value); + } else { + settings.filters = value; + } + + // if file format filters are being updated, regenerate the matching expressions + if (value.mime_types) { + settings.filters.mime_types.regexp = (function(filters) { + var extensionsRegExp = []; + + plupload.each(filters, function(filter) { + plupload.each(filter.extensions.split(/,/), function(ext) { + if (/^\s*\*\s*$/.test(ext)) { + extensionsRegExp.push('\\.*'); + } else { + extensionsRegExp.push('\\.' + ext.replace(new RegExp('[' + ('/^$.*+?|()[]{}\\'.replace(/./g, '\\$&')) + ']', 'g'), '\\$&')); + } + }); + }); + + return new RegExp('(' + extensionsRegExp.join('|') + ')$', 'i'); + }(settings.filters.mime_types)); + } + break; + + case 'resize': + if (init) { + plupload.extend(settings.resize, value, { + enabled: true + }); + } else { + settings.resize = value; + } + break; + + case 'prevent_duplicates': + settings.prevent_duplicates = settings.filters.prevent_duplicates = !!value; + break; + + case 'browse_button': + case 'drop_element': + value = plupload.get(value); + + case 'container': + case 'runtimes': + case 'multi_selection': + case 'flash_swf_url': + case 'silverlight_xap_url': + settings[option] = value; + if (!init) { + reinitRequired = true; + } + break; + + default: + settings[option] = value; + } + + if (!init) { + self.trigger('OptionChanged', option, value, oldValue); + } + } + + if (typeof(option) === 'object') { + plupload.each(option, function(value, option) { + _setOption(option, value, init); + }); + } else { + _setOption(option, value, init); + } + + if (init) { + // Normalize the list of required capabilities + settings.required_features = normalizeCaps(plupload.extend({}, settings)); + + // Come up with the list of capabilities that can affect default mode in a multi-mode runtimes + preferred_caps = normalizeCaps(plupload.extend({}, settings, { + required_features: true + })); + } else if (reinitRequired) { + self.trigger('Destroy'); + + initControls.call(self, settings, function(inited) { + if (inited) { + self.runtime = o.Runtime.getInfo(getRUID()).type; + self.trigger('Init', { runtime: self.runtime }); + self.trigger('PostInit'); + } else { + self.trigger('Error', { + code : plupload.INIT_ERROR, + message : plupload.translate('Init error.') + }); + } + }); + } + } + + + // Internal event handlers + function onFilesAdded(up, filteredFiles) { + // Add files to queue + [].push.apply(files, filteredFiles); + + up.trigger('QueueChanged'); + up.refresh(); + } + + + function onBeforeUpload(up, file) { + // Generate unique target filenames + if (settings.unique_names) { + var matches = file.name.match(/\.([^.]+)$/), ext = "part"; + if (matches) { + ext = matches[1]; + } + file.target_name = file.id + '.' + ext; + } + } + + + function onUploadFile(up, file) { + var url = up.settings.url + , chunkSize = up.settings.chunk_size + , retries = up.settings.max_retries + , features = up.features + , offset = 0 + , blob + ; + + // make sure we start at a predictable offset + if (file.loaded) { + offset = file.loaded = chunkSize * Math.floor(file.loaded / chunkSize); + } + + function handleError() { + if (retries-- > 0) { + delay(uploadNextChunk, 1000); + } else { + file.loaded = offset; // reset all progress + + up.trigger('Error', { + code : plupload.HTTP_ERROR, + message : plupload.translate('HTTP Error.'), + file : file, + response : xhr.responseText, + status : xhr.status, + responseHeaders: xhr.getAllResponseHeaders() + }); + } + } + + function uploadNextChunk() { + var chunkBlob, formData, args, curChunkSize; + + // File upload finished + if (file.status == plupload.DONE || file.status == plupload.FAILED || up.state == plupload.STOPPED) { + return; + } + + // Standard arguments + args = {name : file.target_name || file.name}; + + if (chunkSize && features.chunks && blob.size > chunkSize) { // blob will be of type string if it was loaded in memory + curChunkSize = Math.min(chunkSize, blob.size - offset); + chunkBlob = blob.slice(offset, offset + curChunkSize); + } else { + curChunkSize = blob.size; + chunkBlob = blob; + } + + // If chunking is enabled add corresponding args, no matter if file is bigger than chunk or smaller + if (chunkSize && features.chunks) { + // Setup query string arguments + if (up.settings.send_chunk_number) { + args.chunk = Math.ceil(offset / chunkSize); + args.chunks = Math.ceil(blob.size / chunkSize); + } else { // keep support for experimental chunk format, just in case + args.offset = offset; + args.total = blob.size; + } + } + + xhr = new o.XMLHttpRequest(); + + // Do we have upload progress support + if (xhr.upload) { + xhr.upload.onprogress = function(e) { + file.loaded = Math.min(file.size, offset + e.loaded); + up.trigger('UploadProgress', file); + }; + } + + xhr.onload = function() { + // check if upload made itself through + if (xhr.status >= 400) { + handleError(); + return; + } + + retries = up.settings.max_retries; // reset the counter + + // Handle chunk response + if (curChunkSize < blob.size) { + chunkBlob.destroy(); + + offset += curChunkSize; + file.loaded = Math.min(offset, blob.size); + + up.trigger('ChunkUploaded', file, { + offset : file.loaded, + total : blob.size, + response : xhr.responseText, + status : xhr.status, + responseHeaders: xhr.getAllResponseHeaders() + }); + + // stock Android browser doesn't fire upload progress events, but in chunking mode we can fake them + if (o.Env.browser === 'Android Browser') { + // doesn't harm in general, but is not required anywhere else + up.trigger('UploadProgress', file); + } + } else { + file.loaded = file.size; + } + + chunkBlob = formData = null; // Free memory + + // Check if file is uploaded + if (!offset || offset >= blob.size) { + // If file was modified, destory the copy + if (file.size != file.origSize) { + blob.destroy(); + blob = null; + } + + up.trigger('UploadProgress', file); + + file.status = plupload.DONE; + + up.trigger('FileUploaded', file, { + response : xhr.responseText, + status : xhr.status, + responseHeaders: xhr.getAllResponseHeaders() + }); + } else { + // Still chunks left + delay(uploadNextChunk, 1); // run detached, otherwise event handlers interfere + } + }; + + xhr.onerror = function() { + handleError(); + }; + + xhr.onloadend = function() { + this.destroy(); + xhr = null; + }; + + // Build multipart request + if (up.settings.multipart && features.multipart) { + + args.name = file.target_name || file.name; + + xhr.open("post", url, true); + + // Set custom headers + plupload.each(up.settings.headers, function(value, name) { + xhr.setRequestHeader(name, value); + }); + + formData = new o.FormData(); + + // Add multipart params + plupload.each(plupload.extend(args, up.settings.multipart_params), function(value, name) { + formData.append(name, value); + }); + + // Add file and send it + formData.append(up.settings.file_data_name, chunkBlob); + xhr.send(formData, { + runtime_order: up.settings.runtimes, + required_caps: up.settings.required_features, + preferred_caps: preferred_caps, + swf_url: up.settings.flash_swf_url, + xap_url: up.settings.silverlight_xap_url + }); + } else { + // if no multipart, send as binary stream + url = plupload.buildUrl(up.settings.url, plupload.extend(args, up.settings.multipart_params)); + + xhr.open("post", url, true); + + xhr.setRequestHeader('Content-Type', 'application/octet-stream'); // Binary stream header + + // Set custom headers + plupload.each(up.settings.headers, function(value, name) { + xhr.setRequestHeader(name, value); + }); + + xhr.send(chunkBlob, { + runtime_order: up.settings.runtimes, + required_caps: up.settings.required_features, + preferred_caps: preferred_caps, + swf_url: up.settings.flash_swf_url, + xap_url: up.settings.silverlight_xap_url + }); + } + } + + blob = file.getSource(); + + // Start uploading chunks + if (up.settings.resize.enabled && runtimeCan(blob, 'send_binary_string') && !!~o.inArray(blob.type, ['image/jpeg', 'image/png'])) { + // Resize if required + resizeImage.call(this, blob, up.settings.resize, function(resizedBlob) { + blob = resizedBlob; + file.size = resizedBlob.size; + uploadNextChunk(); + }); + } else { + uploadNextChunk(); + } + } + + + function onUploadProgress(up, file) { + calcFile(file); + } + + + function onStateChanged(up) { + if (up.state == plupload.STARTED) { + // Get start time to calculate bps + startTime = (+new Date()); + } else if (up.state == plupload.STOPPED) { + // Reset currently uploading files + for (var i = up.files.length - 1; i >= 0; i--) { + if (up.files[i].status == plupload.UPLOADING) { + up.files[i].status = plupload.QUEUED; + calc(); + } + } + } + } + + + function onCancelUpload() { + if (xhr) { + xhr.abort(); + } + } + + + function onFileUploaded(up) { + calc(); + + // Upload next file but detach it from the error event + // since other custom listeners might want to stop the queue + delay(function() { + uploadNext.call(up); + }, 1); + } + + + function onError(up, err) { + // Set failed status if an error occured on a file + if (err.file) { + err.file.status = plupload.FAILED; + calcFile(err.file); + + // Upload next file but detach it from the error event + // since other custom listeners might want to stop the queue + if (up.state == plupload.STARTED) { // upload in progress + up.trigger('CancelUpload'); + delay(function() { + uploadNext.call(up); + }, 1); + } + } + } + + + function onDestroy(up) { + up.stop(); + + // Purge the queue + plupload.each(files, function(file) { + file.destroy(); + }); + files = []; + + if (fileInputs.length) { + plupload.each(fileInputs, function(fileInput) { + fileInput.destroy(); + }); + fileInputs = []; + } + + if (fileDrops.length) { + plupload.each(fileDrops, function(fileDrop) { + fileDrop.destroy(); + }); + fileDrops = []; + } + + preferred_caps = {}; + disabled = false; + startTime = xhr = null; + total.reset(); + } + + + // Default settings + settings = { + runtimes: o.Runtime.order, + max_retries: 0, + chunk_size: 0, + multipart: true, + multi_selection: true, + file_data_name: 'file', + flash_swf_url: 'js/Moxie.swf', + silverlight_xap_url: 'js/Moxie.xap', + filters: { + mime_types: [], + prevent_duplicates: false, + max_file_size: 0 + }, + resize: { + enabled: false, + preserve_headers: true, + crop: false + }, + send_chunk_number: true // whether to send chunks and chunk numbers, or total and offset bytes + }; + + + setOption.call(this, options, null, true); + + // Inital total state + total = new plupload.QueueProgress(); + + // Add public methods + plupload.extend(this, { + + /** + * Unique id for the Uploader instance. + * + * @property id + * @type String + */ + id : uid, + uid : uid, // mOxie uses this to differentiate between event targets + + /** + * Current state of the total uploading progress. This one can either be plupload.STARTED or plupload.STOPPED. + * These states are controlled by the stop/start methods. The default value is STOPPED. + * + * @property state + * @type Number + */ + state : plupload.STOPPED, + + /** + * Map of features that are available for the uploader runtime. Features will be filled + * before the init event is called, these features can then be used to alter the UI for the end user. + * Some of the current features that might be in this map is: dragdrop, chunks, jpgresize, pngresize. + * + * @property features + * @type Object + */ + features : {}, + + /** + * Current runtime name. + * + * @property runtime + * @type String + */ + runtime : null, + + /** + * Current upload queue, an array of File instances. + * + * @property files + * @type Array + * @see plupload.File + */ + files : files, + + /** + * Object with name/value settings. + * + * @property settings + * @type Object + */ + settings : settings, + + /** + * Total progess information. How many files has been uploaded, total percent etc. + * + * @property total + * @type plupload.QueueProgress + */ + total : total, + + + /** + * Initializes the Uploader instance and adds internal event listeners. + * + * @method init + */ + init : function() { + var self = this; + + if (typeof(settings.preinit) == "function") { + settings.preinit(self); + } else { + plupload.each(settings.preinit, function(func, name) { + self.bind(name, func); + }); + } + + // Check for required options + if (!settings.browse_button || !settings.url) { + this.trigger('Error', { + code : plupload.INIT_ERROR, + message : plupload.translate('Init error.') + }); + return; + } + + bindEventListeners.call(this); + + initControls.call(this, settings, function(inited) { + if (typeof(settings.init) == "function") { + settings.init(self); + } else { + plupload.each(settings.init, function(func, name) { + self.bind(name, func); + }); + } + + if (inited) { + self.runtime = o.Runtime.getInfo(getRUID()).type; + self.trigger('Init', { runtime: self.runtime }); + self.trigger('PostInit'); + } else { + self.trigger('Error', { + code : plupload.INIT_ERROR, + message : plupload.translate('Init error.') + }); + } + }); + }, + + /** + * Set the value for the specified option(s). + * + * @method setOption + * @since 2.1 + * @param {String|Object} option Name of the option to change or the set of key/value pairs + * @param {Mixed} [value] Value for the option (is ignored, if first argument is object) + */ + setOption: function(option, value) { + setOption.call(this, option, value, !this.runtime); // until runtime not set we do not need to reinitialize + }, + + /** + * Get the value for the specified option or the whole configuration, if not specified. + * + * @method getOption + * @since 2.1 + * @param {String} [option] Name of the option to get + * @return {Mixed} Value for the option or the whole set + */ + getOption: function(option) { + if (!option) { + return settings; + } + return settings[option]; + }, + + /** + * Refreshes the upload instance by dispatching out a refresh event to all runtimes. + * This would for example reposition flash/silverlight shims on the page. + * + * @method refresh + */ + refresh : function() { + if (fileInputs.length) { + plupload.each(fileInputs, function(fileInput) { + fileInput.trigger('Refresh'); + }); + } + this.trigger('Refresh'); + }, + + /** + * Starts uploading the queued files. + * + * @method start + */ + start : function() { + if (this.state != plupload.STARTED) { + this.state = plupload.STARTED; + this.trigger('StateChanged'); + + uploadNext.call(this); + } + }, + + /** + * Stops the upload of the queued files. + * + * @method stop + */ + stop : function() { + if (this.state != plupload.STOPPED) { + this.state = plupload.STOPPED; + this.trigger('StateChanged'); + this.trigger('CancelUpload'); + } + }, + + + /** + * Disables/enables browse button on request. + * + * @method disableBrowse + * @param {Boolean} disable Whether to disable or enable (default: true) + */ + disableBrowse : function() { + disabled = arguments[0] !== undef ? arguments[0] : true; + + if (fileInputs.length) { + plupload.each(fileInputs, function(fileInput) { + fileInput.disable(disabled); + }); + } + + this.trigger('DisableBrowse', disabled); + }, + + /** + * Returns the specified file object by id. + * + * @method getFile + * @param {String} id File id to look for. + * @return {plupload.File} File object or undefined if it wasn't found; + */ + getFile : function(id) { + var i; + for (i = files.length - 1; i >= 0; i--) { + if (files[i].id === id) { + return files[i]; + } + } + }, + + /** + * Adds file to the queue programmatically. Can be native file, instance of Plupload.File, + * instance of mOxie.File, input[type="file"] element, or array of these. Fires FilesAdded, + * if any files were added to the queue. Otherwise nothing happens. + * + * @method addFile + * @since 2.0 + * @param {plupload.File|mOxie.File|File|Node|Array} file File or files to add to the queue. + * @param {String} [fileName] If specified, will be used as a name for the file + */ + addFile : function(file, fileName) { + var self = this + , queue = [] + , files = [] + , ruid + ; + + function filterFile(file, cb) { + var queue = []; + o.each(self.settings.filters, function(rule, name) { + if (fileFilters[name]) { + queue.push(function(cb) { + fileFilters[name].call(self, rule, file, function(res) { + cb(!res); + }); + }); + } + }); + o.inSeries(queue, cb); + } + + /** + * @method resolveFile + * @private + * @param {o.File|o.Blob|plupload.File|File|Blob|input[type="file"]} file + */ + function resolveFile(file) { + var type = o.typeOf(file); + + // o.File + if (file instanceof o.File) { + if (!file.ruid && !file.isDetached()) { + if (!ruid) { // weird case + return false; + } + file.ruid = ruid; + file.connectRuntime(ruid); + } + resolveFile(new plupload.File(file)); + } + // o.Blob + else if (file instanceof o.Blob) { + resolveFile(file.getSource()); + file.destroy(); + } + // plupload.File - final step for other branches + else if (file instanceof plupload.File) { + if (fileName) { + file.name = fileName; + } + + queue.push(function(cb) { + // run through the internal and user-defined filters, if any + filterFile(file, function(err) { + if (!err) { + files.push(file); + self.trigger("FileFiltered", file); + } + delay(cb, 1); // do not build up recursions or eventually we might hit the limits + }); + }); + } + // native File or blob + else if (o.inArray(type, ['file', 'blob']) !== -1) { + resolveFile(new o.File(null, file)); + } + // input[type="file"] + else if (type === 'node' && o.typeOf(file.files) === 'filelist') { + // if we are dealing with input[type="file"] + o.each(file.files, resolveFile); + } + // mixed array of any supported types (see above) + else if (type === 'array') { + fileName = null; // should never happen, but unset anyway to avoid funny situations + o.each(file, resolveFile); + } + } + + ruid = getRUID(); + + resolveFile(file); + + if (queue.length) { + o.inSeries(queue, function() { + // if any files left after filtration, trigger FilesAdded + if (files.length) { + self.trigger("FilesAdded", files); + } + }); + } + }, + + /** + * Removes a specific file. + * + * @method removeFile + * @param {plupload.File|String} file File to remove from queue. + */ + removeFile : function(file) { + var id = typeof(file) === 'string' ? file : file.id; + + for (var i = files.length - 1; i >= 0; i--) { + if (files[i].id === id) { + return this.splice(i, 1)[0]; + } + } + }, + + /** + * Removes part of the queue and returns the files removed. This will also trigger the FilesRemoved and QueueChanged events. + * + * @method splice + * @param {Number} start (Optional) Start index to remove from. + * @param {Number} length (Optional) Lengh of items to remove. + * @return {Array} Array of files that was removed. + */ + splice : function(start, length) { + // Splice and trigger events + var removed = files.splice(start === undef ? 0 : start, length === undef ? files.length : length); + + // if upload is in progress we need to stop it and restart after files are removed + var restartRequired = false; + if (this.state == plupload.STARTED) { // upload in progress + restartRequired = true; + this.stop(); + } + + this.trigger("FilesRemoved", removed); + + // Dispose any resources allocated by those files + plupload.each(removed, function(file) { + file.destroy(); + }); + + this.trigger("QueueChanged"); + this.refresh(); + + if (restartRequired) { + this.start(); + } + + return removed; + }, + + /** + * Dispatches the specified event name and it's arguments to all listeners. + * + * + * @method trigger + * @param {String} name Event name to fire. + * @param {Object..} Multiple arguments to pass along to the listener functions. + */ + + /** + * Check whether uploader has any listeners to the specified event. + * + * @method hasEventListener + * @param {String} name Event name to check for. + */ + + + /** + * Adds an event listener by name. + * + * @method bind + * @param {String} name Event name to listen for. + * @param {function} func Function to call ones the event gets fired. + * @param {Object} scope Optional scope to execute the specified function in. + */ + bind : function(name, func, scope) { + var self = this; + // adapt moxie EventTarget style to Plupload-like + plupload.Uploader.prototype.bind.call(this, name, function() { + var args = [].slice.call(arguments); + args.splice(0, 1, self); // replace event object with uploader instance + return func.apply(this, args); + }, 0, scope); + }, + + /** + * Removes the specified event listener. + * + * @method unbind + * @param {String} name Name of event to remove. + * @param {function} func Function to remove from listener. + */ + + /** + * Removes all event listeners. + * + * @method unbindAll + */ + + + /** + * Destroys Plupload instance and cleans after itself. + * + * @method destroy + */ + destroy : function() { + this.trigger('Destroy'); + settings = total = null; // purge these exclusively + this.unbindAll(); + } + }); +}; + +plupload.Uploader.prototype = o.EventTarget.instance; + +/** + * Constructs a new file instance. + * + * @class File + * @constructor + * + * @param {Object} file Object containing file properties + * @param {String} file.name Name of the file. + * @param {Number} file.size File size. + */ +plupload.File = (function() { + var filepool = {}; + + function PluploadFile(file) { + + plupload.extend(this, { + + /** + * File id this is a globally unique id for the specific file. + * + * @property id + * @type String + */ + id: plupload.guid(), + + /** + * File name for example "myfile.gif". + * + * @property name + * @type String + */ + name: file.name || file.fileName, + + /** + * File type, `e.g image/jpeg` + * + * @property type + * @type String + */ + type: file.type || '', + + /** + * File size in bytes (may change after client-side manupilation). + * + * @property size + * @type Number + */ + size: file.size || file.fileSize, + + /** + * Original file size in bytes. + * + * @property origSize + * @type Number + */ + origSize: file.size || file.fileSize, + + /** + * Number of bytes uploaded of the files total size. + * + * @property loaded + * @type Number + */ + loaded: 0, + + /** + * Number of percentage uploaded of the file. + * + * @property percent + * @type Number + */ + percent: 0, + + /** + * Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. + * + * @property status + * @type Number + * @see plupload + */ + status: plupload.QUEUED, + + /** + * Date of last modification. + * + * @property lastModifiedDate + * @type {String} + */ + lastModifiedDate: file.lastModifiedDate || (new Date()).toLocaleString(), // Thu Aug 23 2012 19:40:00 GMT+0400 (GET) + + /** + * Returns native window.File object, when it's available. + * + * @method getNative + * @return {window.File} or null, if plupload.File is of different origin + */ + getNative: function() { + var file = this.getSource().getSource(); + return o.inArray(o.typeOf(file), ['blob', 'file']) !== -1 ? file : null; + }, + + /** + * Returns mOxie.File - unified wrapper object that can be used across runtimes. + * + * @method getSource + * @return {mOxie.File} or null + */ + getSource: function() { + if (!filepool[this.id]) { + return null; + } + return filepool[this.id]; + }, + + /** + * Destroys plupload.File object. + * + * @method destroy + */ + destroy: function() { + var src = this.getSource(); + if (src) { + src.destroy(); + delete filepool[this.id]; + } + } + }); + + filepool[this.id] = file; + } + + return PluploadFile; +}()); + + +/** + * Constructs a queue progress. + * + * @class QueueProgress + * @constructor + */ + plupload.QueueProgress = function() { + var self = this; // Setup alias for self to reduce code size when it's compressed + + /** + * Total queue file size. + * + * @property size + * @type Number + */ + self.size = 0; + + /** + * Total bytes uploaded. + * + * @property loaded + * @type Number + */ + self.loaded = 0; + + /** + * Number of files uploaded. + * + * @property uploaded + * @type Number + */ + self.uploaded = 0; + + /** + * Number of files failed to upload. + * + * @property failed + * @type Number + */ + self.failed = 0; + + /** + * Number of files yet to be uploaded. + * + * @property queued + * @type Number + */ + self.queued = 0; + + /** + * Total percent of the uploaded bytes. + * + * @property percent + * @type Number + */ + self.percent = 0; + + /** + * Bytes uploaded per second. + * + * @property bytesPerSec + * @type Number + */ + self.bytesPerSec = 0; + + /** + * Resets the progress to it's initial values. + * + * @method reset + */ + self.reset = function() { + self.size = self.loaded = self.uploaded = self.failed = self.queued = self.percent = self.bytesPerSec = 0; + }; +}; + +window.plupload = plupload; + +}(window, mOxie)); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.full.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.full.min.js new file mode 100755 index 0000000000000000000000000000000000000000..69d6ad120cb79b5b9baa30d61dc871d2fe31a44b --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.full.min.js @@ -0,0 +1,28 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.2.0 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2014-01-16 + */ +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r<e.length;++r){if(n=s[e[r]]||o(e[r]),!n)throw"module definition dependecy not found: "+e[r];i.push(n)}t.apply(null,i)}function i(e,i,r){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(i===t)throw"invalid module definition, dependencies must be specified";if(r===t)throw"invalid module definition, definition function must be specified";n(i,function(){s[e]=r.apply(null,arguments)})}function r(e){return!!s[e]}function o(t){for(var n=e,i=t.split(/[.\/]/),r=0;r<i.length;++r){if(!n[i[r]])return;n=n[i[r]]}return n}function a(n){for(var i=0;i<n.length;i++){for(var r=e,o=n[i],a=o.split(/[.\/]/),u=0;u<a.length-1;++u)r[a[u]]===t&&(r[a[u]]={}),r=r[a[u]];r[a[a.length-1]]=s[o]}}var s={},u="moxie/core/utils/Basic",c="moxie/core/I18n",l="moxie/core/utils/Mime",d="moxie/core/utils/Env",f="moxie/core/utils/Dom",p="moxie/core/Exceptions",h="moxie/core/EventTarget",m="moxie/core/utils/Encode",g="moxie/runtime/Runtime",v="moxie/runtime/RuntimeClient",y="moxie/file/Blob",w="moxie/file/File",E="moxie/file/FileInput",_="moxie/file/FileDrop",x="moxie/runtime/RuntimeTarget",R="moxie/file/FileReader",b="moxie/core/utils/Url",T="moxie/file/FileReaderSync",S="moxie/xhr/FormData",A="moxie/xhr/XMLHttpRequest",O="moxie/runtime/Transporter",I="moxie/image/Image",D="moxie/runtime/html5/Runtime",N="moxie/runtime/html5/file/Blob",L="moxie/core/utils/Events",M="moxie/runtime/html5/file/FileInput",C="moxie/runtime/html5/file/FileDrop",F="moxie/runtime/html5/file/FileReader",H="moxie/runtime/html5/xhr/XMLHttpRequest",P="moxie/runtime/html5/utils/BinaryReader",k="moxie/runtime/html5/image/JPEGHeaders",U="moxie/runtime/html5/image/ExifParser",B="moxie/runtime/html5/image/JPEG",z="moxie/runtime/html5/image/PNG",G="moxie/runtime/html5/image/ImageInfo",q="moxie/runtime/html5/image/MegaPixel",X="moxie/runtime/html5/image/Image",j="moxie/runtime/flash/Runtime",V="moxie/runtime/flash/file/Blob",W="moxie/runtime/flash/file/FileInput",Y="moxie/runtime/flash/file/FileReader",$="moxie/runtime/flash/file/FileReaderSync",J="moxie/runtime/flash/xhr/XMLHttpRequest",Z="moxie/runtime/flash/runtime/Transporter",K="moxie/runtime/flash/image/Image",Q="moxie/runtime/silverlight/Runtime",et="moxie/runtime/silverlight/file/Blob",tt="moxie/runtime/silverlight/file/FileInput",nt="moxie/runtime/silverlight/file/FileDrop",it="moxie/runtime/silverlight/file/FileReader",rt="moxie/runtime/silverlight/file/FileReaderSync",ot="moxie/runtime/silverlight/xhr/XMLHttpRequest",at="moxie/runtime/silverlight/runtime/Transporter",st="moxie/runtime/silverlight/image/Image",ut="moxie/runtime/html4/Runtime",ct="moxie/runtime/html4/file/FileInput",lt="moxie/runtime/html4/file/FileReader",dt="moxie/runtime/html4/xhr/XMLHttpRequest",ft="moxie/runtime/html4/image/Image";i(u,[],function(){var e=function(e){var t;return e===t?"undefined":null===e?"null":e.nodeType?"node":{}.toString.call(e).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()},t=function(i){var r;return n(arguments,function(o,s){s>0&&n(o,function(n,o){n!==r&&(e(i[o])===e(n)&&~a(e(n),["array","object"])?t(i[o],n):i[o]=n)})}),i},n=function(e,t){var n,i,r,o;if(e){try{n=e.length}catch(a){n=o}if(n===o){for(i in e)if(e.hasOwnProperty(i)&&t(e[i],i)===!1)return}else for(r=0;n>r;r++)if(t(e[r],r)===!1)return}},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++r<o&&!e?i(r):n(e)})}var r=0,o=t.length;"function"!==e(n)&&(n=function(){}),t&&t.length||n(),i(r)},o=function(e,t){var i=0,r=e.length,o=new Array(r);n(e,function(e,n){e(function(e){if(e)return t(e);var a=[].slice.call(arguments);a.shift(),o[n]=a,i++,i===r&&(o.unshift(null),t.apply(this,o))})})},a=function(e,t){if(t){if(Array.prototype.indexOf)return Array.prototype.indexOf.call(t,e);for(var n=0,i=t.length;i>n;n++)if(t[n]===e)return n}return-1},s=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===a(t[r],n)&&i.push(t[r]);return i.length?i:!1},u=function(e,t){var i=[];return n(e,function(e){-1!==a(e,t)&&i.push(e)}),i.length?i:null},c=function(e){var t,n=[];for(t=0;t<e.length;t++)n[t]=e[t];return n},l=function(){var e=0;return function(t){var n=(new Date).getTime().toString(32),i;for(i=0;5>i;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),d=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},f=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9]+)([mgk]?)$/.exec(e.toLowerCase().replace(/[^0-9mkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),e};return{guid:l,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inParallel:o,inArray:a,arrayDiff:s,arrayIntersect:u,toArray:c,trim:d,parseSizeStr:f}}),i(c,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e.typeOf(t)?t:""})}}}),i(l,[u,c],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;n<t.length;n+=2){for(r=t[n+1].split(/ /),i=0;i<r.length;i++)this.mimes[r[i]]=t[n];this.extensions[t[n]]=r}},extList2mimes:function(t,n){var i=this,r,o,a,s,u=[];for(o=0;o<t.length;o++)for(r=t[o].extensions.split(/\s*,\s*/),a=0;a<r.length;a++){if("*"===r[a])return[];if(s=i.mimes[r[a]])-1===e.inArray(s,u)&&u.push(s);else{if(!n||!/^\w+$/.test(r[a]))return[];u.push("."+r[a])}}return u},mimes2exts:function(t){var n=this,i=[];return e.each(t,function(t){if("*"===t)return i=[],!1;var r=t.match(/^(\w+)\/(\*|\w+)$/);r&&("*"===r[2]?e.each(n.extensions,function(e,t){new RegExp("^"+r[1]+"/").test(t)&&[].push.apply(i,n.extensions[t])}):n.extensions[t]&&[].push.apply(i,n.extensions[t]))}),i},mimes2extList:function(n){var i=[],r=[];return"string"===e.typeOf(n)&&(n=e.trim(n).split(/\s*,\s*/)),r=this.mimes2exts(n),i.push({title:t.translate("Files"),extensions:r.length?r.join(","):"*"}),i.mimes=n,i},getFileExtension:function(e){var t=e&&e.match(/\.([^.]+)$/);return t?t[1].toLowerCase():""},getFileMime:function(e){return this.mimes[this.getFileExtension(e)]||""}};return i.addMimeType(n),i}),i(d,[u],function(e){function t(e,t,n){var i=0,r=0,o=0,a={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1},s=function(e){return e=(""+e).replace(/[_\-+]/g,"."),e=e.replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,"."),e.length?e.split("."):[-8]},u=function(e){return e?isNaN(e)?a[e]||-7:parseInt(e,10):0};for(e=s(e),t=s(t),r=Math.max(e.length,t.length),i=0;r>i;i++)if(e[i]!=t[i]){if(e[i]=u(e[i]),t[i]=u(t[i]),e[i]<t[i]){o=-1;break}if(e[i]>t[i]){o=1;break}}if(!n)return o;switch(n){case">":case"gt":return o>0;case">=":case"ge":return o>=0;case"<=":case"le":return 0>=o;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return 0>o;default:return null}}var n=function(e){var t="",n="?",i="function",r="undefined",o="object",a="major",s="model",u="name",c="type",l="vendor",d="version",f="architecture",p="console",h="mobile",m="tablet",g={has:function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},lowerize:function(e){return e.toLowerCase()}},v={rgx:function(){for(var t,n=0,a,s,u,c,l,d,f=arguments;n<f.length;n+=2){var p=f[n],h=f[n+1];if(typeof t===r){t={};for(u in h)c=h[u],typeof c===o?t[c[0]]=e:t[c]=e}for(a=s=0;a<p.length;a++)if(l=p[a].exec(this.getUA())){for(u=0;u<h.length;u++)d=l[++s],c=h[u],typeof c===o&&c.length>0?2==c.length?t[c[0]]=typeof c[1]==i?c[1].call(this,d):c[1]:3==c.length?t[c[0]]=typeof c[1]!==i||c[1].exec&&c[1].test?d?d.replace(c[1],c[2]):e:d?c[1].call(this,d,c[2]):e:4==c.length&&(t[c[0]]=d?c[3].call(this,d.replace(c[1],c[2])):e):t[c]=d?d:e;break}if(l)break}return t},str:function(t,i){for(var r in i)if(typeof i[r]===o&&i[r].length>0){for(var a=0;a<i[r].length;a++)if(g.has(i[r][a],t))return r===n?e:r}else if(g.has(i[r],t))return r===n?e:r;return t}},y={browser:{oldsafari:{major:{1:["/8","/1","/3"],2:"/4","?":"/"},version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2000:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",RT:"ARM"}}}},w={browser:[[/(opera\smini)\/((\d+)?[\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/((\d+)?[\w\.-]+)/i,/(opera).+version\/((\d+)?[\w\.]+)/i,/(opera)[\/\s]+((\d+)?[\w\.]+)/i],[u,d,a],[/\s(opr)\/((\d+)?[\w\.]+)/i],[[u,"Opera"],d,a],[/(kindle)\/((\d+)?[\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?((\d+)?[\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?((\d+)?[\w\.]*)/i,/(?:ms|\()(ie)\s((\d+)?[\w\.]+)/i,/(rekonq)((?:\/)[\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron)\/((\d+)?[\w\.-]+)/i],[u,d,a],[/(trident).+rv[:\s]((\d+)?[\w\.]+).+like\sgecko/i],[[u,"IE"],d,a],[/(yabrowser)\/((\d+)?[\w\.]+)/i],[[u,"Yandex"],d,a],[/(comodo_dragon)\/((\d+)?[\w\.]+)/i],[[u,/_/g," "],d,a],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i],[u,d,a],[/(dolfin)\/((\d+)?[\w\.]+)/i],[[u,"Dolphin"],d,a],[/((?:android.+)crmo|crios)\/((\d+)?[\w\.]+)/i],[[u,"Chrome"],d,a],[/((?:android.+))version\/((\d+)?[\w\.]+)\smobile\ssafari/i],[[u,"Android Browser"],d,a],[/version\/((\d+)?[\w\.]+).+?mobile\/\w+\s(safari)/i],[d,a,[u,"Mobile Safari"]],[/version\/((\d+)?[\w\.]+).+?(mobile\s?safari|safari)/i],[d,a,u],[/webkit.+?(mobile\s?safari|safari)((\/[\w\.]+))/i],[u,[a,v.str,y.browser.oldsafari.major],[d,v.str,y.browser.oldsafari.version]],[/(konqueror)\/((\d+)?[\w\.]+)/i,/(webkit|khtml)\/((\d+)?[\w\.]+)/i],[u,d,a],[/(navigator|netscape)\/((\d+)?[\w\.-]+)/i],[[u,"Netscape"],d,a],[/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?((\d+)?[\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.-]+)/i,/(mozilla)\/((\d+)?[\w\.]+).+rv\:.+gecko\/\d+/i,/(uc\s?browser|polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|qqbrowser)[\/\s]?((\d+)?[\w\.]+)/i,/(links)\s\(((\d+)?[\w\.]+)/i,/(gobrowser)\/?((\d+)?[\w\.]+)*/i,/(ice\s?browser)\/v?((\d+)?[\w\._]+)/i,/(mosaic)[\/\s]((\d+)?[\w\.]+)/i],[u,d,a]],engine:[[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[u,d],[/rv\:([\w\.]+).*(gecko)/i],[d,u]],os:[[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[u,[d,v.str,y.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[u,"Windows"],[d,v.str,y.os.windows.version]],[/\((bb)(10);/i],[[u,"BlackBerry"],d],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)\/([\w\.]+)/i,/(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego)[\/\s-]?([\w\.]+)*/i],[u,d],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[u,"Symbian"],d],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[u,"Firefox OS"],d],[/(nintendo|playstation)\s([wids3portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk)[\/\s-]?([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[u,d],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[u,"Chromium OS"],d],[/(sunos)\s?([\w\.]+\d)*/i],[[u,"Solaris"],d],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[u,d],[/(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i],[[u,"iOS"],[d,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i],[u,[d,/_/g,"."]],[/(haiku)\s(\w+)/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(macintosh|mac(?=_powerpc)|plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos)/i,/(unix)\s?([\w\.]+)*/i],[u,d]]},E=function(e){var n=e||(window&&window.navigator&&window.navigator.userAgent?window.navigator.userAgent:t);this.getBrowser=function(){return v.rgx.apply(this,w.browser)},this.getEngine=function(){return v.rgx.apply(this,w.engine)},this.getOS=function(){return v.rgx.apply(this,w.os)},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS()}},this.getUA=function(){return n},this.setUA=function(e){return n=e,this},this.setUA(n)};return(new E).getResult()}(),i=function(){var t={define_property:function(){return!1}(),create_canvas:function(){var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))}(),return_response_type:function(t){try{if(-1!==e.inArray(t,["","text","document"]))return!0;if(window.XMLHttpRequest){var n=new XMLHttpRequest;if(n.open("get","/"),"responseType"in n)return n.responseType=t,n.responseType!==t?!1:!0}}catch(i){}return!1},use_data_uri:function(){var e=new Image;return e.onload=function(){t.use_data_uri=1===e.width&&1===e.height},setTimeout(function(){e.src="data:image/gif;base64,R0lGODlhAQABAIAAAP8AAAAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="},1),!1}(),use_data_uri_over32kb:function(){return t.use_data_uri&&("IE"!==r.browser||r.version>=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),r={can:i,browser:n.browser.name,version:parseFloat(n.browser.major),os:n.os.name,osVersion:n.os.version,verComp:t,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return r.OS=r.os,r}),i(f,[d],function(e){var t=function(e){return"string"!=typeof e?e:document.getElementById(e)},n=function(e,t){if(!e.className)return!1;var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");return n.test(e.className)},i=function(e,t){n(e,t)||(e.className=e.className?e.className.replace(/\s+$/,"")+" "+t:t)},r=function(e,t){if(e.className){var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");e.className=e.className.replace(n,function(e,t,n){return" "===t&&" "===n?" ":""})}},o=function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},a=function(t,n){function i(e){var t,n,i=0,r=0;return e&&(n=e.getBoundingClientRect(),t="CSS1Compat"===s.compatMode?s.documentElement:s.body,i=n.left+t.scrollLeft,r=n.top+t.scrollTop),{x:i,y:r}}var r=0,o=0,a,s=document,u,c;if(t=t,n=n||s.body,t&&t.getBoundingClientRect&&"IE"===e.browser&&(!s.documentMode||s.documentMode<8))return u=i(t),c=i(n),{x:u.x-c.x,y:u.y-c.y};for(a=t;a&&a!=n&&a.nodeType;)r+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=t.parentNode;a&&a!=n&&a.nodeType;)r-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode;return{x:r,y:o}},s=function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}};return{get:t,hasClass:n,addClass:i,removeClass:r,getStyle:o,getPos:a,getSize:s}}),i(p,[u],function(e){function t(e,t){var n;for(n in e)if(e[n]===t)return n;return null}return{RuntimeError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": RuntimeError "+this.code}var i={NOT_INIT_ERR:1,NOT_SUPPORTED_ERR:9,JS_ERR:4};return e.extend(n,i),n.prototype=Error.prototype,n}(),OperationNotAllowedException:function(){function t(e){this.code=e,this.name="OperationNotAllowedException"}return e.extend(t,{NOT_ALLOWED_ERR:1}),t.prototype=Error.prototype,t}(),ImageError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": ImageError "+this.code}var i={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2};return e.extend(n,i),n.prototype=Error.prototype,n}(),FileException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": FileException "+this.code}var i={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return e.extend(n,i),n.prototype=Error.prototype,n}(),DOMException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": DOMException "+this.code}var i={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25};return e.extend(n,i),n.prototype=Error.prototype,n}(),EventException:function(){function t(e){this.code=e,this.name="EventException"}return e.extend(t,{UNSPECIFIED_EVENT_TYPE_ERR:0}),t.prototype=Error.prototype,t}()}}),i(h,[p,u],function(e,t){function n(){var n={};t.extend(this,{uid:null,init:function(){this.uid||(this.uid=t.guid("uid_"))},addEventListener:function(e,i,r,o){var a=this,s;return e=t.trim(e),/\s/.test(e)?(t.each(e.split(/\s+/),function(e){a.addEventListener(e,i,r,o)}),void 0):(e=e.toLowerCase(),r=parseInt(r,10)||0,s=n[this.uid]&&n[this.uid][e]||[],s.push({fn:i,priority:r,scope:o||this}),n[this.uid]||(n[this.uid]={}),n[this.uid][e]=s,void 0)},hasEventListener:function(e){return e?!(!n[this.uid]||!n[this.uid][e]):!!n[this.uid]},removeEventListener:function(e,i){e=e.toLowerCase();var r=n[this.uid]&&n[this.uid][e],o;if(r){if(i){for(o=r.length-1;o>=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete n[this.uid][e],t.isEmptyObj(n[this.uid])&&delete n[this.uid])}},removeAllEventListeners:function(){n[this.uid]&&delete n[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={},c=!0,l;if("string"!==t.typeOf(i)){if(s=i,"string"!==t.typeOf(s.type))throw new e.EventException(e.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total!==l&&s.loaded!==l&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=n[r]&&n[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var d=[];t.each(o,function(e){a[0].target=e.scope,u.async?d.push(function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}):d.push(function(t){t(e.fn.apply(e.scope,a)===!1)})}),d.length&&t.inSeries(d,function(e){c=!e})}return c},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},convertEventPropsToHandlers:function(e){var n;"array"!==t.typeOf(e)&&(e=[e]);for(var i=0;i<e.length;i++)n="on"+e[i],"function"===t.typeOf(this[n])?this.addEventListener(e[i],this[n]):"undefined"===t.typeOf(this[n])&&(this[n]=null)}})}return n.instance=new n,n}),i(m,[],function(){var e=function(e){return unescape(encodeURIComponent(e))},t=function(e){return decodeURIComponent(escape(e))},n=function(e,n){if("function"==typeof window.atob)return n?t(window.atob(e)):window.atob(e);var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r,o,a,s,u,c,l,d,f=0,p=0,h="",m=[];if(!e)return e;e+="";do s=i.indexOf(e.charAt(f++)),u=i.indexOf(e.charAt(f++)),c=i.indexOf(e.charAt(f++)),l=i.indexOf(e.charAt(f++)),d=s<<18|u<<12|c<<6|l,r=255&d>>16,o=255&d>>8,a=255&d,m[p++]=64==c?String.fromCharCode(r):64==l?String.fromCharCode(r,o):String.fromCharCode(r,o,a);while(f<e.length);return h=m.join(""),n?t(h):h},i=function(t,n){if(n&&e(t),"function"==typeof window.btoa)return window.btoa(t);var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r,o,a,s,u,c,l,d,f=0,p=0,h="",m=[];if(!t)return t;do r=t.charCodeAt(f++),o=t.charCodeAt(f++),a=t.charCodeAt(f++),d=r<<16|o<<8|a,s=63&d>>18,u=63&d>>12,c=63&d>>6,l=63&d,m[p++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(f<t.length);h=m.join("");var g=t.length%3;return(g?h.slice(0,g-3):h)+"===".slice(g||3)};return{utf8_encode:e,utf8_decode:t,atob:n,btoa:i}}),i(g,[u,f,h],function(e,t,n){function i(n,r,a,s,u){var c=this,l,d=e.guid(r+"_"),f=u||"browser";n=n||{},o[d]=this,a=e.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},a),n.preferred_caps&&(f=i.getMode(s,n.preferred_caps,f)),l=function(){var t={};return{exec:function(e,n,i,r){return l[n]&&(t[e]||(t[e]={context:this,instance:new l[n]}),t[e].instance[i])?t[e].instance[i].apply(this,r):void 0},removeInstance:function(e){delete t[e]},removeAllInstances:function(){var n=this;e.each(t,function(t,i){"function"===e.typeOf(t.instance.destroy)&&t.instance.destroy.call(t.context),n.removeInstance(i)})}}}(),e.extend(this,{initialized:!1,uid:d,type:r,mode:i.getMode(s,n.required_caps,f),shimid:d+"_container",clients:0,options:n,can:function(t,n){var r=arguments[2]||a;if("string"===e.typeOf(t)&&"undefined"===e.typeOf(n)&&(t=i.parseCaps(t)),"object"===e.typeOf(t)){for(var o in t)if(!this.can(o,t[o],r))return!1;return!0}return"function"===e.typeOf(r[t])?r[t].call(this,n):n===r[t]},getShimContainer:function(){var n,i=t.get(this.shimid);return i||(n=this.options.container?t.get(this.options.container):document.body,i=document.createElement("div"),i.id=this.shimid,i.className="moxie-shim moxie-shim-"+this.type,e.extend(i.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),n.appendChild(i),n=null),i},getShim:function(){return l},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec.call(this,this.uid,e,t,n)},exec:function(e,t){var n=[].slice.call(arguments,2);return c[e]&&c[e][t]?c[e][t].apply(this,n):c.shimExec.apply(this,arguments)},destroy:function(){if(c){var e=t.get(this.shimid);e&&e.parentNode.removeChild(e),l&&l.removeAllInstances(),this.unbindAll(),delete o[this.uid],this.uid=null,d=c=l=e=null}}}),this.mode&&n.required_caps&&!this.can(n.required_caps)&&(this.mode=!1)}var r={},o={};return i.order="html5,flash,silverlight,html4",i.getRuntime=function(e){return o[e]?o[e]:!1},i.addConstructor=function(e,t){t.prototype=n.instance,r[e]=t},i.getConstructor=function(e){return r[e]||null},i.getInfo=function(e){var t=i.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},i.parseCaps=function(t){var n={};return"string"!==e.typeOf(t)?t||{}:(e.each(t.split(","),function(e){n[e]=!0}),n)},i.can=function(e,t){var n,r=i.getConstructor(e),o;return r?(n=new r({required_caps:t}),o=n.mode,n.destroy(),!!o):!1},i.thatCan=function(e,t){var n=(t||i.order).split(/\s*,\s*/);for(var r in n)if(i.can(n[r],e))return n[r];return null},i.getMode=function(t,n,i){var r=null;if("undefined"===e.typeOf(i)&&(i="browser"),n&&!e.isEmptyObj(t)){if(e.each(n,function(n,i){if(t.hasOwnProperty(i)){var o=t[i](n);if("string"==typeof o&&(o=[o]),r){if(!(r=e.arrayIntersect(r,o)))return r=!1}else r=o}}),r)return-1!==e.inArray(i,r)?i:r[0];if(r===!1)return!1}return i},i.capTrue=function(){return!0},i.capFalse=function(){return!1},i.capTest=function(e){return function(){return!!e}},i}),i(v,[p,u,g],function(e,t,n){return function i(){var i;t.extend(this,{connectRuntime:function(r){function o(t){var s,u;return t.length?(s=t.shift(),(u=n.getConstructor(s))?(i=new u(r),i.bind("Init",function(){i.initialized=!0,setTimeout(function(){i.clients++,a.trigger("RuntimeInit",i)},1)}),i.bind("Error",function(){i.destroy(),o(t)}),i.mode?(i.init(),void 0):(i.trigger("Error"),void 0)):(o(t),void 0)):(a.trigger("RuntimeError",new e.RuntimeError(e.RuntimeError.NOT_INIT_ERR)),i=null,void 0)}var a=this,s;if("string"===t.typeOf(r)?s=r:"string"===t.typeOf(r.ruid)&&(s=r.ruid),s){if(i=n.getRuntime(s))return i.clients++,i;throw new e.RuntimeError(e.RuntimeError.NOT_INIT_ERR)}o((r.runtime_order||n.order).split(/\s*,\s*/))},getRuntime:function(){return i&&i.uid?i:(i=null,null)},disconnectRuntime:function(){i&&--i.clients<=0&&(i.destroy(),i=null)}})}}),i(y,[u,m,v],function(e,t,n){function i(o,a){function s(t,n,o){var a,s=r[this.uid];return"string"===e.typeOf(s)&&s.length?(a=new i(null,{type:o,size:n-t}),a.detach(s.substr(t,a.size)),a):null}n.call(this),o&&this.connectRuntime(o),a?"string"===e.typeOf(a)&&(a={data:a}):a={},e.extend(this,{uid:a.uid||e.guid("uid_"),ruid:o,size:a.size||0,type:a.type||"",slice:function(e,t,n){return this.isDetached()?s.apply(this,arguments):this.getRuntime().exec.call(this,"Blob","slice",this.getSource(),e,t,n)},getSource:function(){return r[this.uid]?r[this.uid]:null},detach:function(e){this.ruid&&(this.getRuntime().exec.call(this,"Blob","destroy",r[this.uid]),this.disconnectRuntime(),this.ruid=null),e=e||"";var n=e.match(/^data:([^;]*);base64,/);n&&(this.type=n[1],e=t.atob(e.substring(e.indexOf("base64,")+7))),this.size=e.length,r[this.uid]=e},isDetached:function(){return!this.ruid&&"string"===e.typeOf(r[this.uid])},destroy:function(){this.detach(),delete r[this.uid]}}),a.data?this.detach(a.data):r[this.uid]=a}var r={};return i}),i(w,[u,l,y],function(e,t,n){function i(i,r){var o,a;if(r||(r={}),a=r.type&&""!==r.type?r.type:t.getFileMime(r.name),r.name)o=r.name.replace(/\\/g,"/"),o=o.substr(o.lastIndexOf("/")+1);else{var s=a.split("/")[0];o=e.guid((""!==s?s:"file")+"_"),t.extensions[a]&&(o+="."+t.extensions[a][0])}n.apply(this,arguments),e.extend(this,{type:a||"",name:o||e.guid("file_"),lastModifiedDate:r.lastModifiedDate||(new Date).toLocaleString()})}return i.prototype=n.prototype,i}),i(E,[u,l,f,p,h,c,w,g,v],function(e,t,n,i,r,o,a,s,u){function c(r){var c=this,d,f,p;if(-1!==e.inArray(e.typeOf(r),["string","node"])&&(r={browse_button:r}),f=n.get(r.browse_button),!f)throw new i.DOMException(i.DOMException.NOT_FOUND_ERR);p={accept:[{title:o.translate("All Files"),extensions:"*"}],name:"file",multiple:!1,required_caps:!1,container:f.parentNode||document.body},r=e.extend({},p,r),"string"==typeof r.required_caps&&(r.required_caps=s.parseCaps(r.required_caps)),"string"==typeof r.accept&&(r.accept=t.mimes2extList(r.accept)),d=n.get(r.container),d||(d=document.body),"static"===n.getStyle(d,"position")&&(d.style.position="relative"),d=f=null,u.call(c),e.extend(c,{uid:e.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){c.convertEventPropsToHandlers(l),c.bind("RuntimeInit",function(t,i){c.ruid=i.uid,c.shimid=i.shimid,c.bind("Ready",function(){c.trigger("Refresh")},999),c.bind("Change",function(){var t=i.exec.call(c,"FileInput","getFiles");c.files=[],e.each(t,function(e){return 0===e.size?!0:(c.files.push(new a(c.ruid,e)),void 0)})},999),c.bind("Refresh",function(){var t,o,a,s;a=n.get(r.browse_button),s=n.get(i.shimid),a&&(t=n.getPos(a,n.get(r.container)),o=n.getSize(a),s&&e.extend(s.style,{top:t.y+"px",left:t.x+"px",width:o.w+"px",height:o.h+"px"})),s=a=null}),i.exec.call(c,"FileInput","init",r)}),c.connectRuntime(e.extend({},r,{required_caps:{select_file:!0}}))},disable:function(t){var n=this.getRuntime();n&&n.exec.call(this,"FileInput","disable","undefined"===e.typeOf(t)?!0:t)},refresh:function(){c.trigger("Refresh")},destroy:function(){var t=this.getRuntime();t&&(t.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===e.typeOf(this.files)&&e.each(this.files,function(e){e.destroy()}),this.files=null}})}var l=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];return c.prototype=r.instance,c}),i(_,[c,f,p,u,w,v,h,l],function(e,t,n,i,r,o,a,s){function u(n){var a=this,u;"string"==typeof n&&(n={drop_zone:n}),u={accept:[{title:e.translate("All Files"),extensions:"*"}],required_caps:{drag_and_drop:!0}},n="object"==typeof n?i.extend({},u,n):u,n.container=t.get(n.drop_zone)||document.body,"static"===t.getStyle(n.container,"position")&&(n.container.style.position="relative"),"string"==typeof n.accept&&(n.accept=s.mimes2extList(n.accept)),o.call(a),i.extend(a,{uid:i.guid("uid_"),ruid:null,files:null,init:function(){a.convertEventPropsToHandlers(c),a.bind("RuntimeInit",function(e,t){a.ruid=t.uid,a.bind("Drop",function(){var e=t.exec.call(a,"FileDrop","getFiles");a.files=[],i.each(e,function(e){a.files.push(new r(a.ruid,e))})},999),t.exec.call(a,"FileDrop","init",n),a.dispatchEvent("ready")}),a.connectRuntime(n)},destroy:function(){var e=this.getRuntime();e&&(e.exec.call(this,"FileDrop","destroy"),this.disconnectRuntime()),this.files=null}})}var c=["ready","dragenter","dragleave","drop","error"];return u.prototype=a.instance,u}),i(x,[u,v,h],function(e,t,n){function i(){this.uid=e.guid("uid_"),t.call(this),this.destroy=function(){this.disconnectRuntime(),this.unbindAll()}}return i.prototype=n.instance,i}),i(R,[u,m,p,h,y,w,x],function(e,t,n,i,r,o,a){function s(){function i(e,i){function l(e){o.readyState=s.DONE,o.error=e,o.trigger("error"),d()}function d(){c.destroy(),c=null,o.trigger("loadend")}function f(t){c.bind("Error",function(e,t){l(t)}),c.bind("Progress",function(e){o.result=t.exec.call(c,"FileReader","getResult"),o.trigger(e)}),c.bind("Load",function(e){o.readyState=s.DONE,o.result=t.exec.call(c,"FileReader","getResult"),o.trigger(e),d()}),t.exec.call(c,"FileReader","read",e,i)}if(c=new a,this.convertEventPropsToHandlers(u),this.readyState===s.LOADING)return l(new n.DOMException(n.DOMException.INVALID_STATE_ERR));if(this.readyState=s.LOADING,this.trigger("loadstart"),i instanceof r)if(i.isDetached()){var p=i.getSource();switch(e){case"readAsText":case"readAsBinaryString":this.result=p;break;case"readAsDataURL":this.result="data:"+i.type+";base64,"+t.btoa(p)}this.readyState=s.DONE,this.trigger("load"),d()}else f(c.connectRuntime(i.ruid));else l(new n.DOMException(n.DOMException.NOT_FOUND_ERR))}var o=this,c;e.extend(this,{uid:e.guid("uid_"),readyState:s.EMPTY,result:null,error:null,readAsBinaryString:function(e){i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){i.call(this,"readAsDataURL",e)},readAsText:function(e){i.call(this,"readAsText",e) +},abort:function(){this.result=null,-1===e.inArray(this.readyState,[s.EMPTY,s.DONE])&&(this.readyState===s.LOADING&&(this.readyState=s.DONE),c&&c.getRuntime().exec.call(this,"FileReader","abort"),this.trigger("abort"),this.trigger("loadend"))},destroy:function(){this.abort(),c&&(c.getRuntime().exec.call(this,"FileReader","destroy"),c.disconnectRuntime()),o=c=null}})}var u=["loadstart","progress","load","abort","error","loadend"];return s.EMPTY=0,s.LOADING=1,s.DONE=2,s.prototype=i.instance,s}),i(b,[],function(){var e=function(t,n){for(var i=["source","scheme","authority","userInfo","user","pass","host","port","relative","path","directory","file","query","fragment"],r=i.length,o={http:80,https:443},a={},s=/^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,u=s.exec(t||"");r--;)u[r]&&(a[i[r]]=u[r]);if(!a.scheme){n&&"string"!=typeof n||(n=e(n||document.location.href)),a.scheme=n.scheme,a.host=n.host,a.port=n.port;var c="";/^[^\/]/.test(a.path)&&(c=n.path,/(\/|\/[^\.]+)$/.test(c)?c+="/":c=c.replace(/\/[^\/]+$/,"/")),a.path=c+(a.path||"")}return a.port||(a.port=o[a.scheme]||80),a.port=parseInt(a.port,10),a.path||(a.path="/"),delete a.source,a},t=function(t){var n={http:80,https:443},i=e(t);return i.scheme+"://"+i.host+(i.port!==n[i.scheme]?":"+i.port:"")+i.path+(i.query?i.query:"")},n=function(t){function n(e){return[e.scheme,e.host,e.port].join("/")}return"string"==typeof t&&(t=e(t)),n(e())===n(t)};return{parseUrl:e,resolveUrl:t,hasSameOrigin:n}}),i(T,[u,v,m],function(e,t,n){return function(){function i(e,t){if(!t.isDetached()){var i=this.connectRuntime(t.ruid).exec.call(this,"FileReaderSync","read",e,t);return this.disconnectRuntime(),i}var r=t.getSource();switch(e){case"readAsBinaryString":return r;case"readAsDataURL":return"data:"+t.type+";base64,"+n.btoa(r);case"readAsText":for(var o="",a=0,s=r.length;s>a;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(S,[p,u,y],function(e,t,n){function i(){var e,i=[];t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?e={name:r,value:o}:"array"===s?(r+="[]",t.each(o,function(e){a.append(r,e)})):"object"===s?t.each(o,function(e,t){a.append(r+"["+t+"]",e)}):"null"===s||"undefined"===s||"number"===s&&isNaN(o)?a.append(r,"false"):i.push({name:r,value:o.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return e&&e.value||null},getBlobName:function(){return e&&e.name||null},each:function(n){t.each(i,function(e){n(e.value,e.name)}),e&&n(e.value,e.name)},destroy:function(){e=null,i=[]}})}return i}),i(A,[u,p,h,m,b,g,x,y,T,S,d,l],function(e,t,n,i,r,o,a,s,u,c,l,d){function f(){this.uid=e.guid("uid_")}function p(){function n(e,t){return y.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?y[e]:v[e]:(l.can("define_property")?y[e]=t:v[e]=t,void 0):void 0}function u(t){function i(){k.destroy(),k=null,s.dispatchEvent("loadend"),s=null}function r(r){k.bind("LoadStart",function(e){n("readyState",p.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),I&&s.upload.dispatchEvent(e)}),k.bind("Progress",function(e){n("readyState")!==p.LOADING&&(n("readyState",p.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),k.bind("UploadProgress",function(e){I&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),k.bind("Load",function(t){n("readyState",p.DONE),n("status",Number(r.exec.call(k,"XMLHttpRequest","getStatus")||0)),n("statusText",h[n("status")]||""),n("response",r.exec.call(k,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),U=r.exec.call(k,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(I&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(N=!0,s.dispatchEvent("error")),i()}),k.bind("Abort",function(e){s.dispatchEvent(e),i()}),k.bind("Error",function(e){N=!0,n("readyState",p.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(k,"XMLHttpRequest","send",{url:E,method:_,async:w,user:R,password:b,headers:x,mimeType:S,encoding:T,responseType:s.responseType,withCredentials:s.withCredentials,options:P},t)}var s=this;M=(new Date).getTime(),k=new a,"string"==typeof P.required_caps&&(P.required_caps=o.parseCaps(P.required_caps)),P.required_caps=e.extend({},P.required_caps,{return_response_type:s.responseType}),t instanceof c&&(P.required_caps.send_multipart=!0),L||(P.required_caps.do_cors=!0),P.ruid?r(k.connectRuntime(P)):(k.bind("RuntimeInit",function(e,t){r(t)}),k.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),k.connectRuntime(P))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),M=C=null}var v=this,y={timeout:0,readyState:p.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},w=!0,E,_,x={},R,b,T=null,S=null,A=!1,O=!1,I=!1,D=!1,N=!1,L=!1,M,C,F=null,H=null,P={},k,U="",B;e.extend(this,y,{uid:e.guid("uid_"),upload:new f,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(_=o.toUpperCase()),~e.inArray(_,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),L=r.hasSameOrigin(l),E=r.resolveUrl(a),(u||c)&&!L)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(R=u||l.user,b=c||l.pass,w=s||!0,w===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);A=!w,O=!1,x={},g.call(this),n("readyState",p.OPENED),this.convertEventPropsToHandlers(["readystatechange"]),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(x[r]?x[r]+=", "+o:x[r]=o,!0)},getAllResponseHeaders:function(){return U||""},getResponseHeader:function(t){return t=t.toLowerCase(),N||~e.inArray(t,["set-cookie","set-cookie2"])?null:U&&""!==U&&(B||(B={},e.each(U.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),B[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),B.hasOwnProperty(t))?B[t].header+": "+B[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[p.LOADING,p.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,H=o},send:function(n,r){if(P="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.convertEventPropsToHandlers(m),this.upload.convertEventPropsToHandlers(m),this.readyState!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)P.ruid=n.ruid,S=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();P.ruid=o.ruid,S=o.type||"application/octet-stream"}}else"string"==typeof n&&(T="UTF-8",S="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=P.required_caps&&P.required_caps.send_browser_cookies&&!L),I=!A&&this.upload.hasEventListener(),N=!1,D=!n,A||(O=!0),u.call(this,n)},abort:function(){if(N=!0,A=!1,~e.inArray(n("readyState"),[p.UNSENT,p.OPENED,p.DONE]))n("readyState",p.UNSENT);else{if(n("readyState",p.DONE),O=!1,!k)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);k.getRuntime().exec.call(k,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){k&&("function"===e.typeOf(k.destroy)&&k.destroy(),k=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}})}var h={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"};f.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return p.UNSENT=0,p.OPENED=1,p.HEADERS_RECEIVED=2,p.LOADING=3,p.DONE=4,p.prototype=n.instance,p}),i(O,[u,m,v,h],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;f>i&&(f=i),n=t.btoa(c.substr(d,f)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,f;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),f=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(I,[u,f,p,T,A,g,v,O,d,h,y,w,m],function(e,t,n,i,r,o,a,s,u,c,l,d,f){function p(){function i(e){e||(e=this.getRuntime().exec.call(this,"Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof p){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);m.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);g.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)/^data:[^;]*;base64,/.test(t)?c.call(this,new l(null,{data:t}),arguments[1]):v.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r)}}function m(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function g(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function v(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){g.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){this.bind("Load Resize",function(){i.call(this)},999),this.convertEventPropsToHandlers(h),c.apply(this,arguments)},downsize:function(t,i,r,o){try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>p.MAX_RESIZE_WIDTH||this.height>p.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);(!t&&!i||"undefined"===e.typeOf(r))&&(r=!1),t=t||this.width,i=i||this.height,o="undefined"===e.typeOf(o)?!0:!!o,this.getRuntime().exec.call(this,"Image","downsize",t,i,r,o)}catch(a){this.trigger("error",a)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return e||(e="image/jpeg"),"image/jpeg"!==e||t||(t=90),this.getRuntime().exec.call(this,"Image","getAsBlob",e,t)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.getRuntime().exec.call(this,"Image","getAsDataURL",e,t)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return f.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i){function r(){if(u.can("create_canvas")){var t=a.getAsCanvas();if(t)return i.appendChild(t),t=null,a.destroy(),o.trigger("embedded"),void 0}var r=a.getAsDataURL(c,l);if(!r)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",r.length))i.innerHTML='<img src="'+r+'" width="'+a.width+'" height="'+a.height+'" />',a.destroy(),o.trigger("embedded");else{var d=new s;d.bind("TransportingComplete",function(){v=o.connectRuntime(this.result.ruid),o.bind("Embedded",function(){e.extend(v.getShimContainer().style,{top:"0px",left:"0px",width:a.width+"px",height:a.height+"px"}),v=null},999),v.exec.call(o,"ImageView","display",this.result.uid,m,g),a.destroy()}),d.transport(f.atob(r.substring(r.indexOf("base64,")+7)),c,e.extend({},h,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i}))}}var o=this,a,c,l,d,h=arguments[1]||{},m=this.width,g=this.height,v;try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>p.MAX_RESIZE_WIDTH||this.height>p.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);if(c=h.type||this.type||"image/jpeg",l=h.quality||90,d="undefined"!==e.typeOf(h.crop)?h.crop:!1,h.width)m=h.width,g=h.height||m;else{var y=t.getSize(i);y.w&&y.h&&(m=y.w,g=y.h)}return a=new p,a.bind("Resize",function(){r.call(o)}),a.bind("Load",function(){a.downsize(m,g,d,!1)}),a.clone(this,!1),a}catch(w){this.trigger("error",w)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}})}var h=["progress","load","error","resize","embedded"];return p.MAX_RESIZE_WIDTH=6500,p.MAX_RESIZE_HEIGHT=6500,p.prototype=c.instance,p}),i(D,[u,p,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.version>9)}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),return_response_headers:u,return_response_type:function(e){return"json"===e&&window.JSON?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.version>=21},select_multiple:function(){return!(!r.can("select_file")||"Safari"===i.browser&&"Windows"===i.os||"iOS"===i.os&&i.verComp(i.osVersion,"7.0.4","<"))},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||"IE"===i.browser&&i.version>=10||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[D,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(L,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(M,[D,u,f,L,l,d],function(e,t,n,i,r,o){function a(){var e=[],a;t.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,f,p,h,m;a=s,e=[],f=a.accept.mimes||r.extList2mimes(a.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='<input id="'+c.uid+'" type="file" style="font-size:999px;opacity:0;"'+(a.multiple&&c.can("select_multiple")?"multiple":"")+(a.directory&&c.can("select_folder")?"webkitdirectory directory":"")+(f?' accept="'+f.join(",")+'"':"")+" />",l=n.get(c.uid),t.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),p=n.get(a.browse_button),c.can("summon_file_dialog")&&("static"===n.getStyle(p,"position")&&(p.style.position="relative"),h=parseInt(n.getStyle(p,"z-index"),10)||1,p.style.zIndex=h,d.style.zIndex=h-1,i.addEvent(p,"click",function(e){var t=n.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?p:d,i.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),i.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),i.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),i.addEvent(n.get(a.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(){if(e=[],a.directory?t.each(this.files,function(t){"."!==t.name&&e.push(t)}):e=[].slice.call(this.files),"IE"!==o.browser)this.value="";else{var n=this.cloneNode(!0);this.parentNode.replaceChild(n,this),n.onchange=g}u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},getFiles:function(){return e},disable:function(e){var t=this.getRuntime(),i;(i=n.get(t.uid))&&(i.disabled=!!e)},destroy:function(){var t=this.getRuntime(),r=t.getShim(),o=t.getShimContainer();i.removeAllEvents(o,this.uid),i.removeAllEvents(a&&n.get(a.container),this.uid),i.removeAllEvents(a&&n.get(a.browse_button),this.uid),o&&(o.innerHTML=""),r.removeInstance(this.uid),e=a=o=r=null}})}return e.FileInput=a}),i(C,[D,u,f,L,l],function(e,t,n,i,r){function o(){function e(e){for(var n=[],i=0;i<e.length;i++)[].push.apply(n,e[i].extensions.split(/\s*,\s*/));return-1===t.inArray("*",n)?n:[]}function o(e){var n=r.getFileExtension(e.name);return!n||!d.length||-1!==t.inArray(n,d)}function a(e,n){var i=[];t.each(e,function(e){var t=e.webkitGetAsEntry();if(t)if(t.isFile){var n=e.getAsFile();o(n)&&l.push(n)}else i.push(t)}),i.length?s(i,n):n()}function s(e,n){var i=[];t.each(e,function(e){i.push(function(t){u(e,t)})}),t.inSeries(i,function(){n()})}function u(e,t){e.isFile?e.file(function(e){o(e)&&l.push(e),t()},function(){t()}):e.isDirectory?c(e,t):t()}function c(e,t){function n(e){r.readEntries(function(t){t.length?([].push.apply(i,t),n(e)):e()},e)}var i=[],r=e.createReader();n(function(){s(i,t)})}var l=[],d=[],f;t.extend(this,{init:function(n){var r=this,s;f=n,d=e(f.accept),s=f.container,i.addEvent(s,"dragover",function(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy"},r.uid),i.addEvent(s,"drop",function(e){e.preventDefault(),e.stopPropagation(),l=[],e.dataTransfer.items&&e.dataTransfer.items[0].webkitGetAsEntry?a(e.dataTransfer.items,function(){r.trigger("drop")}):(t.each(e.dataTransfer.files,function(e){o(e)&&l.push(e)}),r.trigger("drop"))},r.uid),i.addEvent(s,"dragenter",function(e){e.preventDefault(),e.stopPropagation(),r.trigger("dragenter")},r.uid),i.addEvent(s,"dragleave",function(e){e.preventDefault(),e.stopPropagation(),r.trigger("dragleave")},r.uid)},getFiles:function(){return l},destroy:function(){i.removeAllEvents(f&&n.get(f.container),this.uid),l=d=f=null}})}return e.FileDrop=o}),i(F,[D,m,u],function(e,t,n){function i(){function e(e){return t.atob(e.substring(e.indexOf("base64,")+7))}var i,r=!1;n.extend(this,{read:function(e,t){var o=this;i=new window.FileReader,i.addEventListener("progress",function(e){o.trigger(e)}),i.addEventListener("load",function(e){o.trigger(e)}),i.addEventListener("error",function(e){o.trigger(e,i.error)}),i.addEventListener("loadend",function(){i=null}),"function"===n.typeOf(i[e])?(r=!1,i[e](t.getSource())):"readAsBinaryString"===e&&(r=!0,i.readAsDataURL(t.getSource()))},getResult:function(){return i&&i.result?r?e(i.result):i.result:null},abort:function(){i&&i.abort()},destroy:function(){i=null}})}return e.FileReader=i}),i(H,[D,u,l,b,w,y,S,p,d],function(e,t,n,i,r,o,a,s,u){function c(){function e(e,t){var n=this,i,r;i=t.getBlob().getSource(),r=new window.FileReader,r.onload=function(){t.append(t.getBlobName(),new o(null,{type:i.type,data:r.result})),f.send.call(n,e,t)},r.readAsBinaryString(i)}function c(){return!window.XMLHttpRequest||"IE"===u.browser&&u.version<8?function(){for(var e=["Msxml2.XMLHTTP.6.0","Microsoft.XMLHTTP"],t=0;t<e.length;t++)try{return new ActiveXObject(e[t])}catch(n){}}():new window.XMLHttpRequest}function l(e){var t=e.responseXML,n=e.responseText;return"IE"===u.browser&&n&&t&&!t.documentElement&&/[^\/]+\/[^\+]+\+xml/.test(e.getResponseHeader("Content-Type"))&&(t=new window.ActiveXObject("Microsoft.XMLDOM"),t.async=!1,t.validateOnParse=!1,t.loadXML(n)),t&&("IE"===u.browser&&0!==t.parseError||!t.documentElement||"parsererror"===t.documentElement.tagName)?null:t}function d(e){var t="----moxieboundary"+(new Date).getTime(),n="--",i="\r\n",r="",a=this.getRuntime();if(!a.can("send_binary_string"))throw new s.RuntimeError(s.RuntimeError.NOT_SUPPORTED_ERR);return p.setRequestHeader("Content-Type","multipart/form-data; boundary="+t),e.each(function(e,a){r+=e instanceof o?n+t+i+'Content-Disposition: form-data; name="'+a+'"; filename="'+unescape(encodeURIComponent(e.name||"blob"))+'"'+i+"Content-Type: "+(e.type||"application/octet-stream")+i+i+e.getSource()+i:n+t+i+'Content-Disposition: form-data; name="'+a+'"'+i+i+unescape(encodeURIComponent(e))+i}),r+=n+t+n+i}var f=this,p,h;t.extend(this,{send:function(n,r){var s=this,l="Mozilla"===u.browser&&u.version>=4&&u.version<7,f="Android Browser"===u.browser,m=!1;if(h=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),p=c(),p.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=d.call(s,r),m=!0;else if((l||f)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return e.call(s,n,r),void 0;if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}p.upload?(n.withCredentials&&(p.withCredentials=!0),p.addEventListener("load",function(e){s.trigger(e)}),p.addEventListener("error",function(e){s.trigger(e)}),p.addEventListener("progress",function(e){s.trigger(e)}),p.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):p.onreadystatechange=function v(){switch(p.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=p.getResponseHeader("Content-Length")||0),p.responseText&&(t=p.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:p.onreadystatechange=function(){},0===p.status?s.trigger("error"):s.trigger("load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){p.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in p&&(p.responseType="json"!==n.responseType||u.can("return_response_type","json")?n.responseType:"text"),m?p.sendAsBinary?p.sendAsBinary(r):function(){for(var e=new Uint8Array(r.length),t=0;t<r.length;t++)e[t]=255&r.charCodeAt(t);p.send(e.buffer)}():p.send(r),s.trigger("loadstart")},getStatus:function(){try{if(p)return p.status}catch(e){}return 0},getResponse:function(e){var t=this.getRuntime();try{switch(e){case"blob":var i=new r(t.uid,p.response),o=p.getResponseHeader("Content-Disposition");if(o){var a=o.match(/filename=([\'\"'])([^\1]+)\1/);a&&(h=a[2])}return i.name=h,i.type||(i.type=n.getFileMime(h)),i;case"json":return u.can("return_response_type","json")?p.response:200===p.status&&window.JSON?JSON.parse(p.responseText):null;case"document":return l(p);default:return""!==p.responseText?p.responseText:null}}catch(s){return null}},getAllResponseHeaders:function(){try{return p.getAllResponseHeaders()}catch(e){}return""},abort:function(){p&&p.abort()},destroy:function(){f=h=null}})}return e.XMLHttpRequest=c}),i(P,[],function(){return function(){function e(e,t){var n=r?0:-8*(t-1),i=0,a;for(a=0;t>a;a++)i|=o.charCodeAt(e+a)<<Math.abs(n+8*a);return i}function n(e,t,n){n=3===arguments.length?n:o.length-t-1,o=o.substr(0,t)+e+o.substr(n+t)}function i(e,t,i){var o="",a=r?0:-8*(i-1),s;for(s=0;i>s;s++)o+=String.fromCharCode(255&t>>Math.abs(a+8*s));n(o,e,i)}var r=!1,o;return{II:function(e){return e===t?r:(r=e,void 0)},init:function(e){r=!1,o=e},SEGMENT:function(e,t,i){switch(arguments.length){case 1:return o.substr(e,o.length-e-1);case 2:return o.substr(e,t);case 3:n(i,e,t);break;default:return o}},BYTE:function(t){return e(t,1)},SHORT:function(t){return e(t,2)},LONG:function(n,r){return r===t?e(n,4):(i(n,r,4),void 0)},SLONG:function(t){var n=e(t,4);return n>2147483647?n-4294967296:n},STRING:function(t,n){var i="";for(n+=t;n>t;t++)i+=String.fromCharCode(e(t,1));return i}}}}),i(k,[P],function(e){return function t(n){var i=[],r,o,a,s=0;if(r=new e,r.init(n),65496===r.SHORT(0)){for(o=2;o<=n.length;)if(a=r.SHORT(o),a>=65488&&65495>=a)o+=2;else{if(65498===a||65497===a)break;s=r.SHORT(o+2)+2,a>=65505&&65519>=a&&i.push({hex:a,name:"APP"+(15&a),start:o,length:s,segment:r.SEGMENT(o,s)}),o+=s}return r.init(null),{headers:i,restore:function(e){var t,n;for(r.init(e),o=65504==r.SHORT(2)?4+r.SHORT(4):2,n=0,t=i.length;t>n;n++)r.SEGMENT(o,0,i[n].segment),o+=i[n].length;return e=r.SEGMENT(),r.init(null),e},strip:function(e){var n,i,o;for(i=new t(e),n=i.headers,i.purge(),r.init(e),o=n.length;o--;)r.SEGMENT(n[o].start,n[o].length,"");return e=r.SEGMENT(),r.init(null),e},get:function(e){for(var t=[],n=0,r=i.length;r>n;n++)i[n].name===e.toUpperCase()&&t.push(i[n].segment);return t},set:function(e,t){var n=[],r,o,a;for("string"==typeof t?n.push(t):n=t,r=o=0,a=i.length;a>r&&(i[r].name===e.toUpperCase()&&(i[r].segment=n[o],i[r].length=n[o].length,o++),!(o>=n.length));r++);},purge:function(){i=[],r.init(null),r=null}}}}}),i(U,[u,P],function(e,n){return function i(){function i(e,n){var i=a.SHORT(e),r,o,s,u,d,f,p,h,m=[],g={};for(r=0;i>r;r++)if(p=f=e+12*r+2,s=n[a.SHORT(p)],s!==t){switch(u=a.SHORT(p+=2),d=a.LONG(p+=2),p+=4,m=[],u){case 1:case 7:for(d>4&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.BYTE(p+o);break;case 2:d>4&&(p=a.LONG(p)+c.tiffHeader),g[s]=a.STRING(p,d-1);continue;case 3:for(d>2&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.SHORT(p+2*o);break;case 4:for(d>1&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.LONG(p+4*o);break;case 5:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.LONG(p+4*o)/a.LONG(p+4*o+4);break;case 9:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o);break;case 10:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o)/a.SLONG(p+4*o+4);break;default:continue}h=1==d?m[0]:m,g[s]=l.hasOwnProperty(s)&&"object"!=typeof h?l[s][h]:h}return g}function r(){var e=c.tiffHeader;return a.II(18761==a.SHORT(e)),42!==a.SHORT(e+=2)?!1:(c.IFD0=c.tiffHeader+a.LONG(e+=2),u=i(c.IFD0,s.tiff),"ExifIFDPointer"in u&&(c.exifIFD=c.tiffHeader+u.ExifIFDPointer,delete u.ExifIFDPointer),"GPSInfoIFDPointer"in u&&(c.gpsIFD=c.tiffHeader+u.GPSInfoIFDPointer,delete u.GPSInfoIFDPointer),!0)}function o(e,t,n){var i,r,o,u=0;if("string"==typeof t){var l=s[e.toLowerCase()];for(var d in l)if(l[d]===t){t=d;break}}i=c[e.toLowerCase()+"IFD"],r=a.SHORT(i);for(var f=0;r>f;f++)if(o=i+12*f+2,a.SHORT(o)==t){u=o+8;break}return u?(a.LONG(u,n),!0):!1}var a,s,u,c={},l;return a=new n,s={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},{init:function(e){return c={tiffHeader:10},e!==t&&e.length?(a.init(e),65505===a.SHORT(0)&&"EXIF\0"===a.STRING(4,5).toUpperCase()?r():!1):!1 +},TIFF:function(){return u},EXIF:function(){var t;if(t=i(c.exifIFD,s.exif),t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var n=0,r="";n<t.ExifVersion.length;n++)r+=String.fromCharCode(t.ExifVersion[n]);t.ExifVersion=r}return t},GPS:function(){var t;return t=i(c.gpsIFD,s.gps),t.GPSVersionID&&"array"===e.typeOf(t.GPSVersionID)&&(t.GPSVersionID=t.GPSVersionID.join(".")),t},setExif:function(e,t){return"PixelXDimension"!==e&&"PixelYDimension"!==e?!1:o("exif",e,t)},getBinary:function(){return a.SEGMENT()},purge:function(){a.init(null),a=u=null,c={}}}}}),i(B,[u,p,k,P,U],function(e,t,n,i,r){function o(o){function a(){for(var e=0,t,n;e<=u.length;){if(t=c.SHORT(e+=2),t>=65472&&65475>=t)return e+=5,{height:c.SHORT(e),width:c.SHORT(e+=2)};n=c.SHORT(e+=2),e+=n-2}return null}function s(){d&&l&&c&&(d.purge(),l.purge(),c.init(null),u=f=l=d=c=null)}var u,c,l,d,f,p;if(u=o,c=new i,c.init(u),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o),d=new r,p=!!d.init(l.get("app1")[0]),f=a.call(this),e.extend(this,{type:"image/jpeg",size:u.length,width:f&&f.width||0,height:f&&f.height||0,setExif:function(t,n){return p?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e)}):d.setExif(t,n),l.set("app1",d.getBinary()),void 0):!1},writeHeaders:function(){return arguments.length?l.restore(arguments[0]):u=l.restore(u)},stripHeaders:function(e){return l.strip(e)},purge:function(){s.call(this)}}),p&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS()})}return o}),i(z,[p,u,P],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:u.LONG(t),height:u.LONG(t+=4)}):null}function o(){u&&(u.init(null),s=d=c=l=u=null)}function a(e){var t,n,i,r;return t=u.LONG(e),n=u.STRING(e+=4,4),i=e+=4,r=u.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l,d;s=i,u=new n,u.init(s),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;n<i.length;n++,t+=2)if(i[n]!=u.SHORT(t))throw new e.ImageError(e.ImageError.WRONG_FORMAT)}(),d=r.call(this),t.extend(this,{type:"image/png",size:s.length,width:d.width,height:d.height,purge:function(){o.call(this)}}),o.call(this)}return i}),i(G,[u,p,B,z],function(e,t,n,i){return function(r){var o=[n,i],a;a=function(){for(var e=0;e<o.length;e++)try{return new o[e](r)}catch(n){}throw new t.ImageError(t.ImageError.WRONG_FORMAT)}(),e.extend(this,{type:"",size:0,width:0,height:0,setExif:function(){},writeHeaders:function(e){return e},stripHeaders:function(e){return e},purge:function(){}}),e.extend(this,a),this.purge=function(){a.purge(),a=null}}}),i(q,[],function(){function e(e,i,r){var o=e.naturalWidth,a=e.naturalHeight,s=r.width,u=r.height,c=r.x||0,l=r.y||0,d=i.getContext("2d");t(e)&&(o/=2,a/=2);var f=1024,p=document.createElement("canvas");p.width=p.height=f;for(var h=p.getContext("2d"),m=n(e,o,a),g=0;a>g;){for(var v=g+f>a?a-g:f,y=0;o>y;){var w=y+f>o?o-y:f;h.clearRect(0,0,f,f),h.drawImage(e,-y,-g);var E=y*s/o+c<<0,_=Math.ceil(w*s/o),x=g*u/a/m+l<<0,R=Math.ceil(v*u/a/m);d.drawImage(p,0,0,w,v,E,x,_,R),y+=f}g+=f}p=h=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(X,[D,u,p,m,w,G,q,l,d],function(e,t,n,i,r,o,a,s,u){function c(){function e(){if(!E&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return E||y}function c(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function l(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function d(e){var t=this;y=new Image,y.onerror=function(){g.call(this),t.trigger("error",new n.ImageError(n.ImageError.WRONG_FORMAT))},y.onload=function(){t.trigger("load")},y.src=/^data:[^;]*;base64,/.test(e)?e:l(e,x.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",new n.FileException(n.FileException.NOT_READABLE_ERR))},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function p(n,i,r,o){var a=this,s,u,c=0,l=0,d,f,p,g;if(b=o,g=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(g,[5,6,7,8])){var v=n;n=i,i=v}return d=e(),u=r?Math.max:Math.min,s=u(n/d.width,i/d.height),s>1&&(!r||o)?(this.trigger("Resize"),void 0):(E||(E=document.createElement("canvas")),f=Math.round(d.width*s),p=Math.round(d.height*s),r?(E.width=n,E.height=i,f>n&&(c=Math.round((f-n)/2)),p>i&&(l=Math.round((p-i)/2))):(E.width=f,E.height=p),b||m(E.width,E.height,g),h.call(this,d,E,-c,-l,f,p),this.width=E.width,this.height=E.height,R=!0,a.trigger("Resize"),void 0)}function h(e,t,n,i,r,o){if("iOS"===u.OS)a.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var s=t.getContext("2d");s.drawImage(e,n,i,r,o)}}function m(e,t,n){switch(n){case 5:case 6:case 7:case 8:E.width=t,E.height=e;break;default:E.width=e,E.height=t}var i=E.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function g(){w&&(w.purge(),w=null),_=y=E=x=null,R=!1}var v=this,y,w,E,_,x,R=!1,b=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return x=e,e.isDetached()?(_=e.getSource(),d.call(this,_),void 0):(f.call(this,e.getSource(),function(e){r&&(_=c(e)),d.call(t,e)}),void 0)},loadFromImage:function(e,t){this.meta=e.meta,x=new r(null,{name:e.name,size:e.size,type:e.type}),d.call(this,t?_=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!w&&_&&t.can("access_image_binary")&&(w=new o(_)),n={width:e().width||0,height:e().height||0,type:x.type||s.getFileMime(x.name),size:_&&_.length||x.size||0,name:x.name||"",meta:w&&w.meta||this.meta||{}}},downsize:function(){p.apply(this,arguments)},getAsCanvas:function(){return E&&(E.id=this.uid+"_canvas"),E},getAsBlob:function(e,t){return e!==this.type&&p.call(this,this.width,this.height,!1),new r(null,{name:x.name||"",type:e,data:v.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!R)return y.src;if("image/jpeg"!==e)return E.toDataURL("image/png");try{return E.toDataURL("image/jpeg",t/100)}catch(n){return E.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!R)return _||(_=c(v.getAsDataURL(e,t))),_;if("image/jpeg"!==e)_=c(v.getAsDataURL(e,t));else{var n;t||(t=90);try{n=E.toDataURL("image/jpeg",t/100)}catch(i){n=E.toDataURL("image/jpeg")}_=c(n),w&&(_=w.stripHeaders(_),b&&(w.meta&&w.meta.exif&&w.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),_=w.writeHeaders(_)),w.purge(),w=null)}return R=!1,_},destroy:function(){v=null,g.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=c}),i(j,[u,d,f,p,g],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(a){var c=this,l;a=e.extend({swf_url:t.swf_url},a),r.call(this,a,s,{access_binary:function(e){return e&&"browser"===c.mode},access_image_binary:function(e){return e&&"browser"===c.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===c.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!e.arrayDiff(t,["","text","document"])||"browser"===c.mode},return_status_code:function(t){return"browser"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===c.mode},send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"browser"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:function(e){return e&&"browser"===c.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===c.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n='<object id="'+this.uid+'" type="application/x-shockwave-flash" data="'+a.swf_url+'" ',"IE"===t.browser&&(n+='classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '),n+='width="100%" height="100%" style="outline:0"><param name="movie" value="'+a.swf_url+'" />'+'<param name="flashvars" value="uid='+escape(this.uid)+"&target="+t.global_event_dispatcher+'" />'+'<param name="wmode" value="transparent" />'+'<param name="allowscriptaccess" value="always" />'+"</object>","IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="flash",u={};return r.addConstructor(s,a),u}),i(V,[j,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(W,[j],function(e){var t={init:function(e){this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=t}),i(Y,[j,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i="",r={read:function(e,t){var r=this,o=r.getRuntime();return"readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"),r.bind("Progress",function(t,r){r&&(i+=n(r,e))}),o.shimExec.call(this,"FileReader","readAsBase64",t.uid)},getResult:function(){return i},destroy:function(){i=null}};return e.FileReader=r}),i($,[j,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(J,[j,u,y,w,T,S,O],function(e,t,n,i,r,o,a){var s={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var f=i.getBlob();f.isDetached()?u(f,function(e){f.destroy(),s(d,e)}):s(d,f)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;try{if(n=new r,~t.inArray(e,["","text"]))return n.readAsText(o);if("json"===e&&window.JSON)return JSON.parse(n.readAsText(o))}finally{o.destroy()}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=s}),i(Z,[j,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(K,[j,u,O,y,T],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(Q,[u,d,f,p,g],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u<o.length&&a===s);s>=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:function(e){return"json"!==e?!0:!!window.JSON},return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML='<object id="'+this.uid+'" data="data:application/x-silverlight," type="application/x-silverlight-2" width="100%" height="100%" style="outline:none;">'+'<param name="source" value="'+a.xap_url+'"/>'+'<param name="background" value="Transparent"/>'+'<param name="windowless" value="true"/>'+'<param name="enablehtmlaccess" value="true"/>'+'<param name="initParams" value="uid='+this.uid+",target="+t.global_event_dispatcher+'"/>'+"</object>",l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(et,[Q,u,V],function(e,t,n){return e.Blob=t.extend({},n)}),i(tt,[Q],function(e){var t={init:function(e){function t(e){for(var t="",n=0;n<e.length;n++)t+=(""!==t?"|":"")+e[n].title+" | *."+e[n].extensions.replace(/,/g,";*.");return t}this.getRuntime().shimExec.call(this,"FileInput","init",t(e.accept),e.name,e.multiple),this.trigger("ready")}};return e.FileInput=t}),i(nt,[Q,f,L],function(e,t,n){var i={init:function(){var e=this,i=e.getRuntime(),r;return r=i.getShimContainer(),n.addEvent(r,"dragover",function(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy"},e.uid),n.addEvent(r,"dragenter",function(e){e.preventDefault();var n=t.get(i.uid).dragEnter(e);n&&e.stopPropagation()},e.uid),n.addEvent(r,"drop",function(e){e.preventDefault();var n=t.get(i.uid).dragDrop(e);n&&e.stopPropagation()},e.uid),i.shimExec.call(this,"FileDrop","init")}};return e.FileDrop=i}),i(it,[Q,u,Y],function(e,t,n){return e.FileReader=t.extend({},n)}),i(rt,[Q,u,$],function(e,t,n){return e.FileReaderSync=t.extend({},n)}),i(ot,[Q,u,J],function(e,t,n){return e.XMLHttpRequest=t.extend({},n)}),i(at,[Q,u,Z],function(e,t,n){return e.Transporter=t.extend({},n)}),i(st,[Q,u,K],function(e,t,n){return e.Image=t.extend({},n,{getInfo:function(){var e=this.getRuntime(),n=["tiff","exif","gps"],i={meta:{}},r=e.shimExec.call(this,"Image","getInfo");return r.meta&&t.each(n,function(e){var t=r.meta[e],n,o,a,s;if(t&&t.keys)for(i.meta[e]={},o=0,a=t.keys.length;a>o;o++)n=t.keys[o],s=t[n],s&&(/^(\d|[1-9]\d+)$/.test(s)?s=parseInt(s,10):/^\d*\.\d+$/.test(s)&&(s=parseFloat(s)),i.meta[e][n]=s)}),i.width=parseInt(r.width,10),i.height=parseInt(r.height,10),i.size=parseInt(r.size,10),i.type=r.type,i.name=r.name,i}})}),i(ut,[u,p,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue;n.call(this,t,o,{access_binary:s(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:s(a.Image&&(i.can("create_canvas")||i.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!!~e.inArray(t,["text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(ct,[ut,u,f,L,l,d],function(e,t,n,i,r,o){function a(){function e(){var r=this,l=r.getRuntime(),d,f,p,h,m,g;g=t.guid("uid_"),d=l.getShimContainer(),a&&(p=n.get(a+"_form"),p&&t.extend(p.style,{top:"100%"})),h=document.createElement("form"),h.setAttribute("id",g+"_form"),h.setAttribute("method","post"),h.setAttribute("enctype","multipart/form-data"),h.setAttribute("encoding","multipart/form-data"),t.extend(h.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name",c.name||"Filedata"),m.setAttribute("accept",u.join(",")),t.extend(m.style,{fontSize:"999px",opacity:0}),h.appendChild(m),d.appendChild(h),t.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===o.browser&&o.version<10&&t.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var t;this.value&&(t=this.files?this.files[0]:{name:this.value},s=[t],this.onchange=function(){},e.call(r),r.bind("change",function i(){var e=n.get(g),t=n.get(g+"_form"),o;r.unbind("change",i),r.files.length&&e&&t&&(o=r.files[0],e.setAttribute("id",o.uid),t.setAttribute("id",o.uid+"_form"),t.setAttribute("target",o.uid+"_iframe")),e=t=null},998),m=h=null,r.trigger("change"))},l.can("summon_file_dialog")&&(f=n.get(c.browse_button),i.removeEvent(f,"click",r.uid),i.addEvent(f,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},r.uid)),a=g,d=p=f=null}var a,s=[],u=[],c;t.extend(this,{init:function(t){var o=this,a=o.getRuntime(),s;c=t,u=t.accept.mimes||r.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,r,u;e=n.get(t.browse_button),a.can("summon_file_dialog")&&("static"===n.getStyle(e,"position")&&(e.style.position="relative"),r=parseInt(n.getStyle(e,"z-index"),10)||1,e.style.zIndex=r,s.style.zIndex=r-1),u=a.can("summon_file_dialog")?e:s,i.addEvent(u,"mouseover",function(){o.trigger("mouseenter")},o.uid),i.addEvent(u,"mouseout",function(){o.trigger("mouseleave")},o.uid),i.addEvent(u,"mousedown",function(){o.trigger("mousedown")},o.uid),i.addEvent(n.get(t.container),"mouseup",function(){o.trigger("mouseup")},o.uid),e=null}(),e.call(this),s=null,o.trigger({type:"ready",async:!0})},getFiles:function(){return s},disable:function(e){var t;(t=n.get(a))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),r=e.getShimContainer();i.removeAllEvents(r,this.uid),i.removeAllEvents(c&&n.get(c.container),this.uid),i.removeAllEvents(c&&n.get(c.browse_button),this.uid),r&&(r.innerHTML=""),t.removeInstance(this.uid),a=s=u=c=r=t=null}})}return e.FileInput=a}),i(lt,[ut,F],function(e,t){return e.FileReader=t}),i(dt,[ut,u,f,b,p,L,y,S],function(e,t,n,i,r,o,a,s){function u(){function e(e){var t=this,i,r,a,s,u=!1;if(l){if(i=l.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(l,"load",t.uid),l.parentNode&&l.parentNode.removeChild(l);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=l=null,e()},1)}}var u,c,l;t.extend(this,{send:function(d,f){function p(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='<iframe id="'+g+'_iframe" name="'+g+'_iframe" src="javascript:""" style="display:none"></iframe>',l=r.firstChild,n.appendChild(l),o.addEvent(l,"load",function(){var n;try{n=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(n.title)?u=n.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(n.body.innerHTML),h.trigger({type:"progress",loaded:c.length,total:c.length}),w&&h.trigger({type:"uploadprogress",loaded:w.size||1025,total:w.size||1025}))}catch(r){if(!i.hasSameOrigin(d.url))return e.call(h,function(){h.trigger("error")}),void 0;u=404}e.call(h,function(){h.trigger("load")})},h.uid)}var h=this,m=h.getRuntime(),g,v,y,w;if(u=c=null,f instanceof s&&f.hasBlob()){if(w=f.getBlob(),g=w.uid,y=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",d.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),v.setAttribute("target",g+"_iframe"),m.getShimContainer().appendChild(v);f instanceof s&&f.each(function(e,n){if(e instanceof a)y&&y.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),y?v.insertBefore(i,y):v.appendChild(i)}}),v.setAttribute("action",d.url),p(),v.submit(),h.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{return JSON.parse(c.replace(/^\s*<pre[^>]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=u}),i(ft,[ut,X],function(e,t){return e.Image=t}),a([u,c,l,d,f,p,h,m,g,v,y,w,E,_,x,R,b,T,S,A,O,I,L])}(this);;(function(){"use strict";var e={},t=moxie.core.utils.Basic.inArray;return function n(r){var i,s;for(i in r)s=typeof r[i],s==="object"&&!~t(i,["Exceptions","Env","Mime"])?n(r[i]):s==="function"&&(e[i]=r[i])}(window.moxie),e.Env=window.moxie.core.utils.Env,e.Mime=window.moxie.core.utils.Mime,e.Exceptions=window.moxie.core.Exceptions,window.mOxie=e,window.o||(window.o=e),e})(); +/** + * Plupload - multi-runtime File Uploader + * v2.1.1 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2014-01-16 + */ +;(function(e,t,n){function s(e){function r(e,t,r){var i={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};i[e]?n[i[e]]=t:r||(n[e]=t)}var t=e.required_features,n={};return typeof t=="string"?o.each(t.split(/\s*,\s*/),function(e){r(e,!0)}):typeof t=="object"?o.each(t,function(e,t){r(t,e)}):t===!0&&(e.multipart||(n.send_binary_string=!0),e.chunk_size>0&&(n.slice_blob=!0),e.resize.enabled&&(n.send_binary_string=!0),o.each(e,function(e,t){r(t,!!e,!0)})),n}var r=e.setTimeout,i={},o={VERSION:"2.1.1",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,IMAGE_MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:t.mimes,ua:t.ua,typeOf:t.typeOf,extend:t.extend,guid:t.guid,get:function(n){var r=[],i;t.typeOf(n)!=="array"&&(n=[n]);var s=n.length;while(s--)i=t.get(n[s]),i&&r.push(i);return r.length?r:null},each:t.each,getPos:t.getPos,getSize:t.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},n=/[<>&\"\']/g;return e?(""+e).replace(n,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:t.toArray,inArray:t.inArray,addI18n:t.addI18n,translate:t.translate,isEmptyObj:t.isEmptyObj,hasClass:t.hasClass,addClass:t.addClass,removeClass:t.removeClass,getStyle:t.getStyle,addEvent:t.addEvent,removeEvent:t.removeEvent,removeAllEvents:t.removeAllEvents,cleanName:function(e){var t,n;n=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(t=0;t<n.length;t+=2)e=e.replace(n[t],n[t+1]);return e=e.replace(/\s+/g,"_"),e=e.replace(/[^a-z0-9_\-\.]+/gi,""),e},buildUrl:function(e,t){var n="";return o.each(t,function(e,t){n+=(n?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(e)}),n&&(e+=(e.indexOf("?")>0?"&":"?")+n),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}if(e===n||/\D/.test(e))return o.translate("N/A");var r=Math.pow(1024,4);return e>r?t(e/r,1)+" "+o.translate("tb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("gb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("mb"):e>1024?Math.round(e/1024)+" "+o.translate("kb"):e+" "+o.translate("b")},parseSize:t.parseSizeStr,predictRuntime:function(e,n){var r,i;return r=new o.Uploader(e),i=t.Runtime.thatCan(r.getOption().required_features,n||e.runtimes),r.destroy(),i},addFileFilter:function(e,t){i[e]=t}};o.addFileFilter("mime_types",function(e,t,n){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:o.FILE_EXTENSION_ERROR,message:o.translate("File extension error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("max_file_size",function(e,t,n){var r;e=o.parseSize(e),t.size!==r&&e&&t.size>e?(this.trigger("Error",{code:o.FILE_SIZE_ERROR,message:o.translate("File size error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("prevent_duplicates",function(e,t,n){if(e){var r=this.files.length;while(r--)if(t.name===this.files[r].name&&t.size===this.files[r].size){this.trigger("Error",{code:o.FILE_DUPLICATE_ERROR,message:o.translate("Duplicate file error."),file:t}),n(!1);return}}n(!0)}),o.Uploader=function(e){function g(){var e,t=0,n;if(this.state==o.STARTED){for(n=0;n<f.length;n++)!e&&f[n].status==o.QUEUED?(e=f[n],this.trigger("BeforeUpload",e)&&(e.status=o.UPLOADING,this.trigger("UploadFile",e))):t++;t==f.length&&(this.state!==o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged")),this.trigger("UploadComplete",f))}}function y(e){e.percent=e.size>0?Math.ceil(e.loaded/e.size*100):100,b()}function b(){var e,t;d.reset();for(e=0;e<f.length;e++)t=f[e],t.size!==n?(d.size+=t.origSize,d.loaded+=t.loaded*t.origSize/t.size):d.size=n,t.status==o.DONE?d.uploaded++:t.status==o.FAILED?d.failed++:d.queued++;d.size===n?d.percent=f.length>0?Math.ceil(d.uploaded/f.length*100):0:(d.bytesPerSec=Math.ceil(d.loaded/((+(new Date)-p||1)/1e3)),d.percent=d.size>0?Math.ceil(d.loaded/d.size*100):0)}function w(){var e=c[0]||h[0];return e?e.getRuntime().uid:!1}function E(e,n){if(e.ruid){var r=t.Runtime.getInfo(e.ruid);if(r)return r.can(n)}return!1}function S(){this.bind("FilesAdded",C),this.bind("CancelUpload",M),this.bind("BeforeUpload",k),this.bind("UploadFile",L),this.bind("UploadProgress",A),this.bind("StateChanged",O),this.bind("QueueChanged",b),this.bind("Error",D),this.bind("FileUploaded",_),this.bind("Destroy",P)}function x(e,n){var r=this,i=0,s=[],u={accept:e.filters.mime_types,runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:l,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url};o.each(e.runtimes.split(/\s*,\s*/),function(t){e[t]&&(u[t]=e[t])}),e.browse_button&&o.each(e.browse_button,function(n){s.push(function(s){var a=new t.FileInput(o.extend({},u,{name:e.file_data_name,multiple:e.multi_selection,container:e.container,browse_button:n}));a.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),i++,c.push(this),s()},a.onchange=function(){r.addFile(this.files)},a.bind("mouseenter mouseleave mousedown mouseup",function(r){v||(e.browse_button_hover&&("mouseenter"===r.type?t.addClass(n,e.browse_button_hover):"mouseleave"===r.type&&t.removeClass(n,e.browse_button_hover)),e.browse_button_active&&("mousedown"===r.type?t.addClass(n,e.browse_button_active):"mouseup"===r.type&&t.removeClass(n,e.browse_button_active)))}),a.bind("error runtimeerror",function(){a=null,s()}),a.init()})}),e.drop_element&&o.each(e.drop_element,function(e){s.push(function(n){var s=new t.FileDrop(o.extend({},u,{drop_zone:e}));s.onready=function(){var e=t.Runtime.getInfo(this.ruid);r.features.dragdrop=e.can("drag_and_drop"),i++,h.push(this),n()},s.ondrop=function(){r.addFile(this.files)},s.bind("error runtimeerror",function(){s=null,n()}),s.init()})}),t.inSeries(s,function(){typeof n=="function"&&n(i)})}function T(e,n,r){var i=new t.Image;try{i.onload=function(){i.downsize(n.width,n.height,n.crop,n.preserve_headers)},i.onresize=function(){r(this.getAsBlob(e.type,n.quality)),this.destroy()},i.onerror=function(){r(e)},i.load(e)}catch(s){r(e)}}function N(e,n,r){function f(e,t,n){var r=a[e];switch(e){case"max_file_size":e==="max_file_size"&&(a.max_file_size=a.filters.max_file_size=t);break;case"chunk_size":if(t=o.parseSize(t))a[e]=t;break;case"filters":o.typeOf(t)==="array"&&(t={mime_types:t}),n?o.extend(a.filters,t):a.filters=t,t.mime_types&&(a.filters.mime_types.regexp=function(e){var t=[];return o.each(e,function(e){o.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?t.push("\\.*"):t.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+t.join("|")+")$","i")}(a.filters.mime_types));break;case"resize":n?o.extend(a.resize,t,{enabled:!0}):a.resize=t;break;case"prevent_duplicates":a.prevent_duplicates=a.filters.prevent_duplicates=!!t;break;case"browse_button":case"drop_element":t=o.get(t);case"container":case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":a[e]=t,n||(u=!0);break;default:a[e]=t}n||i.trigger("OptionChanged",e,t,r)}var i=this,u=!1;typeof e=="object"?o.each(e,function(e,t){f(t,e,r)}):f(e,n,r),r?(a.required_features=s(o.extend({},a)),l=s(o.extend({},a,{required_features:!0}))):u&&(i.trigger("Destroy"),x.call(i,a,function(e){e?(i.runtime=t.Runtime.getInfo(w()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})}))}function C(e,t){[].push.apply(f,t),e.trigger("QueueChanged"),e.refresh()}function k(e,t){if(a.unique_names){var n=t.name.match(/\.([^.]+)$/),r="part";n&&(r=n[1]),t.target_name=t.id+"."+r}}function L(e,n){function h(){u-->0?r(p,1e3):(n.loaded=f,e.trigger("Error",{code:o.HTTP_ERROR,message:o.translate("HTTP Error."),file:n,response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()}))}function p(){var d,v,g,y;if(n.status==o.DONE||n.status==o.FAILED||e.state==o.STOPPED)return;g={name:n.target_name||n.name},s&&a.chunks&&c.size>s?(y=Math.min(s,c.size-f),d=c.slice(f,f+y)):(y=c.size,d=c),s&&a.chunks&&(e.settings.send_chunk_number?(g.chunk=Math.ceil(f/s),g.chunks=Math.ceil(c.size/s)):(g.offset=f,g.total=c.size)),m=new t.XMLHttpRequest,m.upload&&(m.upload.onprogress=function(t){n.loaded=Math.min(n.size,f+t.loaded),e.trigger("UploadProgress",n)}),m.onload=function(){if(m.status>=400){h();return}u=e.settings.max_retries,y<c.size?(d.destroy(),f+=y,n.loaded=Math.min(f,c.size),e.trigger("ChunkUploaded",n,{offset:n.loaded,total:c.size,response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()}),t.Env.browser==="Android Browser"&&e.trigger("UploadProgress",n)):n.loaded=n.size,d=v=null,!f||f>=c.size?(n.size!=n.origSize&&(c.destroy(),c=null),e.trigger("UploadProgress",n),n.status=o.DONE,e.trigger("FileUploaded",n,{response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()})):r(p,1)},m.onerror=function(){h()},m.onloadend=function(){this.destroy(),m=null},e.settings.multipart&&a.multipart?(g.name=n.target_name||n.name,m.open("post",i,!0),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),v=new t.FormData,o.each(o.extend(g,e.settings.multipart_params),function(e,t){v.append(t,e)}),v.append(e.settings.file_data_name,d),m.send(v,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url})):(i=o.buildUrl(e.settings.url,o.extend(g,e.settings.multipart_params)),m.open("post",i,!0),m.setRequestHeader("Content-Type","application/octet-stream"),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),m.send(d,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url}))}var i=e.settings.url,s=e.settings.chunk_size,u=e.settings.max_retries,a=e.features,f=0,c;n.loaded&&(f=n.loaded=s*Math.floor(n.loaded/s)),c=n.getSource(),e.settings.resize.enabled&&E(c,"send_binary_string")&&!!~t.inArray(c.type,["image/jpeg","image/png"])?T.call(this,c,e.settings.resize,function(e){c=e,n.size=e.size,p()}):p()}function A(e,t){y(t)}function O(e){if(e.state==o.STARTED)p=+(new Date);else if(e.state==o.STOPPED)for(var t=e.files.length-1;t>=0;t--)e.files[t].status==o.UPLOADING&&(e.files[t].status=o.QUEUED,b())}function M(){m&&m.abort()}function _(e){b(),r(function(){g.call(e)},1)}function D(e,t){t.file&&(t.file.status=o.FAILED,y(t.file),e.state==o.STARTED&&(e.trigger("CancelUpload"),r(function(){g.call(e)},1)))}function P(e){e.stop(),o.each(f,function(e){e.destroy()}),f=[],c.length&&(o.each(c,function(e){e.destroy()}),c=[]),h.length&&(o.each(h,function(e){e.destroy()}),h=[]),l={},v=!1,p=m=null,d.reset()}var u=o.guid(),a,f=[],l={},c=[],h=[],p,d,v=!1,m;a={runtimes:t.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_chunk_number:!0},N.call(this,e,null,!0),d=new o.QueueProgress,o.extend(this,{id:u,uid:u,state:o.STOPPED,features:{},runtime:null,files:f,settings:a,total:d,init:function(){var e=this;typeof a.preinit=="function"?a.preinit(e):o.each(a.preinit,function(t,n){e.bind(n,t)});if(!a.browse_button||!a.url){this.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")});return}S.call(this),x.call(this,a,function(n){typeof a.init=="function"?a.init(e):o.each(a.init,function(t,n){e.bind(n,t)}),n?(e.runtime=t.Runtime.getInfo(w()).type,e.trigger("Init",{runtime:e.runtime}),e.trigger("PostInit")):e.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})})},setOption:function(e,t){N.call(this,e,t,!this.runtime)},getOption:function(e){return e?a[e]:a},refresh:function(){c.length&&o.each(c,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=o.STARTED&&(this.state=o.STARTED,this.trigger("StateChanged"),g.call(this))},stop:function(){this.state!=o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){v=arguments[0]!==n?arguments[0]:!0,c.length&&o.each(c,function(e){e.disable(v)}),this.trigger("DisableBrowse",v)},getFile:function(e){var t;for(t=f.length-1;t>=0;t--)if(f[t].id===e)return f[t]},addFile:function(e,n){function l(e,n){var r=[];t.each(s.settings.filters,function(t,n){i[n]&&r.push(function(r){i[n].call(s,t,e,function(e){r(!e)})})}),t.inSeries(r,n)}function c(e){var i=t.typeOf(e);if(e instanceof t.File){if(!e.ruid&&!e.isDetached()){if(!f)return!1;e.ruid=f,e.connectRuntime(f)}c(new o.File(e))}else e instanceof t.Blob?(c(e.getSource()),e.destroy()):e instanceof o.File?(n&&(e.name=n),u.push(function(t){l(e,function(n){n||(a.push(e),s.trigger("FileFiltered",e)),r(t,1)})})):t.inArray(i,["file","blob"])!==-1?c(new t.File(null,e)):i==="node"&&t.typeOf(e.files)==="filelist"?t.each(e.files,c):i==="array"&&(n=null,t.each(e,c))}var s=this,u=[],a=[],f;f=w(),c(e),u.length&&t.inSeries(u,function(){a.length&&s.trigger("FilesAdded",a)})},removeFile:function(e){var t=typeof e=="string"?e:e.id;for(var n=f.length-1;n>=0;n--)if(f[n].id===t)return this.splice(n,1)[0]},splice:function(e,t){var r=f.splice(e===n?0:e,t===n?f.length:t),i=!1;return this.state==o.STARTED&&(i=!0,this.stop()),this.trigger("FilesRemoved",r),o.each(r,function(e){e.destroy()}),this.trigger("QueueChanged"),this.refresh(),i&&this.start(),r},bind:function(e,t,n){var r=this;o.Uploader.prototype.bind.call(this,e,function(){var e=[].slice.call(arguments);return e.splice(0,1,r),t.apply(this,e)},0,n)},destroy:function(){this.trigger("Destroy"),a=d=null,this.unbindAll()}})},o.Uploader.prototype=t.EventTarget.instance,o.File=function(){function n(n){o.extend(this,{id:o.guid(),name:n.name||n.fileName,type:n.type||"",size:n.size||n.fileSize,origSize:n.size||n.fileSize,loaded:0,percent:0,status:o.QUEUED,lastModifiedDate:n.lastModifiedDate||(new Date).toLocaleString(),getNative:function(){var e=this.getSource().getSource();return t.inArray(t.typeOf(e),["blob","file"])!==-1?e:null},getSource:function(){return e[this.id]?e[this.id]:null},destroy:function(){var t=this.getSource();t&&(t.destroy(),delete e[this.id])}}),e[this.id]=n}var e={};return n}(),o.QueueProgress=function(){var e=this;e.size=0,e.loaded=0,e.uploaded=0,e.failed=0,e.queued=0,e.percent=0,e.bytesPerSec=0,e.reset=function(){e.size=e.loaded=e.uploaded=e.failed=e.queued=e.percent=e.bytesPerSec=0}},e.plupload=o})(window,mOxie); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.min.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.min.js new file mode 100755 index 0000000000000000000000000000000000000000..06bcd595a83a77e1d5a8f700baa7a9c7e1c202b3 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/static/plupload-2.1.1/plupload.min.js @@ -0,0 +1,13 @@ +/** + * Plupload - multi-runtime File Uploader + * v2.1.1 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2014-01-16 + */ +;(function(e,t,n){function s(e){function r(e,t,r){var i={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};i[e]?n[i[e]]=t:r||(n[e]=t)}var t=e.required_features,n={};return typeof t=="string"?o.each(t.split(/\s*,\s*/),function(e){r(e,!0)}):typeof t=="object"?o.each(t,function(e,t){r(t,e)}):t===!0&&(e.multipart||(n.send_binary_string=!0),e.chunk_size>0&&(n.slice_blob=!0),e.resize.enabled&&(n.send_binary_string=!0),o.each(e,function(e,t){r(t,!!e,!0)})),n}var r=e.setTimeout,i={},o={VERSION:"2.1.1",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,IMAGE_MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:t.mimes,ua:t.ua,typeOf:t.typeOf,extend:t.extend,guid:t.guid,get:function(n){var r=[],i;t.typeOf(n)!=="array"&&(n=[n]);var s=n.length;while(s--)i=t.get(n[s]),i&&r.push(i);return r.length?r:null},each:t.each,getPos:t.getPos,getSize:t.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},n=/[<>&\"\']/g;return e?(""+e).replace(n,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:t.toArray,inArray:t.inArray,addI18n:t.addI18n,translate:t.translate,isEmptyObj:t.isEmptyObj,hasClass:t.hasClass,addClass:t.addClass,removeClass:t.removeClass,getStyle:t.getStyle,addEvent:t.addEvent,removeEvent:t.removeEvent,removeAllEvents:t.removeAllEvents,cleanName:function(e){var t,n;n=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(t=0;t<n.length;t+=2)e=e.replace(n[t],n[t+1]);return e=e.replace(/\s+/g,"_"),e=e.replace(/[^a-z0-9_\-\.]+/gi,""),e},buildUrl:function(e,t){var n="";return o.each(t,function(e,t){n+=(n?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(e)}),n&&(e+=(e.indexOf("?")>0?"&":"?")+n),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}if(e===n||/\D/.test(e))return o.translate("N/A");var r=Math.pow(1024,4);return e>r?t(e/r,1)+" "+o.translate("tb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("gb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("mb"):e>1024?Math.round(e/1024)+" "+o.translate("kb"):e+" "+o.translate("b")},parseSize:t.parseSizeStr,predictRuntime:function(e,n){var r,i;return r=new o.Uploader(e),i=t.Runtime.thatCan(r.getOption().required_features,n||e.runtimes),r.destroy(),i},addFileFilter:function(e,t){i[e]=t}};o.addFileFilter("mime_types",function(e,t,n){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:o.FILE_EXTENSION_ERROR,message:o.translate("File extension error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("max_file_size",function(e,t,n){var r;e=o.parseSize(e),t.size!==r&&e&&t.size>e?(this.trigger("Error",{code:o.FILE_SIZE_ERROR,message:o.translate("File size error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("prevent_duplicates",function(e,t,n){if(e){var r=this.files.length;while(r--)if(t.name===this.files[r].name&&t.size===this.files[r].size){this.trigger("Error",{code:o.FILE_DUPLICATE_ERROR,message:o.translate("Duplicate file error."),file:t}),n(!1);return}}n(!0)}),o.Uploader=function(e){function g(){var e,t=0,n;if(this.state==o.STARTED){for(n=0;n<f.length;n++)!e&&f[n].status==o.QUEUED?(e=f[n],this.trigger("BeforeUpload",e)&&(e.status=o.UPLOADING,this.trigger("UploadFile",e))):t++;t==f.length&&(this.state!==o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged")),this.trigger("UploadComplete",f))}}function y(e){e.percent=e.size>0?Math.ceil(e.loaded/e.size*100):100,b()}function b(){var e,t;d.reset();for(e=0;e<f.length;e++)t=f[e],t.size!==n?(d.size+=t.origSize,d.loaded+=t.loaded*t.origSize/t.size):d.size=n,t.status==o.DONE?d.uploaded++:t.status==o.FAILED?d.failed++:d.queued++;d.size===n?d.percent=f.length>0?Math.ceil(d.uploaded/f.length*100):0:(d.bytesPerSec=Math.ceil(d.loaded/((+(new Date)-p||1)/1e3)),d.percent=d.size>0?Math.ceil(d.loaded/d.size*100):0)}function w(){var e=c[0]||h[0];return e?e.getRuntime().uid:!1}function E(e,n){if(e.ruid){var r=t.Runtime.getInfo(e.ruid);if(r)return r.can(n)}return!1}function S(){this.bind("FilesAdded",C),this.bind("CancelUpload",M),this.bind("BeforeUpload",k),this.bind("UploadFile",L),this.bind("UploadProgress",A),this.bind("StateChanged",O),this.bind("QueueChanged",b),this.bind("Error",D),this.bind("FileUploaded",_),this.bind("Destroy",P)}function x(e,n){var r=this,i=0,s=[],u={accept:e.filters.mime_types,runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:l,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url};o.each(e.runtimes.split(/\s*,\s*/),function(t){e[t]&&(u[t]=e[t])}),e.browse_button&&o.each(e.browse_button,function(n){s.push(function(s){var a=new t.FileInput(o.extend({},u,{name:e.file_data_name,multiple:e.multi_selection,container:e.container,browse_button:n}));a.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),i++,c.push(this),s()},a.onchange=function(){r.addFile(this.files)},a.bind("mouseenter mouseleave mousedown mouseup",function(r){v||(e.browse_button_hover&&("mouseenter"===r.type?t.addClass(n,e.browse_button_hover):"mouseleave"===r.type&&t.removeClass(n,e.browse_button_hover)),e.browse_button_active&&("mousedown"===r.type?t.addClass(n,e.browse_button_active):"mouseup"===r.type&&t.removeClass(n,e.browse_button_active)))}),a.bind("error runtimeerror",function(){a=null,s()}),a.init()})}),e.drop_element&&o.each(e.drop_element,function(e){s.push(function(n){var s=new t.FileDrop(o.extend({},u,{drop_zone:e}));s.onready=function(){var e=t.Runtime.getInfo(this.ruid);r.features.dragdrop=e.can("drag_and_drop"),i++,h.push(this),n()},s.ondrop=function(){r.addFile(this.files)},s.bind("error runtimeerror",function(){s=null,n()}),s.init()})}),t.inSeries(s,function(){typeof n=="function"&&n(i)})}function T(e,n,r){var i=new t.Image;try{i.onload=function(){i.downsize(n.width,n.height,n.crop,n.preserve_headers)},i.onresize=function(){r(this.getAsBlob(e.type,n.quality)),this.destroy()},i.onerror=function(){r(e)},i.load(e)}catch(s){r(e)}}function N(e,n,r){function f(e,t,n){var r=a[e];switch(e){case"max_file_size":e==="max_file_size"&&(a.max_file_size=a.filters.max_file_size=t);break;case"chunk_size":if(t=o.parseSize(t))a[e]=t;break;case"filters":o.typeOf(t)==="array"&&(t={mime_types:t}),n?o.extend(a.filters,t):a.filters=t,t.mime_types&&(a.filters.mime_types.regexp=function(e){var t=[];return o.each(e,function(e){o.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?t.push("\\.*"):t.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+t.join("|")+")$","i")}(a.filters.mime_types));break;case"resize":n?o.extend(a.resize,t,{enabled:!0}):a.resize=t;break;case"prevent_duplicates":a.prevent_duplicates=a.filters.prevent_duplicates=!!t;break;case"browse_button":case"drop_element":t=o.get(t);case"container":case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":a[e]=t,n||(u=!0);break;default:a[e]=t}n||i.trigger("OptionChanged",e,t,r)}var i=this,u=!1;typeof e=="object"?o.each(e,function(e,t){f(t,e,r)}):f(e,n,r),r?(a.required_features=s(o.extend({},a)),l=s(o.extend({},a,{required_features:!0}))):u&&(i.trigger("Destroy"),x.call(i,a,function(e){e?(i.runtime=t.Runtime.getInfo(w()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})}))}function C(e,t){[].push.apply(f,t),e.trigger("QueueChanged"),e.refresh()}function k(e,t){if(a.unique_names){var n=t.name.match(/\.([^.]+)$/),r="part";n&&(r=n[1]),t.target_name=t.id+"."+r}}function L(e,n){function h(){u-->0?r(p,1e3):(n.loaded=f,e.trigger("Error",{code:o.HTTP_ERROR,message:o.translate("HTTP Error."),file:n,response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()}))}function p(){var d,v,g,y;if(n.status==o.DONE||n.status==o.FAILED||e.state==o.STOPPED)return;g={name:n.target_name||n.name},s&&a.chunks&&c.size>s?(y=Math.min(s,c.size-f),d=c.slice(f,f+y)):(y=c.size,d=c),s&&a.chunks&&(e.settings.send_chunk_number?(g.chunk=Math.ceil(f/s),g.chunks=Math.ceil(c.size/s)):(g.offset=f,g.total=c.size)),m=new t.XMLHttpRequest,m.upload&&(m.upload.onprogress=function(t){n.loaded=Math.min(n.size,f+t.loaded),e.trigger("UploadProgress",n)}),m.onload=function(){if(m.status>=400){h();return}u=e.settings.max_retries,y<c.size?(d.destroy(),f+=y,n.loaded=Math.min(f,c.size),e.trigger("ChunkUploaded",n,{offset:n.loaded,total:c.size,response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()}),t.Env.browser==="Android Browser"&&e.trigger("UploadProgress",n)):n.loaded=n.size,d=v=null,!f||f>=c.size?(n.size!=n.origSize&&(c.destroy(),c=null),e.trigger("UploadProgress",n),n.status=o.DONE,e.trigger("FileUploaded",n,{response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()})):r(p,1)},m.onerror=function(){h()},m.onloadend=function(){this.destroy(),m=null},e.settings.multipart&&a.multipart?(g.name=n.target_name||n.name,m.open("post",i,!0),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),v=new t.FormData,o.each(o.extend(g,e.settings.multipart_params),function(e,t){v.append(t,e)}),v.append(e.settings.file_data_name,d),m.send(v,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url})):(i=o.buildUrl(e.settings.url,o.extend(g,e.settings.multipart_params)),m.open("post",i,!0),m.setRequestHeader("Content-Type","application/octet-stream"),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),m.send(d,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url}))}var i=e.settings.url,s=e.settings.chunk_size,u=e.settings.max_retries,a=e.features,f=0,c;n.loaded&&(f=n.loaded=s*Math.floor(n.loaded/s)),c=n.getSource(),e.settings.resize.enabled&&E(c,"send_binary_string")&&!!~t.inArray(c.type,["image/jpeg","image/png"])?T.call(this,c,e.settings.resize,function(e){c=e,n.size=e.size,p()}):p()}function A(e,t){y(t)}function O(e){if(e.state==o.STARTED)p=+(new Date);else if(e.state==o.STOPPED)for(var t=e.files.length-1;t>=0;t--)e.files[t].status==o.UPLOADING&&(e.files[t].status=o.QUEUED,b())}function M(){m&&m.abort()}function _(e){b(),r(function(){g.call(e)},1)}function D(e,t){t.file&&(t.file.status=o.FAILED,y(t.file),e.state==o.STARTED&&(e.trigger("CancelUpload"),r(function(){g.call(e)},1)))}function P(e){e.stop(),o.each(f,function(e){e.destroy()}),f=[],c.length&&(o.each(c,function(e){e.destroy()}),c=[]),h.length&&(o.each(h,function(e){e.destroy()}),h=[]),l={},v=!1,p=m=null,d.reset()}var u=o.guid(),a,f=[],l={},c=[],h=[],p,d,v=!1,m;a={runtimes:t.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_chunk_number:!0},N.call(this,e,null,!0),d=new o.QueueProgress,o.extend(this,{id:u,uid:u,state:o.STOPPED,features:{},runtime:null,files:f,settings:a,total:d,init:function(){var e=this;typeof a.preinit=="function"?a.preinit(e):o.each(a.preinit,function(t,n){e.bind(n,t)});if(!a.browse_button||!a.url){this.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")});return}S.call(this),x.call(this,a,function(n){typeof a.init=="function"?a.init(e):o.each(a.init,function(t,n){e.bind(n,t)}),n?(e.runtime=t.Runtime.getInfo(w()).type,e.trigger("Init",{runtime:e.runtime}),e.trigger("PostInit")):e.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})})},setOption:function(e,t){N.call(this,e,t,!this.runtime)},getOption:function(e){return e?a[e]:a},refresh:function(){c.length&&o.each(c,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=o.STARTED&&(this.state=o.STARTED,this.trigger("StateChanged"),g.call(this))},stop:function(){this.state!=o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){v=arguments[0]!==n?arguments[0]:!0,c.length&&o.each(c,function(e){e.disable(v)}),this.trigger("DisableBrowse",v)},getFile:function(e){var t;for(t=f.length-1;t>=0;t--)if(f[t].id===e)return f[t]},addFile:function(e,n){function l(e,n){var r=[];t.each(s.settings.filters,function(t,n){i[n]&&r.push(function(r){i[n].call(s,t,e,function(e){r(!e)})})}),t.inSeries(r,n)}function c(e){var i=t.typeOf(e);if(e instanceof t.File){if(!e.ruid&&!e.isDetached()){if(!f)return!1;e.ruid=f,e.connectRuntime(f)}c(new o.File(e))}else e instanceof t.Blob?(c(e.getSource()),e.destroy()):e instanceof o.File?(n&&(e.name=n),u.push(function(t){l(e,function(n){n||(a.push(e),s.trigger("FileFiltered",e)),r(t,1)})})):t.inArray(i,["file","blob"])!==-1?c(new t.File(null,e)):i==="node"&&t.typeOf(e.files)==="filelist"?t.each(e.files,c):i==="array"&&(n=null,t.each(e,c))}var s=this,u=[],a=[],f;f=w(),c(e),u.length&&t.inSeries(u,function(){a.length&&s.trigger("FilesAdded",a)})},removeFile:function(e){var t=typeof e=="string"?e:e.id;for(var n=f.length-1;n>=0;n--)if(f[n].id===t)return this.splice(n,1)[0]},splice:function(e,t){var r=f.splice(e===n?0:e,t===n?f.length:t),i=!1;return this.state==o.STARTED&&(i=!0,this.stop()),this.trigger("FilesRemoved",r),o.each(r,function(e){e.destroy()}),this.trigger("QueueChanged"),this.refresh(),i&&this.start(),r},bind:function(e,t,n){var r=this;o.Uploader.prototype.bind.call(this,e,function(){var e=[].slice.call(arguments);return e.splice(0,1,r),t.apply(this,e)},0,n)},destroy:function(){this.trigger("Destroy"),a=d=null,this.unbindAll()}})},o.Uploader.prototype=t.EventTarget.instance,o.File=function(){function n(n){o.extend(this,{id:o.guid(),name:n.name||n.fileName,type:n.type||"",size:n.size||n.fileSize,origSize:n.size||n.fileSize,loaded:0,percent:0,status:o.QUEUED,lastModifiedDate:n.lastModifiedDate||(new Date).toLocaleString(),getNative:function(){var e=this.getSource().getSource();return t.inArray(t.typeOf(e),["blob","file"])!==-1?e:null},getSource:function(){return e[this.id]?e[this.id]:null},destroy:function(){var t=this.getSource();t&&(t.destroy(),delete e[this.id])}}),e[this.id]=n}var e={};return n}(),o.QueueProgress=function(){var e=this;e.size=0,e.loaded=0,e.uploaded=0,e.failed=0,e.queued=0,e.percent=0,e.bytesPerSec=0,e.reset=function(){e.size=e.loaded=e.uploaded=e.failed=e.queued=e.percent=e.bytesPerSec=0}},e.plupload=o})(window,mOxie); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php index 669b191c06c5c36645a201e8971a775a33604588..7501cef2ea4d216c07d084efa70b31b5bb3ae966 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php @@ -1,9 +1,9 @@ -<p>Select a folder to import. The folder name will be used as the title of the gallery.</p> +<p><?php _e('Select a folder to import. The folder name will be used as the title of the gallery.', 'nggallery'); ?></p> <div id="file_browser"> </div> <p> <input type="checkbox" id="import_keep_location" name="keep_location" value="on" /> <label for="import_keep_location"> <?php esc_html_e('Keep images in original location.', 'nggallery'); ?> <span style="font-size: 85%"><?php esc_html_e('Caution: If you keep images in the original folder and later delete the gallery, the images in that folder might be deleted depending on your settings.', 'nggallery'); ?></span></label><br/><br/> - <input type="button" id="import_button" name="import_folder" value="Import Folder" class="button-primary"/> + <input type="button" id="import_button" name="import_folder" value="<?php _e('Import Folder', 'nggallery'); ?>" class="button-primary"/> </p> <script type="text/javascript"> var selected_folder = null; @@ -36,9 +36,9 @@ // Show progress bar var progress_bar = $.nggProgressBar({ - title: "Importing gallery", + title: '<?php _e("Importing gallery", 'nggallery'); ?>', infinite: true, - starting_value: 'In Progress...' + starting_value: '<?php _e('In Progress...', 'nggallery'); ?>' }); // Start importing process @@ -50,13 +50,13 @@ $.post(photocrati_ajax.url, post_params, function(response){ if (typeof(response) != 'object') response = JSON.parse(response); if (typeof(response.error) == 'string') { - progress_bar.set("Error occurred"); - alert(response.error); + progress_bar.set(response.error); } else { - progress_bar.set('Done! Successfully imported '+response.image_ids.length+' images.'); + var message = "<?php __('Done! Successfully imported %s images', 'nggallery'); ?>"; + progress_bar.set(message.replace('%s', response.image_ids.length)); } - progress_bar.close(); + progress_bar.close(2000); }); }) }); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php index b3688469ab0fa4a223bb8f522bfebf0b20c49419..a169ea5e8f6422df4566c8e5af7e28f7030df5a9 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php @@ -1,7 +1,7 @@ <div id="gallery_selection"> - <label for="gallery_id">Gallery</label> + <label for="gallery_id"><?php _e('Gallery', 'nggallery'); ?></label> <select id="gallery_id"> - <option value="0">Create a new gallery</option> + <option value="0"><?php _e('Create a new gallery', 'nggallery'); ?></option> <?php foreach ($galleries as $gallery): ?> <option value="<?php echo esc_attr($gallery->{$gallery->id_field}) ?>"><?php echo esc_attr($gallery->title) ?></option> <?php endforeach ?> @@ -10,21 +10,18 @@ </div> <div id="uploader"> - <p>You browser doesn't have Flash, Silverlight, HTML5, or HTML4 support.</p> + <p><?php _e("You browser doesn't have Flash, Silverlight, HTML5, or HTML4 support.", 'nggallery'); ?></p> </div> <script type="text/javascript"> + // Listen for events emitted in other frames + if (window.Frame_Event_Publisher) { + + // If a gallery has been deleted, remove it from the drop-downs of available galleries + Frame_Event_Publisher.listen_for('attach_to_post:manage_galleries', function() { + window.location.href = window.location.href; + }); + } (function($){ - - // Listen for events emitted in other frames - if (window.Frame_Event_Publisher) { - - // If a gallery has been deleted, remove it from the drop-downs of available galleries - Frame_Event_Publisher.listen_for('attach_to_post:manage_galleries', function() { - window.location.href = window.location.href; - }); - } - - $(function(){ // Show the page content $('#ngg_page_content').css('visibility', 'visible'); @@ -99,7 +96,7 @@ }); // Change the text for the dragdrop - $('.plupload_droptext').html("Drag image and ZIP files here or click <strong>Add Files</strong>"); + $('.plupload_droptext').html("<?php _e('Drag image and ZIP files here or click <strong>Add Files</strong>', 'nggallery'); ?>"); // Move the buttons var buttons = $('.plupload_buttons').detach(); @@ -149,21 +146,32 @@ // Determine appropriate message to display var upload_count = window.uploaded_image_ids.length; - var msg = upload_count + " images were uploaded successfully"; + var msg = "<?php _e('%s images were uploaded successfully', 'nggallery'); ?>"; + msg = msg.replace('%s', upload_count); if (upload_count == 1) { - msg = "1 image was uploaded successfully"; + msg = "<?php _e('1 image was uploaded successfully', 'nggallery'); ?>"; } else if (upload_count == 0) { - msg = "0 images were uploaded"; + msg = "<?php _e('0 images were uploaded', 'nggallery'); ?>"; } // Display message/notification if (up.state == plupload.STOPPED) { - $.gritter.add({ - title: "Upload complete", - text: msg, - sticky: true - }); + if (typeof(up.error_msg) != 'undefined') { + $.gritter.add({ + title: up.error_msg, + text: msg, + sticky: true + }); + } + else { + $.gritter.add({ + title: '<?php _e("Upload complete", 'nggallery'); ?>', + text: msg, + sticky: true + }); + } + setTimeout(function(){ reinit_plupload(up); }, 3000); @@ -180,40 +188,61 @@ catch (ex) { up.trigger('Error', { code: plupload.IO_ERROR, - msg: "An unexpected error occured. This is most likely due to a server misconfiguration. Check your PHP error log or ask your hosting provider for assistance.", + msg: "<?php _e("An unexpected error occured. This is most likely due to a server misconfiguration. Check your PHP error log or ask your hosting provider for assistance.", 'nggallery'); ?>", details: response.replace(/<.*>/, '').trim(), file: file }); return; } } - window.uploaded_image_ids = window.uploaded_image_ids.concat(response.image_ids); - up.settings.url = window.set_plupload_url(response.gallery_id, $gallery_name.val()); - - // If we created a new gallery, ensure it's now in the drop-down list, and select it - if ($gallery_id.find('option[value="'+response.gallery_id+'"]').length == 0) { - var option = $('<option/>').attr('value', response.gallery_id).text(response.gallery_name); - $gallery_id.append(option); - $gallery_id.val(response.gallery_id); - option.attr('selected', 'selected'); - } - - // our Frame-Event-Publisher hooks onto the jQuery ajaxComplete action which plupload - // of course does not honor. Tie them together here.. - if (window.Frame_Event_Publisher) { - $.post(photocrati_ajax.url, {'action': 'cookie_dump'}, function(){ - window.Frame_Event_Publisher.find_parent(window).broadcast(); + if(typeof(response.error) != 'undefined') { + up.trigger('Error', { + code: plupload.IO_ERROR, + msg: response.error, + details: response, + file: file }); - } + } + else { + window.uploaded_image_ids = window.uploaded_image_ids.concat(response.image_ids); + up.settings.url = window.set_plupload_url(response.gallery_id, $gallery_name.val()); + + // If we created a new gallery, ensure it's now in the drop-down list, and select it + if ($gallery_id.find('option[value="'+response.gallery_id+'"]').length == 0) { + var option = $('<option/>').attr('value', response.gallery_id).html(response.gallery_name); + $gallery_id.append(option); + $gallery_id.val(response.gallery_id); + option.attr('selected', 'selected'); + } + + // our Frame-Event-Publisher hooks onto the jQuery ajaxComplete action which plupload + // of course does not honor. Tie them together here.. + if (window.Frame_Event_Publisher) { + $.post(photocrati_ajax.url, {'action': 'cookie_dump'}, function(response){ + if (typeof(response) != 'object') response = JSON.parse(response); + var events = {}; + for (var name in response.cookies) { + if (name.indexOf('X-Frame-Events') !== -1) { + var event_data = JSON.parse(response.cookies[name]); + events[name] = event_data; + } + } + window.Frame_Event_Publisher.broadcast(events) + }); + } + } }, Error: function(up, args){ - if (typeof(window.console) != 'undefined') console.log(args); + if (typeof(up.error_msg) == 'undefined') { + up.error_msg = args.msg; + }{} } }; $("#uploader").pluploadQueue(plupload_options); var uploader = $('#uploader').pluploadQueue(); uploader.refresh(); + window.Frame_Event_Publisher.broadcast(); }; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/adapter.nextgen_admin_default_pages.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/adapter.nextgen_admin_default_pages.php index 8ff7f1ddfbc2d0a9ea75822c6c5a77f8a8a8dda9..136c9c88726b98325f55dc16c18d0e2556838795 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/adapter.nextgen_admin_default_pages.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/adapter.nextgen_admin_default_pages.php @@ -4,8 +4,10 @@ class A_NextGen_Admin_Default_Pages extends Mixin { function initialize() { - $this->object->add( - NEXTGEN_FS_ACCESS_SLUG, 'A_Fs_Access_Page', NGGFOLDER, FALSE - ); + $this->object->add(NGG_FS_ACCESS_SLUG, array( + 'adapter' => 'A_Fs_Access_Page', + 'parent' => NGGFOLDER, + 'add_menu' => FALSE + )); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.form.php index 9c982689bdc9751a77ee7519d9ef6274c1710133..e9eedc937716ecce0452375fe2459af5234c0c7a 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.form.php @@ -3,6 +3,7 @@ class C_Form extends C_MVC_Controller { static $_instances = array(); + var $page = NULL; /** * Gets an instance of a form @@ -66,7 +67,8 @@ class Mixin_Form_Instance_Methods extends Mixin */ function save_action($attributes=array()) { - if ($this->object->has_method('get_model')) { + if (!$attributes) $attributes = array(); + if ($this->object->has_method('get_model') && $this->object->get_model()) { return $this->object->get_model()->save($attributes); } else return TRUE; @@ -94,6 +96,11 @@ class Mixin_Form_Instance_Methods extends Mixin TRUE ); } + + function get_model() + { + return $this->page->has_method('get_model') ? $this->page->get_model() : NULL; + } } /** @@ -108,7 +115,7 @@ class Mixin_Form_Field_Generators extends Mixin array( 'display_type_name' => $display_type->name, 'name' => $name, - 'label' => _($label), + 'label' => $label, 'options' => $options, 'value' => $value, 'text' => $text, @@ -125,7 +132,7 @@ class Mixin_Form_Field_Generators extends Mixin array( 'display_type_name' => $display_type->name, 'name' => $name, - 'label' => _($label), + 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden @@ -149,7 +156,7 @@ class Mixin_Form_Field_Generators extends Mixin array( 'display_type_name' => $display_type->name, 'name' => $name, - 'label' => _($label), + 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden, @@ -168,7 +175,7 @@ class Mixin_Form_Field_Generators extends Mixin array( 'display_type_name' => $display_type->name, 'name' => $name, - 'label' => _($label), + 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden, @@ -185,7 +192,7 @@ class Mixin_Form_Field_Generators extends Mixin array( 'display_type_name' => $display_type->name, 'name' => $name, - 'label' => _($label), + 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden, @@ -202,7 +209,7 @@ class Mixin_Form_Field_Generators extends Mixin array( 'display_type_name' => $display_type->name, 'name' => $name, - 'label' => _($label), + 'label' => $label, 'value' => $value, 'text' => $text, 'hidden' => $hidden @@ -216,19 +223,21 @@ class Mixin_Form_Field_Generators extends Mixin return $this->object->_render_radio_field( $display_type, 'ajax_pagination', - _('Enable AJAX pagination'), + __('Enable AJAX pagination', 'nggallery'), isset($display_type->settings['ajax_pagination']) ? $display_type->settings['ajax_pagination'] : FALSE ); } function _render_thumbnail_override_settings_field($display_type) { + $hidden = !(isset($display_type->settings['override_thumbnail_settings']) ? $display_type->settings['override_thumbnail_settings'] : FALSE); + $override_field = $this->_render_radio_field( $display_type, 'override_thumbnail_settings', - 'Override thumbnail settings', - $display_type->settings['override_thumbnail_settings'], - "This does not affect existing thumbnails; overriding the thumbnail settings will create an additional set of thumbnails. To change the size of existing thumbnails please visit 'Manage Galleries' and choose 'Create new thumbnails' for all images in the gallery." + __('Override thumbnail settings', 'nggallery'), + isset($display_type->settings['override_thumbnail_settings']) ? $display_type->settings['override_thumbnail_settings'] : FALSE, + __("This does not affect existing thumbnails; overriding the thumbnail settings will create an additional set of thumbnails. To change the size of existing thumbnails please visit 'Manage Galleries' and choose 'Create new thumbnails' for all images in the gallery.", 'nggallery') ); $dimensions_field = $this->object->render_partial( @@ -236,46 +245,50 @@ class Mixin_Form_Field_Generators extends Mixin array( 'display_type_name' => $display_type->name, 'name' => 'thumbnail_dimensions', - 'label'=> _('Thumbnail dimensions'), - 'thumbnail_width' => $display_type->settings['thumbnail_width'], - 'thumbnail_height'=> $display_type->settings['thumbnail_height'], - 'hidden' => empty($display_type->settings['override_thumbnail_settings']) ? 'hidden' : '', + 'label'=> __('Thumbnail dimensions', 'nggallery'), + 'thumbnail_width' => isset($display_type->settings['thumbnail_width']) ? $display_type->settings['thumbnail_width'] : 0, + 'thumbnail_height'=> isset($display_type->settings['thumbnail_height']) ? $display_type->settings['thumbnail_height'] : 0, + 'hidden' => $hidden ? 'hidden' : '', 'text' => '' ), TRUE ); + /* $qualities = array(); for ($i = 100; $i > 40; $i -= 5) { $qualities[$i] = "{$i}%"; } $quality_field = $this->_render_select_field( $display_type, 'thumbnail_quality', - 'Thumbnail quality', + __('Thumbnail quality', 'nggallery'), $qualities, - $display_type->settings['thumbnail_quality'], + isset($display_type->settings['thumbnail_quality']) ? $display_type->settings['thumbnail_quality'] : 100, '', - empty($display_type->settings['override_thumbnail_settings']) ? TRUE : FALSE + $hidden ); + */ $crop_field = $this->_render_radio_field( $display_type, 'thumbnail_crop', - 'Thumbnail crop', - $display_type->settings['thumbnail_crop'], + __('Thumbnail crop', 'nggallery'), + isset($display_type->settings['thumbnail_crop']) ? $display_type->settings['thumbnail_crop'] : FALSE, '', - empty($display_type->settings['override_thumbnail_settings']) ? TRUE : FALSE + $hidden ); + /* $watermark_field = $this->_render_radio_field( $display_type, 'thumbnail_watermark', - 'Thumbnail watermark', - $display_type->settings['thumbnail_watermark'], + __('Thumbnail watermark', 'nggallery'), + isset($display_type->settings['thumbnail_watermark']) ? $display_type->settings['thumbnail_watermark'] : FALSE, '', - empty($display_type->settings['override_thumbnail_settings']) ? TRUE : FALSE + $hidden ); + */ - $everything = $override_field . $dimensions_field . $quality_field . $crop_field . $watermark_field; + $everything = $override_field . $dimensions_field . $crop_field; return $everything; } @@ -289,12 +302,14 @@ class Mixin_Form_Field_Generators extends Mixin */ function _render_image_override_settings_field($display_type) { + $hidden = !(isset($display_type->settings['override_image_settings']) ? $display_type->settings['override_image_settings'] : FALSE); + $override_field = $this->_render_radio_field( $display_type, 'override_image_settings', - 'Override image settings', - $display_type->settings['override_image_settings'], - 'Overriding the image settings will create an additional set of images' + __('Override image settings', 'nggallery'), + isset($display_type->settings['override_image_settings']) ? $display_type->settings['override_image_settings'] : 0, + __('Overriding the image settings will create an additional set of images', 'nggallery') ); $qualities = array(); @@ -302,29 +317,29 @@ class Mixin_Form_Field_Generators extends Mixin $quality_field = $this->_render_select_field( $display_type, 'image_quality', - 'Image quality', + __('Image quality', 'nggallery'), $qualities, $display_type->settings['image_quality'], '', - empty($display_type->settings['override_image_settings']) ? TRUE : FALSE + $hidden ); $crop_field = $this->_render_radio_field( $display_type, 'image_crop', - 'Image crop', + __('Image crop', 'nggallery'), $display_type->settings['image_crop'], '', - empty($display_type->settings['override_image_settings']) ? TRUE : FALSE + $hidden ); $watermark_field = $this->_render_radio_field( $display_type, 'image_watermark', - 'Image watermark', + __('Image watermark', 'nggallery'), $display_type->settings['image_watermark'], '', - empty($display_type->settings['override_image_settings']) ? TRUE : FALSE + $hidden ); $everything = $override_field . $quality_field . $crop_field . $watermark_field; @@ -345,13 +360,13 @@ class Mixin_Form_Field_Generators extends Mixin array( 'display_type_name' => $display_type->name, 'name' => 'width', - 'label' => 'Gallery width', + 'label' => __('Gallery width', 'nggallery'), 'value' => $display_type->settings['width'], - 'text' => 'An empty or "0" setting will make the gallery full width', - 'placeholder' => '(optional)', + 'text' => __('An empty or 0 setting will make the gallery full width', 'nggallery'), + 'placeholder' => __('(optional)', 'nggallery'), 'unit_name' => 'width_unit', 'unit_value' => $display_type->settings['width_unit'], - 'options' => array('px' => 'Pixels', '%' => 'Percent') + 'options' => array('px' => __('Pixels', 'nggallery'), '%' => __('Percent', 'nggallery')) ), TRUE ); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_installer.php index 3e2d71aeec0930c62139dbc7d8a5584e197cffb7..68a8473e037d27451215b5221109e62fd415872e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_installer.php @@ -8,13 +8,22 @@ class C_NextGen_Admin_Installer // were statically set rather than dynamically using a handler. Therefore, we need // to delete those static values $module_name = 'photocrati-nextgen_admin'; - $settings = C_NextGen_Settings::get_instance(); - $modules = $settings->pope_module_list; + $modules = get_option('pope_module_list', array()); + if (!$modules) { + $settings = C_NextGen_Settings::get_instance(); + $modules = $settings->get('pope_module_list', array()); + } + $cleanup = FALSE; - if (!isset($modules[$module_name])) $cleanup = FALSE; - elseif (floatval(str_replace($module_name, '|', $modules[$module_name])) < '0.3') { - $cleanup = TRUE; - } + foreach ($modules as $module) { + if (strpos($module, $module_name) !== FALSE) { + if (version_compare(array_pop(explode('|', $module)), '0.3') == -1) { + $cleanup = TRUE; + } + break; + } + } + if ($cleanup) { $keys = array( 'jquery_ui_theme', diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_option_handler.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_option_handler.php index dfa8a6ad8d5af97837d7632c98d6f80fde10d06e..b60fbd9e4e780d7f61e7786ea4097a14b8c2f25b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_option_handler.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_option_handler.php @@ -20,7 +20,7 @@ class C_NextGen_Admin_Option_Handler $retval = '1.8'; break; case 'jquery_ui_theme_url': - $retval = $this->get_router()->get_static_url('photocrati-nextgen_admin#jquery-ui/jquery-ui-1.9.1.custom.css'); + $retval = $this->get_router()->get_static_url('photocrati-nextgen_admin#jquery-ui/jquery-ui-1.10.4.custom.css'); break; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php index aafc5584857bfff824aa44765959286160d2d3a1..7a94594c1e2cc31afdb9db058c7fc7396f428b78 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php @@ -82,6 +82,8 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin */ function enqueue_backend_resources() { + $atp = $this->object->get_registry()->get_utility('I_Attach_To_Post_Controller'); + wp_enqueue_script('jquery'); $this->object->enqueue_jquery_ui_theme(); wp_enqueue_script('jquery-ui-accordion'); @@ -95,10 +97,10 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin wp_register_script('iris', $this->get_router()->get_url('/wp-admin/js/iris.min.js', FALSE, TRUE), array('jquery-ui-draggable', 'jquery-ui-slider', 'jquery-touch-punch')); wp_register_script('wp-color-picker', $this->get_router()->get_url('/wp-admin/js/color-picker.js', FALSE, TRUE), array('iris')); wp_localize_script('wp-color-picker', 'wpColorPickerL10n', array( - 'clear' => __( 'Clear' ), - 'defaultString' => __( 'Default' ), - 'pick' => __( 'Select Color' ), - 'current' => __( 'Current Color' ), + 'clear' => __('Clear', 'nggallery'), + 'defaultString' => __('Default', 'nggallery'), + 'pick' => __('Select Color', 'nggallery'), + 'current' => __('Current Color', 'nggallery'), )); wp_enqueue_script( 'nextgen_admin_page', @@ -114,6 +116,15 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin // Ensure select2 wp_enqueue_style('select2'); wp_enqueue_script('select2'); + + if ($atp != null) { + $atp->mark_script('jquery-ui-accordion'); + $atp->mark_script('nextgen_display_settings_page_placeholder_stub'); + $atp->mark_script('iris'); + $atp->mark_script('wp-color-picker'); + $atp->mark_script('nextgen_admin_page'); + $atp->mark_script('select2'); + } } function enqueue_jquery_ui_theme() @@ -160,10 +171,9 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin function get_success_message() { - return "Saved successfully"; + return __("Saved successfully", 'nggallery'); } - /** * Returns an accordion tab, encapsulating the form * @param I_Form $form @@ -230,13 +240,22 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin // request $tabs = array(); $errors = array(); - $success = $this->object->is_post_request() ? - $this->object->get_success_message() : ''; + $action = $this->object->_get_action(); + $success = $this->param('message'); + if ($success) $success = $this->object->get_success_message(); + else $success = $this->object->is_post_request() ? + $this->object->get_success_message() : ''; + + // First, process the Post request + if ($this->object->is_post_request() && $this->has_method($action)) { + $this->object->$action($this->object->param($this->context)); + } + // Display and process all forms foreach ($this->object->get_forms() as $form) { + $form->page = $this->object; $form->enqueue_static_resources(); if ($this->object->is_post_request()) { - $action = $this->object->_get_action(); if ($form->has_method($action)) { $form->$action($this->object->param($form->context)); } @@ -261,7 +280,8 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin 'errors' => $errors, 'success' => $success, 'form_header' => $token->get_form_html(), - 'show_save_button' => $this->object->show_save_button() + 'show_save_button' => $this->object->show_save_button(), + 'model' => $this->object->has_method('get_model') ? $this->get_model() : NULL )); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.page_manager.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.page_manager.php index c7b2727cc095b9ea566430484b185c717875b92d..cd71d025d08af1507cf4f3d10179e064cddfb4af 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.page_manager.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/class.page_manager.php @@ -33,14 +33,15 @@ class C_Page_Manager extends C_Component class Mixin_Page_Manager extends Mixin { - function add($slug, $adapter, $parent=NULL, $add_menu=TRUE, $before = NULL) + function add($slug, $properties=array()) { - $this->object->_pages[$slug] = array( - 'adapter' => $adapter, - 'parent' => $parent, - 'add_menu' => $add_menu, - 'before' => $before - ); + if (!isset($properties['adapter'])) $properties['adapter'] = NULL; + if (!isset($properties['parent'])) $properties['parent'] = NULL; + if (!isset($properties['add_menu']))$properties['add_menu'] = TRUE; + if (!isset($properties['before'])) $properties['before'] = NULL; + if (!isset($properties['url'])) $properties['url'] = NULL; + + $this->object->_pages[$slug] = $properties; } function move_page($slug, $other_slug, $after = false) @@ -70,7 +71,7 @@ class Mixin_Page_Manager extends Mixin } } - function remove_page($slug) + function remove($slug) { unset($this->object->_pages[$slug]); } @@ -85,23 +86,56 @@ class Mixin_Page_Manager extends Mixin $registry = $this->get_registry(); $controllers = array(); foreach ($this->object->_pages as $slug => $properties) { - $registry->add_adapter( - 'I_NextGen_Admin_Page', - $properties['adapter'], - $slug - ); - $controllers[$slug] = $registry->get_utility( - 'I_NextGen_Admin_Page', - $slug - ); + + $page_title = "Unnamed Page"; + $menu_title = "Unnamed Page"; + $permission = NULL; + $callback = NULL; + + // There's two type of pages we can have. Some are powered by our controllers, and others + // are powered by WordPress, such as a custom post type page. + + // Is this powered by a controller? If so, we expect an adapter + if ($properties['adapter']) { + + // Register the adapter and instantiate the controller + $registry->add_adapter( + 'I_NextGen_Admin_Page', + $properties['adapter'], + $slug + ); + $controllers[$slug] = $registry->get_utility( + 'I_NextGen_Admin_Page', + $slug + ); + + $menu_title = $controllers[$slug]->get_page_heading(); + $page_title = $controllers[$slug]->get_page_title(); + $permission = $controllers[$slug]->get_required_permission(); + $callback = array(&$controllers[$slug], 'index_action'); + } + + // Is this page powered by another url, such as one that WordPres provides? + elseif ($properties['url']) { + $slug = $properties['url']; + if (isset($properties['menu_title'])) { + $menu_title = $properties['menu_title']; + } + if (isset($properties['permission'])) { + $permission = $properties['permission']; + } + } + + // Are we to add a menu? if ($properties['add_menu']) { + add_submenu_page( $properties['parent'], - $controllers[$slug]->get_page_title(), - $controllers[$slug]->get_page_heading(), - $controllers[$slug]->get_required_permission(), + $page_title, + $menu_title, + $permission, $slug, - array(&$controllers[$slug], 'index_action') + $callback ); if ($properties['before']) { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php index 0a8f76fda3274c735384433894acabe56c20436d..cc4dd594ee60413170effd8197954afe4aa87710 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php @@ -6,7 +6,7 @@ } ***/ -define('NEXTGEN_FS_ACCESS_SLUG', 'ngg_fs_access'); +define('NGG_FS_ACCESS_SLUG', 'ngg_fs_access'); class M_NextGen_Admin extends C_Base_Module { @@ -19,7 +19,7 @@ class M_NextGen_Admin extends C_Base_Module 'photocrati-nextgen_admin', 'NextGEN Administration', 'Provides a framework for adding Administration pages', - '0.4', + '0.7', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -92,13 +92,12 @@ class M_NextGen_Admin extends C_Base_Module function _register_hooks() { // Register scripts - add_action('init', array(&$this, 'register_scripts')); + add_action('init', array(&$this, 'register_scripts'), 9); // Provides menu options for managing NextGEN Settings add_action('admin_menu', array(&$this, 'add_menu_pages'), 999); } - function register_scripts() { $router = $this->get_registry()->get_utility('I_Router'); @@ -108,9 +107,14 @@ class M_NextGen_Admin extends C_Base_Module wp_register_style('ngg_progressbar', $router->get_static_url('photocrati-nextgen_admin#ngg_progressbar.css'), array('gritter')); wp_register_style('select2', $router->get_static_url('photocrati-nextgen_admin#select2/select2.css')); wp_register_script('select2', $router->get_static_url('photocrati-nextgen_admin#select2/select2.modded.js')); + wp_register_script( + 'jquery.nextgen_radio_toggle', + $router->get_static_url('photocrati-nextgen_admin#jquery.nextgen_radio_toggle.js'), + array('jquery') + ); - $match = preg_quote("/wp-admin/post.php", "#"); - if (preg_match("#{$match}#", $_SERVER['REQUEST_URI'])) { + if (preg_match("#/wp-admin/post(-new)?.php#", $_SERVER['REQUEST_URI'])) + { wp_enqueue_script('ngg_progressbar'); wp_enqueue_style('ngg_progressbar'); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/gritter/images/gritter-long.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/gritter/images/gritter-long.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/gritter/images/gritter.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/gritter/images/gritter.png old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/animated-overlay.gif b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/animated-overlay.gif new file mode 100644 index 0000000000000000000000000000000000000000..d441f75ebfbdf26a265dfccd670120d25c0a341c Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/animated-overlay.gif differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_222_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_222_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..f335eba7f647054ef555c854a8581d8770214766 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_222_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_333_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_333_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d1556b6a24f8525f0c05bd01b3da2f6931a1e0 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_333_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_D54E21_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_D54E21_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..4866e3f9cdae3aa7ec3652c18163628ec745b625 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_D54E21_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png index 5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4..cd62886ba283e672e726b44e88c1ec460d572142 100644 Binary files a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_e1e1e1_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_e1e1e1_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..119590429a778a9e0cab691a1ccfb7bf6c4403fb Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_e1e1e1_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_f5f5f5_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_f5f5f5_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5dccbdd87ffd6222cac594c6a922ea93f27f9b83 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_f5f5f5_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_fff_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_fff_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..0162943d6348628bb711385666664108887048a2 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_0_fff_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_55_222_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_55_222_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7cac4130b22ebe267e51622e74377664c6a8b9 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_55_222_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_55_e1e1e1_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_55_e1e1e1_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..d343b9270b592bb0e01194662cba9f85d6981124 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_55_e1e1e1_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_65_0074A2_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_65_0074A2_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..3983bd97b33a06df43d6e3f25a9db6759d7978ae Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_65_0074A2_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_65_e1e1e1_40x100.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_65_e1e1e1_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..57499240cb63663b1cbb189413d4bfe4ed069152 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-bg_flat_65_e1e1e1_40x100.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_222_256x240.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_222_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..c1cb1170c8b3795835b8831ab81fa9ae63b606b1 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_222_256x240.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_2EA2CC_256x240.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_2EA2CC_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..51a43e7fe77802925150c054d137a9f4cbed0dfb Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_2EA2CC_256x240.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_cccccc_256x240.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_cccccc_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..4185f972f582f949e023162978c0148e84158572 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_cccccc_256x240.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_eee_256x240.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_eee_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..c26fe0c1f4e3c5a7dc586c43bdfa6b2982a4b5bb Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_eee_256x240.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_fff_256x240.png b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_fff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..4f624bb2b193750f1a5b36c8c307168c6681a861 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/images/ui-icons_fff_256x240.png differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.10.4.custom.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.10.4.custom.css new file mode 100644 index 0000000000000000000000000000000000000000..91b943bff2924cf1919cf49413f22d913eb749fe --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.10.4.custom.css @@ -0,0 +1,1271 @@ +/*! jQuery UI - v1.10.4 - 2014-02-04 + * * 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=%22Open%20Sans%22%2C%20sans-serif&fwDefault=normal&fsDefault=13px&cornerRadius=0&bgColorHeader=%23333&bgTextureHeader=flat&bgImgOpacityHeader=0&borderColorHeader=%23333&fcHeader=%23eee&iconColorHeader=%23eee&bgColorContent=%23fff&bgTextureContent=flat&bgImgOpacityContent=0&borderColorContent=%23eee&fcContent=%23333333&iconColorContent=%23cccccc&bgColorDefault=%23f5f5f5&bgTextureDefault=flat&bgImgOpacityDefault=0&borderColorDefault=%23dfdfdf&fcDefault=%23222&iconColorDefault=%23222&bgColorHover=%23e1e1e1&bgTextureHover=flat&bgImgOpacityHover=0&borderColorHover=%23dfdfdf&fcHover=%23222&iconColorHover=%23222&bgColorActive=%23e1e1e1&bgTextureActive=flat&bgImgOpacityActive=65&borderColorActive=%23dfdfdf&fcActive=%23222&iconColorActive=%23222&bgColorHighlight=%23e1e1e1&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=%23dfdfdf&fcHighlight=%23222&iconColorHighlight=%23222&bgColorError=%23D54E21&bgTextureError=flat&bgImgOpacityError=0&borderColorError=%23D54E21&fcError=%23eee&iconColorError=%23eee&bgColorOverlay=%23333&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=2px&offsetTopShadow=-2px&offsetLeftShadow=-2px&cornerRadiusShadow=2px + * * Copyright 2014 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, +.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 { + overflow: hidden; + 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: 20px; + 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 override default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertically center 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 .ui-tabs-anchor { + 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 .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + 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: "Open Sans", sans-serif; + font-size: 13px; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: "Open Sans", sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #eee; + background: #fff url(images/ui-bg_flat_0_fff_40x100.png) 50% 50% repeat-x; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-header { + border: 1px solid #333; + background: #333 url(images/ui-bg_flat_0_333_40x100.png) 50% 50% repeat-x; + color: #eee; + font-weight: bold; +} +.ui-widget-header a { + color: #eee; +} + +/* Interaction states + * ----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #dfdfdf; + background: #f5f5f5 url(images/ui-bg_flat_0_f5f5f5_40x100.png) 50% 50% repeat-x; + font-weight: normal; + color: #222; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #222; + 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 #dfdfdf; + background: #e1e1e1 url(images/ui-bg_flat_0_e1e1e1_40x100.png) 50% 50% repeat-x; + font-weight: normal; + color: #222; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #222; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #dfdfdf; + background: #e1e1e1 url(images/ui-bg_flat_65_e1e1e1_40x100.png) 50% 50% repeat-x; + font-weight: normal; + color: #222; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #222; + text-decoration: none; +} + +/* Interaction Cues + * ----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dfdfdf; + background: #e1e1e1 url(images/ui-bg_flat_55_e1e1e1_40x100.png) 50% 50% repeat-x; + color: #222; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #222; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #D54E21; + background: #D54E21 url(images/ui-bg_flat_0_D54E21_40x100.png) 50% 50% repeat-x; + color: #eee; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #eee; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #eee; +} +.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_cccccc_256x240.png); +} +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_eee_256x240.png); +} +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_222_256x240.png); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_222_256x240.png); +} +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_222_256x240.png); +} +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_222_256x240.png); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_eee_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: 0; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 0; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 0; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 0; +} + +/* Overlays */ +.ui-widget-overlay { + background: #333 url(images/ui-bg_flat_0_333_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); +} +.ui-widget-shadow { + margin: -2px 0 0 -2px; + padding: 2px; + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); + border-radius: 2px; +} + +/* Photocrati customization */ + +/* Tabs: remove background, change text color, and add :hover state */ +.ui-tabs-nav .ui-corner-top { + -khtml-border-top-left-radius: 4px; + -khtml-border-top-right-radius: 4px; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border: 1px solid #dfdfdf; +} + +.ngg_settings_template_wrapper .ui-combobox-input { + padding: 0px !important; +} + +.ui-tabs .ui-tabs-nav li { + background: white; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", sans-serif; + margin-bottom: -1px; + margin-right: .5em; +} + +.ui-tabs .ui-tabs-nav li a { + color: #aaa; + outline: none; + font-size: 120%; +} + +.ui-tabs .ui-tabs-nav li a:hover { + color: #d54e21; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + padding-bottom: -1px; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active a { + color: #464646; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { + border-top: 1px solid #8a8a8a; + border-right: 1px solid #8a8a8a; + border-left: 1px solid #8a8a8a; + border-bottom: 1px solid #ffffff; +} + +.ui-tabs-icon + ul.ui-tabs-nav { + -moz-border-radius-bottomleft: 0px; + -webkit-border-bottom-left-radius: 0px; + -khtml-border-bottom-left-radius: 0px; + border-bottom-left-radius: 0px; +} + +.ui-tabs-icon { + float: left; + background: url('images/nextgen-logo-small.jpg') no-repeat left center; + font-size: 18px; + font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', sans-serif; + width: 200px; + height: 40px; +} + +.ui-tabs-icon .nextgen_logo { + display: none; +} +.ui-tabs-icon .nextgen_logo_sub { + display: none; + font-size: 14px; +} + +/** Fix overlays in IE8 **/ +.ui-widget-overlay { + background: #000000 50% 50% repeat-x; + opacity: .4; + filter: Alpha(Opacity = 40); + filter: -\9; +} + +/* necessary w/WP 3.8s new admin design */ +.ui-widget select { + height: 2em; +} + +/* Necessary w/WP 3.9's new dialogs */ +.ui-autocomplete { + z-index: 250; +} \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.9.1.custom.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.9.1.custom.css index 6c2835b142b1077033a1747cf929fea2dd3b1df5..a999b71b13fd5ce97399d4508bda033a24abf775 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.9.1.custom.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery-ui/jquery-ui-1.9.1.custom.css @@ -1885,3 +1885,8 @@ body .ui-tooltip { filter: Alpha(Opacity = 40); filter: -\9; } + +/* necessary w/WP 3.8s new admin design */ +.ui-widget select { + height: 2em; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery.nextgen_radio_toggle.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery.nextgen_radio_toggle.js new file mode 100644 index 0000000000000000000000000000000000000000..bfbe721ba7d78149383b4eb48a55d3b2bdaa66ee --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/jquery.nextgen_radio_toggle.js @@ -0,0 +1,17 @@ +(function($) { + // invoke this on your radio-button set with: + // val: 0|1 - whether to activate on 'on' or 'off' + // target: a jquery selector - the thing to toggle + $.fn.nextgen_radio_toggle_tr = function(val, target) { + return this.each(function() { + var $this = $(this); + $this.bind('change', function() { + if ($this.val() == val) { + target.show('slow'); + } else { + target.hide('slow'); + } + }); + }); + } +})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.css index d3aa9163337d528f291d3a01f00dd494b10cfa44..e97a670f86c92d7757c051cf4b3738c4c858a895 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/static/nextgen_admin_page.css @@ -35,5 +35,20 @@ label.tooltip { background-image: url('information.png'); background-repeat: no-repeat; padding-left: 18px; - padding-bottom: 1px; + padding-bottom: 4px; +} + +#poststuff .ui-accordion h3 { + padding-left: 25px; +} + +#lightbox_effects_content table tr td:first-child { + vertical-align: top; + text-align: right; + padding-right: 7px; + padding-top: 5px; +} + +#lightbox_effects_content tr { + height: 28px; } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_color.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_color.php index 2d11be220b81c214c85f84d474415727952e0297..324d37817595483a39de3d44e7109a16f75be458 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_color.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_color.php @@ -11,7 +11,6 @@ id='<?php print esc_attr("{$display_type_name}_{$name}"); ?>' name='<?php print esc_attr("{$display_type_name}[{$name}]"); ?>' class='<?php print esc_attr("{$display_type_name}_{$name}"); ?> nextgen_settings_field_colorpicker' - value='<?php print esc_attr($value); ?>' - data-default-color='<?php print esc_attr($value); ?>'/> + value='<?php print esc_attr($value); ?>'/> </td> </tr> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_width_and_unit.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_width_and_unit.php index d712bb54a60d5deb9ac838307e1775aa23c44679..f0ba434b5454dd8b91ed436e5d63a8e2a6c56b83 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_width_and_unit.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/nextgen_settings_field_width_and_unit.php @@ -18,7 +18,7 @@ name="<?php print esc_attr("{$display_type_name}[{$unit_name}]"); ?>" class="<?php print esc_attr("{$display_type_name}_{$unit_name}"); ?> nextgen_settings_field_width_and_unit"> <?php foreach ($options as $key => $val) { ?> - <option value='<?php print $key; ?>' <?php selected($key, $unit_value); ?>><?php print _($val); ?></option> + <option value='<?php print $key; ?>' <?php selected($key, $unit_value); ?>><?php print $val; ?></option> <?php } ?> </select> </td> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/thumbnail_settings.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/thumbnail_settings.php index e73d1d8f180c45b754d136d57be5b204a53af73e..f6d4e9bbbe656a3c80bc9ca6e02689a697578397 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/thumbnail_settings.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/field_generator/thumbnail_settings.php @@ -16,7 +16,7 @@ $thumbnails_template_name = $display_type_name . '_thumbnail_dimensions'; $thumbnails_template_width_name = $display_type_name . '[thumbnail_width]'; $thumbnails_template_height_name = $display_type_name . '[thumbnail_height]'; - include(path_join(NGGALLERY_ABSPATH, implode(DIRECTORY_SEPARATOR, array('admin', 'thumbnails-template.php')))); + include(NGGALLERY_ABSPATH . implode(DIRECTORY_SEPARATOR, array('admin', 'thumbnails-template.php'))); ?> </td> </tr> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/nextgen_admin_page.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/nextgen_admin_page.php index b4bbbb69ead8452c2198d9c496095a6b1be4382a..bce34f19f383b5eae3793986f110add742e46b3f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/nextgen_admin_page.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_admin/templates/nextgen_admin_page.php @@ -10,7 +10,7 @@ <p><?php echo_h($success);?></p> </div> <?php endif ?> - <form method="POST" action="<?php echo esc_url($_SERVER['REQUEST_URI'])?>"> + <form method="POST" action="<?php echo nextgen_esc_url($_SERVER['REQUEST_URI'])?>"> <?php if (isset($form_header)): ?> <?php echo $form_header."\n"; ?> <?php endif ?> @@ -22,7 +22,7 @@ </div> <?php if ($show_save_button): ?> <p> - <input type="submit" name='action_proxy' value="Save" class="button-primary"/> + <input type="submit" name='action_proxy' value="<?php _e('Save', 'nggallery'); ?>" class="button-primary"/> </p> <?php endif ?> </form> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album.php index f6073f3a30944750215d25829ab9a44f78fbd3ff..6832ea49be142e7ee7fb5cec5382f9706664337d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album.php @@ -8,8 +8,8 @@ class A_NextGen_Basic_Album extends Mixin function initialize() { $ngglegacy_albums = array( - NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM, - NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM + NGG_BASIC_COMPACT_ALBUM, + NGG_BASIC_EXTENDED_ALBUM ); if (in_array($this->object->name, $ngglegacy_albums)) { $this->object->add_pre_hook( @@ -22,7 +22,7 @@ class A_NextGen_Basic_Album extends Mixin function get_order() { - return NEXTGEN_DISPLAY_PRIORITY_BASE + NEXTGEN_DISPLAY_PRIORITY_STEP; + return NGG_DISPLAY_PRIORITY_BASE + NGG_DISPLAY_PRIORITY_STEP; } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_controller.php index 205a8867b4aabe748e7e1cd40f15b81e56472aa4..44870334c78ba068f50df31336613684338d9185 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_controller.php @@ -27,19 +27,21 @@ class A_NextGen_Basic_Album_Controller extends Mixin // /nggallery/album--id/gallery--id // Are we to display a gallery? - if (($gallery = $this->param('gallery'))) + if (($gallery = $gallery_slug = $this->param('gallery'))) { // basic albums only support one per post if (isset($GLOBALS['nggShowGallery'])) return; $GLOBALS['nggShowGallery'] = TRUE; - if (!is_numeric($gallery)) - { - $mapper = $this->object->get_registry()->get_utility('I_Gallery_Mapper'); - $result = reset($mapper->select()->where(array('slug = %s', $gallery))->limit(1)->run_query()); - $gallery = $result->{$result->id_field}; - } + // Try finding the gallery by slug first. If nothing is found, we assume that + // the user passed in a gallery id instead + $mapper = $this->object->get_registry()->get_utility('I_Gallery_Mapper'); + $result = reset($mapper->select()->where(array('slug = %s', $gallery))->limit(1)->run_query()); + if ($result) { + $gallery = $result->{$result->id_field}; + } + $renderer = $this->object->get_registry()->get_utility('I_Displayed_Gallery_Renderer'); return $renderer->display_images( @@ -47,7 +49,8 @@ class A_NextGen_Basic_Album_Controller extends Mixin 'source' => 'galleries', 'container_ids' => array($gallery), 'display_type' => $display_settings['gallery_display_type'], - 'original_display_type' => $displayed_gallery->display_type + 'original_display_type' => $displayed_gallery->display_type, + 'original_settings' => $display_settings ), $return ); @@ -75,7 +78,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin $this->albums = $displayed_gallery->get_albums(); // None of the above: Display the main album. Get the settings required for display - $current_page = (int)$this->param('page', 1); + $current_page = (int)$this->param('nggpage', 1); $offset = $display_settings['galleries_per_page'] * ($current_page - 1); $entities = $displayed_gallery->get_included_entities($display_settings['galleries_per_page'], $offset); @@ -106,15 +109,16 @@ class A_NextGen_Basic_Album_Controller extends Mixin else { $params = $display_settings; $albums = $this->prepare_legacy_album_params($displayed_gallery->get_entity(), array('entities' => $entities));; + $params['image_gen_params'] = $albums['image_gen_params']; $params['galleries'] = $albums['galleries']; $params['displayed_gallery'] = $displayed_gallery; $params = $this->object->prepare_display_parameters($displayed_gallery, $params); switch ($displayed_gallery->display_type) { - case NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM: + case NGG_BASIC_COMPACT_ALBUM: $template = 'compact'; break; - case NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM: + case NGG_BASIC_EXTENDED_ALBUM: $template = 'extended'; break; } @@ -167,12 +171,15 @@ class A_NextGen_Basic_Album_Controller extends Mixin $image_gen_params = array( 'width' => $displayed_gallery->display_settings['thumbnail_width'], 'height' => $displayed_gallery->display_settings['thumbnail_height'], - 'quality' => $displayed_gallery->display_settings['thumbnail_quality'], - 'crop' => $displayed_gallery->display_settings['thumbnail_crop'], - 'watermark' => $displayed_gallery->display_settings['thumbnail_watermark'] + 'quality' => isset($displayed_gallery->display_settings['thumbnail_quality']) ? $displayed_gallery->display_settings['thumbnail_quality'] : 100, + 'crop' => isset($displayed_gallery->display_settings['thumbnail_crop']) ? $displayed_gallery->display_settings['thumbnail_crop'] : NULL, + 'watermark' => isset($displayed_gallery->display_settings['thumbnail_watermark']) ? $displayed_gallery->display_settings['thumbnail_watermark'] : NULL ); } + // so user templates can know how big the images are expected to be + $params['image_gen_params'] = $image_gen_params; + // Transform entities $params['galleries'] = $params['entities']; unset($params['entities']); @@ -185,7 +192,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin { if (($image = $image_mapper->find(intval($gallery->previewpic)))) { - $gallery->previewurl = $storage->get_image_url($image, $image_gen->get_size_name($image_gen_params)); + $gallery->previewurl = $storage->get_image_url($image, $image_gen->get_size_name($image_gen_params), TRUE); $gallery->previewname = $gallery->name; } } @@ -196,7 +203,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin if ($gallery->is_album) { if ($gallery->pageid > 0) - $gallery->pagelink = get_post_permalink($gallery->pageid); + $gallery->pagelink = @get_page_link($gallery->pageid); else { $gallery->pagelink = $this->object->set_param_for( $this->object->get_routed_url(TRUE), @@ -209,9 +216,10 @@ class A_NextGen_Basic_Album_Controller extends Mixin // Otherwise, if it's a gallery then it will look like // /nggallery/album--slug/gallery--slug else { - if ($gallery->pageid > 0) - $gallery->pagelink = get_post_permalink($gallery->pageid); - else { + if ($gallery->pageid > 0) { + $gallery->pagelink = @get_page_link($gallery->pageid); + } + if (empty($gallery->pagelink)) { $pagelink = $this->object->get_routed_url(TRUE); $parent_album = $this->object->get_parent_album_for($gallery->$id_field); if ($parent_album) { @@ -237,16 +245,13 @@ class A_NextGen_Basic_Album_Controller extends Mixin } } - // The router by default will generate param segments that look like, - // /gallery--foobar. We need to convert these to the admittingly - // nicer links that ngglegacy uses - if ($gallery->pageid <= 0) - $gallery->pagelink = $this->object->prettify_pagelink($gallery->pagelink); - // Let plugins modify the gallery $gallery = apply_filters('ngg_album_galleryobject', $gallery); } + $params['album'] = reset($this->albums); + $params['albums'] = $this->albums; + // Clean up unset($storage); unset($image_mapper); @@ -257,24 +262,6 @@ class A_NextGen_Basic_Album_Controller extends Mixin } - function prettify_pagelink($pagelink) - { - $param_separator = C_NextGen_Settings::get_instance()->get('router_param_separator'); - - $regex = implode('', array( - '#', - '/(gallery|album)', - preg_quote($param_separator, '#'), - '([^/?]+)', - '#' - )); - - $pagelink = preg_replace($regex, '/\2', $pagelink); - - return $pagelink; - } - - function _get_js_lib_url() { return $this->object->get_static_url('photocrati-nextgen_basic_album#init.js'); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_forms.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_forms.php index 1f43051f20c65489210490dc4b9dbe320bce00d9..3006a9d2af8b83cb0c511b2880d00edb5f9a7121 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_forms.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_forms.php @@ -5,12 +5,12 @@ class A_NextGen_Basic_Album_Forms extends Mixin function initialize() { $this->add_form( - NEXTGEN_DISPLAY_SETTINGS_SLUG, - NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM + NGG_DISPLAY_SETTINGS_SLUG, + NGG_BASIC_COMPACT_ALBUM ); $this->add_form( - NEXTGEN_DISPLAY_SETTINGS_SLUG, - NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM + NGG_DISPLAY_SETTINGS_SLUG, + NGG_BASIC_EXTENDED_ALBUM ); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_mapper.php index f9c13c532a2f04bb6084275ef5fa21e452bc666d..45558d25b7260dfc620dd4c3bdebbfc65612e790 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_mapper.php @@ -21,9 +21,9 @@ class Hook_NextGen_Basic_Album_Defaults extends Hook { function set_defaults($entity) { - if (in_array($entity->name, array( - NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM, - NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM))) { + if (isset($entity->name) && in_array($entity->name, array( + NGG_BASIC_COMPACT_ALBUM, + NGG_BASIC_EXTENDED_ALBUM))) { // Set defaults for both display (album) types $settings = C_NextGen_Settings::get_instance(); @@ -32,7 +32,7 @@ class Hook_NextGen_Basic_Album_Defaults extends Hook $this->object->_set_default_value($entity, 'settings', 'template', ''); // Thumbnail dimensions -- only used by extended albums - if ($entity->name == NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM) + if ($entity->name == NGG_BASIC_EXTENDED_ALBUM) { $this->_set_default_value($entity, 'settings', 'override_thumbnail_settings', 0); $this->_set_default_value($entity, 'settings', 'thumbnail_width', $settings->thumbwidth); @@ -42,8 +42,8 @@ class Hook_NextGen_Basic_Album_Defaults extends Hook $this->_set_default_value($entity, 'settings', 'thumbnail_watermark', 0); } - if (defined('NEXTGEN_GALLERY_BASIC_THUMBNAILS')) - $this->object->_set_default_value($entity, 'settings', 'gallery_display_type', NEXTGEN_GALLERY_BASIC_THUMBNAILS); + if (defined('NGG_BASIC_THUMBNAILS')) + $this->object->_set_default_value($entity, 'settings', 'gallery_display_type', NGG_BASIC_THUMBNAILS); } } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_routes.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_routes.php index 30b1282339fd8fe9cf6ff7a70e688b0d0a1b1bd5..8a3462c9b5d563300ab25013b06e43521c4ddf4e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_routes.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_routes.php @@ -22,20 +22,24 @@ class A_NextGen_Basic_Album_Routes extends Mixin // Get router $router = $this->get_registry()->get_utility('I_Router'); $app = $router->get_routed_app(); - $slug = C_NextGen_Settings::get_instance()->router_param_slug; + $slug = '/'.C_NextGen_Settings::get_instance()->router_param_slug; // If we're viewing an album, rewrite the urls - $regex = "/photocrati-nextgen_basic_\w+_album/"; - if (preg_match($regex, $display_type)) { - $app->rewrite("{$slug}/pid--{*}", "{$slug}/pid--{1}", FALSE, TRUE); // avoid conflicts with imagebrowser - $app->rewrite("{$slug}/{\\w}", "{$slug}/album--{1}"); - $app->rewrite("{$slug}/{\\w}/{\\w}", "{$slug}/album--{1}/gallery--{2}"); - $app->rewrite("{$slug}/{\\w}/{\\w}/{\\w}{*}", "{$slug}/album--{1}/gallery--{2}/{3}{4}"); - } + $regex = "/photocrati-nextgen_basic_\\w+_album/"; + if (preg_match($regex, $display_type)) { + $app->rewrite("{*}{$slug}/page/{\\d}{*}", "{1}{$slug}/nggpage--{2}{3}", FALSE, TRUE); + $app->rewrite("{*}{$slug}/pid--{*}", "{1}{$slug}/pid--{2}", FALSE, TRUE); // avoid conflicts with imagebrowser + $app->rewrite("{*}{$slug}/{\\w}/{\\w}/{\\w}{*}", "{1}{$slug}/album--{2}/gallery--{3}/{4}{5}", FALSE, TRUE); + $app->rewrite("{*}{$slug}/{\\w}/{\\w}", "{1}{$slug}/album--{2}/gallery--{3}", FALSE, TRUE); + + // TODO: We're commenting this out as it was causing a problem with sub-album requests not + // working when placed beside paginated galleries. But we still need to figure out why, and fix that + // $app->rewrite("{*}{$slug}/{\\w}", "{1}{$slug}/album--{2}", FALSE, TRUE); + } elseif (preg_match($regex, $original_display_type)) { - $app->rewrite("{$slug}/album--{\\w}", "{$slug}/{1}"); - $app->rewrite("{$slug}/album--{\\w}/gallery--{\\w}", "{$slug}/{1}/{2}"); - $app->rewrite("{$slug}/album--{\\w}/gallery--{\\w}/{*}", "{$slug}/{1}/{2}/{3}"); + $app->rewrite("{*}{$slug}/album--{\\w}", "{1}{$slug}/{2}"); + $app->rewrite("{*}{$slug}/album--{\\w}/gallery--{\\w}", "{1}{$slug}/{2}/{3}"); + $app->rewrite("{*}{$slug}/album--{\\w}/gallery--{\\w}/{*}", "{1}{$slug}/{2}/{3}/{4}"); } // Perform rewrites diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_urls.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_urls.php index bc8f3db4799700a3765cb7ac1f69af9c195b3eb3..ce062610c0501917b6d32f38adc21e6a4cbc9d37 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_urls.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_album_urls.php @@ -4,10 +4,33 @@ class A_NextGen_Basic_Album_Urls extends Mixin { function create_parameter_segment($key, $value, $id=NULL, $use_prefix=FALSE) { - if ($key == 'page') { + if ($key == 'nggpage') { return 'page/'.$value; } + elseif ($key == 'album') { + return $value; + } + elseif ($key == 'gallery') { + return $value; + } else return $this->call_parent('create_parameter_segment', $key, $value, $id, $use_prefix); } -} \ No newline at end of file + + function remove_parameter($key, $id=NULL, $url=FALSE) + { + $url = $this->call_parent('remove_parameter', $key, $id, $url); + $settings = C_NextGen_Settings::get_instance(); + $param_slug = preg_quote($settings->router_param_slug, '#'); + + if (preg_match("#(/{$param_slug}/.*)album--#", $url, $matches)) { + $url = str_replace($matches[0], $matches[1], $url); + } + + if (preg_match("#(/{$param_slug}/.*)gallery--#", $url, $matches)) { + $url = str_replace($matches[0], $matches[1], $url); + } + + return $url; + } +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_compact_album_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_compact_album_form.php index 6838b9ecb1295e3062c413ef90836fa86dc9782d..d8ed3a58bbe7115ef019d0346b0ff7a239255801 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_compact_album_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_compact_album_form.php @@ -4,7 +4,7 @@ class A_NextGen_Basic_Compact_Album_Form extends Mixin_NextGen_Basic_Album_Form { function get_display_type_name() { - return NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM; + return NGG_BASIC_COMPACT_ALBUM; } /** @@ -27,5 +27,11 @@ class A_NextGen_Basic_Compact_Album_Form extends Mixin_NextGen_Basic_Album_Form $this->object->get_static_url('photocrati-nextgen_basic_album#compact_settings.js'), array('jquery.nextgen_radio_toggle') ); + + $atp = $this->object->get_registry()->get_utility('I_Attach_To_Post_Controller'); + + if ($atp != null) { + $atp->mark_script('nextgen_basic_compact_albums_settings_script'); + } } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_extended_album_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_extended_album_form.php index ff7387c06cf83155171150230bc692405f783915..9b47e0a7a05c7a6594712af8e793a9917b8cb8ed 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_extended_album_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/adapter.nextgen_basic_extended_album_form.php @@ -4,7 +4,7 @@ class A_NextGen_Basic_Extended_Album_Form extends Mixin_NextGen_Basic_Album_Form { function get_display_type_name() { - return NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM; + return NGG_BASIC_EXTENDED_ALBUM; } /** @@ -27,5 +27,11 @@ class A_NextGen_Basic_Extended_Album_Form extends Mixin_NextGen_Basic_Album_Form $this->object->get_static_url('photocrati-nextgen_basic_album#extended_settings.js'), array('jquery.nextgen_radio_toggle') ); + + $atp = $this->object->get_registry()->get_utility('I_Attach_To_Post_Controller'); + + if ($atp != null) { + $atp->mark_script('nextgen_basic_extended_albums_settings_script'); + } } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/class.nextgen_basic_album_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/class.nextgen_basic_album_installer.php index fc7a282c4df1e1c389ad5e66fede26eae60dc0da..6585860612dfb6e62e79c44df97bdd4c37fd4c2d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/class.nextgen_basic_album_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/class.nextgen_basic_album_installer.php @@ -5,21 +5,21 @@ class C_NextGen_Basic_Album_Installer extends C_Gallery_Display_Installer function install() { $this->install_display_type( - NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM, array( + NGG_BASIC_COMPACT_ALBUM, array( 'title' => 'NextGEN Basic Compact Album', 'entity_types' => array('album', 'gallery'), 'preview_image_relpath' => 'photocrati-nextgen_basic_album#compact_preview.jpg', 'default_source' => 'albums', - 'view_order' => NEXTGEN_DISPLAY_PRIORITY_BASE + 200 + 'view_order' => NGG_DISPLAY_PRIORITY_BASE + 200 )); $this->install_display_type( - NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM, array( + NGG_BASIC_EXTENDED_ALBUM, array( 'title' => 'NextGEN Basic Extended Album', 'entity_types' => array('album', 'gallery'), 'preview_image_relpath' => 'photocrati-nextgen_basic_album#extended_preview.jpg', 'default_source' => 'albums', - 'view_order' => NEXTGEN_DISPLAY_PRIORITY_BASE + 210 + 'view_order' => NGG_DISPLAY_PRIORITY_BASE + 210 )); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php index 39fe3b7b81351e9450f5b093283b0d42e4ede46f..540f99cf49e06e4a8e91339c9d2ec122739bbc44 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php @@ -22,10 +22,10 @@ class Mixin_NextGen_Basic_Album_Form extends Mixin_Display_Type_Form 'photocrati-nextgen_basic_album#nextgen_basic_album_gallery_display_type', array( 'display_type_name' => $display_type->name, - 'gallery_display_type_label' => _('Display galleries as'), - 'gallery_display_type_help' => _('How would you like galleries to be displayed?'), + 'gallery_display_type_label' => __('Display galleries as', 'nggallery'), + 'gallery_display_type_help' => __('How would you like galleries to be displayed?', 'nggallery'), 'gallery_display_type' => $display_type->settings['gallery_display_type'], - 'galleries_per_page_label' => _('Galleries per page'), + 'galleries_per_page_label' => __('Galleries per page', 'nggallery'), 'galleries_per_page' => $display_type->settings['galleries_per_page'], 'display_types' => $mapper->find_by_entity_type('image') ), @@ -44,8 +44,8 @@ class Mixin_NextGen_Basic_Album_Form extends Mixin_Display_Type_Form 'photocrati-nextgen_basic_album#nextgen_basic_album_galleries_per_page', array( 'display_type_name' => $display_type->name, - 'galleries_per_page_label' => _('Items per page'), - 'galleries_per_page_help' => _('Maximum number of galleries or sub-albums to appear on a single page'), + 'galleries_per_page_label' => __('Items per page', 'nggallery'), + 'galleries_per_page_help' => __('Maximum number of galleries or sub-albums to appear on a single page', 'nggallery'), 'galleries_per_page' => $display_type->settings['galleries_per_page'] ), TRUE diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php index fb7786b883f530dad92805cc3c4d207450afc4d1..f84838fa56cc61988297b26307ea6af9f17bc85c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php @@ -7,8 +7,8 @@ } */ -define('NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM', 'photocrati-nextgen_basic_compact_album'); -define('NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM', 'photocrati-nextgen_basic_extended_album'); +define('NGG_BASIC_COMPACT_ALBUM', 'photocrati-nextgen_basic_compact_album'); +define('NGG_BASIC_EXTENDED_ALBUM', 'photocrati-nextgen_basic_extended_album'); class M_NextGen_Basic_Album extends C_Base_Module { @@ -18,7 +18,7 @@ class M_NextGen_Basic_Album extends C_Base_Module 'photocrati-nextgen_basic_album', 'NextGEN Basic Album', "Provides support for NextGEN's Basic Album", - '0.4', + '0.7', 'http://nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -42,8 +42,8 @@ class M_NextGen_Basic_Album extends C_Base_Module 'I_Display_Type_Controller', 'A_NextGen_Basic_Album_Controller', array( - NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM, - NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM, + NGG_BASIC_COMPACT_ALBUM, + NGG_BASIC_EXTENDED_ALBUM, $this->module_id ) ); @@ -60,17 +60,20 @@ class M_NextGen_Basic_Album extends C_Base_Module 'A_NextGen_Basic_Album_Routes' ); - // Add a display settings form for each display type - $this->get_registry()->add_adapter( - 'I_Form', - 'A_NextGen_Basic_Compact_Album_Form', - NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM - ); - $this->get_registry()->add_adapter( - 'I_Form', - 'A_NextGen_Basic_Extended_Album_Form', - NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM - ); + if (M_Attach_To_Post::is_atp_url() || is_admin()) + { + // Add a display settings form for each display type + $this->get_registry()->add_adapter( + 'I_Form', + 'A_NextGen_Basic_Compact_Album_Form', + NGG_BASIC_COMPACT_ALBUM + ); + $this->get_registry()->add_adapter( + 'I_Form', + 'A_NextGen_Basic_Extended_Album_Form', + NGG_BASIC_EXTENDED_ALBUM + ); + } // Creates special parameter segments $this->get_registry()->add_adapter( @@ -78,16 +81,22 @@ class M_NextGen_Basic_Album extends C_Base_Module 'A_NextGen_Basic_Album_Urls' ); - $this->get_registry()->add_adapter( - 'I_Form_Manager', - 'A_NextGen_Basic_Album_Forms' - ); + if (M_Attach_To_Post::is_atp_url() || is_admin()) + { + $this->get_registry()->add_adapter( + 'I_Form_Manager', + 'A_NextGen_Basic_Album_Forms' + ); + } } function _register_hooks() { - C_NextGen_Shortcode_Manager::add('album', array(&$this, 'ngglegacy_shortcode')); - C_NextGen_Shortcode_Manager::add('nggalbum', array(&$this, 'ngglegacy_shortcode')); + if (!defined('NGG_DISABLE_LEGACY_SHORTCODES') || !NGG_DISABLE_LEGACY_SHORTCODES) + { + C_NextGen_Shortcode_Manager::add('album', array(&$this, 'ngglegacy_shortcode')); + } + C_NextGen_Shortcode_Manager::add('nggalbum', array(&$this, 'ngglegacy_shortcode')); } /** @@ -113,7 +122,7 @@ class M_NextGen_Basic_Album extends C_Base_Module { $params['source'] = $this->_get_param('source', 'albums', $params); $params['container_ids'] = $this->_get_param('id', NULL, $params); - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_COMPACT_ALBUM, $params); unset($params['id']); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/compact_settings.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/compact_settings.js index 897a5027a052018b47964f62579145fa00c025bc..db801c9620696fd68cba7b0006a5c345cae493f5 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/compact_settings.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/compact_settings.js @@ -1,7 +1,5 @@ jQuery(function($){ $('input[name="photocrati-nextgen_basic_compact_album[override_thumbnail_settings]"]') .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_compact_album_thumbnail_dimensions')) - .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_compact_album_thumbnail_quality')) - .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_compact_album_thumbnail_crop')) - .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_compact_album_thumbnail_watermark')); + .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_compact_album_thumbnail_crop')); }); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/extended_settings.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/extended_settings.js index d169fdd9bc8966534e71148bfd75a432bd8a2822..167143763c21f9da7758f0396df4068c5d4d42a5 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/extended_settings.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/extended_settings.js @@ -1,7 +1,5 @@ jQuery(function($){ $('input[name="photocrati-nextgen_basic_extended_album[override_thumbnail_settings]"]') .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_extended_album_thumbnail_dimensions')) - .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_extended_album_thumbnail_quality')) - .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_extended_album_thumbnail_crop')) - .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_extended_album_thumbnail_watermark')); -}); \ No newline at end of file + .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_extended_album_thumbnail_crop')); +}); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/jquery.dotdotdot-1.5.7-packed.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/jquery.dotdotdot-1.5.7-packed.js index 67ef39d494645af967e6690e55866bba3cc8d63a..c469b84297d5653836c7279a9b085a37ebfcd7c9 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/jquery.dotdotdot-1.5.7-packed.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/jquery.dotdotdot-1.5.7-packed.js @@ -1,15 +1,15 @@ -/* - * jQuery dotdotdot 1.5.7 - * - * Copyright (c) 2013 Fred Heusschen - * www.frebsite.nl - * - * Plugin website: - * dotdotdot.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 - */ - +/* + * jQuery dotdotdot 1.5.7 + * + * Copyright (c) 2013 Fred Heusschen + * www.frebsite.nl + * + * Plugin website: + * dotdotdot.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(a){function c(a,b,c){var d=a.children(),e=!1;a.empty();for(var g=0,h=d.length;h>g;g++){var i=d.eq(g);if(a.append(i),c&&a.append(c),f(a,b)){i.remove(),e=!0;break}c&&c.remove()}return e}function d(b,c,g,h,i){var j=b.contents(),k=!1;b.empty();for(var l="table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, select, optgroup, option, textarea, script, style",m=0,n=j.length;n>m&&!k;m++){var o=j[m],p=a(o);void 0!==o&&(b.append(p),i&&b[b.is(l)?"after":"append"](i),3==o.nodeType?f(g,h)&&(k=e(p,c,g,h,i)):k=d(p,c,g,h,i),k||i&&i.remove())}return k}function e(a,b,c,d,h){var k=!1,l=a[0];if(l===void 0)return!1;for(var m="letter"==d.wrap?"":" ",n=j(l).split(m),o=-1,p=-1,q=0,r=n.length-1;r>=q;){var s=Math.floor((q+r)/2);if(s==p)break;p=s,i(l,n.slice(0,p+1).join(m)+d.ellipsis),f(c,d)?r=p:(o=p,q=p)}if(-1==o||1==n.length&&0==n[0].length){var u=a.parent();a.remove();var v=h?h.length:0;if(u.contents().size()>v){var w=u.contents().eq(-1-v);k=e(w,b,c,d,h)}else{var l=u.prev().contents().eq(-1)[0];if(l!==void 0){var t=g(j(l),d);i(l,t),u.remove(),k=!0}}}else{var t=g(n.slice(0,o+1).join(m),d);k=!0,i(l,t)}return k}function f(a,b){return a.innerHeight()>b.maxHeight}function g(b,c){for(;a.inArray(b.slice(-1),c.lastCharacter.remove)>-1;)b=b.slice(0,-1);return 0>a.inArray(b.slice(-1),c.lastCharacter.noEllipsis)&&(b+=c.ellipsis),b}function h(a){return{width:a.innerWidth(),height:a.innerHeight()}}function i(a,b){a.innerText?a.innerText=b:a.nodeValue?a.nodeValue=b:a.textContent&&(a.textContent=b)}function j(a){return a.innerText?a.innerText:a.nodeValue?a.nodeValue:a.textContent?a.textContent:""}function k(b,c){return b===void 0?!1:b?"string"==typeof b?(b=a(b,c),b.length?b:!1):"object"==typeof b?b.jquery===void 0?!1:b:!1:!1}function l(a){for(var b=a.innerHeight(),c=["paddingTop","paddingBottom"],d=0,e=c.length;e>d;d++){var f=parseInt(a.css(c[d]),10);isNaN(f)&&(f=0),b-=f}return b}function m(a,b){return a?(b="string"==typeof b?"dotdotdot: "+b:["dotdotdot:",b],window.console!==void 0&&window.console.log!==void 0&&window.console.log(b),!1):!1}if(!a.fn.dotdotdot){a.fn.dotdotdot=function(e){if(0==this.length)return e&&e.debug===!1||m(!0,'No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){a(this).dotdotdot(e)});var g=this;g.data("dotdotdot")&&g.trigger("destroy.dot"),g.bind_events=function(){return g.bind("update.dot",function(b,e){b.preventDefault(),b.stopPropagation(),j.maxHeight="number"==typeof j.height?j.height:l(g),j.maxHeight+=j.tolerance,e!==void 0&&(("string"==typeof e||e instanceof HTMLElement)&&(e=a("<div />").append(e).contents()),e instanceof a&&(i=e)),q=g.wrapInner('<div class="dotdotdot" />').children(),q.empty().append(i.clone(!0)).css({height:"auto",width:"auto",border:"none",padding:0,margin:0});var h=!1,k=!1;return n.afterElement&&(h=n.afterElement.clone(!0),n.afterElement.remove()),f(q,j)&&(k="children"==j.wrap?c(q,j,h):d(q,g,q,j,h)),q.replaceWith(q.contents()),q=null,a.isFunction(j.callback)&&j.callback.call(g[0],k,i),n.isTruncated=k,k}).bind("isTruncated.dot",function(a,b){return a.preventDefault(),a.stopPropagation(),"function"==typeof b&&b.call(g[0],n.isTruncated),n.isTruncated}).bind("originalContent.dot",function(a,b){return a.preventDefault(),a.stopPropagation(),"function"==typeof b&&b.call(g[0],i),i}).bind("destroy.dot",function(a){a.preventDefault(),a.stopPropagation(),g.unwatch().unbind_events().empty().append(i).data("dotdotdot",!1)}),g},g.unbind_events=function(){return g.unbind(".dot"),g},g.watch=function(){if(g.unwatch(),"window"==j.watch){var b=a(window),c=b.width(),d=b.height();b.bind("resize.dot"+n.dotId,function(){c==b.width()&&d==b.height()&&j.windowResizeFix||(c=b.width(),d=b.height(),p&&clearInterval(p),p=setTimeout(function(){g.trigger("update.dot")},10))})}else o=h(g),p=setInterval(function(){var a=h(g);(o.width!=a.width||o.height!=a.height)&&(g.trigger("update.dot"),o=h(g))},100);return g},g.unwatch=function(){return a(window).unbind("resize.dot"+n.dotId),p&&clearInterval(p),g};var i=g.contents(),j=a.extend(!0,{},a.fn.dotdotdot.defaults,e),n={},o={},p=null,q=null;return n.afterElement=k(j.after,g),n.isTruncated=!1,n.dotId=b++,g.data("dotdotdot",!0).bind_events().trigger("update.dot"),j.watch&&g.watch(),g},a.fn.dotdotdot.defaults={ellipsis:"... ",wrap:"word",lastCharacter:{remove:[" ",",",";",".","!","?"],noEllipsis:[]},tolerance:0,callback:null,after:null,height:null,watch:!1,windowResizeFix:!0,debug:!1};var b=1,n=a.fn.html;a.fn.html=function(a){return a!==void 0?this.data("dotdotdot")&&"function"!=typeof a?this.trigger("update",[a]):n.call(this,a):n.call(this)};var o=a.fn.text;a.fn.text=function(b){if(b!==void 0){if(this.data("dotdotdot")){var c=a("<div />");return c.text(b),b=c.html(),c.remove(),this.trigger("update",[b])}return o.call(this,b)}return o.call(this)}}})(jQuery); \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/nextgen_basic_album.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/nextgen_basic_album.css index 997087a2e2325e434a5cfb4db17d2995fb22a72e..a4e71d0210c5cd7dfaa21857eca8f5811b607410 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/nextgen_basic_album.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/static/nextgen_basic_album.css @@ -49,36 +49,61 @@ .ngg-album-compact { float: left; - height: 180px; - padding: 0 6px 4px 0 !important; + padding: 0 12px 4px 0 !important; margin: 0px !important; text-align: left; - width: 120px; +} + +.ngg-album-compact a { + border: none; } .ngg-album-compactbox { - background: transparent url(albumset.gif) no-repeat scroll 0%; - height: 88px; - margin: 0pt 0pt 6px !important; - padding: 8px 0pt 0pt 8px !important; - width: 120px; + margin: 0 !important; + padding: 8px !important; box-sizing: border-box; -moz-box-sizing: border-box; + position: relative; + border: 1px solid gray; + border-radius: 6px; + z-index: 1; +} + +.ngg-album-compactbox:before { + content: ' '; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: -7px; + border-bottom: 1px solid gray; + border-radius: 6px; + z-index: -1; +} + +.ngg-album-compactbox:after { + content: ' '; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: -4px; + border-bottom: 1px solid gray; + border-radius: 6px; + z-index: -1; } .ngg-album-compactbox .Thumb { margin: 0px !important; padding: 0px 0 0 0 !important; - width: 91px; - height: 68px; - border: none; + border: 1px solid black !important; } .ngg-album-compact h4 { font-size: 15px; font-weight: bold; - width: 110px; margin: 0; + margin-top: 10px; } .ngg-album-compact h4 .ngg-album-desc { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php index f6f11df66c65b9889460f73a8ebe39cef9ac0230..f19ca238cd25d220314a8e3ae89db6fd2257a371 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php @@ -4,22 +4,33 @@ <div class="ngg-album-compact"> <div class="ngg-album-compactbox"> <div class="ngg-album-link"> - <a class="Link" href="<?php echo $gallery->pagelink; ?>"> + <a class="Link gallery_link" href="<?php echo nextgen_esc_url($gallery->pagelink); ?>"> <img class="Thumb" - alt="<?php echo $gallery->title; ?>" - src="<?php echo $gallery->previewurl; ?>"/> + alt="<?php echo esc_attr($gallery->title); ?>" + src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"/> </a> </div> </div> + <?php if (!empty($image_gen_params)) { + $max_width = 'style="max-width: ' . ($image_gen_params['width'] + 20) . 'px"'; + } else { + $max_width = ''; + } ?> <h4> <a class="ngg-album-desc" - title="<?php echo $gallery->title; ?>" - href="<?php echo $gallery->pagelink; ?>" - ><?php echo $gallery->title; ?></a> + title="<?php echo esc_attr($gallery->title); ?>" + href="<?php echo nextgen_esc_url($gallery->pagelink); ?>" + <?php echo $max_width; ?>> + <?php echo_safe_html($gallery->title); ?> + </a> </h4> - <?php if (isset($gallery->counter) && $gallery->counter > 0) { ?> - <p><strong><?php echo $gallery->counter; ?></strong> <?php _e('Photos', 'nggallery'); ?></p> - <?php } ?> + <p> + <?php if (isset($gallery->counter) && $gallery->counter > 0) { ?> + <strong><?php echo $gallery->counter; ?></strong> <?php _e('Photos', 'nggallery'); ?> + <?php } else { ?> + + <?php } ?> + </p> </div> <?php } ?> <br class="ngg-clear"/> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php index bc5b322cd59232842defa78306214b8b6e9f2d2b..e3aed199b1abcab4cbcbbc4c0f5c59645ac84554 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php @@ -3,14 +3,14 @@ <?php foreach ($galleries as $gallery) { ?> <div class="ngg-album"> <div class="ngg-albumtitle"> - <a href="<?php echo $gallery->pagelink; ?>"><?php echo $gallery->title; ?></a> + <a href="<?php echo nextgen_esc_url($gallery->pagelink); ?>"><?php echo_safe_html($gallery->title); ?></a> </div> <div class="ngg-albumcontent"> <div class="ngg-thumbnail"> - <a href="<?php echo $gallery->pagelink; ?>"><img class="Thumb" alt="<?php echo $gallery->title; ?>" src="<?php echo $gallery->previewurl; ?>"/></a> + <a class="gallery_link" href="<?php echo nextgen_esc_url($gallery->pagelink); ?>"><img class="Thumb" alt="<?php echo esc_attr($gallery->title); ?>" src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"/></a> </div> <div class="ngg-description"> - <p><?php echo $gallery->galdesc; ?></p> + <p><?php echo_safe_html($gallery->galdesc); ?></p> <?php if (isset($gallery->counter) && $gallery->counter > 0) { ?> <p><strong><?php echo $gallery->counter; ?></strong> <?php _e('Photos', 'nggallery'); ?></p> <?php } ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/nextgen_basic_album_gallery_display_type.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/nextgen_basic_album_gallery_display_type.php index 26a3cb23ec43c3f611ded498b34729e0d95913ba..2e20a82e4b400885acf679a1683dd77f70bafc30 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/nextgen_basic_album_gallery_display_type.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_album/templates/nextgen_basic_album_gallery_display_type.php @@ -12,10 +12,9 @@ id="<?php echo esc_attr($display_type_name) ?>_gallery_display_type" name="<?php echo esc_attr($display_type_name)?>[gallery_display_type]"> <?php foreach ($display_types as $display_type): ?> - <option - value="<?php echo esc_attr($display_type->name) ?>" + <option value="<?php echo esc_attr($display_type->name) ?>" <?php selected($display_type->name, $gallery_display_type) ?>> - <?php echo_h($display_type->title)?> + <?php echo_h(__($display_type->title, 'nggallery')); ?> </option> <?php endforeach ?> </select> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_forms.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_forms.php index d38dd748ce654f28080d9150489e982be8d5c341..f2ee4383f2e7318c72172d1e3ad3bcdac86024eb 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_forms.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_forms.php @@ -4,7 +4,7 @@ class A_NextGen_Basic_Gallery_Forms extends Mixin { function initialize() { - $this->add_form(NEXTGEN_DISPLAY_SETTINGS_SLUG, NEXTGEN_GALLERY_BASIC_THUMBNAILS); - $this->add_form(NEXTGEN_DISPLAY_SETTINGS_SLUG, NEXTGEN_GALLERY_BASIC_SLIDESHOW); + $this->add_form(NGG_DISPLAY_SETTINGS_SLUG, NGG_BASIC_THUMBNAILS); + $this->add_form(NGG_DISPLAY_SETTINGS_SLUG, NGG_BASIC_SLIDESHOW); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_mapper.php index 27d461053a39f623a5cdac3f02878a8313fedb7c..cccc63cd5e8a6af2c6babeb036597911c4bd88dc 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_mapper.php @@ -19,17 +19,18 @@ class Hook_NextGen_Basic_Gallery_Defaults extends Hook { function set_defaults($entity) { - if ($entity->name == NEXTGEN_GALLERY_BASIC_SLIDESHOW) - $this->set_slideshow_defaults($entity); - - else if ($entity->name == NEXTGEN_GALLERY_BASIC_THUMBNAILS) - $this->set_thumbnail_defaults($entity); + if (isset($entity->name)) { + if ($entity->name == NGG_BASIC_SLIDESHOW) + $this->set_slideshow_defaults($entity); + + else if ($entity->name == NGG_BASIC_THUMBNAILS) + $this->set_thumbnail_defaults($entity); + } } function set_slideshow_defaults($entity) { $settings = C_NextGen_Settings::get_instance(); - $this->object->_set_default_value($entity, 'settings', 'images_per_page', 10); $this->object->_set_default_value($entity, 'settings', 'gallery_width', $settings->irWidth); $this->object->_set_default_value($entity, 'settings', 'gallery_height', $settings->irHeight); $this->object->_set_default_value($entity, 'settings', 'thumbnail_width', $settings->thumbwidth); @@ -89,7 +90,7 @@ class Hook_NextGen_Basic_Gallery_Defaults extends Hook $this->object->_set_default_value($entity, 'settings', 'thumbnail_watermark', 0); // Show piclens link ? - $this->object->_set_default_value($entity, 'settings', 'piclens_link_text', _('[Show PicLens]')); + $this->object->_set_default_value($entity, 'settings', 'piclens_link_text', __('[Show PicLens]', 'nggallery')); $this->object->_set_default_value($entity, 'settings', 'show_piclens_link', isset($entity->settings['show_piclens_link']) && preg_match("/^true|yes|y$/", $entity->settings['show_piclens_link']) ? diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_routes.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_routes.php index 80646af8267ec5df4114a6cbba18ed82fdcb0fff..756edad94c9ec8e4a53ad93f4e41af6c61e6f91b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_routes.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_routes.php @@ -14,12 +14,12 @@ class A_NextGen_Basic_Gallery_Routes extends Mixin function add_nextgen_basic_gallery_routes() { - $slug = C_NextGen_Settings::get_instance()->router_param_slug; - $this->object->rewrite("{$slug}{*}/image/{*}", "{$slug}{1}/pid--{2}"); - $this->object->rewrite("{$slug}{*}/slideshow/{*}", "{$slug}{1}/show--" . NEXTGEN_GALLERY_BASIC_SLIDESHOW . "{2}"); - $this->object->rewrite("{$slug}{*}/thumbnails/{*}", "{$slug}{1}/show--". NEXTGEN_GALLERY_BASIC_THUMBNAILS . "{2}"); - $this->object->rewrite("{$slug}{*}/show--slide/{*}", "{$slug}{1}/show--" . NEXTGEN_GALLERY_BASIC_SLIDESHOW . "/{2}"); - $this->object->rewrite("{$slug}{*}/show--gallery/{*}", "{$slug}{1}/show--" . NEXTGEN_GALLERY_BASIC_THUMBNAILS . "/{2}"); - $this->object->rewrite("{$slug}{*}/page/{\\d}{*}", "{$slug}{1}/page--{2}{3}"); + $slug = '/'.C_NextGen_Settings::get_instance()->router_param_slug; + $this->object->rewrite("{*}{$slug}{*}/image/{*}", "{1}{$slug}{2}/pid--{3}"); + $this->object->rewrite("{*}{$slug}{*}/slideshow/{*}", "{1}{$slug}{2}/show--" . NGG_BASIC_SLIDESHOW . "{3}"); + $this->object->rewrite("{*}{$slug}{*}/thumbnails/{*}", "{1}{$slug}{2}/show--". NGG_BASIC_THUMBNAILS . "{3}"); + $this->object->rewrite("{*}{$slug}{*}/show--slide/{*}", "{1}{$slug}{2}/show--" . NGG_BASIC_SLIDESHOW . "/{3}"); + $this->object->rewrite("{*}{$slug}{*}/show--gallery/{*}", "{1}{$slug}{2}/show--" . NGG_BASIC_THUMBNAILS . "/{3}"); + $this->object->rewrite("{*}{$slug}{*}/page/{\\d}{*}", "{1}{$slug}{2}/nggpage--{3}{4}"); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_urls.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_urls.php index 4160b56334131becd72f45c48eca309f2a5e5c82..f21f7fcb704271c4c2a49d8817862c3b4b871b52 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_urls.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_urls.php @@ -23,12 +23,12 @@ class A_NextGen_Basic_Gallery_Urls extends Mixin function create_parameter_segment($key, $value, $id=NULL, $use_prefix=FALSE) { if ($key == 'show') { - if ($value == NEXTGEN_GALLERY_BASIC_SLIDESHOW) $value = 'slideshow'; - elseif ($value == NEXTGEN_GALLERY_BASIC_THUMBNAILS) $value = 'thumbnails'; - elseif ($value == NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER) $value = 'imagebrowser'; - return '/'.$value; + if ($value == NGG_BASIC_SLIDESHOW) $value = 'slideshow'; + elseif ($value == NGG_BASIC_THUMBNAILS) $value = 'thumbnails'; + elseif ($value == NGG_BASIC_IMAGEBROWSER) $value = 'imagebrowser'; + return $value; } - elseif ($key == 'page') { + elseif ($key == 'nggpage') { return 'page/'.$value; } else @@ -39,46 +39,75 @@ class A_NextGen_Basic_Gallery_Urls extends Mixin function _set_nextgen_basic_thumbnail_parameter($key, $value, $id=NULL, $use_prefix=NULL) { - $this->_set_ngglegacy_page_parameter($key, $id); + $this->_set_ngglegacy_page_parameter($key, $value, $id, $use_prefix); } function _remove_nextgen_basic_thumbnail_parameter($key, $id=NULL, $url=FALSE) { - $this->_set_ngglegacy_page_parameter($key, $id); + $this->_set_ngglegacy_page_parameter($key); } - function _set_ngglegacy_page_parameter($key, $id=NULL) + function _set_ngglegacy_page_parameter($key, $value=NULL, $id=NULL, $use_prefix=NULL) { // Get the returned url $retval = $this->object->get_method_property( $this->method_called, ExtensibleObject::METHOD_PROPERTY_RETURN_VALUE ); - // Get the settings manager - $settings = C_NextGen_Settings::get_instance(); - - // Create the regex pattern - $sep = preg_quote($settings->router_param_separator, '#'); - if ($id)$id = preg_quote($id, '#').$sep; - $prefix = preg_quote($settings->router_param_prefix, '#'); - $regex = implode('', array( - '#//?', - $id ? "({$id})?" : "(\w+{$sep})?", - "($prefix)?page{$sep}(\d+)/?#" - )); - - // Replace any page parameters with the ngglegacy equivalent - if (preg_match($regex, $retval, $matches)) { - $retval = str_replace($matches[0], "/page/{$matches[3]}/", $retval); - $this->object->set_method_property( - $this->method_called, - ExtensibleObject::METHOD_PROPERTY_RETURN_VALUE, - $retval - ); - } + // Get the settings manager + $settings = C_NextGen_Settings::get_instance(); + + // Create regex pattern + $param_slug = preg_quote($settings->router_param_slug, '#'); + + if ($key == 'nggpage') { + $regex = "#(/{$param_slug}/.*)(/?page/\\d+/?)(.*)#"; + if (preg_match($regex, $retval, $matches)) { + $new_segment = $value ? "/page/{$value}" : ""; + $retval = rtrim(str_replace( + $matches[0], + rtrim($matches[1], "/").$new_segment.ltrim($matches[3], "/"), + $retval + ), "/"); + + // Set new return value + $this->object->set_method_property( + $this->method_called, + ExtensibleObject::METHOD_PROPERTY_RETURN_VALUE, + $retval + ); + } + } + + # Convert the nggpage parameter to a slug + if (preg_match("#(/{$param_slug}/.*)nggpage--(.*)#", $retval, $matches)) { + $retval = rtrim(str_replace($matches[0], rtrim($matches[1],"/") ."/page/".ltrim($matches[2], "/"), $retval), "/"); + + // Set new return value + $this->object->set_method_property( + $this->method_called, + ExtensibleObject::METHOD_PROPERTY_RETURN_VALUE, + $retval + ); + } + + # Convert the show parameter to a slug + if (preg_match("#(/{$param_slug}/.*)show--(.*)#", $retval, $matches)) { + $retval = rtrim(str_replace($matches[0], rtrim($matches[1], "/").'/'.$matches[2], $retval), "/"); + $retval = str_replace(NGG_BASIC_SLIDESHOW, 'slideshow', $retval); + $retval = str_replace(NGG_BASIC_THUMBNAILS, 'thumbnails', $retval); + $retval = str_replace(NGG_BASIC_IMAGEBROWSER, 'imagebrowser', $retval); + + // Set new return value + $this->object->set_method_property( + $this->method_called, + ExtensibleObject::METHOD_PROPERTY_RETURN_VALUE, + $retval + ); + } return $retval; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_validation.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_validation.php index a0430421b1b832c76364bc4e019affd470705788..132aaec7cd53af8c1703c355eabac6e98e5742be 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_validation.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_gallery_validation.php @@ -4,14 +4,14 @@ class A_NextGen_Basic_Gallery_Validation extends Mixin { function initialize() { - if ($this->object->name == NEXTGEN_GALLERY_BASIC_THUMBNAILS) { + if ($this->object->name == NGG_BASIC_THUMBNAILS) { $this->object->add_pre_hook( 'validation', get_class(), 'Hook_NextGen_Basic_Thumbnail_Validation' ); } - else if ($this->object->name == NEXTGEN_GALLERY_BASIC_SLIDESHOW) { + else if ($this->object->name == NGG_BASIC_SLIDESHOW) { $this->object->add_pre_hook( 'validation', get_class(), diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_controller.php index 0b02703ff0d9334e7af3e8e47ef5474cbdf40a39..f137266b5dce932ec08189280ad3e3800dfe0980 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_controller.php @@ -10,14 +10,9 @@ class A_NextGen_Basic_Slideshow_Controller extends Mixin_NextGen_Basic_Gallery_C function index_action($displayed_gallery, $return=FALSE) { // Get the images to be displayed - $current_page = (int)$this->param('page', 1); + $current_page = (int)$this->param('nggpage', 1); - // TODO: Shouldn't we be using maximum_entity_count instead? - $limit = FALSE; - if (in_array($displayed_gallery->source, array('random_images', 'recent_images'))) - $limit = $displayed_gallery->display_settings['images_per_page']; - - if (($images = $displayed_gallery->get_included_entities($limit))) + if (($images = $displayed_gallery->get_included_entities())) { // Get the gallery storage component $storage = $this->object->get_registry()->get_utility('I_Gallery_Storage'); @@ -39,7 +34,7 @@ class A_NextGen_Basic_Slideshow_Controller extends Mixin_NextGen_Basic_Gallery_C // Are we displayed a flash slideshow? if ($displayed_gallery->display_settings['flash_enabled']) { - include_once(path_join(NGGALLERY_ABSPATH, implode(DIRECTORY_SEPARATOR, array('lib', 'swfobject.php')))); + include_once(NGGALLERY_ABSPATH . implode(DIRECTORY_SEPARATOR, array('lib', 'swfobject.php'))); $transient_id = $displayed_gallery->transient_id; $params['mediarss_link'] = $this->get_router()->get_url( '/nextgen-mediarss?template=playlist_feed&source=displayed_gallery&transient_id=' . $transient_id, false @@ -49,11 +44,11 @@ class A_NextGen_Basic_Slideshow_Controller extends Mixin_NextGen_Basic_Gallery_C // Are we to generate a thumbnail link? if ($displayed_gallery->display_settings['show_thumbnail_link']) { $params['thumbnail_link'] = $this->object->get_url_for_alternate_display_type( - $displayed_gallery, NEXTGEN_GALLERY_BASIC_THUMBNAILS + $displayed_gallery, NGG_BASIC_THUMBNAILS ); } - $params = $this->object->prepare_display_parameters($displayed_gallery, $params); + $params = $this->object->prepare_display_parameters($displayed_gallery, $params); $retval = $this->object->render_partial('photocrati-nextgen_basic_gallery#slideshow/index', $params, $return); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php index 19ffaba33dbcda06a8fb7954cc65d094e37c9c3f..d97d4c1b461d9c3a110e24f0848df2999ddb31c4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php @@ -7,7 +7,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form { function get_display_type_name() { - return NEXTGEN_GALLERY_BASIC_SLIDESHOW; + return NGG_BASIC_SLIDESHOW; } function enqueue_static_resources() @@ -17,6 +17,12 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/nextgen_basic_slideshow_settings.js'), array('jquery.nextgen_radio_toggle') ); + + $atp = $this->object->get_registry()->get_utility('I_Attach_To_Post_Controller'); + + if ($atp != null) { + $atp->mark_script('nextgen_basic_slideshow_settings-js'); + } } /** @@ -28,7 +34,6 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form 'nextgen_basic_slideshow_gallery_dimensions', 'nextgen_basic_slideshow_cycle_effect', 'nextgen_basic_slideshow_cycle_interval', - 'nextgen_basic_slideshow_images_per_page', 'nextgen_basic_slideshow_flash_enabled', 'nextgen_basic_slideshow_flash_background_music', 'nextgen_basic_slideshow_flash_stretch_image', @@ -54,29 +59,15 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_number_field( $display_type, 'cycle_interval', - 'Interval', + __('Interval', 'nggallery'), $display_type->settings['cycle_interval'], '', FALSE, - '# of seconds', + __('# of seconds', 'nggallery'), 1 ); } - function _render_nextgen_basic_slideshow_images_per_page_field($display_type) - { - return $this->_render_number_field( - $display_type, - 'images_per_page', - 'Image limit', - $display_type->settings['images_per_page'], - 'Maximum number of images to display with recent or random sources', - FALSE, - '# of images', - 0 - ); - } - function _render_nextgen_basic_slideshow_cycle_effect_field($display_type) { return $this->_render_select_field( @@ -103,7 +94,8 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form { return $this->render_partial('photocrati-nextgen_basic_gallery#slideshow/nextgen_basic_slideshow_settings_gallery_dimensions', array( 'display_type_name' => $display_type->name, - 'gallery_dimensions_label' => _('Maximum dimensions'), + 'gallery_dimensions_label' => __('Maximum dimensions', 'nggallery'), + 'gallery_dimensions_tooltip' => __('Certain themes may allow images to flow over their container if this setting is too large', 'nggallery'), 'gallery_width' => $display_type->settings['gallery_width'], 'gallery_height' => $display_type->settings['gallery_height'], ), True); @@ -114,9 +106,9 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'flash_enabled', - 'Enable flash slideshow', + __('Enable flash slideshow', 'nggallery'), $display_type->settings['flash_enabled'], - 'Integrate the flash based slideshow for all flash supported devices' + __('Integrate the flash based slideshow for all flash supported devices', 'nggallery') ); } @@ -125,7 +117,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'flash_shuffle', - 'Shuffle', + __('Shuffle', 'nggallery'), $display_type->settings['flash_shuffle'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -137,7 +129,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'flash_next_on_click', - 'Show next image on click', + __('Show next image on click', 'nggallery'), $display_type->settings['flash_next_on_click'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -149,7 +141,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'flash_navigation_bar', - 'Show navigation bar', + __('Show navigation bar', 'nggallery'), $display_type->settings['flash_navigation_bar'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -161,7 +153,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'flash_loading_icon', - 'Show loading icon', + __('Show loading icon', 'nggallery'), $display_type->settings['flash_loading_icon'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -173,9 +165,9 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'flash_watermark_logo', - 'Use watermark logo', + __('Use watermark logo', 'nggallery'), $display_type->settings['flash_watermark_logo'], - 'Use the watermark image in the Flash object. Note: this does not watermark the image itself, and cannot be applied with text watermarks', + __('Use the watermark image in the Flash object. Note: this does not watermark the image itself, and cannot be applied with text watermarks', 'nggallery'), empty($display_type->settings['flash_enabled']) ? TRUE : FALSE ); } @@ -185,7 +177,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_select_field( $display_type, 'flash_stretch_image', - 'Stretch image', + __('Stretch image', 'nggallery'), array('true' => 'true', 'false' => 'false', 'fit' => 'fit', 'none' => 'none'), $display_type->settings['flash_stretch_image'], '', @@ -222,7 +214,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'flash_slow_zoom', - 'Use slow zooming effect', + __('Use slow zooming effect', 'nggallery'), $display_type->settings['flash_slow_zoom'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -234,7 +226,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_text_field( $display_type, 'flash_background_music', - 'Background music (url)', + __('Background music (url)', 'nggallery'), $display_type->settings['flash_background_music'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE, @@ -247,7 +239,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'flash_xhtml_validation', - 'Try XHTML validation', + __('Try XHTML validation', 'nggallery'), $display_type->settings['flash_xhtml_validation'], 'Uses CDATA. Important: Could cause problems with some older browsers', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -259,7 +251,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_color_field( $display_type, 'flash_background_color', - 'Background', + __('Background', 'nggallery'), $display_type->settings['flash_background_color'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -271,7 +263,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_color_field( $display_type, 'flash_text_color', - 'Texts / buttons', + __('Texts / buttons', 'nggallery'), $display_type->settings['flash_text_color'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -283,7 +275,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_color_field( $display_type, 'flash_rollover_color', - 'Rollover / active', + __('Rollover / active', 'nggallery'), $display_type->settings['flash_rollover_color'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -295,7 +287,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_color_field( $display_type, 'flash_screen_color', - 'Screen', + __('Screen', 'nggallery'), $display_type->settings['flash_screen_color'], '', empty($display_type->settings['flash_enabled']) ? TRUE : FALSE @@ -313,7 +305,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'show_thumbnail_link', - 'Show thumbnail link', + __('Show thumbnail link', 'nggallery'), $display_type->settings['show_thumbnail_link'] ); } @@ -329,7 +321,7 @@ class A_NextGen_Basic_Slideshow_Form extends Mixin_Display_Type_Form return $this->_render_text_field( $display_type, 'thumbnail_link_text', - 'Thumbnail link text', + __('Thumbnail link text', 'nggallery'), $display_type->settings['thumbnail_link_text'], '', !empty($display_type->settings['show_thumbnail_link']) ? FALSE : TRUE diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php index 8a0ad3498365068a28f3cce63897f98ab44d3f37..7bcaf9c400bc861b087a6fa1e02a119755fe0cd6 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php @@ -4,7 +4,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form { function get_display_type_name() { - return NEXTGEN_GALLERY_BASIC_THUMBNAILS; + return NGG_BASIC_THUMBNAILS; } /** @@ -23,6 +23,12 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form $this->object->get_static_url('photocrati-nextgen_basic_gallery#thumbnails/nextgen_basic_thumbnails_settings.js'), array('jquery.nextgen_radio_toggle') ); + + $atp = $this->object->get_registry()->get_utility('I_Attach_To_Post_Controller'); + + if ($atp != null) { + $atp->mark_script('nextgen_basic_thumbnails_settings'); + } } /** @@ -56,9 +62,9 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form return $this->_render_number_field( $display_type, 'images_per_page', - 'Images per page', + __('Images per page', 'nggallery'), $display_type->settings['images_per_page'], - '"0" will display all images at once', + __('0 will display all images at once', 'nggallery'), FALSE, '# of images', 0 @@ -76,11 +82,11 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form return $this->_render_number_field( $display_type, 'number_of_columns', - 'Number of columns to display', + __('Number of columns to display', 'nggallery'), $display_type->settings['number_of_columns'], '', FALSE, - '# of columns', + __('# of columns', 'nggallery'), 0 ); } @@ -96,7 +102,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form return $this->_render_text_field( $display_type, 'piclens_link_text', - 'Piclens link text', + __('Piclens link text', 'nggallery'), $display_type->settings['piclens_link_text'], '', !empty($display_type->settings['show_piclens_link']) ? FALSE : TRUE @@ -114,7 +120,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'show_piclens_link', - 'Show piclens link', + __('Show piclens link', 'nggallery'), $display_type->settings['show_piclens_link'] ); } @@ -130,9 +136,9 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'show_all_in_lightbox', - 'Add Hidden Images', + __('Add Hidden Images', 'nggallery'), $display_type->settings['show_all_in_lightbox'], - 'If pagination is used this option will show all images in the modal window (Thickbox, Lightbox etc.) This increases page load.' + __('If pagination is used this option will show all images in the modal window (Thickbox, Lightbox etc.) This increases page load.', 'nggallery') ); } @@ -141,9 +147,9 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'use_imagebrowser_effect', - 'Use imagebrowser effect', + __('Use imagebrowser effect', 'nggallery'), $display_type->settings['use_imagebrowser_effect'], - 'When active each image in the gallery will link to an imagebrowser display and lightbox effects will not be applied.' + __('When active each image in the gallery will link to an imagebrowser display and lightbox effects will not be applied.', 'nggallery') ); } @@ -158,9 +164,9 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'ajax_pagination', - 'Enable AJAX pagination', + __('Enable AJAX pagination', 'nggallery'), $display_type->settings['ajax_pagination'], - 'Browse images without reloading the page.' + __('Browse images without reloading the page.', 'nggallery') ); } @@ -175,7 +181,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'show_slideshow_link', - 'Show slideshow link', + __('Show slideshow link', 'nggallery'), $display_type->settings['show_slideshow_link'] ); } @@ -191,7 +197,7 @@ class A_NextGen_Basic_Thumbnail_Form extends Mixin_Display_Type_Form return $this->_render_text_field( $display_type, 'slideshow_link_text', - 'Slideshow link text', + __('Slideshow link text', 'nggallery'), $display_type->settings['slideshow_link_text'], '', !empty($display_type->settings['show_slideshow_link']) ? FALSE : TRUE diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnails_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnails_controller.php index d04ce3241bd7f1f22dab5ea031d753988df2069c..5db1c3d293b80722382aa50397c504704d18e09b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnails_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnails_controller.php @@ -19,15 +19,15 @@ class A_NextGen_Basic_Thumbnails_Controller extends Mixin_NextGen_Basic_Gallery_ function index_action($displayed_gallery, $return=FALSE) { $display_settings = $displayed_gallery->display_settings; - + $gallery_id = $displayed_gallery->id(); + $transient_id = $displayed_gallery->transient_id; + // If these options are on we must use the transient_id to identify the gallery if ($display_settings['show_piclens_link'] || $display_settings['ajax_pagination']) - $gallery_id = $displayed_gallery->transient_id; - else - $gallery_id = $displayed_gallery->id(); + $gallery_id = $transient_id; if (!$display_settings['disable_pagination']) - $current_page = (int)$this->param('page', $gallery_id, 1); + $current_page = (int)$this->param('nggpage', $gallery_id, 1); else $current_page = 1; @@ -117,11 +117,11 @@ class A_NextGen_Basic_Thumbnails_Controller extends Mixin_NextGen_Basic_Gallery_ // Generate a slideshow link $slideshow_link = ''; if ($display_settings['show_slideshow_link']) - { + { // origin_url is necessary for ajax operations. slideshow_link_origin will NOT always exist. - $origin_url = (empty($display_settings['slideshow_link_origin']) ? FALSE : $display_settings['slideshow_link_origin']); + $origin_url = $this->object->param('ajax_pagination_referrer'); $slideshow_link = $this->object->get_url_for_alternate_display_type( - $displayed_gallery, NEXTGEN_GALLERY_BASIC_SLIDESHOW, $origin_url + $displayed_gallery, NGG_BASIC_SLIDESHOW, $origin_url ); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/class.nextgen_basic_gallery_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/class.nextgen_basic_gallery_installer.php index e3cfcc11752a4477daf6d6c2cb36a10d4bd8d5ec..471e70f0ccf4df373b07d539c751a3e2f11e2c09 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/class.nextgen_basic_gallery_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/class.nextgen_basic_gallery_installer.php @@ -4,23 +4,23 @@ class C_NextGen_Basic_Gallery_Installer extends C_Gallery_Display_Installer { function install() { - $this->install_display_type(NEXTGEN_GALLERY_BASIC_THUMBNAILS, + $this->install_display_type(NGG_BASIC_THUMBNAILS, array( 'title' => 'NextGEN Basic Thumbnails', 'entity_types' => array('image'), 'preview_image_relpath' => 'photocrati-nextgen_basic_gallery#thumb_preview.jpg', 'default_source' => 'galleries', - 'view_order' => NEXTGEN_DISPLAY_PRIORITY_BASE + 'view_order' => NGG_DISPLAY_PRIORITY_BASE ) ); - $this->install_display_type(NEXTGEN_GALLERY_BASIC_SLIDESHOW, + $this->install_display_type(NGG_BASIC_SLIDESHOW, array( 'title' => 'NextGEN Basic Slideshow', 'entity_types' => array('image'), 'preview_image_relpath' => 'photocrati-nextgen_basic_gallery#slideshow_preview.jpg', 'default_source' => 'galleries', - 'view_order' => NEXTGEN_DISPLAY_PRIORITY_BASE + 10 + 'view_order' => NGG_DISPLAY_PRIORITY_BASE + 10 ) ); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/hook.nextgen_basic_gallery_integration.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/hook.nextgen_basic_gallery_integration.php index 2029c71a427e397ea0fee687765830dfc6c70064..675d1f2553563f8427595c3d80bf032186e8f894 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/hook.nextgen_basic_gallery_integration.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/hook.nextgen_basic_gallery_integration.php @@ -8,7 +8,7 @@ class Hook_NextGen_Basic_Gallery_Integration extends Hook $pid = $this->object->param('pid'); if (!empty($pid) && isset($displayed_gallery->display_settings['use_imagebrowser_effect']) && intval($displayed_gallery->display_settings['use_imagebrowser_effect'])) - $show = NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER; + $show = NGG_BASIC_IMAGEBROWSER; // Are we to display a different display type? if (!empty($show)) diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php index 115b37e657bd4a48fe070d1365c7c505d3da2e06..c7a97273d153bd1eebf21b8c3ec40b96391eac4d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php @@ -7,12 +7,12 @@ */ define( - 'NEXTGEN_GALLERY_BASIC_THUMBNAILS', + 'NGG_BASIC_THUMBNAILS', 'photocrati-nextgen_basic_thumbnails' ); define( - 'NEXTGEN_GALLERY_BASIC_SLIDESHOW', + 'NGG_BASIC_SLIDESHOW', 'photocrati-nextgen_basic_slideshow' ); @@ -25,7 +25,7 @@ class M_NextGen_Basic_Gallery extends C_Base_Module 'photocrati-nextgen_basic_gallery', 'NextGEN Basic Gallery', "Provides NextGEN Gallery's basic thumbnail/slideshow integrated gallery", - '0.6', + '0.9', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -38,7 +38,6 @@ class M_NextGen_Basic_Gallery extends C_Base_Module function get_type_list() { return array( - 'A_Ajax_Pagination_Actions' => 'adapter.ajax_pagination_actions.php', 'A_Nextgen_Basic_Gallery_Forms' => 'adapter.nextgen_basic_gallery_forms.php', 'C_Nextgen_Basic_Gallery_Installer' => 'class.nextgen_basic_gallery_installer.php', 'A_Nextgen_Basic_Gallery_Mapper' => 'adapter.nextgen_basic_gallery_mapper.php', @@ -57,28 +56,31 @@ class M_NextGen_Basic_Gallery extends C_Base_Module function _register_adapters() { - // Provides the display type forms - $this->get_registry()->add_adapter( - 'I_Form', - 'A_NextGen_Basic_Slideshow_Form', - NEXTGEN_GALLERY_BASIC_SLIDESHOW - ); - $this->get_registry()->add_adapter( - 'I_Form', - 'A_NextGen_Basic_Thumbnail_Form', - NEXTGEN_GALLERY_BASIC_THUMBNAILS - ); + if (M_Attach_To_Post::is_atp_url() || is_admin()) + { + // Provides the display type forms + $this->get_registry()->add_adapter( + 'I_Form', + 'A_NextGen_Basic_Slideshow_Form', + NGG_BASIC_SLIDESHOW + ); + $this->get_registry()->add_adapter( + 'I_Form', + 'A_NextGen_Basic_Thumbnail_Form', + NGG_BASIC_THUMBNAILS + ); + } // Provides the controllers for the display types $this->get_registry()->add_adapter( 'I_Display_Type_Controller', 'A_NextGen_Basic_Slideshow_Controller', - NEXTGEN_GALLERY_BASIC_SLIDESHOW + NGG_BASIC_SLIDESHOW ); $this->get_registry()->add_adapter( 'I_Display_Type_Controller', 'A_NextGen_Basic_Thumbnails_Controller', - NEXTGEN_GALLERY_BASIC_THUMBNAILS + NGG_BASIC_THUMBNAILS ); // Provide defaults for the display types @@ -104,30 +106,32 @@ class M_NextGen_Basic_Gallery extends C_Base_Module 'I_Router', 'A_NextGen_Basic_Gallery_Routes' ); - - - // Provides AJAX pagination actions required by the display types - $this->get_registry()->add_adapter( - 'I_Ajax_Controller', - 'A_Ajax_Pagination_Actions' - ); - // Adds the settings forms - $this->get_registry()->add_adapter( - 'I_Form_Manager', - 'A_NextGen_Basic_Gallery_Forms' - ); + if (M_Attach_To_Post::is_atp_url() || is_admin()) + { + // Adds the settings forms + $this->get_registry()->add_adapter( + 'I_Form_Manager', + 'A_NextGen_Basic_Gallery_Forms' + ); + } } function _register_hooks() { - C_NextGen_Shortcode_Manager::add('nggallery', array(&$this, 'render')); - C_NextGen_Shortcode_Manager::add('nggtags', array(&$this, 'render_based_on_tags')); - C_NextGen_Shortcode_Manager::add('random', array(&$this, 'render_random_images')); - C_NextGen_Shortcode_Manager::add('recent', array(&$this, 'render_recent_images')); - C_NextGen_Shortcode_Manager::add('thumb', array(&$this, 'render_thumb_shortcode')); - C_NextGen_Shortcode_Manager::add('slideshow', array(&$this, 'render_slideshow')); - C_NextGen_Shortcode_Manager::add('nggslideshow', array(&$this, 'render_slideshow')); + if (!defined('NGG_DISABLE_LEGACY_SHORTCODES') || !NGG_DISABLE_LEGACY_SHORTCODES) + { + C_NextGen_Shortcode_Manager::add('random', array(&$this, 'render_random_images')); + C_NextGen_Shortcode_Manager::add('recent', array(&$this, 'render_recent_images')); + C_NextGen_Shortcode_Manager::add('thumb', array(&$this, 'render_thumb_shortcode')); + C_NextGen_Shortcode_Manager::add('slideshow', array(&$this, 'render_slideshow')); + } + C_NextGen_Shortcode_Manager::add('nggallery', array(&$this, 'render')); + C_NextGen_Shortcode_Manager::add('nggtags', array(&$this, 'render_based_on_tags')); + C_NextGen_Shortcode_Manager::add('nggslideshow', array(&$this, 'render_slideshow')); + C_NextGen_Shortcode_Manager::add('nggrandom', array(&$this, 'render_random_images')); + C_NextGen_Shortcode_Manager::add('nggrecent', array(&$this, 'render_recent_images')); + C_NextGen_Shortcode_Manager::add('nggthumb', array(&$this, 'render_thumb_shortcode')); } /** @@ -152,7 +156,7 @@ class M_NextGen_Basic_Gallery extends C_Base_Module function render($params, $inner_content=NULL) { $params['gallery_ids'] = $this->_get_param('id', NULL, $params); - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_GALLERY_BASIC_THUMBNAILS, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_THUMBNAILS, $params); if (isset($params['images'])) { $params['images_per_page'] = $this->_get_param('images', NULL, $params); @@ -168,7 +172,7 @@ class M_NextGen_Basic_Gallery extends C_Base_Module { $params['tag_ids'] = $this->_get_param('gallery', $this->_get_param('album', array(), $params), $params); $params['source'] = $this->_get_param('source', 'tags', $params); - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_GALLERY_BASIC_THUMBNAILS, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_THUMBNAILS, $params); unset($params['gallery']); $renderer = $this->get_registry()->get_utility('I_Displayed_Gallery_Renderer'); @@ -180,7 +184,7 @@ class M_NextGen_Basic_Gallery extends C_Base_Module $params['source'] = $this->_get_param('source', 'random', $params); $params['images_per_page'] = $this->_get_param('max', NULL, $params); $params['disable_pagination'] = $this->_get_param('disable_pagination', TRUE, $params); - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_GALLERY_BASIC_THUMBNAILS, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_THUMBNAILS, $params); // inside if because Mixin_Displayed_Gallery_Instance_Methods->get_entities() doesn't handle NULL container_ids // correctly @@ -201,7 +205,7 @@ class M_NextGen_Basic_Gallery extends C_Base_Module $params['source'] = $this->_get_param('source', 'recent', $params); $params['images_per_page'] = $this->_get_param('max', NULL, $params); $params['disable_pagination'] = $this->_get_param('disable_pagination', TRUE, $params); - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_GALLERY_BASIC_THUMBNAILS, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_THUMBNAILS, $params); if (isset($params['id'])) { @@ -219,7 +223,7 @@ class M_NextGen_Basic_Gallery extends C_Base_Module { $params['entity_ids'] = $this->_get_param('id', NULL, $params); $params['source'] = $this->_get_param('source', 'galleries', $params); - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_GALLERY_BASIC_THUMBNAILS, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_THUMBNAILS, $params); unset($params['id']); $renderer = $this->get_registry()->get_utility('I_Displayed_Gallery_Renderer'); @@ -229,7 +233,7 @@ class M_NextGen_Basic_Gallery extends C_Base_Module function render_slideshow($params, $inner_content=NULL) { $params['gallery_ids'] = $this->_get_param('id', NULL, $params); - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_GALLERY_BASIC_SLIDESHOW, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_SLIDESHOW, $params); $params['gallery_width'] = $this->_get_param('w', NULL, $params); $params['gallery_height'] = $this->_get_param('h', NULL, $params); unset($params['id'], $params['w'], $params['h']); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/ajax_pagination.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/ajax_pagination.js index d15de65ce1ac5d743a8243ea98f9d27503f7b2dd..5f5a1af8aa063cdb38bded886f52b7e28ff3ef54 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/ajax_pagination.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/ajax_pagination.js @@ -7,35 +7,29 @@ jQuery(function($){ */ init: function(){ var self = this; - jQuery('body').on('click', 'a.page-numbers, a.prev, a.next', function(e){ - e.preventDefault(); + $('body').on('click', 'a.page-numbers, a.prev, a.next', function(e){ var $this = $(this); var $gallery = $this.parents('.ngg-galleryoverview:first'); var gallery_id= $gallery.attr('id').replace('ngg-gallery-','').replace(/-\d+$/, ''); + + if ($gallery.hasClass('ngg-ajax-pagination-none')) + return; + + e.preventDefault(); self.toggle_busy(true); - // Create a request to render a displayed gallery - var params = self.get_querystring_params_from_url($this.attr('href')); - params['action'] = 'get_displayed_gallery_page'; - params['displayed_gallery_id'] = gallery_id; - params['page'] = $this.data('pageid'); - params['ajax_pagination_referrer'] = document.URL; - - $.get(photocrati_ajax.url, params, function(response){ - - // Ensure that the server returned JSON - if (typeof(response) != 'object') response = JSON.parse(response); - if (response) { - $gallery.replaceWith(response.html); - } + $.get($this.attr('href'), function(response){ + var html = $(response); + $gallery.replaceWith(html.find('div[id*="ngg-gallery-'+gallery_id+'"]')); // Let the user know that we've refreshed the content $(document).trigger('refreshed'); - }).always(function() { + + + }).always(function() { self.toggle_busy(false); }); - }); }, diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails_settings.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails_settings.js index 83fc649628ab1d0b6de959885443c4db0b48fbd4..e36f55833d2c6bd20a95133eb7ca93eb495e25c4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails_settings.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/nextgen_basic_thumbnails_settings.js @@ -1,13 +1,11 @@ jQuery(function($) { $('input[name="photocrati-nextgen_basic_thumbnails[override_thumbnail_settings]"]') .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_thumbnails_thumbnail_dimensions')) - .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_thumbnails_thumbnail_quality')) - .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_thumbnails_thumbnail_crop')) - .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_thumbnails_thumbnail_watermark')); + .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_thumbnails_thumbnail_crop')); $('input[name="photocrati-nextgen_basic_thumbnails[show_piclens_link]"]') .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_thumbnails_piclens_link_text')); $('input[name="photocrati-nextgen_basic_thumbnails[show_slideshow_link]"]') .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_basic_thumbnails_slideshow_link_text')) -}); \ No newline at end of file +}); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/piclens/lytebox/lytebox.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/piclens/lytebox/lytebox.css index e01ce7900c61c272fee358a3646f9cdf63045b65..5303fac1bf364137015b95d7ee61a3b9c88411f2 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/piclens/lytebox/lytebox.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/piclens/lytebox/lytebox.css @@ -1,93 +1,93 @@ -#lbOverlay { position: fixed; top: 0; left: 0; z-index: 99998; width: 100%; height: 500px; } - #lbOverlay.grey { background-color: #000000; } - #lbOverlay.red { background-color: #330000; } - #lbOverlay.green { background-color: #003300; } - #lbOverlay.blue { background-color: #011D50; } - #lbOverlay.gold { background-color: #666600; } - -#lbMain { position: absolute; left: 0; width: 100%; z-index: 99999; text-align: center; line-height: 0; } -#lbMain a img { border: none; } - -#lbOuterContainer { position: relative; background-color: #fff; width: 200px; height: 200px; margin: 0 auto; } - #lbOuterContainer.grey { border: 3px solid #888888; } - #lbOuterContainer.red { border: 3px solid #DD0000; } - #lbOuterContainer.green { border: 3px solid #00B000; } - #lbOuterContainer.blue { border: 3px solid #5F89D8; } - #lbOuterContainer.gold { border: 3px solid #B0B000; } - -#lbDetailsContainer { font: 10px Verdana, Helvetica, sans-serif; background-color: #fff; width: 100%; line-height: 1.4em; overflow: auto; margin: 0 auto; } - #lbDetailsContainer.grey { border: 3px solid #888888; border-top: none; } - #lbDetailsContainer.red { border: 3px solid #DD0000; border-top: none; } - #lbDetailsContainer.green { border: 3px solid #00B000; border-top: none; } - #lbDetailsContainer.blue { border: 3px solid #5F89D8; border-top: none; } - #lbDetailsContainer.gold { border: 3px solid #B0B000; border-top: none; } - -#lbImageContainer, #lbIframeContainer { padding: 10px; } -#lbLoading { - position: absolute; top: 45%; left: 0%; height: 32px; width: 100%; text-align: center; line-height: 0; background: url(images/loading.gif) center no-repeat; -} - -#lbHoverNav { position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 10; } -#lbImageContainer>#lbHoverNav { left: 0; } -#lbHoverNav a { outline: none; } - -#lbPrev { width: 49%; height: 100%; background: transparent url(images/blank.gif) no-repeat; display: block; left: 0; float: left; } - #lbPrev.grey:hover, #lbPrev.grey:visited:hover { background: url(images/prev_grey.gif) left 15% no-repeat; } - #lbPrev.red:hover, #lbPrev.red:visited:hover { background: url(images/prev_red.gif) left 15% no-repeat; } - #lbPrev.green:hover, #lbPrev.green:visited:hover { background: url(images/prev_green.gif) left 15% no-repeat; } - #lbPrev.blue:hover, #lbPrev.blue:visited:hover { background: url(images/prev_blue.gif) left 15% no-repeat; } - #lbPrev.gold:hover, #lbPrev.gold:visited:hover { background: url(images/prev_gold.gif) left 15% no-repeat; } - -#lbNext { width: 49%; height: 100%; background: transparent url(images/blank.gif) no-repeat; display: block; right: 0; float: right; } - #lbNext.grey:hover, #lbNext.grey:visited:hover { background: url(images/next_grey.gif) right 15% no-repeat; } - #lbNext.red:hover, #lbNext.red:visited:hover { background: url(images/next_red.gif) right 15% no-repeat; } - #lbNext.green:hover, #lbNext.green:visited:hover { background: url(images/next_green.gif) right 15% no-repeat; } - #lbNext.blue:hover, #lbNext.blue:visited:hover { background: url(images/next_blue.gif) right 15% no-repeat; } - #lbNext.gold:hover, #lbNext.gold:visited:hover { background: url(images/next_gold.gif) right 15% no-repeat; } - -#lbPrev2, #lbNext2 { text-decoration: none; font-weight: bold; } - #lbPrev2.grey, #lbNext2.grey, #lbSpacer.grey { color: #333333; } - #lbPrev2.red, #lbNext2.red, #lbSpacer.red { color: #620000; } - #lbPrev2.green, #lbNext2.green, #lbSpacer.green { color: #003300; } - #lbPrev2.blue, #lbNext2.blue, #lbSpacer.blue { color: #01379E; } - #lbPrev2.gold, #lbNext2.gold, #lbSpacer.gold { color: #666600; } - -#lbPrev2_Off, #lbNext2_Off { font-weight: bold; } - #lbPrev2_Off.grey, #lbNext2_Off.grey { color: #CCCCCC; } - #lbPrev2_Off.red, #lbNext2_Off.red { color: #FFCCCC; } - #lbPrev2_Off.green, #lbNext2_Off.green { color: #82FF82; } - #lbPrev2_Off.blue, #lbNext2_Off.blue { color: #B7CAEE; } - #lbPrev2_Off.gold, #lbNext2_Off.gold { color: #E1E100; } - -#lbDetailsData { padding: 0 10px; } - #lbDetailsData.grey { color: #333333; } - #lbDetailsData.red { color: #620000; } - #lbDetailsData.green { color: #003300; } - #lbDetailsData.blue { color: #01379E; } - #lbDetailsData.gold { color: #666600; } - -#lbDetails { width: 60%; float: left; text-align: left; } -#lbCaption { display: block; font-weight: bold; } -#lbNumberDisplay { float: left; display: block; padding-bottom: 1.0em; } -#lbNavDisplay { float: left; display: block; padding-bottom: 1.0em; } - -#lbClose { width: 64px; height: 28px; float: right; margin-bottom: 1px; } - #lbClose.grey { background: url(images/close_grey.png) no-repeat; } - #lbClose.red { background: url(images/close_red.png) no-repeat; } - #lbClose.green { background: url(images/close_green.png) no-repeat; } - #lbClose.blue { background: url(images/close_blue.png) no-repeat; } - #lbClose.gold { background: url(images/close_gold.png) no-repeat; } - -#lbPlay { width: 64px; height: 28px; float: right; margin-bottom: 1px; } - #lbPlay.grey { background: url(images/play_grey.png) no-repeat; } - #lbPlay.red { background: url(images/play_red.png) no-repeat; } - #lbPlay.green { background: url(images/play_green.png) no-repeat; } - #lbPlay.blue { background: url(images/play_blue.png) no-repeat; } - #lbPlay.gold { background: url(images/play_gold.png) no-repeat; } - -#lbPause { width: 64px; height: 28px; float: right; margin-bottom: 1px; } - #lbPause.grey { background: url(images/pause_grey.png) no-repeat; } - #lbPause.red { background: url(images/pause_red.png) no-repeat; } - #lbPause.green { background: url(images/pause_green.png) no-repeat; } - #lbPause.blue { background: url(images/pause_blue.png) no-repeat; } +#lbOverlay { position: fixed; top: 0; left: 0; z-index: 99998; width: 100%; height: 500px; } + #lbOverlay.grey { background-color: #000000; } + #lbOverlay.red { background-color: #330000; } + #lbOverlay.green { background-color: #003300; } + #lbOverlay.blue { background-color: #011D50; } + #lbOverlay.gold { background-color: #666600; } + +#lbMain { position: absolute; left: 0; width: 100%; z-index: 99999; text-align: center; line-height: 0; } +#lbMain a img { border: none; } + +#lbOuterContainer { position: relative; background-color: #fff; width: 200px; height: 200px; margin: 0 auto; } + #lbOuterContainer.grey { border: 3px solid #888888; } + #lbOuterContainer.red { border: 3px solid #DD0000; } + #lbOuterContainer.green { border: 3px solid #00B000; } + #lbOuterContainer.blue { border: 3px solid #5F89D8; } + #lbOuterContainer.gold { border: 3px solid #B0B000; } + +#lbDetailsContainer { font: 10px Verdana, Helvetica, sans-serif; background-color: #fff; width: 100%; line-height: 1.4em; overflow: auto; margin: 0 auto; } + #lbDetailsContainer.grey { border: 3px solid #888888; border-top: none; } + #lbDetailsContainer.red { border: 3px solid #DD0000; border-top: none; } + #lbDetailsContainer.green { border: 3px solid #00B000; border-top: none; } + #lbDetailsContainer.blue { border: 3px solid #5F89D8; border-top: none; } + #lbDetailsContainer.gold { border: 3px solid #B0B000; border-top: none; } + +#lbImageContainer, #lbIframeContainer { padding: 10px; } +#lbLoading { + position: absolute; top: 45%; left: 0%; height: 32px; width: 100%; text-align: center; line-height: 0; background: url(images/loading.gif) center no-repeat; +} + +#lbHoverNav { position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 10; } +#lbImageContainer>#lbHoverNav { left: 0; } +#lbHoverNav a { outline: none; } + +#lbPrev { width: 49%; height: 100%; background: transparent url(images/blank.gif) no-repeat; display: block; left: 0; float: left; } + #lbPrev.grey:hover, #lbPrev.grey:visited:hover { background: url(images/prev_grey.gif) left 15% no-repeat; } + #lbPrev.red:hover, #lbPrev.red:visited:hover { background: url(images/prev_red.gif) left 15% no-repeat; } + #lbPrev.green:hover, #lbPrev.green:visited:hover { background: url(images/prev_green.gif) left 15% no-repeat; } + #lbPrev.blue:hover, #lbPrev.blue:visited:hover { background: url(images/prev_blue.gif) left 15% no-repeat; } + #lbPrev.gold:hover, #lbPrev.gold:visited:hover { background: url(images/prev_gold.gif) left 15% no-repeat; } + +#lbNext { width: 49%; height: 100%; background: transparent url(images/blank.gif) no-repeat; display: block; right: 0; float: right; } + #lbNext.grey:hover, #lbNext.grey:visited:hover { background: url(images/next_grey.gif) right 15% no-repeat; } + #lbNext.red:hover, #lbNext.red:visited:hover { background: url(images/next_red.gif) right 15% no-repeat; } + #lbNext.green:hover, #lbNext.green:visited:hover { background: url(images/next_green.gif) right 15% no-repeat; } + #lbNext.blue:hover, #lbNext.blue:visited:hover { background: url(images/next_blue.gif) right 15% no-repeat; } + #lbNext.gold:hover, #lbNext.gold:visited:hover { background: url(images/next_gold.gif) right 15% no-repeat; } + +#lbPrev2, #lbNext2 { text-decoration: none; font-weight: bold; } + #lbPrev2.grey, #lbNext2.grey, #lbSpacer.grey { color: #333333; } + #lbPrev2.red, #lbNext2.red, #lbSpacer.red { color: #620000; } + #lbPrev2.green, #lbNext2.green, #lbSpacer.green { color: #003300; } + #lbPrev2.blue, #lbNext2.blue, #lbSpacer.blue { color: #01379E; } + #lbPrev2.gold, #lbNext2.gold, #lbSpacer.gold { color: #666600; } + +#lbPrev2_Off, #lbNext2_Off { font-weight: bold; } + #lbPrev2_Off.grey, #lbNext2_Off.grey { color: #CCCCCC; } + #lbPrev2_Off.red, #lbNext2_Off.red { color: #FFCCCC; } + #lbPrev2_Off.green, #lbNext2_Off.green { color: #82FF82; } + #lbPrev2_Off.blue, #lbNext2_Off.blue { color: #B7CAEE; } + #lbPrev2_Off.gold, #lbNext2_Off.gold { color: #E1E100; } + +#lbDetailsData { padding: 0 10px; } + #lbDetailsData.grey { color: #333333; } + #lbDetailsData.red { color: #620000; } + #lbDetailsData.green { color: #003300; } + #lbDetailsData.blue { color: #01379E; } + #lbDetailsData.gold { color: #666600; } + +#lbDetails { width: 60%; float: left; text-align: left; } +#lbCaption { display: block; font-weight: bold; } +#lbNumberDisplay { float: left; display: block; padding-bottom: 1.0em; } +#lbNavDisplay { float: left; display: block; padding-bottom: 1.0em; } + +#lbClose { width: 64px; height: 28px; float: right; margin-bottom: 1px; } + #lbClose.grey { background: url(images/close_grey.png) no-repeat; } + #lbClose.red { background: url(images/close_red.png) no-repeat; } + #lbClose.green { background: url(images/close_green.png) no-repeat; } + #lbClose.blue { background: url(images/close_blue.png) no-repeat; } + #lbClose.gold { background: url(images/close_gold.png) no-repeat; } + +#lbPlay { width: 64px; height: 28px; float: right; margin-bottom: 1px; } + #lbPlay.grey { background: url(images/play_grey.png) no-repeat; } + #lbPlay.red { background: url(images/play_red.png) no-repeat; } + #lbPlay.green { background: url(images/play_green.png) no-repeat; } + #lbPlay.blue { background: url(images/play_blue.png) no-repeat; } + #lbPlay.gold { background: url(images/play_gold.png) no-repeat; } + +#lbPause { width: 64px; height: 28px; float: right; margin-bottom: 1px; } + #lbPause.grey { background: url(images/pause_grey.png) no-repeat; } + #lbPause.red { background: url(images/pause_red.png) no-repeat; } + #lbPause.green { background: url(images/pause_green.png) no-repeat; } + #lbPause.blue { background: url(images/pause_blue.png) no-repeat; } #lbPause.gold { background: url(images/pause_gold.png) no-repeat; } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/piclens/lytebox/lytebox.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/piclens/lytebox/lytebox.js index d9e29dc3486aeeb8c8ab9f32b141f7348f422bfe..1cf7210d0ab4560c0a828107debaa80552c510ba 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/piclens/lytebox/lytebox.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/static/thumbnails/piclens/lytebox/lytebox.js @@ -1,843 +1,843 @@ -//***********************************************************************************************************************************/ -// LyteBox v3.22 -// -// Author: Markus F. Hay -// Website: http://www.dolem.com/lytebox -// Date: October 2, 2007 -// License: Creative Commons Attribution 3.0 License (http://creativecommons.org/licenses/by/3.0/) -// Browsers: Tested successfully on WinXP with the following browsers (using no DOCTYPE and Strict/Transitional/Loose DOCTYPES): -// * Firefox: 2.0.0.7, 1.5.0.12 -// * Internet Explorer: 7.0, 6.0 SP2, 5.5 SP2 -// * Opera: 9.23 -// -// Releases: For up-to-date and complete release information, visit http://www.dolem.com/forum/showthread.php?tid=62 -// * v3.22 (10/02/07) -// * v3.21 (09/30/07) -// * v3.20 (07/12/07) -// * v3.10 (05/28/07) -// * v3.00 (05/15/07) -// * v2.02 (11/13/06) -// -// Credit: LyteBox was originally derived from the Lightbox class (v2.02) that was written by Lokesh Dhakar. For more -// information please visit http://huddletogether.com/projects/lightbox2/ -//***********************************************************************************************************************************/ -Array.prototype.removeDuplicates = function () { for (var i = 1; i < this.length; i++) { if (this[i][0] == this[i-1][0]) { this.splice(i,1); } } } -Array.prototype.empty = function () { for (var i = 0; i <= this.length; i++) { this.shift(); } } -String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g, ''); } - -function LyteBox() { - /*** Start Global Configuration ***/ - this.theme = 'grey'; // themes: grey (default), red, green, blue, gold - this.hideFlash = true; // controls whether or not Flash objects should be hidden - this.outerBorder = true; // controls whether to show the outer grey (or theme) border - this.resizeSpeed = 8; // controls the speed of the image resizing (1=slowest and 10=fastest) - this.maxOpacity = 80; // higher opacity = darker overlay, lower opacity = lighter overlay - this.navType = 1; // 1 = "Prev/Next" buttons on top left and left (default), 2 = "<< prev | next >>" links next to image number - this.autoResize = true; // controls whether or not images should be resized if larger than the browser window dimensions - this.doAnimations = true; // controls whether or not "animate" Lytebox, i.e. resize transition between images, fade in/out effects, etc. - - this.borderSize = 12; // if you adjust the padding in the CSS, you will need to update this variable -- otherwise, leave this alone... - /*** End Global Configuration ***/ - - /*** Configure Slideshow Options ***/ - this.slideInterval = 4000; // Change value (milliseconds) to increase/decrease the time between "slides" (10000 = 10 seconds) - this.showNavigation = true; // true to display Next/Prev buttons/text during slideshow, false to hide - this.showClose = true; // true to display the Close button, false to hide - this.showDetails = true; // true to display image details (caption, count), false to hide - this.showPlayPause = true; // true to display pause/play buttons next to close button, false to hide - this.autoEnd = true; // true to automatically close Lytebox after the last image is reached, false to keep open - this.pauseOnNextClick = false; // true to pause the slideshow when the "Next" button is clicked - this.pauseOnPrevClick = true; // true to pause the slideshow when the "Prev" button is clicked - /*** End Slideshow Configuration ***/ - - if(this.resizeSpeed > 10) { this.resizeSpeed = 10; } - if(this.resizeSpeed < 1) { resizeSpeed = 1; } - this.resizeDuration = (11 - this.resizeSpeed) * 0.15; - this.resizeWTimerArray = new Array(); - this.resizeWTimerCount = 0; - this.resizeHTimerArray = new Array(); - this.resizeHTimerCount = 0; - this.showContentTimerArray = new Array(); - this.showContentTimerCount = 0; - this.overlayTimerArray = new Array(); - this.overlayTimerCount = 0; - this.imageTimerArray = new Array(); - this.imageTimerCount = 0; - this.timerIDArray = new Array(); - this.timerIDCount = 0; - this.slideshowIDArray = new Array(); - this.slideshowIDCount = 0; - this.imageArray = new Array(); - this.activeImage = null; - this.slideArray = new Array(); - this.activeSlide = null; - this.frameArray = new Array(); - this.activeFrame = null; - this.checkFrame(); - this.isSlideshow = false; - this.isLyteframe = false; - /*@cc_on - /*@if (@_jscript) - this.ie = (document.all && !window.opera) ? true : false; - /*@else @*/ - this.ie = false; - /*@end - @*/ - this.ie7 = (this.ie && window.XMLHttpRequest); - this.initialize(); -} -LyteBox.prototype.initialize = function() { - this.updateLyteboxItems(); - var objBody = this.doc.getElementsByTagName("body").item(0); - if (this.doc.getElementById('lbOverlay')) { - objBody.removeChild(this.doc.getElementById("lbOverlay")); - objBody.removeChild(this.doc.getElementById("lbMain")); - } - var objOverlay = this.doc.createElement("div"); - objOverlay.setAttribute('id','lbOverlay'); - objOverlay.setAttribute((this.ie ? 'className' : 'class'), this.theme); - if ((this.ie && !this.ie7) || (this.ie7 && this.doc.compatMode == 'BackCompat')) { - objOverlay.style.position = 'absolute'; - } - objOverlay.style.display = 'none'; - objBody.appendChild(objOverlay); - var objLytebox = this.doc.createElement("div"); - objLytebox.setAttribute('id','lbMain'); - objLytebox.style.display = 'none'; - objBody.appendChild(objLytebox); - var objOuterContainer = this.doc.createElement("div"); - objOuterContainer.setAttribute('id','lbOuterContainer'); - objOuterContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objLytebox.appendChild(objOuterContainer); - var objIframeContainer = this.doc.createElement("div"); - objIframeContainer.setAttribute('id','lbIframeContainer'); - objIframeContainer.style.display = 'none'; - objOuterContainer.appendChild(objIframeContainer); - var objIframe = this.doc.createElement("iframe"); - objIframe.setAttribute('id','lbIframe'); - objIframe.setAttribute('name','lbIframe'); - objIframe.style.display = 'none'; - objIframeContainer.appendChild(objIframe); - var objImageContainer = this.doc.createElement("div"); - objImageContainer.setAttribute('id','lbImageContainer'); - objOuterContainer.appendChild(objImageContainer); - var objLyteboxImage = this.doc.createElement("img"); - objLyteboxImage.setAttribute('id','lbImage'); - objImageContainer.appendChild(objLyteboxImage); - var objLoading = this.doc.createElement("div"); - objLoading.setAttribute('id','lbLoading'); - objOuterContainer.appendChild(objLoading); - var objDetailsContainer = this.doc.createElement("div"); - objDetailsContainer.setAttribute('id','lbDetailsContainer'); - objDetailsContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objLytebox.appendChild(objDetailsContainer); - var objDetailsData =this.doc.createElement("div"); - objDetailsData.setAttribute('id','lbDetailsData'); - objDetailsData.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objDetailsContainer.appendChild(objDetailsData); - var objDetails = this.doc.createElement("div"); - objDetails.setAttribute('id','lbDetails'); - objDetailsData.appendChild(objDetails); - var objCaption = this.doc.createElement("span"); - objCaption.setAttribute('id','lbCaption'); - objDetails.appendChild(objCaption); - var objHoverNav = this.doc.createElement("div"); - objHoverNav.setAttribute('id','lbHoverNav'); - objImageContainer.appendChild(objHoverNav); - var objBottomNav = this.doc.createElement("div"); - objBottomNav.setAttribute('id','lbBottomNav'); - objDetailsData.appendChild(objBottomNav); - var objPrev = this.doc.createElement("a"); - objPrev.setAttribute('id','lbPrev'); - objPrev.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objPrev.setAttribute('href','#'); - objHoverNav.appendChild(objPrev); - var objNext = this.doc.createElement("a"); - objNext.setAttribute('id','lbNext'); - objNext.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objNext.setAttribute('href','#'); - objHoverNav.appendChild(objNext); - var objNumberDisplay = this.doc.createElement("span"); - objNumberDisplay.setAttribute('id','lbNumberDisplay'); - objDetails.appendChild(objNumberDisplay); - var objNavDisplay = this.doc.createElement("span"); - objNavDisplay.setAttribute('id','lbNavDisplay'); - objNavDisplay.style.display = 'none'; - objDetails.appendChild(objNavDisplay); - var objClose = this.doc.createElement("a"); - objClose.setAttribute('id','lbClose'); - objClose.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objClose.setAttribute('href','#'); - objBottomNav.appendChild(objClose); - var objPause = this.doc.createElement("a"); - objPause.setAttribute('id','lbPause'); - objPause.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objPause.setAttribute('href','#'); - objPause.style.display = 'none'; - objBottomNav.appendChild(objPause); - var objPlay = this.doc.createElement("a"); - objPlay.setAttribute('id','lbPlay'); - objPlay.setAttribute((this.ie ? 'className' : 'class'), this.theme); - objPlay.setAttribute('href','#'); - objPlay.style.display = 'none'; - objBottomNav.appendChild(objPlay); -}; -LyteBox.prototype.updateLyteboxItems = function() { - var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a'); - for (var i = 0; i < anchors.length; i++) { - var anchor = anchors[i]; - var relAttribute = String(anchor.getAttribute('rel')); - if (anchor.getAttribute('href')) { - if (relAttribute.toLowerCase().match('lytebox')) { - anchor.onclick = function () { myLytebox.start(this, false, false); return false; } - } else if (relAttribute.toLowerCase().match('lyteshow')) { - anchor.onclick = function () { myLytebox.start(this, true, false); return false; } - } else if (relAttribute.toLowerCase().match('lyteframe')) { - anchor.onclick = function () { myLytebox.start(this, false, true); return false; } - } - } - } -}; -LyteBox.prototype.start = function(imageLink, doSlide, doFrame) { - if (this.ie && !this.ie7) { this.toggleSelects('hide'); } - if (this.hideFlash) { this.toggleFlash('hide'); } - this.isLyteframe = (doFrame ? true : false); - var pageSize = this.getPageSize(); - var objOverlay = this.doc.getElementById('lbOverlay'); - var objBody = this.doc.getElementsByTagName("body").item(0); - objOverlay.style.height = pageSize[1] + "px"; - objOverlay.style.display = ''; - this.appear('lbOverlay', (this.doAnimations ? 0 : this.maxOpacity)); - var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a'); - if (this.isLyteframe) { - this.frameArray = []; - this.frameNum = 0; - if ((imageLink.getAttribute('rel') == 'lyteframe')) { - var rev = imageLink.getAttribute('rev'); - this.frameArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev))); - } else { - if (imageLink.getAttribute('rel').indexOf('lyteframe') != -1) { - for (var i = 0; i < anchors.length; i++) { - var anchor = anchors[i]; - if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) { - var rev = anchor.getAttribute('rev'); - this.frameArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev))); - } - } - this.frameArray.removeDuplicates(); - while(this.frameArray[this.frameNum][0] != imageLink.getAttribute('href')) { this.frameNum++; } - } - } - } else { - this.imageArray = []; - this.imageNum = 0; - this.slideArray = []; - this.slideNum = 0; - if ((imageLink.getAttribute('rel') == 'lytebox')) { - this.imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title'))); - } else { - if (imageLink.getAttribute('rel').indexOf('lytebox') != -1) { - for (var i = 0; i < anchors.length; i++) { - var anchor = anchors[i]; - if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) { - this.imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'))); - } - } - this.imageArray.removeDuplicates(); - while(this.imageArray[this.imageNum][0] != imageLink.getAttribute('href')) { this.imageNum++; } - } - if (imageLink.getAttribute('rel').indexOf('lyteshow') != -1) { - for (var i = 0; i < anchors.length; i++) { - var anchor = anchors[i]; - if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) { - this.slideArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'))); - } - } - this.slideArray.removeDuplicates(); - while(this.slideArray[this.slideNum][0] != imageLink.getAttribute('href')) { this.slideNum++; } - } - } - } - var object = this.doc.getElementById('lbMain'); - object.style.top = (this.getPageScroll() + (pageSize[3] / 15)) + "px"; - object.style.display = ''; - if (!this.outerBorder) { - this.doc.getElementById('lbOuterContainer').style.border = 'none'; - this.doc.getElementById('lbDetailsContainer').style.border = 'none'; - } else { - this.doc.getElementById('lbOuterContainer').style.borderBottom = ''; - this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme); - } - this.doc.getElementById('lbOverlay').onclick = function() { myLytebox.end(); return false; } - this.doc.getElementById('lbMain').onclick = function(e) { - var e = e; - if (!e) { - if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) { - e = window.parent.window.event; - } else { - e = window.event; - } - } - var id = (e.target ? e.target.id : e.srcElement.id); - if (id == 'lbMain') { myLytebox.end(); return false; } - } - this.doc.getElementById('lbClose').onclick = function() { myLytebox.end(); return false; } - this.doc.getElementById('lbPause').onclick = function() { myLytebox.togglePlayPause("lbPause", "lbPlay"); return false; } - this.doc.getElementById('lbPlay').onclick = function() { myLytebox.togglePlayPause("lbPlay", "lbPause"); return false; } - this.isSlideshow = doSlide; - this.isPaused = (this.slideNum != 0 ? true : false); - if (this.isSlideshow && this.showPlayPause && this.isPaused) { - this.doc.getElementById('lbPlay').style.display = ''; - this.doc.getElementById('lbPause').style.display = 'none'; - } - if (this.isLyteframe) { - this.changeContent(this.frameNum); - } else { - if (this.isSlideshow) { - this.changeContent(this.slideNum); - } else { - this.changeContent(this.imageNum); - } - } -}; -LyteBox.prototype.changeContent = function(imageNum) { - if (this.isSlideshow) { - for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); } - } - this.activeImage = this.activeSlide = this.activeFrame = imageNum; - if (!this.outerBorder) { - this.doc.getElementById('lbOuterContainer').style.border = 'none'; - this.doc.getElementById('lbDetailsContainer').style.border = 'none'; - } else { - this.doc.getElementById('lbOuterContainer').style.borderBottom = ''; - this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme); - } - this.doc.getElementById('lbLoading').style.display = ''; - this.doc.getElementById('lbImage').style.display = 'none'; - this.doc.getElementById('lbIframe').style.display = 'none'; - this.doc.getElementById('lbPrev').style.display = 'none'; - this.doc.getElementById('lbNext').style.display = 'none'; - this.doc.getElementById('lbIframeContainer').style.display = 'none'; - this.doc.getElementById('lbDetailsContainer').style.display = 'none'; - this.doc.getElementById('lbNumberDisplay').style.display = 'none'; - if (this.navType == 2 || this.isLyteframe) { - object = this.doc.getElementById('lbNavDisplay'); - object.innerHTML = ' <span id="lbPrev2_Off" style="display: none;" class="' + this.theme + '">« prev</span><a href="#" id="lbPrev2" class="' + this.theme + '" style="display: none;">« prev</a> <b id="lbSpacer" class="' + this.theme + '">||</b> <span id="lbNext2_Off" style="display: none;" class="' + this.theme + '">next »</span><a href="#" id="lbNext2" class="' + this.theme + '" style="display: none;">next »</a>'; - object.style.display = 'none'; - } - if (this.isLyteframe) { - var iframe = myLytebox.doc.getElementById('lbIframe'); - var styles = this.frameArray[this.activeFrame][2]; - var aStyles = styles.split(';'); - for (var i = 0; i < aStyles.length; i++) { - if (aStyles[i].indexOf('width:') >= 0) { - var w = aStyles[i].replace('width:', ''); - iframe.width = w.trim(); - } else if (aStyles[i].indexOf('height:') >= 0) { - var h = aStyles[i].replace('height:', ''); - iframe.height = h.trim(); - } else if (aStyles[i].indexOf('scrolling:') >= 0) { - var s = aStyles[i].replace('scrolling:', ''); - iframe.scrolling = s.trim(); - } else if (aStyles[i].indexOf('border:') >= 0) { - // Not implemented yet, as there are cross-platform issues with setting the border (from a GUI standpoint) - //var b = aStyles[i].replace('border:', ''); - //iframe.style.border = b.trim(); - } - } - this.resizeContainer(parseInt(iframe.width), parseInt(iframe.height)); - } else { - imgPreloader = new Image(); - imgPreloader.onload = function() { - var imageWidth = imgPreloader.width; - var imageHeight = imgPreloader.height; - if (myLytebox.autoResize) { - var pagesize = myLytebox.getPageSize(); - var x = pagesize[2] - 150; - var y = pagesize[3] - 150; - if (imageWidth > x) { - imageHeight = Math.round(imageHeight * (x / imageWidth)); - imageWidth = x; - if (imageHeight > y) { - imageWidth = Math.round(imageWidth * (y / imageHeight)); - imageHeight = y; - } - } else if (imageHeight > y) { - imageWidth = Math.round(imageWidth * (y / imageHeight)); - imageHeight = y; - if (imageWidth > x) { - imageHeight = Math.round(imageHeight * (x / imageWidth)); - imageWidth = x; - } - } - } - var lbImage = myLytebox.doc.getElementById('lbImage') - lbImage.src = (myLytebox.isSlideshow ? myLytebox.slideArray[myLytebox.activeSlide][0] : myLytebox.imageArray[myLytebox.activeImage][0]); - lbImage.width = imageWidth; - lbImage.height = imageHeight; - myLytebox.resizeContainer(imageWidth, imageHeight); - imgPreloader.onload = function() {}; - } - imgPreloader.src = (this.isSlideshow ? this.slideArray[this.activeSlide][0] : this.imageArray[this.activeImage][0]); - } -}; -LyteBox.prototype.resizeContainer = function(imgWidth, imgHeight) { - this.wCur = this.doc.getElementById('lbOuterContainer').offsetWidth; - this.hCur = this.doc.getElementById('lbOuterContainer').offsetHeight; - this.xScale = ((imgWidth + (this.borderSize * 2)) / this.wCur) * 100; - this.yScale = ((imgHeight + (this.borderSize * 2)) / this.hCur) * 100; - var wDiff = (this.wCur - this.borderSize * 2) - imgWidth; - var hDiff = (this.hCur - this.borderSize * 2) - imgHeight; - if (!(hDiff == 0)) { - this.hDone = false; - this.resizeH('lbOuterContainer', this.hCur, imgHeight + this.borderSize*2, this.getPixelRate(this.hCur, imgHeight)); - } else { - this.hDone = true; - } - if (!(wDiff == 0)) { - this.wDone = false; - this.resizeW('lbOuterContainer', this.wCur, imgWidth + this.borderSize*2, this.getPixelRate(this.wCur, imgWidth)); - } else { - this.wDone = true; - } - if ((hDiff == 0) && (wDiff == 0)) { - if (this.ie){ this.pause(250); } else { this.pause(100); } - } - this.doc.getElementById('lbPrev').style.height = imgHeight + "px"; - this.doc.getElementById('lbNext').style.height = imgHeight + "px"; - this.doc.getElementById('lbDetailsContainer').style.width = (imgWidth + (this.borderSize * 2) + (this.ie && this.doc.compatMode == "BackCompat" && this.outerBorder ? 2 : 0)) + "px"; - this.showContent(); -}; -LyteBox.prototype.showContent = function() { - if (this.wDone && this.hDone) { - for (var i = 0; i < this.showContentTimerCount; i++) { window.clearTimeout(this.showContentTimerArray[i]); } - if (this.outerBorder) { - this.doc.getElementById('lbOuterContainer').style.borderBottom = 'none'; - } - this.doc.getElementById('lbLoading').style.display = 'none'; - if (this.isLyteframe) { - this.doc.getElementById('lbIframe').style.display = ''; - this.appear('lbIframe', (this.doAnimations ? 0 : 100)); - } else { - this.doc.getElementById('lbImage').style.display = ''; - this.appear('lbImage', (this.doAnimations ? 0 : 100)); - this.preloadNeighborImages(); - } - if (this.isSlideshow) { - if(this.activeSlide == (this.slideArray.length - 1)) { - if (this.autoEnd) { - this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.end('slideshow')", this.slideInterval); - } - } else { - if (!this.isPaused) { - this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.changeContent("+(this.activeSlide+1)+")", this.slideInterval); - } - } - this.doc.getElementById('lbHoverNav').style.display = (this.showNavigation && this.navType == 1 ? '' : 'none'); - this.doc.getElementById('lbClose').style.display = (this.showClose ? '' : 'none'); - this.doc.getElementById('lbDetails').style.display = (this.showDetails ? '' : 'none'); - this.doc.getElementById('lbPause').style.display = (this.showPlayPause && !this.isPaused ? '' : 'none'); - this.doc.getElementById('lbPlay').style.display = (this.showPlayPause && !this.isPaused ? 'none' : ''); - this.doc.getElementById('lbNavDisplay').style.display = (this.showNavigation && this.navType == 2 ? '' : 'none'); - } else { - this.doc.getElementById('lbHoverNav').style.display = (this.navType == 1 && !this.isLyteframe ? '' : 'none'); - if ((this.navType == 2 && !this.isLyteframe && this.imageArray.length > 1) || (this.frameArray.length > 1 && this.isLyteframe)) { - this.doc.getElementById('lbNavDisplay').style.display = ''; - } else { - this.doc.getElementById('lbNavDisplay').style.display = 'none'; - } - this.doc.getElementById('lbClose').style.display = ''; - this.doc.getElementById('lbDetails').style.display = ''; - this.doc.getElementById('lbPause').style.display = 'none'; - this.doc.getElementById('lbPlay').style.display = 'none'; - } - this.doc.getElementById('lbImageContainer').style.display = (this.isLyteframe ? 'none' : ''); - this.doc.getElementById('lbIframeContainer').style.display = (this.isLyteframe ? '' : 'none'); - try { - this.doc.getElementById('lbIframe').src = this.frameArray[this.activeFrame][0]; - } catch(e) { } - } else { - this.showContentTimerArray[this.showContentTimerCount++] = setTimeout("myLytebox.showContent()", 200); - } -}; -LyteBox.prototype.updateDetails = function() { - var object = this.doc.getElementById('lbCaption'); - var sTitle = (this.isSlideshow ? this.slideArray[this.activeSlide][1] : (this.isLyteframe ? this.frameArray[this.activeFrame][1] : this.imageArray[this.activeImage][1])); - object.style.display = ''; - object.innerHTML = (sTitle == null ? '' : sTitle); - this.updateNav(); - this.doc.getElementById('lbDetailsContainer').style.display = ''; - object = this.doc.getElementById('lbNumberDisplay'); - if (this.isSlideshow && this.slideArray.length > 1) { - object.style.display = ''; - object.innerHTML = "Image " + eval(this.activeSlide + 1) + " of " + this.slideArray.length; - this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 && this.showNavigation ? '' : 'none'); - } else if (this.imageArray.length > 1 && !this.isLyteframe) { - object.style.display = ''; - object.innerHTML = "Image " + eval(this.activeImage + 1) + " of " + this.imageArray.length; - this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 ? '' : 'none'); - } else if (this.frameArray.length > 1 && this.isLyteframe) { - object.style.display = ''; - object.innerHTML = "Page " + eval(this.activeFrame + 1) + " of " + this.frameArray.length; - this.doc.getElementById('lbNavDisplay').style.display = ''; - } else { - this.doc.getElementById('lbNavDisplay').style.display = 'none'; - } - this.appear('lbDetailsContainer', (this.doAnimations ? 0 : 100)); -}; -LyteBox.prototype.updateNav = function() { - if (this.isSlideshow) { - if (this.activeSlide != 0) { - var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev')); - object.style.display = ''; - object.onclick = function() { - if (myLytebox.pauseOnPrevClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); } - myLytebox.changeContent(myLytebox.activeSlide - 1); return false; - } - } else { - if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; } - } - if (this.activeSlide != (this.slideArray.length - 1)) { - var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext')); - object.style.display = ''; - object.onclick = function() { - if (myLytebox.pauseOnNextClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); } - myLytebox.changeContent(myLytebox.activeSlide + 1); return false; - } - } else { - if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; } - } - } else if (this.isLyteframe) { - if(this.activeFrame != 0) { - var object = this.doc.getElementById('lbPrev2'); - object.style.display = ''; - object.onclick = function() { - myLytebox.changeContent(myLytebox.activeFrame - 1); return false; - } - } else { - this.doc.getElementById('lbPrev2_Off').style.display = ''; - } - if(this.activeFrame != (this.frameArray.length - 1)) { - var object = this.doc.getElementById('lbNext2'); - object.style.display = ''; - object.onclick = function() { - myLytebox.changeContent(myLytebox.activeFrame + 1); return false; - } - } else { - this.doc.getElementById('lbNext2_Off').style.display = ''; - } - } else { - if(this.activeImage != 0) { - var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev')); - object.style.display = ''; - object.onclick = function() { - myLytebox.changeContent(myLytebox.activeImage - 1); return false; - } - } else { - if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; } - } - if(this.activeImage != (this.imageArray.length - 1)) { - var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext')); - object.style.display = ''; - object.onclick = function() { - myLytebox.changeContent(myLytebox.activeImage + 1); return false; - } - } else { - if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; } - } - } - this.enableKeyboardNav(); -}; -LyteBox.prototype.enableKeyboardNav = function() { document.onkeydown = this.keyboardAction; }; -LyteBox.prototype.disableKeyboardNav = function() { document.onkeydown = ''; }; -LyteBox.prototype.keyboardAction = function(e) { - var keycode = key = escape = null; - keycode = (e == null) ? event.keyCode : e.which; - key = String.fromCharCode(keycode).toLowerCase(); - escape = (e == null) ? 27 : e.DOM_VK_ESCAPE; - if ((key == 'x') || (key == 'c') || (keycode == escape)) { - myLytebox.end(); - } else if ((key == 'p') || (keycode == 37)) { - if (myLytebox.isSlideshow) { - if(myLytebox.activeSlide != 0) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeSlide - 1); - } - } else if (myLytebox.isLyteframe) { - if(myLytebox.activeFrame != 0) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeFrame - 1); - } - } else { - if(myLytebox.activeImage != 0) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeImage - 1); - } - } - } else if ((key == 'n') || (keycode == 39)) { - if (myLytebox.isSlideshow) { - if(myLytebox.activeSlide != (myLytebox.slideArray.length - 1)) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeSlide + 1); - } - } else if (myLytebox.isLyteframe) { - if(myLytebox.activeFrame != (myLytebox.frameArray.length - 1)) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeFrame + 1); - } - } else { - if(myLytebox.activeImage != (myLytebox.imageArray.length - 1)) { - myLytebox.disableKeyboardNav(); - myLytebox.changeContent(myLytebox.activeImage + 1); - } - } - } -}; -LyteBox.prototype.preloadNeighborImages = function() { - if (this.isSlideshow) { - if ((this.slideArray.length - 1) > this.activeSlide) { - preloadNextImage = new Image(); - preloadNextImage.src = this.slideArray[this.activeSlide + 1][0]; - } - if(this.activeSlide > 0) { - preloadPrevImage = new Image(); - preloadPrevImage.src = this.slideArray[this.activeSlide - 1][0]; - } - } else { - if ((this.imageArray.length - 1) > this.activeImage) { - preloadNextImage = new Image(); - preloadNextImage.src = this.imageArray[this.activeImage + 1][0]; - } - if(this.activeImage > 0) { - preloadPrevImage = new Image(); - preloadPrevImage.src = this.imageArray[this.activeImage - 1][0]; - } - } -}; -LyteBox.prototype.togglePlayPause = function(hideID, showID) { - if (this.isSlideshow && hideID == "lbPause") { - for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); } - } - this.doc.getElementById(hideID).style.display = 'none'; - this.doc.getElementById(showID).style.display = ''; - if (hideID == "lbPlay") { - this.isPaused = false; - if (this.activeSlide == (this.slideArray.length - 1)) { - this.end(); - } else { - this.changeContent(this.activeSlide + 1); - } - } else { - this.isPaused = true; - } -}; -LyteBox.prototype.end = function(caller) { - var closeClick = (caller == 'slideshow' ? false : true); - if (this.isSlideshow && this.isPaused && !closeClick) { return; } - this.disableKeyboardNav(); - this.doc.getElementById('lbMain').style.display = 'none'; - this.fade('lbOverlay', (this.doAnimations ? this.maxOpacity : 0)); - this.toggleSelects('visible'); - if (this.hideFlash) { this.toggleFlash('visible'); } - if (this.isSlideshow) { - for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); } - } - if (this.isLyteframe) { - this.initialize(); - } -}; -LyteBox.prototype.checkFrame = function() { - if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) { - this.isFrame = true; - this.lytebox = "window.parent." + window.name + ".myLytebox"; - this.doc = parent.document; - } else { - this.isFrame = false; - this.lytebox = "myLytebox"; - this.doc = document; - } -}; -LyteBox.prototype.getPixelRate = function(cur, img) { - var diff = (img > cur) ? img - cur : cur - img; - if (diff >= 0 && diff <= 100) { return 10; } - if (diff > 100 && diff <= 200) { return 15; } - if (diff > 200 && diff <= 300) { return 20; } - if (diff > 300 && diff <= 400) { return 25; } - if (diff > 400 && diff <= 500) { return 30; } - if (diff > 500 && diff <= 600) { return 35; } - if (diff > 600 && diff <= 700) { return 40; } - if (diff > 700) { return 45; } -}; -LyteBox.prototype.appear = function(id, opacity) { - var object = this.doc.getElementById(id).style; - object.opacity = (opacity / 100); - object.MozOpacity = (opacity / 100); - object.KhtmlOpacity = (opacity / 100); - object.filter = "alpha(opacity=" + (opacity + 10) + ")"; - if (opacity == 100 && (id == 'lbImage' || id == 'lbIframe')) { - try { object.removeAttribute("filter"); } catch(e) {} /* Fix added for IE Alpha Opacity Filter bug. */ - this.updateDetails(); - } else if (opacity >= this.maxOpacity && id == 'lbOverlay') { - for (var i = 0; i < this.overlayTimerCount; i++) { window.clearTimeout(this.overlayTimerArray[i]); } - return; - } else if (opacity >= 100 && id == 'lbDetailsContainer') { - try { object.removeAttribute("filter"); } catch(e) {} /* Fix added for IE Alpha Opacity Filter bug. */ - for (var i = 0; i < this.imageTimerCount; i++) { window.clearTimeout(this.imageTimerArray[i]); } - this.doc.getElementById('lbOverlay').style.height = this.getPageSize()[1] + "px"; - } else { - if (id == 'lbOverlay') { - this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+20) + ")", 1); - } else { - this.imageTimerArray[this.imageTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+10) + ")", 1); - } - } -}; -LyteBox.prototype.fade = function(id, opacity) { - var object = this.doc.getElementById(id).style; - object.opacity = (opacity / 100); - object.MozOpacity = (opacity / 100); - object.KhtmlOpacity = (opacity / 100); - object.filter = "alpha(opacity=" + opacity + ")"; - if (opacity <= 0) { - try { - object.display = 'none'; - } catch(err) { } - } else if (id == 'lbOverlay') { - this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-20) + ")", 1); - } else { - this.timerIDArray[this.timerIDCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-10) + ")", 1); - } -}; -LyteBox.prototype.resizeW = function(id, curW, maxW, pixelrate, speed) { - if (!this.hDone) { - this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + curW + ", " + maxW + ", " + pixelrate + ")", 100); - return; - } - var object = this.doc.getElementById(id); - var timer = speed ? speed : (this.resizeDuration/2); - var newW = (this.doAnimations ? curW : maxW); - object.style.width = (newW) + "px"; - if (newW < maxW) { - newW += (newW + pixelrate >= maxW) ? (maxW - newW) : pixelrate; - } else if (newW > maxW) { - newW -= (newW - pixelrate <= maxW) ? (newW - maxW) : pixelrate; - } - this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + newW + ", " + maxW + ", " + pixelrate + ", " + (timer+0.02) + ")", timer+0.02); - if (parseInt(object.style.width) == maxW) { - this.wDone = true; - for (var i = 0; i < this.resizeWTimerCount; i++) { window.clearTimeout(this.resizeWTimerArray[i]); } - } -}; -LyteBox.prototype.resizeH = function(id, curH, maxH, pixelrate, speed) { - var timer = speed ? speed : (this.resizeDuration/2); - var object = this.doc.getElementById(id); - var newH = (this.doAnimations ? curH : maxH); - object.style.height = (newH) + "px"; - if (newH < maxH) { - newH += (newH + pixelrate >= maxH) ? (maxH - newH) : pixelrate; - } else if (newH > maxH) { - newH -= (newH - pixelrate <= maxH) ? (newH - maxH) : pixelrate; - } - this.resizeHTimerArray[this.resizeHTimerCount++] = setTimeout("myLytebox.resizeH('" + id + "', " + newH + ", " + maxH + ", " + pixelrate + ", " + (timer+.02) + ")", timer+.02); - if (parseInt(object.style.height) == maxH) { - this.hDone = true; - for (var i = 0; i < this.resizeHTimerCount; i++) { window.clearTimeout(this.resizeHTimerArray[i]); } - } -}; -LyteBox.prototype.getPageScroll = function() { - if (self.pageYOffset) { - return this.isFrame ? parent.pageYOffset : self.pageYOffset; - } else if (this.doc.documentElement && this.doc.documentElement.scrollTop){ - return this.doc.documentElement.scrollTop; - } else if (document.body) { - return this.doc.body.scrollTop; - } -}; -LyteBox.prototype.getPageSize = function() { - var xScroll, yScroll, windowWidth, windowHeight; - if (window.innerHeight && window.scrollMaxY) { - xScroll = this.doc.scrollWidth; - yScroll = (this.isFrame ? parent.innerHeight : self.innerHeight) + (this.isFrame ? parent.scrollMaxY : self.scrollMaxY); - } else if (this.doc.body.scrollHeight > this.doc.body.offsetHeight){ - xScroll = this.doc.body.scrollWidth; - yScroll = this.doc.body.scrollHeight; - } else { - xScroll = this.doc.getElementsByTagName("html").item(0).offsetWidth; - yScroll = this.doc.getElementsByTagName("html").item(0).offsetHeight; - xScroll = (xScroll < this.doc.body.offsetWidth) ? this.doc.body.offsetWidth : xScroll; - yScroll = (yScroll < this.doc.body.offsetHeight) ? this.doc.body.offsetHeight : yScroll; - } - if (self.innerHeight) { - windowWidth = (this.isFrame) ? parent.innerWidth : self.innerWidth; - windowHeight = (this.isFrame) ? parent.innerHeight : self.innerHeight; - } else if (document.documentElement && document.documentElement.clientHeight) { - windowWidth = this.doc.documentElement.clientWidth; - windowHeight = this.doc.documentElement.clientHeight; - } else if (document.body) { - windowWidth = this.doc.getElementsByTagName("html").item(0).clientWidth; - windowHeight = this.doc.getElementsByTagName("html").item(0).clientHeight; - windowWidth = (windowWidth == 0) ? this.doc.body.clientWidth : windowWidth; - windowHeight = (windowHeight == 0) ? this.doc.body.clientHeight : windowHeight; - } - var pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll; - var pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll; - return new Array(pageWidth, pageHeight, windowWidth, windowHeight); -}; -LyteBox.prototype.toggleFlash = function(state) { - var objects = this.doc.getElementsByTagName("object"); - for (var i = 0; i < objects.length; i++) { - objects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - var embeds = this.doc.getElementsByTagName("embed"); - for (var i = 0; i < embeds.length; i++) { - embeds[i].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - if (this.isFrame) { - for (var i = 0; i < parent.frames.length; i++) { - try { - objects = parent.frames[i].window.document.getElementsByTagName("object"); - for (var j = 0; j < objects.length; j++) { - objects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - } catch(e) { } - try { - embeds = parent.frames[i].window.document.getElementsByTagName("embed"); - for (var j = 0; j < embeds.length; j++) { - embeds[j].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - } catch(e) { } - } - } -}; -LyteBox.prototype.toggleSelects = function(state) { - var selects = this.doc.getElementsByTagName("select"); - for (var i = 0; i < selects.length; i++ ) { - selects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - if (this.isFrame) { - for (var i = 0; i < parent.frames.length; i++) { - try { - selects = parent.frames[i].window.document.getElementsByTagName("select"); - for (var j = 0; j < selects.length; j++) { - selects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible'; - } - } catch(e) { } - } - } -}; -LyteBox.prototype.pause = function(numberMillis) { - var now = new Date(); - var exitTime = now.getTime() + numberMillis; - while (true) { - now = new Date(); - if (now.getTime() > exitTime) { return; } - } -}; -if (window.addEventListener) { - window.addEventListener("load",initLytebox,false); -} else if (window.attachEvent) { - window.attachEvent("onload",initLytebox); -} else { - window.onload = function() {initLytebox();} -} +//***********************************************************************************************************************************/ +// LyteBox v3.22 +// +// Author: Markus F. Hay +// Website: http://www.dolem.com/lytebox +// Date: October 2, 2007 +// License: Creative Commons Attribution 3.0 License (http://creativecommons.org/licenses/by/3.0/) +// Browsers: Tested successfully on WinXP with the following browsers (using no DOCTYPE and Strict/Transitional/Loose DOCTYPES): +// * Firefox: 2.0.0.7, 1.5.0.12 +// * Internet Explorer: 7.0, 6.0 SP2, 5.5 SP2 +// * Opera: 9.23 +// +// Releases: For up-to-date and complete release information, visit http://www.dolem.com/forum/showthread.php?tid=62 +// * v3.22 (10/02/07) +// * v3.21 (09/30/07) +// * v3.20 (07/12/07) +// * v3.10 (05/28/07) +// * v3.00 (05/15/07) +// * v2.02 (11/13/06) +// +// Credit: LyteBox was originally derived from the Lightbox class (v2.02) that was written by Lokesh Dhakar. For more +// information please visit http://huddletogether.com/projects/lightbox2/ +//***********************************************************************************************************************************/ +Array.prototype.removeDuplicates = function () { for (var i = 1; i < this.length; i++) { if (this[i][0] == this[i-1][0]) { this.splice(i,1); } } } +Array.prototype.empty = function () { for (var i = 0; i <= this.length; i++) { this.shift(); } } +String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g, ''); } + +function LyteBox() { + /*** Start Global Configuration ***/ + this.theme = 'grey'; // themes: grey (default), red, green, blue, gold + this.hideFlash = true; // controls whether or not Flash objects should be hidden + this.outerBorder = true; // controls whether to show the outer grey (or theme) border + this.resizeSpeed = 8; // controls the speed of the image resizing (1=slowest and 10=fastest) + this.maxOpacity = 80; // higher opacity = darker overlay, lower opacity = lighter overlay + this.navType = 1; // 1 = "Prev/Next" buttons on top left and left (default), 2 = "<< prev | next >>" links next to image number + this.autoResize = true; // controls whether or not images should be resized if larger than the browser window dimensions + this.doAnimations = true; // controls whether or not "animate" Lytebox, i.e. resize transition between images, fade in/out effects, etc. + + this.borderSize = 12; // if you adjust the padding in the CSS, you will need to update this variable -- otherwise, leave this alone... + /*** End Global Configuration ***/ + + /*** Configure Slideshow Options ***/ + this.slideInterval = 4000; // Change value (milliseconds) to increase/decrease the time between "slides" (10000 = 10 seconds) + this.showNavigation = true; // true to display Next/Prev buttons/text during slideshow, false to hide + this.showClose = true; // true to display the Close button, false to hide + this.showDetails = true; // true to display image details (caption, count), false to hide + this.showPlayPause = true; // true to display pause/play buttons next to close button, false to hide + this.autoEnd = true; // true to automatically close Lytebox after the last image is reached, false to keep open + this.pauseOnNextClick = false; // true to pause the slideshow when the "Next" button is clicked + this.pauseOnPrevClick = true; // true to pause the slideshow when the "Prev" button is clicked + /*** End Slideshow Configuration ***/ + + if(this.resizeSpeed > 10) { this.resizeSpeed = 10; } + if(this.resizeSpeed < 1) { resizeSpeed = 1; } + this.resizeDuration = (11 - this.resizeSpeed) * 0.15; + this.resizeWTimerArray = new Array(); + this.resizeWTimerCount = 0; + this.resizeHTimerArray = new Array(); + this.resizeHTimerCount = 0; + this.showContentTimerArray = new Array(); + this.showContentTimerCount = 0; + this.overlayTimerArray = new Array(); + this.overlayTimerCount = 0; + this.imageTimerArray = new Array(); + this.imageTimerCount = 0; + this.timerIDArray = new Array(); + this.timerIDCount = 0; + this.slideshowIDArray = new Array(); + this.slideshowIDCount = 0; + this.imageArray = new Array(); + this.activeImage = null; + this.slideArray = new Array(); + this.activeSlide = null; + this.frameArray = new Array(); + this.activeFrame = null; + this.checkFrame(); + this.isSlideshow = false; + this.isLyteframe = false; + /*@cc_on + /*@if (@_jscript) + this.ie = (document.all && !window.opera) ? true : false; + /*@else @*/ + this.ie = false; + /*@end + @*/ + this.ie7 = (this.ie && window.XMLHttpRequest); + this.initialize(); +} +LyteBox.prototype.initialize = function() { + this.updateLyteboxItems(); + var objBody = this.doc.getElementsByTagName("body").item(0); + if (this.doc.getElementById('lbOverlay')) { + objBody.removeChild(this.doc.getElementById("lbOverlay")); + objBody.removeChild(this.doc.getElementById("lbMain")); + } + var objOverlay = this.doc.createElement("div"); + objOverlay.setAttribute('id','lbOverlay'); + objOverlay.setAttribute((this.ie ? 'className' : 'class'), this.theme); + if ((this.ie && !this.ie7) || (this.ie7 && this.doc.compatMode == 'BackCompat')) { + objOverlay.style.position = 'absolute'; + } + objOverlay.style.display = 'none'; + objBody.appendChild(objOverlay); + var objLytebox = this.doc.createElement("div"); + objLytebox.setAttribute('id','lbMain'); + objLytebox.style.display = 'none'; + objBody.appendChild(objLytebox); + var objOuterContainer = this.doc.createElement("div"); + objOuterContainer.setAttribute('id','lbOuterContainer'); + objOuterContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme); + objLytebox.appendChild(objOuterContainer); + var objIframeContainer = this.doc.createElement("div"); + objIframeContainer.setAttribute('id','lbIframeContainer'); + objIframeContainer.style.display = 'none'; + objOuterContainer.appendChild(objIframeContainer); + var objIframe = this.doc.createElement("iframe"); + objIframe.setAttribute('id','lbIframe'); + objIframe.setAttribute('name','lbIframe'); + objIframe.style.display = 'none'; + objIframeContainer.appendChild(objIframe); + var objImageContainer = this.doc.createElement("div"); + objImageContainer.setAttribute('id','lbImageContainer'); + objOuterContainer.appendChild(objImageContainer); + var objLyteboxImage = this.doc.createElement("img"); + objLyteboxImage.setAttribute('id','lbImage'); + objImageContainer.appendChild(objLyteboxImage); + var objLoading = this.doc.createElement("div"); + objLoading.setAttribute('id','lbLoading'); + objOuterContainer.appendChild(objLoading); + var objDetailsContainer = this.doc.createElement("div"); + objDetailsContainer.setAttribute('id','lbDetailsContainer'); + objDetailsContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme); + objLytebox.appendChild(objDetailsContainer); + var objDetailsData =this.doc.createElement("div"); + objDetailsData.setAttribute('id','lbDetailsData'); + objDetailsData.setAttribute((this.ie ? 'className' : 'class'), this.theme); + objDetailsContainer.appendChild(objDetailsData); + var objDetails = this.doc.createElement("div"); + objDetails.setAttribute('id','lbDetails'); + objDetailsData.appendChild(objDetails); + var objCaption = this.doc.createElement("span"); + objCaption.setAttribute('id','lbCaption'); + objDetails.appendChild(objCaption); + var objHoverNav = this.doc.createElement("div"); + objHoverNav.setAttribute('id','lbHoverNav'); + objImageContainer.appendChild(objHoverNav); + var objBottomNav = this.doc.createElement("div"); + objBottomNav.setAttribute('id','lbBottomNav'); + objDetailsData.appendChild(objBottomNav); + var objPrev = this.doc.createElement("a"); + objPrev.setAttribute('id','lbPrev'); + objPrev.setAttribute((this.ie ? 'className' : 'class'), this.theme); + objPrev.setAttribute('href','#'); + objHoverNav.appendChild(objPrev); + var objNext = this.doc.createElement("a"); + objNext.setAttribute('id','lbNext'); + objNext.setAttribute((this.ie ? 'className' : 'class'), this.theme); + objNext.setAttribute('href','#'); + objHoverNav.appendChild(objNext); + var objNumberDisplay = this.doc.createElement("span"); + objNumberDisplay.setAttribute('id','lbNumberDisplay'); + objDetails.appendChild(objNumberDisplay); + var objNavDisplay = this.doc.createElement("span"); + objNavDisplay.setAttribute('id','lbNavDisplay'); + objNavDisplay.style.display = 'none'; + objDetails.appendChild(objNavDisplay); + var objClose = this.doc.createElement("a"); + objClose.setAttribute('id','lbClose'); + objClose.setAttribute((this.ie ? 'className' : 'class'), this.theme); + objClose.setAttribute('href','#'); + objBottomNav.appendChild(objClose); + var objPause = this.doc.createElement("a"); + objPause.setAttribute('id','lbPause'); + objPause.setAttribute((this.ie ? 'className' : 'class'), this.theme); + objPause.setAttribute('href','#'); + objPause.style.display = 'none'; + objBottomNav.appendChild(objPause); + var objPlay = this.doc.createElement("a"); + objPlay.setAttribute('id','lbPlay'); + objPlay.setAttribute((this.ie ? 'className' : 'class'), this.theme); + objPlay.setAttribute('href','#'); + objPlay.style.display = 'none'; + objBottomNav.appendChild(objPlay); +}; +LyteBox.prototype.updateLyteboxItems = function() { + var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a'); + for (var i = 0; i < anchors.length; i++) { + var anchor = anchors[i]; + var relAttribute = String(anchor.getAttribute('rel')); + if (anchor.getAttribute('href')) { + if (relAttribute.toLowerCase().match('lytebox')) { + anchor.onclick = function () { myLytebox.start(this, false, false); return false; } + } else if (relAttribute.toLowerCase().match('lyteshow')) { + anchor.onclick = function () { myLytebox.start(this, true, false); return false; } + } else if (relAttribute.toLowerCase().match('lyteframe')) { + anchor.onclick = function () { myLytebox.start(this, false, true); return false; } + } + } + } +}; +LyteBox.prototype.start = function(imageLink, doSlide, doFrame) { + if (this.ie && !this.ie7) { this.toggleSelects('hide'); } + if (this.hideFlash) { this.toggleFlash('hide'); } + this.isLyteframe = (doFrame ? true : false); + var pageSize = this.getPageSize(); + var objOverlay = this.doc.getElementById('lbOverlay'); + var objBody = this.doc.getElementsByTagName("body").item(0); + objOverlay.style.height = pageSize[1] + "px"; + objOverlay.style.display = ''; + this.appear('lbOverlay', (this.doAnimations ? 0 : this.maxOpacity)); + var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a'); + if (this.isLyteframe) { + this.frameArray = []; + this.frameNum = 0; + if ((imageLink.getAttribute('rel') == 'lyteframe')) { + var rev = imageLink.getAttribute('rev'); + this.frameArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev))); + } else { + if (imageLink.getAttribute('rel').indexOf('lyteframe') != -1) { + for (var i = 0; i < anchors.length; i++) { + var anchor = anchors[i]; + if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) { + var rev = anchor.getAttribute('rev'); + this.frameArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev))); + } + } + this.frameArray.removeDuplicates(); + while(this.frameArray[this.frameNum][0] != imageLink.getAttribute('href')) { this.frameNum++; } + } + } + } else { + this.imageArray = []; + this.imageNum = 0; + this.slideArray = []; + this.slideNum = 0; + if ((imageLink.getAttribute('rel') == 'lytebox')) { + this.imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title'))); + } else { + if (imageLink.getAttribute('rel').indexOf('lytebox') != -1) { + for (var i = 0; i < anchors.length; i++) { + var anchor = anchors[i]; + if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) { + this.imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'))); + } + } + this.imageArray.removeDuplicates(); + while(this.imageArray[this.imageNum][0] != imageLink.getAttribute('href')) { this.imageNum++; } + } + if (imageLink.getAttribute('rel').indexOf('lyteshow') != -1) { + for (var i = 0; i < anchors.length; i++) { + var anchor = anchors[i]; + if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) { + this.slideArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'))); + } + } + this.slideArray.removeDuplicates(); + while(this.slideArray[this.slideNum][0] != imageLink.getAttribute('href')) { this.slideNum++; } + } + } + } + var object = this.doc.getElementById('lbMain'); + object.style.top = (this.getPageScroll() + (pageSize[3] / 15)) + "px"; + object.style.display = ''; + if (!this.outerBorder) { + this.doc.getElementById('lbOuterContainer').style.border = 'none'; + this.doc.getElementById('lbDetailsContainer').style.border = 'none'; + } else { + this.doc.getElementById('lbOuterContainer').style.borderBottom = ''; + this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme); + } + this.doc.getElementById('lbOverlay').onclick = function() { myLytebox.end(); return false; } + this.doc.getElementById('lbMain').onclick = function(e) { + var e = e; + if (!e) { + if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) { + e = window.parent.window.event; + } else { + e = window.event; + } + } + var id = (e.target ? e.target.id : e.srcElement.id); + if (id == 'lbMain') { myLytebox.end(); return false; } + } + this.doc.getElementById('lbClose').onclick = function() { myLytebox.end(); return false; } + this.doc.getElementById('lbPause').onclick = function() { myLytebox.togglePlayPause("lbPause", "lbPlay"); return false; } + this.doc.getElementById('lbPlay').onclick = function() { myLytebox.togglePlayPause("lbPlay", "lbPause"); return false; } + this.isSlideshow = doSlide; + this.isPaused = (this.slideNum != 0 ? true : false); + if (this.isSlideshow && this.showPlayPause && this.isPaused) { + this.doc.getElementById('lbPlay').style.display = ''; + this.doc.getElementById('lbPause').style.display = 'none'; + } + if (this.isLyteframe) { + this.changeContent(this.frameNum); + } else { + if (this.isSlideshow) { + this.changeContent(this.slideNum); + } else { + this.changeContent(this.imageNum); + } + } +}; +LyteBox.prototype.changeContent = function(imageNum) { + if (this.isSlideshow) { + for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); } + } + this.activeImage = this.activeSlide = this.activeFrame = imageNum; + if (!this.outerBorder) { + this.doc.getElementById('lbOuterContainer').style.border = 'none'; + this.doc.getElementById('lbDetailsContainer').style.border = 'none'; + } else { + this.doc.getElementById('lbOuterContainer').style.borderBottom = ''; + this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme); + } + this.doc.getElementById('lbLoading').style.display = ''; + this.doc.getElementById('lbImage').style.display = 'none'; + this.doc.getElementById('lbIframe').style.display = 'none'; + this.doc.getElementById('lbPrev').style.display = 'none'; + this.doc.getElementById('lbNext').style.display = 'none'; + this.doc.getElementById('lbIframeContainer').style.display = 'none'; + this.doc.getElementById('lbDetailsContainer').style.display = 'none'; + this.doc.getElementById('lbNumberDisplay').style.display = 'none'; + if (this.navType == 2 || this.isLyteframe) { + object = this.doc.getElementById('lbNavDisplay'); + object.innerHTML = ' <span id="lbPrev2_Off" style="display: none;" class="' + this.theme + '">« prev</span><a href="#" id="lbPrev2" class="' + this.theme + '" style="display: none;">« prev</a> <b id="lbSpacer" class="' + this.theme + '">||</b> <span id="lbNext2_Off" style="display: none;" class="' + this.theme + '">next »</span><a href="#" id="lbNext2" class="' + this.theme + '" style="display: none;">next »</a>'; + object.style.display = 'none'; + } + if (this.isLyteframe) { + var iframe = myLytebox.doc.getElementById('lbIframe'); + var styles = this.frameArray[this.activeFrame][2]; + var aStyles = styles.split(';'); + for (var i = 0; i < aStyles.length; i++) { + if (aStyles[i].indexOf('width:') >= 0) { + var w = aStyles[i].replace('width:', ''); + iframe.width = w.trim(); + } else if (aStyles[i].indexOf('height:') >= 0) { + var h = aStyles[i].replace('height:', ''); + iframe.height = h.trim(); + } else if (aStyles[i].indexOf('scrolling:') >= 0) { + var s = aStyles[i].replace('scrolling:', ''); + iframe.scrolling = s.trim(); + } else if (aStyles[i].indexOf('border:') >= 0) { + // Not implemented yet, as there are cross-platform issues with setting the border (from a GUI standpoint) + //var b = aStyles[i].replace('border:', ''); + //iframe.style.border = b.trim(); + } + } + this.resizeContainer(parseInt(iframe.width), parseInt(iframe.height)); + } else { + imgPreloader = new Image(); + imgPreloader.onload = function() { + var imageWidth = imgPreloader.width; + var imageHeight = imgPreloader.height; + if (myLytebox.autoResize) { + var pagesize = myLytebox.getPageSize(); + var x = pagesize[2] - 150; + var y = pagesize[3] - 150; + if (imageWidth > x) { + imageHeight = Math.round(imageHeight * (x / imageWidth)); + imageWidth = x; + if (imageHeight > y) { + imageWidth = Math.round(imageWidth * (y / imageHeight)); + imageHeight = y; + } + } else if (imageHeight > y) { + imageWidth = Math.round(imageWidth * (y / imageHeight)); + imageHeight = y; + if (imageWidth > x) { + imageHeight = Math.round(imageHeight * (x / imageWidth)); + imageWidth = x; + } + } + } + var lbImage = myLytebox.doc.getElementById('lbImage') + lbImage.src = (myLytebox.isSlideshow ? myLytebox.slideArray[myLytebox.activeSlide][0] : myLytebox.imageArray[myLytebox.activeImage][0]); + lbImage.width = imageWidth; + lbImage.height = imageHeight; + myLytebox.resizeContainer(imageWidth, imageHeight); + imgPreloader.onload = function() {}; + } + imgPreloader.src = (this.isSlideshow ? this.slideArray[this.activeSlide][0] : this.imageArray[this.activeImage][0]); + } +}; +LyteBox.prototype.resizeContainer = function(imgWidth, imgHeight) { + this.wCur = this.doc.getElementById('lbOuterContainer').offsetWidth; + this.hCur = this.doc.getElementById('lbOuterContainer').offsetHeight; + this.xScale = ((imgWidth + (this.borderSize * 2)) / this.wCur) * 100; + this.yScale = ((imgHeight + (this.borderSize * 2)) / this.hCur) * 100; + var wDiff = (this.wCur - this.borderSize * 2) - imgWidth; + var hDiff = (this.hCur - this.borderSize * 2) - imgHeight; + if (!(hDiff == 0)) { + this.hDone = false; + this.resizeH('lbOuterContainer', this.hCur, imgHeight + this.borderSize*2, this.getPixelRate(this.hCur, imgHeight)); + } else { + this.hDone = true; + } + if (!(wDiff == 0)) { + this.wDone = false; + this.resizeW('lbOuterContainer', this.wCur, imgWidth + this.borderSize*2, this.getPixelRate(this.wCur, imgWidth)); + } else { + this.wDone = true; + } + if ((hDiff == 0) && (wDiff == 0)) { + if (this.ie){ this.pause(250); } else { this.pause(100); } + } + this.doc.getElementById('lbPrev').style.height = imgHeight + "px"; + this.doc.getElementById('lbNext').style.height = imgHeight + "px"; + this.doc.getElementById('lbDetailsContainer').style.width = (imgWidth + (this.borderSize * 2) + (this.ie && this.doc.compatMode == "BackCompat" && this.outerBorder ? 2 : 0)) + "px"; + this.showContent(); +}; +LyteBox.prototype.showContent = function() { + if (this.wDone && this.hDone) { + for (var i = 0; i < this.showContentTimerCount; i++) { window.clearTimeout(this.showContentTimerArray[i]); } + if (this.outerBorder) { + this.doc.getElementById('lbOuterContainer').style.borderBottom = 'none'; + } + this.doc.getElementById('lbLoading').style.display = 'none'; + if (this.isLyteframe) { + this.doc.getElementById('lbIframe').style.display = ''; + this.appear('lbIframe', (this.doAnimations ? 0 : 100)); + } else { + this.doc.getElementById('lbImage').style.display = ''; + this.appear('lbImage', (this.doAnimations ? 0 : 100)); + this.preloadNeighborImages(); + } + if (this.isSlideshow) { + if(this.activeSlide == (this.slideArray.length - 1)) { + if (this.autoEnd) { + this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.end('slideshow')", this.slideInterval); + } + } else { + if (!this.isPaused) { + this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.changeContent("+(this.activeSlide+1)+")", this.slideInterval); + } + } + this.doc.getElementById('lbHoverNav').style.display = (this.showNavigation && this.navType == 1 ? '' : 'none'); + this.doc.getElementById('lbClose').style.display = (this.showClose ? '' : 'none'); + this.doc.getElementById('lbDetails').style.display = (this.showDetails ? '' : 'none'); + this.doc.getElementById('lbPause').style.display = (this.showPlayPause && !this.isPaused ? '' : 'none'); + this.doc.getElementById('lbPlay').style.display = (this.showPlayPause && !this.isPaused ? 'none' : ''); + this.doc.getElementById('lbNavDisplay').style.display = (this.showNavigation && this.navType == 2 ? '' : 'none'); + } else { + this.doc.getElementById('lbHoverNav').style.display = (this.navType == 1 && !this.isLyteframe ? '' : 'none'); + if ((this.navType == 2 && !this.isLyteframe && this.imageArray.length > 1) || (this.frameArray.length > 1 && this.isLyteframe)) { + this.doc.getElementById('lbNavDisplay').style.display = ''; + } else { + this.doc.getElementById('lbNavDisplay').style.display = 'none'; + } + this.doc.getElementById('lbClose').style.display = ''; + this.doc.getElementById('lbDetails').style.display = ''; + this.doc.getElementById('lbPause').style.display = 'none'; + this.doc.getElementById('lbPlay').style.display = 'none'; + } + this.doc.getElementById('lbImageContainer').style.display = (this.isLyteframe ? 'none' : ''); + this.doc.getElementById('lbIframeContainer').style.display = (this.isLyteframe ? '' : 'none'); + try { + this.doc.getElementById('lbIframe').src = this.frameArray[this.activeFrame][0]; + } catch(e) { } + } else { + this.showContentTimerArray[this.showContentTimerCount++] = setTimeout("myLytebox.showContent()", 200); + } +}; +LyteBox.prototype.updateDetails = function() { + var object = this.doc.getElementById('lbCaption'); + var sTitle = (this.isSlideshow ? this.slideArray[this.activeSlide][1] : (this.isLyteframe ? this.frameArray[this.activeFrame][1] : this.imageArray[this.activeImage][1])); + object.style.display = ''; + object.innerHTML = (sTitle == null ? '' : sTitle); + this.updateNav(); + this.doc.getElementById('lbDetailsContainer').style.display = ''; + object = this.doc.getElementById('lbNumberDisplay'); + if (this.isSlideshow && this.slideArray.length > 1) { + object.style.display = ''; + object.innerHTML = "Image " + eval(this.activeSlide + 1) + " of " + this.slideArray.length; + this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 && this.showNavigation ? '' : 'none'); + } else if (this.imageArray.length > 1 && !this.isLyteframe) { + object.style.display = ''; + object.innerHTML = "Image " + eval(this.activeImage + 1) + " of " + this.imageArray.length; + this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 ? '' : 'none'); + } else if (this.frameArray.length > 1 && this.isLyteframe) { + object.style.display = ''; + object.innerHTML = "Page " + eval(this.activeFrame + 1) + " of " + this.frameArray.length; + this.doc.getElementById('lbNavDisplay').style.display = ''; + } else { + this.doc.getElementById('lbNavDisplay').style.display = 'none'; + } + this.appear('lbDetailsContainer', (this.doAnimations ? 0 : 100)); +}; +LyteBox.prototype.updateNav = function() { + if (this.isSlideshow) { + if (this.activeSlide != 0) { + var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev')); + object.style.display = ''; + object.onclick = function() { + if (myLytebox.pauseOnPrevClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); } + myLytebox.changeContent(myLytebox.activeSlide - 1); return false; + } + } else { + if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; } + } + if (this.activeSlide != (this.slideArray.length - 1)) { + var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext')); + object.style.display = ''; + object.onclick = function() { + if (myLytebox.pauseOnNextClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); } + myLytebox.changeContent(myLytebox.activeSlide + 1); return false; + } + } else { + if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; } + } + } else if (this.isLyteframe) { + if(this.activeFrame != 0) { + var object = this.doc.getElementById('lbPrev2'); + object.style.display = ''; + object.onclick = function() { + myLytebox.changeContent(myLytebox.activeFrame - 1); return false; + } + } else { + this.doc.getElementById('lbPrev2_Off').style.display = ''; + } + if(this.activeFrame != (this.frameArray.length - 1)) { + var object = this.doc.getElementById('lbNext2'); + object.style.display = ''; + object.onclick = function() { + myLytebox.changeContent(myLytebox.activeFrame + 1); return false; + } + } else { + this.doc.getElementById('lbNext2_Off').style.display = ''; + } + } else { + if(this.activeImage != 0) { + var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev')); + object.style.display = ''; + object.onclick = function() { + myLytebox.changeContent(myLytebox.activeImage - 1); return false; + } + } else { + if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; } + } + if(this.activeImage != (this.imageArray.length - 1)) { + var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext')); + object.style.display = ''; + object.onclick = function() { + myLytebox.changeContent(myLytebox.activeImage + 1); return false; + } + } else { + if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; } + } + } + this.enableKeyboardNav(); +}; +LyteBox.prototype.enableKeyboardNav = function() { document.onkeydown = this.keyboardAction; }; +LyteBox.prototype.disableKeyboardNav = function() { document.onkeydown = ''; }; +LyteBox.prototype.keyboardAction = function(e) { + var keycode = key = escape = null; + keycode = (e == null) ? event.keyCode : e.which; + key = String.fromCharCode(keycode).toLowerCase(); + escape = (e == null) ? 27 : e.DOM_VK_ESCAPE; + if ((key == 'x') || (key == 'c') || (keycode == escape)) { + myLytebox.end(); + } else if ((key == 'p') || (keycode == 37)) { + if (myLytebox.isSlideshow) { + if(myLytebox.activeSlide != 0) { + myLytebox.disableKeyboardNav(); + myLytebox.changeContent(myLytebox.activeSlide - 1); + } + } else if (myLytebox.isLyteframe) { + if(myLytebox.activeFrame != 0) { + myLytebox.disableKeyboardNav(); + myLytebox.changeContent(myLytebox.activeFrame - 1); + } + } else { + if(myLytebox.activeImage != 0) { + myLytebox.disableKeyboardNav(); + myLytebox.changeContent(myLytebox.activeImage - 1); + } + } + } else if ((key == 'n') || (keycode == 39)) { + if (myLytebox.isSlideshow) { + if(myLytebox.activeSlide != (myLytebox.slideArray.length - 1)) { + myLytebox.disableKeyboardNav(); + myLytebox.changeContent(myLytebox.activeSlide + 1); + } + } else if (myLytebox.isLyteframe) { + if(myLytebox.activeFrame != (myLytebox.frameArray.length - 1)) { + myLytebox.disableKeyboardNav(); + myLytebox.changeContent(myLytebox.activeFrame + 1); + } + } else { + if(myLytebox.activeImage != (myLytebox.imageArray.length - 1)) { + myLytebox.disableKeyboardNav(); + myLytebox.changeContent(myLytebox.activeImage + 1); + } + } + } +}; +LyteBox.prototype.preloadNeighborImages = function() { + if (this.isSlideshow) { + if ((this.slideArray.length - 1) > this.activeSlide) { + preloadNextImage = new Image(); + preloadNextImage.src = this.slideArray[this.activeSlide + 1][0]; + } + if(this.activeSlide > 0) { + preloadPrevImage = new Image(); + preloadPrevImage.src = this.slideArray[this.activeSlide - 1][0]; + } + } else { + if ((this.imageArray.length - 1) > this.activeImage) { + preloadNextImage = new Image(); + preloadNextImage.src = this.imageArray[this.activeImage + 1][0]; + } + if(this.activeImage > 0) { + preloadPrevImage = new Image(); + preloadPrevImage.src = this.imageArray[this.activeImage - 1][0]; + } + } +}; +LyteBox.prototype.togglePlayPause = function(hideID, showID) { + if (this.isSlideshow && hideID == "lbPause") { + for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); } + } + this.doc.getElementById(hideID).style.display = 'none'; + this.doc.getElementById(showID).style.display = ''; + if (hideID == "lbPlay") { + this.isPaused = false; + if (this.activeSlide == (this.slideArray.length - 1)) { + this.end(); + } else { + this.changeContent(this.activeSlide + 1); + } + } else { + this.isPaused = true; + } +}; +LyteBox.prototype.end = function(caller) { + var closeClick = (caller == 'slideshow' ? false : true); + if (this.isSlideshow && this.isPaused && !closeClick) { return; } + this.disableKeyboardNav(); + this.doc.getElementById('lbMain').style.display = 'none'; + this.fade('lbOverlay', (this.doAnimations ? this.maxOpacity : 0)); + this.toggleSelects('visible'); + if (this.hideFlash) { this.toggleFlash('visible'); } + if (this.isSlideshow) { + for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); } + } + if (this.isLyteframe) { + this.initialize(); + } +}; +LyteBox.prototype.checkFrame = function() { + if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) { + this.isFrame = true; + this.lytebox = "window.parent." + window.name + ".myLytebox"; + this.doc = parent.document; + } else { + this.isFrame = false; + this.lytebox = "myLytebox"; + this.doc = document; + } +}; +LyteBox.prototype.getPixelRate = function(cur, img) { + var diff = (img > cur) ? img - cur : cur - img; + if (diff >= 0 && diff <= 100) { return 10; } + if (diff > 100 && diff <= 200) { return 15; } + if (diff > 200 && diff <= 300) { return 20; } + if (diff > 300 && diff <= 400) { return 25; } + if (diff > 400 && diff <= 500) { return 30; } + if (diff > 500 && diff <= 600) { return 35; } + if (diff > 600 && diff <= 700) { return 40; } + if (diff > 700) { return 45; } +}; +LyteBox.prototype.appear = function(id, opacity) { + var object = this.doc.getElementById(id).style; + object.opacity = (opacity / 100); + object.MozOpacity = (opacity / 100); + object.KhtmlOpacity = (opacity / 100); + object.filter = "alpha(opacity=" + (opacity + 10) + ")"; + if (opacity == 100 && (id == 'lbImage' || id == 'lbIframe')) { + try { object.removeAttribute("filter"); } catch(e) {} /* Fix added for IE Alpha Opacity Filter bug. */ + this.updateDetails(); + } else if (opacity >= this.maxOpacity && id == 'lbOverlay') { + for (var i = 0; i < this.overlayTimerCount; i++) { window.clearTimeout(this.overlayTimerArray[i]); } + return; + } else if (opacity >= 100 && id == 'lbDetailsContainer') { + try { object.removeAttribute("filter"); } catch(e) {} /* Fix added for IE Alpha Opacity Filter bug. */ + for (var i = 0; i < this.imageTimerCount; i++) { window.clearTimeout(this.imageTimerArray[i]); } + this.doc.getElementById('lbOverlay').style.height = this.getPageSize()[1] + "px"; + } else { + if (id == 'lbOverlay') { + this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+20) + ")", 1); + } else { + this.imageTimerArray[this.imageTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+10) + ")", 1); + } + } +}; +LyteBox.prototype.fade = function(id, opacity) { + var object = this.doc.getElementById(id).style; + object.opacity = (opacity / 100); + object.MozOpacity = (opacity / 100); + object.KhtmlOpacity = (opacity / 100); + object.filter = "alpha(opacity=" + opacity + ")"; + if (opacity <= 0) { + try { + object.display = 'none'; + } catch(err) { } + } else if (id == 'lbOverlay') { + this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-20) + ")", 1); + } else { + this.timerIDArray[this.timerIDCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-10) + ")", 1); + } +}; +LyteBox.prototype.resizeW = function(id, curW, maxW, pixelrate, speed) { + if (!this.hDone) { + this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + curW + ", " + maxW + ", " + pixelrate + ")", 100); + return; + } + var object = this.doc.getElementById(id); + var timer = speed ? speed : (this.resizeDuration/2); + var newW = (this.doAnimations ? curW : maxW); + object.style.width = (newW) + "px"; + if (newW < maxW) { + newW += (newW + pixelrate >= maxW) ? (maxW - newW) : pixelrate; + } else if (newW > maxW) { + newW -= (newW - pixelrate <= maxW) ? (newW - maxW) : pixelrate; + } + this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + newW + ", " + maxW + ", " + pixelrate + ", " + (timer+0.02) + ")", timer+0.02); + if (parseInt(object.style.width) == maxW) { + this.wDone = true; + for (var i = 0; i < this.resizeWTimerCount; i++) { window.clearTimeout(this.resizeWTimerArray[i]); } + } +}; +LyteBox.prototype.resizeH = function(id, curH, maxH, pixelrate, speed) { + var timer = speed ? speed : (this.resizeDuration/2); + var object = this.doc.getElementById(id); + var newH = (this.doAnimations ? curH : maxH); + object.style.height = (newH) + "px"; + if (newH < maxH) { + newH += (newH + pixelrate >= maxH) ? (maxH - newH) : pixelrate; + } else if (newH > maxH) { + newH -= (newH - pixelrate <= maxH) ? (newH - maxH) : pixelrate; + } + this.resizeHTimerArray[this.resizeHTimerCount++] = setTimeout("myLytebox.resizeH('" + id + "', " + newH + ", " + maxH + ", " + pixelrate + ", " + (timer+.02) + ")", timer+.02); + if (parseInt(object.style.height) == maxH) { + this.hDone = true; + for (var i = 0; i < this.resizeHTimerCount; i++) { window.clearTimeout(this.resizeHTimerArray[i]); } + } +}; +LyteBox.prototype.getPageScroll = function() { + if (self.pageYOffset) { + return this.isFrame ? parent.pageYOffset : self.pageYOffset; + } else if (this.doc.documentElement && this.doc.documentElement.scrollTop){ + return this.doc.documentElement.scrollTop; + } else if (document.body) { + return this.doc.body.scrollTop; + } +}; +LyteBox.prototype.getPageSize = function() { + var xScroll, yScroll, windowWidth, windowHeight; + if (window.innerHeight && window.scrollMaxY) { + xScroll = this.doc.scrollWidth; + yScroll = (this.isFrame ? parent.innerHeight : self.innerHeight) + (this.isFrame ? parent.scrollMaxY : self.scrollMaxY); + } else if (this.doc.body.scrollHeight > this.doc.body.offsetHeight){ + xScroll = this.doc.body.scrollWidth; + yScroll = this.doc.body.scrollHeight; + } else { + xScroll = this.doc.getElementsByTagName("html").item(0).offsetWidth; + yScroll = this.doc.getElementsByTagName("html").item(0).offsetHeight; + xScroll = (xScroll < this.doc.body.offsetWidth) ? this.doc.body.offsetWidth : xScroll; + yScroll = (yScroll < this.doc.body.offsetHeight) ? this.doc.body.offsetHeight : yScroll; + } + if (self.innerHeight) { + windowWidth = (this.isFrame) ? parent.innerWidth : self.innerWidth; + windowHeight = (this.isFrame) ? parent.innerHeight : self.innerHeight; + } else if (document.documentElement && document.documentElement.clientHeight) { + windowWidth = this.doc.documentElement.clientWidth; + windowHeight = this.doc.documentElement.clientHeight; + } else if (document.body) { + windowWidth = this.doc.getElementsByTagName("html").item(0).clientWidth; + windowHeight = this.doc.getElementsByTagName("html").item(0).clientHeight; + windowWidth = (windowWidth == 0) ? this.doc.body.clientWidth : windowWidth; + windowHeight = (windowHeight == 0) ? this.doc.body.clientHeight : windowHeight; + } + var pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll; + var pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll; + return new Array(pageWidth, pageHeight, windowWidth, windowHeight); +}; +LyteBox.prototype.toggleFlash = function(state) { + var objects = this.doc.getElementsByTagName("object"); + for (var i = 0; i < objects.length; i++) { + objects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible'; + } + var embeds = this.doc.getElementsByTagName("embed"); + for (var i = 0; i < embeds.length; i++) { + embeds[i].style.visibility = (state == "hide") ? 'hidden' : 'visible'; + } + if (this.isFrame) { + for (var i = 0; i < parent.frames.length; i++) { + try { + objects = parent.frames[i].window.document.getElementsByTagName("object"); + for (var j = 0; j < objects.length; j++) { + objects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible'; + } + } catch(e) { } + try { + embeds = parent.frames[i].window.document.getElementsByTagName("embed"); + for (var j = 0; j < embeds.length; j++) { + embeds[j].style.visibility = (state == "hide") ? 'hidden' : 'visible'; + } + } catch(e) { } + } + } +}; +LyteBox.prototype.toggleSelects = function(state) { + var selects = this.doc.getElementsByTagName("select"); + for (var i = 0; i < selects.length; i++ ) { + selects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible'; + } + if (this.isFrame) { + for (var i = 0; i < parent.frames.length; i++) { + try { + selects = parent.frames[i].window.document.getElementsByTagName("select"); + for (var j = 0; j < selects.length; j++) { + selects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible'; + } + } catch(e) { } + } + } +}; +LyteBox.prototype.pause = function(numberMillis) { + var now = new Date(); + var exitTime = now.getTime() + numberMillis; + while (true) { + now = new Date(); + if (now.getTime() > exitTime) { return; } + } +}; +if (window.addEventListener) { + window.addEventListener("load",initLytebox,false); +} else if (window.attachEvent) { + window.attachEvent("onload",initLytebox); +} else { + window.onload = function() {initLytebox();} +} function initLytebox() { myLytebox = new LyteBox(); } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/index.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/index.php index 33c490760adb4281bd6778dcf0fd4ba9b3ab05dc..2ff732a940cd25a8c0832221f31f4789297ac366 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/index.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/index.php @@ -41,9 +41,8 @@ $swfobject->add_attributes('name', 'so' . $displayed_gallery_id); // adding the flash parameter - //$swfobject->add_flashvars( 'file', urlencode ( trailingslashit ( home_url() ) . 'index.php?callback=imagerotator&gid=' . $displayed_gallery_id ) ); $swfobject->add_flashvars( 'file', urlencode ( $mediarss_link ) ); - $swfobject->add_flashvars( 'shuffle', $flash_shuffle, 'false', 'bool'); + $swfobject->add_flashvars( 'shuffle', (!empty($flash_shuffle) ? TRUE : FALSE), '', 'bool'); // option has oposite meaning : true should switch to next image $swfobject->add_flashvars( 'linkfromdisplay', !$flash_next_on_click, 'false', 'bool'); @@ -143,7 +142,7 @@ <img data-image-id='<?php echo esc_attr($image->pid); ?>' title="<?php echo esc_attr($image->description)?>" alt="<?php echo esc_attr($image->alttext)?>" - src="<?php echo esc_attr($storage->get_image_url($image))?>" + src="<?php echo esc_attr($storage->get_image_url($image, 'full', TRUE))?>" width="<?php echo esc_attr($image_size['width'])?>" height="<?php echo esc_attr($image_size['height'])?>" /> @@ -171,7 +170,7 @@ <div class="ngg-galleryoverview ngg-slideshow" id="<?php echo_h($anchor)?>" - data-placeholder="<?php echo esc_url($placeholder)?>" + data-placeholder="<?php echo nextgen_esc_url($placeholder)?>" style="max-width:<?php echo_h($gallery_width) ?>px; max-height:<?php echo_h($gallery_height) ?>px;"> <div @@ -200,4 +199,4 @@ }); </script> <?php endif ?> -<?php $this->end_element(); ?> \ No newline at end of file +<?php $this->end_element(); ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php index f1a2b5787743adb46132ea2448cadceee2fdce91..8670ca897366c8431e6c6888903eafa3715df139 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/slideshow/nextgen_basic_slideshow_settings_gallery_dimensions.php @@ -1,6 +1,8 @@ <tr> <td> - <label for='<?php echo esc_attr($display_type_name); ?>_gallery_width'> + <label for='<?php echo esc_attr($display_type_name); ?>_gallery_width' + class="tooltip" + title="<?php echo $gallery_dimensions_tooltip; ?>"> <?php echo_h($gallery_dimensions_label); ?> </label> </td> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/thumbnails/index.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/thumbnails/index.php index 91886cbb2837459aa50ecb83a41bd2fc6f00c474..952ec39b0e9de02b74f1f9387f650ce39328f96c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/thumbnails/index.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_gallery/templates/thumbnails/index.php @@ -4,7 +4,7 @@ $this->start_element('nextgen_gallery.gallery_container', 'container', $displaye ?> <div - class="ngg-galleryoverview" + class="ngg-galleryoverview<?php if (!intval($ajax_pagination)) echo ' ngg-ajax-pagination-none'; ?>" id="ngg-gallery-<?php echo_h($displayed_gallery_id)?>-<?php echo_h($current_page)?>"> <?php if (!empty($slideshow_link)): ?> @@ -50,14 +50,18 @@ $this->start_element('nextgen_gallery.gallery_container', 'container', $displaye ?> <div class="ngg-gallery-thumbnail"> - <a href="<?php echo esc_attr($storage->get_image_url($image))?>" + <a href="<?php echo esc_attr($storage->get_image_url($image, 'full', TRUE))?>" title="<?php echo esc_attr($image->description)?>" - data-image-id='<?php echo esc_attr($image->pid); ?>' + data-src="<?php echo esc_attr($storage->get_image_url($image)); ?>" + data-thumbnail="<?php echo esc_attr($storage->get_image_url($image, 'thumb')); ?>" + data-image-id="<?php echo esc_attr($image->{$image->id_field}); ?>" + data-title="<?php echo esc_attr($image->alttext); ?>" + data-description="<?php echo esc_attr(stripslashes($image->description)); ?>" <?php echo $effect_code ?>> <img title="<?php echo esc_attr($image->alttext)?>" alt="<?php echo esc_attr($image->alttext)?>" - src="<?php echo esc_attr($storage->get_image_url($image, $thumbnail_size_name))?>" + src="<?php echo esc_attr($storage->get_image_url($image, $thumbnail_size_name, TRUE))?>" width="<?php echo esc_attr($thumb_size['width'])?>" height="<?php echo esc_attr($thumb_size['height'])?>" style="max-width:none;" diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser.php index df0978d09960ba3809b80bcd7604b7652dfaafe5..0e43636ffcd2fd39e18190d793648620eefda939 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser.php @@ -7,7 +7,7 @@ class A_NextGen_Basic_ImageBrowser extends Mixin { function initialize() { - if ($this->object->name == NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER) { + if ($this->object->name == NGG_BASIC_IMAGEBROWSER) { $this->object->add_pre_hook( 'validation', __CLASS__, diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_controller.php index 5d35d34690c0a5d69df461c5f6bb6d97eedf3bf2..1a845ca047d6cf79e25af0aa98ef567236962871 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_controller.php @@ -65,7 +65,7 @@ class A_NextGen_Basic_ImageBrowser_Controller extends Mixin_NextGen_Basic_Galler // Determine which image in the list we need to display if (!empty($pid)) { - if (is_numeric($pid)) + if (is_numeric($pid) && !empty($picture_list[$pid])) { $numeric_pid = intval($pid); } @@ -107,20 +107,24 @@ class A_NextGen_Basic_ImageBrowser_Controller extends Mixin_NextGen_Basic_Galler // 'show' is set when using the imagebrowser as an alternate view to a thumbnail or slideshow // for which the basic-gallery module will rewrite the show parameter into existence as long as 'image' // is set. We remove 'show' here so navigation appears fluid. + $current_url = $application->get_routed_url(TRUE); + if ($this->object->param('ajax_pagination_referrer')) + $current_url = $this->object->param('ajax_pagination_referrer'); + $prev_image_link = $this->object->set_param_for( - $application->get_routed_url(TRUE), + $current_url, 'pid', $picture_list[$back_pid]->image_slug ); - $prev_image_link = trailingslashit($this->object->remove_param_for($prev_image_link, 'show', $displayed_gallery->id())); + $prev_image_link = ($this->object->remove_param_for($prev_image_link, 'show', $displayed_gallery->id())); $next_pid = ($key < ($total - 1)) ? $picture_array[$key + 1] : reset($picture_array); $next_image_link = $this->object->set_param_for( - $application->get_routed_url(TRUE), + $current_url, 'pid', $picture_list[$next_pid]->image_slug ); - $next_image_link = trailingslashit($this->object->remove_param_for($next_image_link, 'show', $displayed_gallery->id())); + $next_image_link = ($this->object->remove_param_for($next_image_link, 'show', $displayed_gallery->id())); // css class $anchor = 'ngg-imagebrowser-' . $displayed_gallery->id() . '-' . (get_the_ID() == false ? 0 : get_the_ID()); @@ -136,6 +140,10 @@ class A_NextGen_Basic_ImageBrowser_Controller extends Mixin_NextGen_Basic_Galler ); $meta_results['exif'] = ($meta_results['exif'] == false) ? $meta_results['db'] : $meta_results['exif']; + // disable triggers IF we're rendering inside of an ajax-pagination request; var set in common.js + if (!empty($_POST['ajax_referrer'])) + $displayed_gallery->display_settings['ngg_triggers_display'] = 'never'; + if (!empty($display_settings['template'])) { $this->object->add_mixin('Mixin_NextGen_Basic_Templates'); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_form.php index 35896765a0b4d686d9a81f4415f3a00c037c7bf3..b64069a593a7b3cba4f157b624dfa897ebb4ef44 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_form.php @@ -4,7 +4,7 @@ class A_NextGen_Basic_ImageBrowser_Form extends Mixin_Display_Type_Form { function get_display_type_name() { - return NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER; + return NGG_BASIC_IMAGEBROWSER; } /** diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_forms.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_forms.php index 956798862f33a1c89fd9e2d205396bc7b1a050d3..ca741c9fd7fb7fcade5df153a4d0958245bd571c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_forms.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_forms.php @@ -5,7 +5,7 @@ class A_NextGen_Basic_ImageBrowser_Forms extends Mixin function initialize() { $this->add_form( - NEXTGEN_DISPLAY_SETTINGS_SLUG, NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER + NGG_DISPLAY_SETTINGS_SLUG, NGG_BASIC_IMAGEBROWSER ); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_mapper.php index 5277564ef03b7c0c7325def5dde696e40b14eb30..b05f3688c5645036f94b1476548b8481bf7d2590 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_mapper.php @@ -23,7 +23,7 @@ class Hook_NextGen_Basic_ImageBrowser_Defaults extends Hook { function set_defaults($entity) { - if ($entity->name == NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER) + if (isset($entity->name) && $entity->name == NGG_BASIC_IMAGEBROWSER) { $this->object->_set_default_value($entity, 'settings', 'template', ''); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_routes.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_routes.php index d0806366bb4faa7039dcc29518ae8257d9ed2f07..af466f3b9a0732ddb68a050e9f35fb9ca17a50d6 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_routes.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/adapter.nextgen_basic_imagebrowser_routes.php @@ -14,7 +14,7 @@ class A_NextGen_Basic_ImageBrowser_Routes extends Mixin function _add_nextgen_basic_imagebrowser_routes() { - $slug = C_NextGen_Settings::get_instance()->router_param_slug; - $this->object->rewrite("{$slug}{*}/image/{\\w}", "{$slug}{1}/pid--{2}"); + $slug = '/'.C_NextGen_Settings::get_instance()->router_param_slug; + $this->object->rewrite("{*}{$slug}{*}/image/{\\w}", "{1}{$slug}{2}/pid--{3}"); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/class.nextgen_basic_imagebrowser_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/class.nextgen_basic_imagebrowser_installer.php index d43e95cf42c1fe41a3723cd16c10bddcaa318798..d6fe0585fa0a6ba59161a19a48a8ca93bd8f7209 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/class.nextgen_basic_imagebrowser_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/class.nextgen_basic_imagebrowser_installer.php @@ -5,12 +5,12 @@ class C_NextGen_Basic_ImageBrowser_Installer extends C_Gallery_Display_Installer function install() { $this->install_display_type( - NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER, array( + NGG_BASIC_IMAGEBROWSER, array( 'title' => 'NextGEN Basic ImageBrowser', 'entity_types' => array('image'), 'preview_image_relpath' => 'photocrati-nextgen_basic_imagebrowser#preview.jpg', 'default_source' => 'galleries', - 'view_order' => NEXTGEN_DISPLAY_PRIORITY_BASE + 20 + 'view_order' => NGG_DISPLAY_PRIORITY_BASE + 20 ) ); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/hook.nextgen_basic_imagebrowser_alt_urls.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/hook.nextgen_basic_imagebrowser_alt_urls.php index 9461b6164d161b3b90a47ea81a926c24444ea27d..fb3a282e10580f86810c96d79bd260dd017b2f9c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/hook.nextgen_basic_imagebrowser_alt_urls.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/hook.nextgen_basic_imagebrowser_alt_urls.php @@ -9,7 +9,7 @@ class Hook_NextGen_Basic_Imagebrowser_Alt_URLs extends Hook { * @param string $size * @return null */ - function get_image_url($image, $size='full') + function get_image_url($image, $size='full', $check_existance=FALSE) { // Get the method to be returned $retval = $this->object->get_method_property( @@ -23,10 +23,7 @@ class Hook_NextGen_Basic_Imagebrowser_Alt_URLs extends Hook { $controller = $this->object->get_registry()->get_utility('I_Display_Type_Controller'); $application = $router->get_routed_app(); - if ($router->param('ajax_pagination_referrer')) - $url = $router->param('ajax_pagination_referrer'); - else - $url = $application->get_routed_url(TRUE); + $url = $application->get_routed_url(TRUE); $url = $controller->set_param_for($url, 'pid', $image->image_slug); $url = $controller->remove_param_for($url, 'show'); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php index 77d3fb386743b9bcbf0f69c379603c243f7de4ed..fa4f8998ac6c42aefd16f0cbac8541f1a5bb1935 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php @@ -7,7 +7,7 @@ ***/ define( - 'NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER', + 'NGG_BASIC_IMAGEBROWSER', 'photocrati-nextgen_basic_imagebrowser' ); @@ -19,7 +19,7 @@ class M_NextGen_Basic_ImageBrowser extends C_Base_Module 'photocrati-nextgen_basic_imagebrowser', 'NextGEN Basic ImageBrowser', 'Provides the NextGEN Basic ImageBrowser Display Type', - '0.4', + '0.7', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -59,23 +59,29 @@ class M_NextGen_Basic_ImageBrowser extends C_Base_Module 'I_Routing_App', 'A_NextGen_Basic_ImageBrowser_Urls' ); - // Provide the imagebrowser form - $this->get_registry()->add_adapter( - 'I_Form', - 'A_NextGen_Basic_ImageBrowser_Form', - $this->module_id - ); - - // Provides the setting forms - $this->get_registry()->add_adapter( - 'I_Form_Manager', - 'A_NextGen_Basic_ImageBrowser_Forms' - ); + if (M_Attach_To_Post::is_atp_url() || is_admin()) + { + // Provide the imagebrowser form + $this->get_registry()->add_adapter( + 'I_Form', + 'A_NextGen_Basic_ImageBrowser_Form', + $this->module_id + ); + // Provides the setting forms + $this->get_registry()->add_adapter( + 'I_Form_Manager', + 'A_NextGen_Basic_ImageBrowser_Forms' + ); + } } function _register_hooks() { - C_NextGen_Shortcode_Manager::add('imagebrowser', array(&$this, 'render_shortcode')); + if (!defined('NGG_DISABLE_LEGACY_SHORTCODES') || !NGG_DISABLE_LEGACY_SHORTCODES) + { + C_NextGen_Shortcode_Manager::add('imagebrowser', array(&$this, 'render_shortcode')); + } + C_NextGen_Shortcode_Manager::add('nggimagebrowser', array(&$this, 'render_shortcode')); } /** @@ -95,7 +101,7 @@ class M_NextGen_Basic_ImageBrowser extends C_Base_Module { $params['gallery_ids'] = $this->_get_param('id', NULL, $params); $params['source'] = $this->_get_param('source', 'galleries', $params); - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_IMAGEBROWSER, $params); unset($params['id']); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php index 48e731f6e123ba50ab659434996934635134568f..37cff40bd4fb841e394cdb66784e62a3f003b3f2 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php @@ -1,5 +1,5 @@ <?php $this->start_element('nextgen_gallery.gallery_container', 'container', $displayed_gallery); ?> - <div class='ngg-imagebrowser' id='<?php echo $anchor; ?>'> + <div class='ngg-imagebrowser' id='<?php echo $anchor; ?>' data-nextgen-gallery-id="<?php echo $displayed_gallery->id(); ?>"> <h3><?php echo esc_attr($image->alttext); ?></h3> @@ -14,13 +14,17 @@ $this->include_template('photocrati-nextgen_gallery_display#image/before', $template_params); ?> - <a href='<?php echo esc_attr($storage->get_image_url($image)); ?>' + <a href='<?php echo esc_attr($storage->get_image_url($image, 'full', TRUE)); ?>' title='<?php echo esc_attr($image->description); ?>' - data-image-id='<?php echo esc_attr($image->pid); ?>' + data-src="<?php echo esc_attr($storage->get_image_url($image)); ?>" + data-thumbnail="<?php echo esc_attr($storage->get_image_url($image, 'thumb')); ?>" + data-image-id="<?php echo esc_attr($image->{$image->id_field}); ?>" + data-title="<?php echo esc_attr($image->alttext); ?>" + data-description="<?php echo esc_attr(stripslashes($image->description)); ?>" <?php echo $effect_code ?>> <img title='<?php echo esc_attr($image->alttext); ?>' alt='<?php echo esc_attr($image->alttext); ?>' - src='<?php echo esc_attr($storage->get_image_url($image)); ?>'/> + src='<?php echo esc_attr($storage->get_image_url($image, 'full', TRUE)); ?>'/> </a> <?php @@ -65,7 +69,7 @@ jQuery(function($){ new NggPaginatedGallery( '<?php echo $displayed_gallery->id() ?>', - $('#<?php echo $anchor ?>'), + $('.ngg-imagebrowser'), $('#<?php echo $anchor ?> .ngg-browser-prev, #<?php echo $anchor ?> .ngg-browser-next') ) }); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic.php index 122ac01e131f8522c540751016c5cf99cb8e8fd2..35ef82588eb95a8f0d2b82d2fc8c6228ca7e84fb 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic.php @@ -4,7 +4,7 @@ class A_NextGen_Basic_Singlepic extends Mixin { function initialize() { - if ($this->object->name == NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME) + if ($this->object->name == NGG_BASIC_SINGLEPIC) { $this->object->add_pre_hook( 'validation', diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_controller.php index b3154fdc6eda0654d6573c7a90640baa633037c0..751ee9ae1180b9763fbfbeee500337f5443ec9ee 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_controller.php @@ -40,7 +40,7 @@ class A_NextGen_Basic_Singlepic_Controller extends Mixin $effect_code = ''; } else { - $display_settings['link'] = $storage->get_image_url($image); + $display_settings['link'] = $storage->get_image_url($image, 'full', TRUE); $target = '_self'; $effect_code = $this->object->get_effect_code($displayed_gallery); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php index b2a3bfbdaff6899338786451bc8b15a986d130a1..86a88b09a958785c352cbd6d3ac6c0d93c779886 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php @@ -8,7 +8,7 @@ class A_NextGen_Basic_SinglePic_Form extends Mixin_Display_Type_Form */ function get_display_type_name() { - return NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME; + return NGG_BASIC_SINGLEPIC; } /** @@ -34,10 +34,10 @@ class A_NextGen_Basic_SinglePic_Form extends Mixin_Display_Type_Form 'photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic_settings_dimensions', array( 'display_type_name' => $display_type->name, - 'dimensions_label' => _('Thumbnail dimensions'), - 'width_label' => _('Width'), + 'dimensions_label' => __('Thumbnail dimensions', 'nggallery'), + 'width_label' => __('Width'), 'width' => $display_type->settings['width'], - 'height_label' => _('Width'), + 'height_label' => __('Height'), 'height' => $display_type->settings['height'], ), True @@ -50,7 +50,7 @@ class A_NextGen_Basic_SinglePic_Form extends Mixin_Display_Type_Form 'photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic_settings_link', array( 'display_type_name' => $display_type->name, - 'link_label' => _('Link'), + 'link_label' => __('Link'), 'link' => $display_type->settings['link'], ), True @@ -63,7 +63,7 @@ class A_NextGen_Basic_SinglePic_Form extends Mixin_Display_Type_Form 'photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic_settings_quality', array( 'display_type_name' => $display_type->name, - 'quality_label' => _('Image quality'), + 'quality_label' => __('Image quality', 'nggallery'), 'quality' => $display_type->settings['quality'], ), True @@ -75,7 +75,7 @@ class A_NextGen_Basic_SinglePic_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'display_watermark', - 'Display watermark', + __('Display watermark', 'nggallery'), $display_type->settings['display_watermark'] ); } @@ -85,7 +85,7 @@ class A_NextGen_Basic_SinglePic_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'display_reflection', - 'Display reflection', + __('Display reflection', 'nggallery'), $display_type->settings['display_reflection'] ); } @@ -95,7 +95,7 @@ class A_NextGen_Basic_SinglePic_Form extends Mixin_Display_Type_Form return $this->_render_radio_field( $display_type, 'crop', - 'Crop thumbnail', + __('Crop thumbnail', 'nggallery'), $display_type->settings['crop'] ); } @@ -105,8 +105,12 @@ class A_NextGen_Basic_SinglePic_Form extends Mixin_Display_Type_Form return $this->_render_select_field( $display_type, 'float', - 'Float', - array('' => 'None', 'left' => 'Left', 'right' => 'Right'), + __('Float', 'nggallery'), + array( + '' => __('None', 'nggallery'), + 'left' => __('Left', 'nggallery'), + 'right' => __('Right', 'nggallery') + ), $display_type->settings['float'] ); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_forms.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_forms.php index 734e4cd661eed1b1f2bb7bc8c89bbc8ab3adcc6a..afaa9f61ad515e5b181eae054f79d79cd4a46240 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_forms.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_forms.php @@ -5,7 +5,7 @@ class A_NextGen_Basic_SinglePic_Forms extends Mixin function initialize() { $this->add_form( - NEXTGEN_DISPLAY_SETTINGS_SLUG, NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME + NGG_DISPLAY_SETTINGS_SLUG, NGG_BASIC_SINGLEPIC ); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_mapper.php index 87bc4645d081b8192ea5be3b7a02106230d6f48c..3f50c27776ca5eefec6428e4791cad98b6383744 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_mapper.php @@ -37,7 +37,7 @@ class A_NextGen_Basic_SinglePic_Mapper extends Mixin // Iterate through each display type to be returned, and remove the // SinglePic display type foreach ($results as &$display_type) { - if (!((isset($display_type->name) && $display_type->name == NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME))) { + if (!((isset($display_type->name) && $display_type->name == NGG_BASIC_SINGLEPIC))) { $retval[] = $display_type; } } @@ -58,7 +58,7 @@ class A_NextGen_Basic_SinglePic_Mapper extends Mixin */ function _set_singlepic_defaults($entity) { - if ($entity->name == NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME) { + if (isset($entity->name) && $entity->name == NGG_BASIC_SINGLEPIC) { $this->object->_set_default_value($entity, 'settings', 'width', ''); $this->object->_set_default_value($entity, 'settings', 'height', ''); $this->object->_set_default_value($entity, 'settings', 'mode', ''); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/class.nextgen_basic_singlepic_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/class.nextgen_basic_singlepic_installer.php index 83b40a54d661bc20e543813de675cfc0f467b348..4059571155306bcfbb9ea5ba99ad77b88523d426 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/class.nextgen_basic_singlepic_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/class.nextgen_basic_singlepic_installer.php @@ -5,12 +5,12 @@ class C_NextGen_Basic_SinglePic_Installer extends C_Gallery_Display_Installer function install() { $this->install_display_type( - NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME, array( + NGG_BASIC_SINGLEPIC, array( 'title' => 'NextGEN Basic SinglePic', 'entity_types' => array('image'), 'preview_image_relpath' => 'photocrati-nextgen_basic_singlepic#preview.gif', 'default_source' => 'galleries', - 'view_order' => NEXTGEN_DISPLAY_PRIORITY_BASE + 60 + 'view_order' => NGG_DISPLAY_PRIORITY_BASE + 60 )); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php index d975ddca2083ce948ed7fbd112d97269ca6d2114..68ef023754c58de9ef69ff5831846a0f5cc8c1c8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php @@ -7,17 +7,17 @@ } ***/ -define('NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME', 'photocrati-nextgen_basic_singlepic'); +define('NGG_BASIC_SINGLEPIC', 'photocrati-nextgen_basic_singlepic'); class M_NextGen_Basic_Singlepic extends C_Base_Module { function define() { parent::define( - NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME, + NGG_BASIC_SINGLEPIC, 'NextGen Basic Singlepic', 'Provides a singlepic gallery for NextGEN Gallery', - '0.4', + '0.7', 'http://www.photocrati.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -43,25 +43,53 @@ class M_NextGen_Basic_Singlepic extends C_Base_Module 'A_NextGen_Basic_Singlepic_Mapper' ); - // Provides the display settings form for the SinglePic display type - $this->get_registry()->add_adapter( - 'I_Form', - 'A_NextGen_Basic_SinglePic_Form', - $this->module_id - ); - - // Adds the setting forms - $this->get_registry()->add_adapter( - 'I_Form_Manager', - 'A_NextGen_Basic_SinglePic_Forms' - ); + if (M_Attach_To_Post::is_atp_url() || is_admin()) + { + // Provides the display settings form for the SinglePic display type + $this->get_registry()->add_adapter( + 'I_Form', + 'A_NextGen_Basic_SinglePic_Form', + $this->module_id + ); + // Adds the setting forms + $this->get_registry()->add_adapter( + 'I_Form_Manager', + 'A_NextGen_Basic_SinglePic_Forms' + ); + } } function _register_hooks() { - C_NextGen_Shortcode_Manager::add('singlepic', array(&$this, 'render_singlepic')); + if (!defined('NGG_DISABLE_LEGACY_SHORTCODES') || !NGG_DISABLE_LEGACY_SHORTCODES) + { + C_NextGen_Shortcode_Manager::add('singlepic', array(&$this, 'render_singlepic')); + } + C_NextGen_Shortcode_Manager::add('nggsinglepic', array(&$this, 'render_singlepic')); + + // enqueue the singlepic CSS if an inline image has the ngg-singlepic class + add_filter('the_content', array(&$this, 'enqueue_singlepic_css'), PHP_INT_MAX, 1); } + /** + * Examines 'the_content' string for img.ngg-singlepic and enqueues styling when found + * + * @param string $content + * @return string $content + */ + function enqueue_singlepic_css($content) + { + if (preg_match("#<img.*ngg-singlepic.*>#", $content, $matches)) { + $router = $this->get_registry()->get_utility('I_Router'); + wp_enqueue_style( + 'nextgen_basic_singlepic_style', + $router->get_static_url(NGG_BASIC_SINGLEPIC . '#nextgen_basic_singlepic.css') + ); + } + + return $content; + } + /** * Gets a value from the parameter array, and if not available, uses the default value * @@ -77,7 +105,7 @@ class M_NextGen_Basic_Singlepic extends C_Base_Module function render_singlepic($params, $inner_content=NULL) { - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_SINGLEPIC, $params); $params['image_ids'] = $this->_get_param('id', NULL, $params); unset($params['id']); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic.php index 63f4d92ed983966a006a54f0385e5c2c2846cafa..d235d2a476dc15b5b681a36f348aaf03aa7e7381 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic.php @@ -64,10 +64,14 @@ ?> <a href="<?php echo esc_attr($settings['link']); ?>" title="<?php echo esc_attr($image->description)?>" - data-image-id='<?php echo esc_attr($image->pid); ?>' + data-src="<?php echo esc_attr($storage->get_image_url($image)); ?>" + data-thumbnail="<?php echo esc_attr($storage->get_image_url($image, 'thumb')); ?>" + data-image-id="<?php echo esc_attr($image->{$image->id_field}); ?>" + data-title="<?php echo esc_attr($image->alttext); ?>" + data-description="<?php echo esc_attr(stripslashes($image->description)); ?>" target='<?php echo esc_attr($target); ?>' - <?php echo $effect_code ?>> - <img class="ngg-singlepic" + <?php echo $effect_code ?>> + <img class="ngg-singlepic" src="<?php echo $thumbnail_url; ?>" alt="<?php echo esc_attr($image->alttext); ?>" title="<?php echo esc_attr($image->alttext); ?>" diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_select.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_select.php index f23d575cba5d9721fc6ddc6f2efef0aa192448c6..9fa6b93d6b46f63dfebfc731b1a41423fc6990f6 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_select.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_singlepic/templates/nextgen_basic_singlepic_settings_select.php @@ -12,7 +12,7 @@ name="<?php print $display_type_name . '[' . $name . ']'; ?>" class="<?php print $display_type_name . '_' . $name; ?>"> <?php foreach ($options as $key => $val) { ?> - <option value='<?php print $key; ?>' <?php selected($key, $value); ?>><?php print _($val); ?></option> + <option value='<?php print $key; ?>' <?php selected($key, $value); ?>><?php print $val; ?></option> <?php } ?> </select> </td> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud.php index 6767f6f3f67545af71d24b08ad50d7a48f0d599a..7b3f1e8350677a8725accd10c6e5c820be0afb47 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud.php @@ -4,7 +4,7 @@ class A_NextGen_Basic_Tagcloud extends Mixin { function initialize() { - if ($this->object->name == NEXTGEN_BASIC_TAG_CLOUD_MODULE_NAME) { + if ($this->object->name == NGG_BASIC_TAGCLOUD) { $this->object->add_pre_hook( 'validation', get_class(), diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_controller.php index 5e8f0679b778b32e07d7a19b420e7701618e179d..cc8b3c1e8bd6fb1169116e9b4d6786c25ba80f97 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_controller.php @@ -21,8 +21,10 @@ class A_NextGen_Basic_Tagcloud_Controller extends Mixin ->display_images( array( 'source' => 'tags', - 'container_ids' => array(esc_attr($tag)), - 'display_type' => $display_settings['display_type'] + 'container_ids' => array(esc_attr($tag)), + 'display_type' => $display_settings['display_type'], + 'original_display_type' => $displayed_gallery->display_type, + 'original_settings' => $display_settings ) ); } @@ -33,7 +35,7 @@ class A_NextGen_Basic_Tagcloud_Controller extends Mixin 'include' => $displayed_gallery->get_term_ids_for_tags(), 'largest' => 22, 'link' => 'view', - 'number' => 45, + 'number' => $display_settings['number'], 'order' => 'ASC', 'orderby' => 'name', 'smallest' => 8, diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php index b242b271773a78128d5cc0d8c7e8177e6ff8198f..917c23eb0ab2fa67f87cc4301bd5ad56c72eaffa 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php @@ -4,17 +4,28 @@ class A_NextGen_Basic_Tagcloud_Form extends Mixin_Display_Type_Form { function get_display_type_name() { - return NEXTGEN_BASIC_TAG_CLOUD_MODULE_NAME; + return NGG_BASIC_TAGCLOUD; } function _get_field_names() { return array( + 'nextgen_basic_tagcloud_number', 'nextgen_basic_tagcloud_display_type' ); } + function _render_nextgen_basic_tagcloud_number_field($display_type) + { + return $this->_render_number_field( + $display_type, + 'number', + __('Maximum number of tags', 'nggallery'), + $display_type->settings['number'] + ); + } + function _render_nextgen_basic_tagcloud_display_type_field($display_type) { $types = array(); @@ -32,10 +43,10 @@ class A_NextGen_Basic_Tagcloud_Form extends Mixin_Display_Type_Form return $this->_render_select_field( $display_type, 'display_type', - 'Display type', + __('Display type', 'nggallery'), $types, $display_type->settings['display_type'], - 'The display type that the tagcloud will point its results to' + __('The display type that the tagcloud will point its results to', 'nggallery') ); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_forms.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_forms.php index cc90442aeb8f25907c783757f69b6c6d6f74f7a3..3e758d235c76856a422fe6ec94c4f89f252c09fc 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_forms.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_forms.php @@ -5,7 +5,7 @@ class A_NextGen_Basic_TagCloud_Forms extends Mixin function initialize() { $this->add_form( - NEXTGEN_DISPLAY_SETTINGS_SLUG, NEXTGEN_BASIC_TAG_CLOUD_MODULE_NAME + NGG_DISPLAY_SETTINGS_SLUG, NGG_BASIC_TAGCLOUD ); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_mapper.php index daa7e74362cebc1802d4b662d2f146080ba6ce53..726dcea704fb5e3db84ece41c438ac8553b48aac 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_mapper.php @@ -16,13 +16,10 @@ class Hook_NextGen_Basic_TagCloud_Defaults extends Hook { function set_defaults($entity) { - if ($entity->name == NEXTGEN_BASIC_TAG_CLOUD_MODULE_NAME) { - $this->object->_set_default_value( - $entity, - 'settings', - 'display_type', - 'photocrati-nextgen_basic_thumbnails' - ); + if (isset($entity->name) && $entity->name == NGG_BASIC_TAGCLOUD) + { + $this->object->_set_default_value($entity, 'settings', 'display_type', NGG_BASIC_THUMBNAILS); + $this->object->_set_default_value($entity, 'settings', 'number', 45); } } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_routes.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_routes.php index 57fdaf6967ae461dfc26b3ce71bcf1fcae91a274..17cbd4de6503d13c39263e0a5ed1581e196426e4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_routes.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_routes.php @@ -14,7 +14,7 @@ class A_NextGen_Basic_TagCloud_Routes extends Mixin function _add_nextgen_basic_tagcloud_routes() { - $slug = C_NextGen_Settings::get_instance()->router_param_slug; - $this->object->rewrite("{$slug}{*}/tags/{\\w}{*}", "{$slug}{1}/gallerytag--{2}{3}"); + $slug = '/'.C_NextGen_Settings::get_instance()->router_param_slug; + $this->object->rewrite("{*}{$slug}{*}/tags/{\\w}{*}", "{1}{$slug}{2}/gallerytag--{3}{4}"); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_urls.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_urls.php index 6536004bacbb2cbb757ec5b367ad46bb361d1597..91fae17e8bdd271787614aa0fee678390633b1b6 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_urls.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_urls.php @@ -62,7 +62,7 @@ class A_NextGen_Basic_TagCloud_Urls extends Mixin // Replace any page parameters with the ngglegacy equivalent if (preg_match($regex, $retval, $matches)) { - $retval = str_replace($matches[0], "/tags/{$matches[3]}/", $retval); + $retval = rtrim(str_replace($matches[0], "/tags/{$matches[3]}/", $retval), "/"); $this->object->set_method_property( $this->method_called, ExtensibleObject::METHOD_PROPERTY_RETURN_VALUE, diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.nextgen_basic_tagcloud_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.nextgen_basic_tagcloud_installer.php index 0788ae64dcc6b5296ea4f0ca4ee47769c2475e56..0270de22f1c6087b895f239542477721a17c866b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.nextgen_basic_tagcloud_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.nextgen_basic_tagcloud_installer.php @@ -8,12 +8,12 @@ class C_NextGen_Basic_Tagcloud_Installer extends C_Gallery_Display_Installer function install() { $this->install_display_type( - NEXTGEN_BASIC_TAG_CLOUD_MODULE_NAME, array( + NGG_BASIC_TAGCLOUD, array( 'title' => 'NextGEN Basic TagCloud', 'entity_types' => array('image'), 'preview_image_relpath' => 'photocrati-nextgen_basic_tagcloud#preview.gif', 'default_source' => 'tags', - 'view_order' => NEXTGEN_DISPLAY_PRIORITY_BASE + 100 + 'view_order' => NGG_DISPLAY_PRIORITY_BASE + 100 ) ); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.taxonomy_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.taxonomy_controller.php index a51bf1e1b7b30817588287746d8c8eadfe82093e..cb5dc9357ec241a2770bf7e263b0132fb579ab9b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.taxonomy_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.taxonomy_controller.php @@ -40,7 +40,7 @@ class C_Taxonomy_Controller extends C_MVC_Controller 'source' => 'tags', 'container_ids' => $tag, 'slug' => $tag, - 'display_type' => NEXTGEN_GALLERY_BASIC_THUMBNAILS + 'display_type' => NGG_BASIC_THUMBNAILS )); // This strips extra whitespace and strips newlines. For some reason this is especially @@ -54,10 +54,16 @@ class C_Taxonomy_Controller extends C_MVC_Controller * @param $posts Wordpress post objects * @return array Wordpress post objects */ - function detect_ngg_tag($posts) + function detect_ngg_tag($posts, $wp_query_local) { global $wp; global $wp_query; + $wp_query_orig = false; + + if ($wp_query_local != null && $wp_query_local != $wp_query) { + $wp_query_orig = $wp_query; + $wp_query = $wp_query_local; + } // This appears to be necessary for multisite installations, but I can't imagine why. More hackery.. $tag = (get_query_var('ngg_tag') ? get_query_var('ngg_tag') : get_query_var('name')); @@ -91,6 +97,10 @@ class C_Taxonomy_Controller extends C_MVC_Controller unset($wp_query->query['error']); $wp_query->query_vars['error'] = ''; } + + if ($wp_query_orig !== false) { + $wp_query = $wp_query_orig; + } return $posts; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php index ddf24b9abdbe36814cf000dad0bf05044dd95b29..9a6bb2b438de6cebf37fab7739874af347af33ce 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php @@ -7,17 +7,17 @@ } ***/ -define('NEXTGEN_BASIC_TAG_CLOUD_MODULE_NAME', 'photocrati-nextgen_basic_tagcloud'); +define('NGG_BASIC_TAGCLOUD', 'photocrati-nextgen_basic_tagcloud'); class M_NextGen_Basic_Tagcloud extends C_Base_Module { function define() { parent::define( - NEXTGEN_BASIC_TAG_CLOUD_MODULE_NAME, + NGG_BASIC_TAGCLOUD, 'NextGen Basic Tagcloud', 'Provides a tagcloud for NextGEN Gallery', - '0.4', + '0.7', 'http://www.photocrati.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -65,30 +65,37 @@ class M_NextGen_Basic_Tagcloud extends C_Base_Module 'A_NextGen_Basic_TagCloud_Urls' ); - // Adds a display settings form - $this->get_registry()->add_adapter( - 'I_Form', - 'A_NextGen_Basic_TagCloud_Form', - $this->module_id - ); - - // Provides the forms for the settings - $this->get_registry()->add_adapter( - 'I_Form_Manager', - 'A_NextGen_Basic_TagCloud_Forms' - ); + if (M_Attach_To_Post::is_atp_url() || is_admin()) + { + // Adds a display settings form + $this->get_registry()->add_adapter( + 'I_Form', + 'A_NextGen_Basic_TagCloud_Form', + $this->module_id + ); + // Provides the forms for the settings + $this->get_registry()->add_adapter( + 'I_Form_Manager', + 'A_NextGen_Basic_TagCloud_Forms' + ); + } } function _register_hooks() { - C_NextGen_Shortcode_Manager::add('tagcloud', array(&$this, 'render_shortcode')); + if (!defined('NGG_DISABLE_LEGACY_SHORTCODES') || !NGG_DISABLE_LEGACY_SHORTCODES) + { + C_NextGen_Shortcode_Manager::add('tagcloud', array(&$this, 'render_shortcode')); + } + C_NextGen_Shortcode_Manager::add('nggtagcloud', array(&$this, 'render_shortcode')); add_filter( 'the_posts', array( $this->get_registry()->get_utility('I_Taxonomy_Controller'), 'detect_ngg_tag'), - -10 + -10, + 2 ); } @@ -115,7 +122,7 @@ class M_NextGen_Basic_Tagcloud extends C_Base_Module { $params['tagcloud'] = $this->_get_param('tagcloud', 'yes', $params); $params['source'] = $this->_get_param('source', 'tags', $params); - $params['display_type'] = $this->_get_param('display_type', NEXTGEN_BASIC_TAG_CLOUD_MODULE_NAME, $params); + $params['display_type'] = $this->_get_param('display_type', NGG_BASIC_TAGCLOUD, $params); $renderer = $this->get_registry()->get_utility('I_Displayed_Gallery_Renderer'); return $renderer->display_images($params, $inner_content); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php index b1c45ec2ec588238bd0999cdeef48da9804b0b39..e74bdc91098771eb05df97b5b06e92e0a32015c7 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php @@ -23,10 +23,10 @@ class A_NextGen_Basic_Template_Form extends Mixin case 'photocrati-nextgen_basic_imagebrowser': $prefix = 'imagebrowser'; break; - case NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM: + case NGG_BASIC_COMPACT_ALBUM: $prefix = 'album'; break; - case NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM: + case NGG_BASIC_EXTENDED_ALBUM: $prefix = 'album'; break; default: @@ -43,8 +43,8 @@ class A_NextGen_Basic_Template_Form extends Mixin 'photocrati-nextgen_basic_templates#nextgen_basic_templates_settings_template', array( 'display_type_name' => $display_type->name, - 'template_label' => _('Template'), - 'template_text' => _('Use a legacy template when rendering (not recommended).'), + 'template_label' => __('Template', 'nggallery'), + 'template_text' => __('Use a legacy template when rendering (not recommended).', 'nggallery'), 'chosen_file' => $display_type->settings['template'], 'templates' => $templates ), @@ -139,7 +139,7 @@ class A_NextGen_Basic_Template_Form extends Mixin $gallery->description = html_entity_decode(stripslashes($orig_gallery->galdesc)); $gallery->pageid = $orig_gallery->pageid; - if ($displayed_gallery->display_settings['ajax_pagination']) + if (!empty($displayed_gallery->display_settings['ajax_pagination'])) $gallery_id = $displayed_gallery->transient_id; else $gallery_id = $displayed_gallery->id(); @@ -210,5 +210,11 @@ class A_NextGen_Basic_Template_Form extends Mixin $this->module_version, TRUE ); + + $atp = $this->object->get_registry()->get_utility('I_Attach_To_Post_Controller'); + + if ($atp != null) { + $atp->mark_script('ngg_template_settings'); + } } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/class.legacy_template_locator.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/class.legacy_template_locator.php index 78b6c61c618875911fd5ed950a4388da1fdbbde3..ba8c3d695ad97045ca72581b0a7b3360463ac61d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/class.legacy_template_locator.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/class.legacy_template_locator.php @@ -58,6 +58,7 @@ class Mixin_Legacy_Template_Locator extends Mixin continue; $files[$label] = $tmp; } + return $files; } @@ -87,11 +88,11 @@ class Mixin_Legacy_Template_Locator extends Mixin if (is_array($prefix)) { $str = implode('|', $prefix); - $regex_iterator = new RegexIterator($iterator, "/({$str})-.+\.php$/i", RecursiveRegexIterator::GET_MATCH); + $regex_iterator = new RegexIterator($iterator, "/({$str})-.+\\.php$/i", RecursiveRegexIterator::GET_MATCH); } elseif (is_string($prefix)) { - $regex_iterator = new RegexIterator($iterator, "#(.*)/{$prefix}\-?.*\.php$#i", RecursiveRegexIterator::GET_MATCH); + $regex_iterator = new RegexIterator($iterator, "#(.*)[/\\\\]{$prefix}\\-?.*\\.php$#i", RecursiveRegexIterator::GET_MATCH); } else { $regex_iterator = new RegexIterator($iterator, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH); @@ -130,13 +131,16 @@ class Mixin_Legacy_Template_Locator extends Mixin foreach ($this->object->get_template_directories() as $dir) { if ($template_abspath) break; - $filename = path_join($dir, $custom_template); + $filename = implode(DIRECTORY_SEPARATOR, array(rtrim($dir, "/\\"), $custom_template)); if (@file_exists($filename)) { $template_abspath = $filename; } elseif (strpos($custom_template, '-template') === FALSE) { - $filename = path_join($dir, str_replace('.php', '', $custom_template) . '-template.php'); + $filename = implode(DIRECTORY_SEPARATOR, array( + rtrim($dir, "/\\"), + str_replace('.php', '', $custom_template) . '-template.php' + )); if (@file_exists($filename)) $template_abspath = $filename; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/module.nextgen_basic_templates.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/module.nextgen_basic_templates.php index 75c1640e046807520fe9ac2a59b56df920f5e55e..dec839a5a90a411adb28e6c2e71608537473f195 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/module.nextgen_basic_templates.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_basic_templates/module.nextgen_basic_templates.php @@ -15,7 +15,7 @@ class M_NextGen_Basic_Templates extends C_Base_Module 'photocrati-nextgen_basic_templates', 'NextGen Basic Templates', 'Provides a NextGen-Legacy compatible thumbnail gallery for NextGEN Gallery', - '0.2', + '0.4', 'http://www.photocrati.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/adapter.nextgen_data_factory.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/adapter.nextgen_data_factory.php index 652976f48ffae804eded61f2a7c4341fe19b87a1..5b73f7be18f610c4e68a6569a61e3073872be370 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/adapter.nextgen_data_factory.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/adapter.nextgen_data_factory.php @@ -2,27 +2,27 @@ class A_NextGen_Data_Factory extends Mixin { - function gallery($mapper=FALSE, $properties=array(), $context=FALSE) + function gallery($properties=array(), $mapper=FALSE, $context=FALSE) { return new C_Gallery($properties, $mapper, $context); } - function gallery_image($mapper=FALSE, $properties=array(), $context=FALSE) + function gallery_image($properties=array(), $mapper=FALSE, $context=FALSE) { return new C_Image($properties, $mapper, $context); } - function image($mapper=FALSE, $properties=array(), $context=FALSE) + function image($properties=array(), $mapper=FALSE, $context=FALSE) { return new C_Image($properties, $mapper, $context); } - function album($mapper=FALSE, $properties=array(), $context=FALSE) + function album($properties=array(), $mapper=FALSE, $context=FALSE) { - return new C_Album($mapper, $properties, $context); + return new C_Album($properties, $mapper, $context); } @@ -43,6 +43,11 @@ class A_NextGen_Data_Factory extends Mixin return new C_Gallery_Storage($context); } + function extra_fields($properties=array(), $mapper=FALSE, $context=FALSE) + { + return new C_Datamapper_Model($mapper, $properties, $context); + } + function gallerystorage($context=FALSE) { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.album.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.album.php index 5d76d7485d8e831dc5fe59d5fbeee04882ffb691..cedb74035d546e985b6f7ccb676096ac47375b7f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.album.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.album.php @@ -5,7 +5,7 @@ class C_Album extends C_DataMapper_Model var $_mapper_interface = 'I_Album_Mapper'; - function define($mapper=FALSE, $properties=FALSE, $context=FALSE) + function define($properties=array(), $mapper=FALSE, $context=FALSE) { parent::define($mapper, $properties, $context); $this->add_mixin('Mixin_NextGen_Album_Instance_Methods'); @@ -18,16 +18,17 @@ class C_Album extends C_DataMapper_Model * @param bool|\C_DataMapper|\FALSE $mapper * @param array $properties */ - function initialize($mapper=FALSE, $properties=array()) { + function initialize($properties=array(), $mapper=FALSE, $context=FALSE) + { - // Get the mapper is not specified - if (!$mapper) { - $mapper = $this->get_registry()->get_utility($this->_mapper_interface); - } + // Get the mapper is not specified + if (!$mapper) { + $mapper = $this->get_registry()->get_utility($this->_mapper_interface); + } - // Initialize - parent::initialize($mapper, $properties); - } + // Initialize + parent::initialize($mapper, $properties); + } } /** diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.album_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.album_mapper.php index e0e49c267f22aa00b4b9ac7080d5e59785fdc0c7..f646a04c0fcb445114cb3d9644b633cdca53d8ab 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.album_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.album_mapper.php @@ -4,30 +4,38 @@ class C_Album_Mapper extends C_CustomTable_DataMapper_Driver { static $_instances = array(); - function define($context=FALSE) + function initialize($object_name=FALSE) { + parent::initialize('ngg_album'); + } + + function define($context=FALSE, $not_used=FALSE) + { + // Define the context if (!is_array($context)) $context = array($context); array_push($context, 'album'); - $this->_primary_key_column = 'id'; + // Define the mapper parent::define('ngg_album', $context); + $this->add_mixin('Mixin_NextGen_Table_Extras'); $this->add_mixin('Mixin_Album_Mapper'); $this->implement('I_Album_Mapper'); $this->set_model_factory_method('album'); - $this->add_post_hook( - '_convert_to_entity', - 'Unserialize Galleries', - 'Hook_Unserialize_Album_Galleries', - 'unserialize_galleries' - ); - } - function initialize() - { - parent::initialize('ngg_album'); - } + // Define the columns + $this->define_column('id', 'BIGINT', 0); + $this->define_column('name', 'VARCHAR(255)'); + $this->define_column('slug', 'VARCHAR(255'); + $this->define_column('previewpic', 'BIGINT', 0); + $this->define_column('albumdesc', 'TEXT'); + $this->define_column('sortorder', 'TEXT'); + $this->define_column('pageid', 'BIGINT', 0); + $this->define_column('extras_post_id', 'BIGINT', 0); + // Mark the columns which should be unserialized + $this->add_serialized_column('sortorder'); + } /** * Returns an instance of the album datamapper @@ -44,19 +52,6 @@ class C_Album_Mapper extends C_CustomTable_DataMapper_Driver } } -/** - * NextGEN stores all gallery ids for the album in a property called sortorder - */ -class Hook_Unserialize_Album_Galleries extends Hook -{ - function unserialize_galleries($entity) - { - if (isset($entity->sortorder) && is_string($entity->sortorder)) { - $entity->sortorder = $this->object->unserialize($entity->sortorder); - } - } -} - /** * Provides album-specific methods for the datamapper @@ -73,32 +68,12 @@ class Mixin_Album_Mapper extends Mixin return $entity->name; } - /** - * Override the save method to avoid trying to save the 'exclude' property - * to the database, which will fail since the column doesn't exist in the - * database. - * TODO: This is just a workaround and should be removed when we implement - * https://www.wrike.com/open.htm?id=8250095 - * @param stdClass|C_DataMapper_Model $entity - * @return boolean - */ - function _convert_to_table_data($entity) - { - $exclude = $entity->exclude; - $new_sortorder = property_exists($entity, 'new_sortorder') ? $entity->new_sortorder : NULL; - unset($entity->exclude); - unset($entity->new_sortorder); - $retval = $this->call_parent('_convert_to_table_data', $entity); - $entity->exclude = $exclude; - if ($new_sortorder) $entity->new_sortorder = $new_sortorder; - return $retval; - } - function _save_entity($entity) { $retval = $this->call_parent('_save_entity', $entity); if ($retval) { - C_Photocrati_Cache::flush(); + do_action('ngg_album_updated', $entity); + C_Photocrati_Cache::flush('displayed_gallery_rendering'); } return $retval; } @@ -114,10 +89,9 @@ class Mixin_Album_Mapper extends Mixin $this->object->_set_default_value($entity, 'sortorder', array()); $this->object->_set_default_value($entity, 'previewpic', 0); $this->object->_set_default_value($entity, 'exclude', 0); - $this->object->_set_default_value( - $entity, - 'slug', - nggdb::get_unique_slug( sanitize_title( $entity->name ), 'album' ) - ); + + if (isset($entity->name) && !isset($entity->slug)) { + $entity->slug = nggdb::get_unique_slug( sanitize_title( $entity->name ), 'album' ); + } } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallery.php old mode 100644 new mode 100755 index b82910bc77e2b295111e7136d3e0c17125b5575b..2e519ce37b74d1eea871a37cec7aaa0029de0c72 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallery.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallery.php @@ -8,22 +8,22 @@ class Mixin_NextGen_Gallery_Validation function validation() { // If a title is present, we can auto-populate some other properties - if (isset($this->object->title)) { + if (($this->object->title)) { // If no name is present, use the title to generate one - if (!isset($this->object->name)) { + if (!($this->object->name)) { $this->object->name = sanitize_file_name( sanitize_title($this->object->title)); $this->object->name = apply_filters('ngg_gallery_name', $this->object->name); } // If no slug is set, use the title to generate one - if (!isset($this->object->slug)) { + if (!($this->object->slug)) { $this->object->slug = nggdb::get_unique_slug( sanitize_title($this->object->title), 'gallery' ); } } // Set what will be the path to the gallery - if (empty($this->object->path)) + if (!($this->object->path)) { $storage = $this->object->get_registry()->get_utility('I_Gallery_Storage'); $this->object->path = $storage->get_upload_relpath($this->object); @@ -50,7 +50,7 @@ class C_Gallery extends C_DataMapper_Model * Defines the interfaces and methods (through extensions and hooks) * that this class provides */ - function define($properties, $mapper, $context=FALSE) + function define($properties, $mapper=FALSE, $context=FALSE) { parent::define($mapper, $properties, $context); $this->add_mixin('Mixin_NextGen_Gallery_Validation'); @@ -63,19 +63,21 @@ class C_Gallery extends C_DataMapper_Model * @param C_DataMapper $mapper * @param string $context */ - function initialize($properties = FALSE, $mapper=FALSE) + function initialize($properties=array(), $mapper=FALSE, $context=FALSE) { // Get the mapper is not specified if (!$mapper) { $mapper = $this->get_registry()->get_utility($this->_mapper_interface); } + + // Initialize parent::initialize($mapper, $properties); } function get_images() { $mapper = C_Image_Mapper::get_instance(); - return $mapper->find_all(array('galleryid = %d', $this->gid)); + return $mapper->select()->where(array('galleryid = %d', $this->gid))->order_by('sortorder')->run_query(); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallery_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallery_mapper.php index 8fcea65762ed273ccfe920b83ce3694a797d1f79..7a7875db89fbf8c7643dd42104a0828978f9d4e9 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallery_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallery_mapper.php @@ -11,7 +11,7 @@ class C_Gallery_Mapper extends C_CustomTable_DataMapper_Driver * Define the object * @param string $context */ - function define($context=FALSE) + function define($context=FALSE, $not_used=FALSE) { // Add 'gallery' context if (!is_array($context)) $context = array($context); @@ -22,11 +22,23 @@ class C_Gallery_Mapper extends C_CustomTable_DataMapper_Driver // Continue defining the object parent::define('ngg_gallery', $context); $this->set_model_factory_method('gallery'); + $this->add_mixin('Mixin_NextGen_Table_Extras'); $this->add_mixin('Mixin_Gallery_Mapper'); $this->implement('I_Gallery_Mapper'); + + // Define the columns + $this->define_column('gid', 'BIGINT', 0); + $this->define_column('name', 'VARCHAR(255)'); + $this->define_column('slug', 'VARCHAR(255'); + $this->define_column('path', 'TEXT'); + $this->define_column('title', 'TEXT'); + $this->define_column('pageid', 'INT', 0); + $this->define_column('previewpic', 'INT', 0); + $this->define_column('author', 'INT', 0); + $this->define_column('extras_post_id', 'BIGINT', 0); } - function initialize() + function initialize($object_name=FALSE) { parent::initialize('ngg_gallery'); } @@ -57,24 +69,6 @@ class Mixin_Gallery_Mapper extends Mixin return $entity->title; } - /** - * Override the save method to avoid trying to save the 'new_sortorder' property - * to the database, which will fail since the column doesn't exist in the - * database. - * TODO: This is just a workaround and should be removed when we implement - * https://www.wrike.com/open.htm?id=8250095 - * @param stdClass|C_DataMapper_Model $entity - * @return boolean - */ - function _convert_to_table_data($entity) - { - $new_sortorder = property_exists($entity, 'new_sortorder') ? $entity->new_sortorder : NULL; - unset($entity->new_sortorder); - $retval = $this->call_parent('_convert_to_table_data', $entity); - if ($new_sortorder) $entity->new_sortorder = $new_sortorder; - return $retval; - } - function _save_entity($entity) { @@ -82,7 +76,7 @@ class Mixin_Gallery_Mapper extends Mixin if ($retval) { do_action('ngg_created_new_gallery', $entity->{$entity->id_field}); - C_Photocrati_Cache::flush(); + C_Photocrati_Cache::flush('displayed_gallery_rendering'); } return $retval; @@ -91,7 +85,7 @@ class Mixin_Gallery_Mapper extends Mixin function destroy($image) { $retval = $this->call_parent('destroy',$image); - C_Photocrati_Cache::flush(); + C_Photocrati_Cache::flush('displayed_gallery_rendering'); return $retval; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php index 79b554e8f65627abc490f8ac023fef24f70fa30d..5f7f92da23246481772bfd403414fa4a3a066ce4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.gallerystorage_driver_base.php @@ -1,6 +1,6 @@ <?php -class E_UploadException extends RuntimeException +class E_UploadException extends E_NggErrorException { function __construct($message='', $code=NULL, $previous=NULL) { @@ -9,17 +9,20 @@ class E_UploadException extends RuntimeException } } -class E_InsufficientWriteAccessException extends RuntimeException +class E_InsufficientWriteAccessException extends E_NggErrorException { function __construct($message=FALSE, $filename=NULL, $code=NULL, $previous=NULL) { if (!$message) $message = "Could not write to file. Please check filesystem permissions."; if ($filename) $message .= " Filename: {$filename}"; - parent::__construct($message, $code, $previous); + if (PHP_VERSION_ID >= 50300) + parent::__construct($message, $code, $previous); + else + parent::__construct($message, $code); } } -class E_NoSpaceAvailableException extends RuntimeException +class E_NoSpaceAvailableException extends E_NggErrorException { function __construct($message='', $code=NULL, $previous=NULL) { @@ -27,6 +30,16 @@ class E_NoSpaceAvailableException extends RuntimeException parent::__construct($message, $code, $previous); } } + +class E_No_Image_Library_Exception extends E_NggErrorException +{ + function __construct($message='', $code=NULL, $previous=NULL) + { + if (!$message) $message = "The site does not support the GD Image library. Please ask your hosting provider to enable it."; + parent::__construct($message, $code, $previous); + } +} + class Mixin_GalleryStorage_Driver_Base extends Mixin { @@ -91,6 +104,14 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin return $retval; } + function convert_slashes($path) + { + $search = array('/', "\\"); + $replace = array(DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR); + + return str_replace($search, $replace, $path); + } + function delete_directory($abspath) { @@ -101,7 +122,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin array_shift($files); array_shift($files); foreach ($files as $file) { - $file_abspath = path_join($abspath, $file); + $file_abspath = implode(DIRECTORY_SEPARATOR, array(rtrim($abspath, "/\\"), $file)); if (is_dir($file_abspath)) $this->object->delete_directory($file_abspath); else unlink($file_abspath); } @@ -150,7 +171,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin // Copy each image size foreach ($this->object->get_image_sizes() as $size) { $image_path = $this->object->get_image_abspath($image, $size); - $dst = path_join($gallery_path, basename($image_path)); + $dst = implode(DIRECTORY_SEPARATOR, array($gallery_path, basename($image_path))); $success = $move ? move($image_path, $dst) : copy($image_path, $dst); if (!$success) $retval = FALSE; } @@ -206,15 +227,18 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin if (FALSE == $gallery) { $gallerypath = C_NextGen_Settings::get_instance()->gallerypath; - $retval = path_join(WINABSPATH, $gallerypath); - $retval = path_join($retval, 'cache'); + $retval = implode(DIRECTORY_SEPARATOR, array( + rtrim(C_Fs::get_instance()->get_document_root(), "/\\"), + rtrim($gallerypath, "/\\"), + 'cache' + )); } else { if (is_numeric($gallery)) { $gallery = $this->object->_gallery_mapper->find($gallery); } - $retval = path_join($this->object->get_gallery_abspath($gallery), 'dynamic'); + $retval = rtrim(implode(DIRECTORY_SEPARATOR, array($this->object->get_gallery_abspath($gallery), 'dynamic')), "/\\"); } return $retval; @@ -255,9 +279,9 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin * @param int|stdClass|C_Image $image * @return string */ - function get_full_url($image) + function get_full_url($image, $check_existance=FALSE) { - return $this->object->get_image_url($image, 'full'); + return $this->object->get_image_url($image, 'full', $check_existance); } /** @@ -374,9 +398,9 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin * An alias for get_full_abspath() * @param int|object $image */ - function get_original_abspath($image) + function get_original_abspath($image, $check_existance=FALSE) { - return $this->object->get_image_abspath($image, 'full'); + return $this->object->get_image_abspath($image, 'full', $check_existance); } /** @@ -404,9 +428,9 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin * @param int|stdClass|C_Image $image * @return string */ - function get_original_url($image) + function get_original_url($image, $check_existance=FALSE) { - return $this->object->get_image_url($image, 'full'); + return $this->object->get_image_url($image, 'full', $check_existance); } /** @@ -415,7 +439,15 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin */ function get_upload_relpath($gallery=FALSE) { - return str_replace(ABSPATH, '', $this->object->get_upload_abspath($gallery)); + $fs = C_Fs::get_instance(); + + $retval = str_replace( + $fs->get_document_root(), + '', + $this->object->get_upload_abspath($gallery) + ); + + return DIRECTORY_SEPARATOR.ltrim($retval, "/\\"); } /** @@ -460,33 +492,81 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin function upload_zip($gallery_id) { $memory_limit = intval(ini_get('memory_limit')); - if ($memory_limit < 256) @ini_set('memory_limit', '256M'); + if (!extension_loaded('suhosin') && $memory_limit < 256) @ini_set('memory_limit', '256M'); $retval = FALSE; if ($this->object->is_zip()) { - $zipfile = $_FILES['file']['tmp_name']; - $dest_path = path_join(get_temp_dir(), 'unpacked-'.basename($zipfile)); - $fs = $this->get_registry()->get_utility('I_Fs'); + $fs = $this->get_registry()->get_utility('I_Fs'); + // Uses the WordPress ZIP abstraction API + include_once($fs->join_paths(ABSPATH, 'wp-admin', 'includes', 'file.php')); + WP_Filesystem(); + // Ensure that we truly have the gallery id $gallery_id = $this->_get_gallery_id($gallery_id); + + $zipfile = $_FILES['file']['tmp_name']; + $dest_path = implode(DIRECTORY_SEPARATOR, array( + rtrim(get_temp_dir(), "/\\"), + 'unpacked-'.basename($zipfile) + )); - // Uses the WordPress ZIP abstraction API wp_mkdir_p($dest_path); - include_once($fs->join_paths(ABSPATH, 'wp-admin', 'includes', 'file.php')); - WP_Filesystem(); + if ((unzip_file($zipfile, $dest_path) === TRUE)) { - $retval = $this->object->import_gallery_from_fs($dest_path, $gallery_id); + $dest_dir = $dest_path . DIRECTORY_SEPARATOR; + $files = glob($dest_dir . '*'); + $size = 0; + + foreach ($files as $file) { + if (is_file($dest_dir . $file)) { + $size += filesize($dest_dir . $file); + } + } + + if ($size == 0) { + $this->object->delete_directory($dest_path); + + $destination = wp_upload_dir(); + $destination_path = $destination['basedir']; + $dest_path = implode(DIRECTORY_SEPARATOR, array( + rtrim($destination_path, "/\\"), + 'unpacked-' . basename($zipfile) + )); + + wp_mkdir_p($dest_path); + + if ((unzip_file($zipfile, $dest_path) === TRUE)) { + $retval = $this->object->import_gallery_from_fs($dest_path, $gallery_id); + } + } + else { + $retval = $this->object->import_gallery_from_fs($dest_path, $gallery_id); + } } + $this->object->delete_directory($dest_path); } - @ini_set('memory_limit', $memory_limit.'M'); + if (!extension_loaded('suhosin')) @ini_set('memory_limit', $memory_limit.'M'); return $retval; } + function is_current_user_over_quota() + { + $retval = FALSE; + $settings = C_NextGen_Settings::get_instance(); + + if ((is_multisite()) && $settings->get('wpmuQuotaCheck')) { + require_once(ABSPATH . 'wp-admin/includes/ms.php'); + $retval = upload_is_user_over_quota(FALSE); + } + + return $retval; + } + /** * Uploads base64 file to a gallery @@ -499,17 +579,14 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin { $settings = C_NextGen_Settings::get_instance(); $memory_limit = intval(ini_get('memory_limit')); - if ($memory_limit < 256) @ini_set('memory_limit', '256M'); + if (!extension_loaded('suhosin') && $memory_limit < 256) @ini_set('memory_limit', '256M'); $retval = NULL; if (($gallery_id = $this->object->_get_gallery_id($gallery))) { - // Ensure that there is capacity available - require_once(ABSPATH . 'wp-admin/includes/ms.php'); - if ( (is_multisite()) && nggWPMU::wpmu_enable_function('wpmuQuotaCheck')) { - if (upload_is_user_over_quota(FALSE)) { - throw new E_NoSpaceAvailableException(); - } + if ($this->object->is_current_user_over_quota()) { + $message = sprintf(__('Sorry, you have used your space allocation. Please delete some files to upload more files.', 'nggallery')); + throw new E_NoSpaceAvailableException($message); } // Get path information. The use of get_upload_abspath() might @@ -519,18 +596,19 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin $upload_dir = $this->object->get_upload_abspath($gallery); // Perhaps a filename was given instead of base64 data? - if ($data[0] == '/' && @file_exists($data)) { + if (preg_match("#/\\\\#", $data[0]) && @file_exists($data)) { if (!$filename) $filename = basename($data); $data = file_get_contents($data); } // Determine filenames - $filename = $filename ? sanitize_title_with_dashes($filename) : uniqid('nextgen-gallery'); + $original_filename = $filename; + $filename = $filename ? sanitize_file_name($original_filename) : uniqid('nextgen-gallery'); if (preg_match("/\-(png|jpg|gif|jpeg)$/i", $filename, $match)) { $filename = str_replace($match[0], '.'.$match[1], $filename); } - $abs_filename = path_join($upload_dir, $filename); - + $abs_filename = implode(DIRECTORY_SEPARATOR, array($upload_dir, $filename)); + // Create or retrieve the image object $image = NULL; if ($image_id) { @@ -541,7 +619,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin $retval = $image; // Create or update the database record - $image->alttext = sanitize_title_with_dashes(basename($filename, '.' . pathinfo($filename, PATHINFO_EXTENSION))); + $image->alttext = basename($original_filename, '.' . pathinfo($original_filename, PATHINFO_EXTENSION)); $image->galleryid = $this->object->_get_gallery_id($gallery); $image->filename = $filename; $image->image_slug = nggdb::get_unique_slug( sanitize_title_with_dashes( $image->alttext ), 'image' ); @@ -559,7 +637,6 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin if (($image_id = $this->object->_image_mapper->save($image))) { try { // Try writing the image - if (!@file_exists($upload_dir)) wp_mkdir_p($upload_dir); $fp = fopen($abs_filename, 'w'); fwrite($fp, $data); fclose($fp); @@ -605,6 +682,12 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin array($image->$image_key) ); } + catch(E_No_Image_Library_Exception $ex) { + throw $ex; + } + catch(E_Clean_Exit $ex) { + // pass + } catch(Exception $ex) { throw new E_InsufficientWriteAccessException( FALSE, $abs_filename, FALSE, $ex @@ -615,7 +698,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin } else throw new E_EntityNotFoundException(); - @ini_set('memory_limit', $memory_limit.'M'); + if (!extension_loaded('suhosin')) @ini_set('memory_limit', $memory_limit.'M'); return $retval; } @@ -1130,6 +1213,7 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin $crop_frame = isset($params['crop_frame']) ? $params['crop_frame'] : NULL; $destpath = NULL; $thumbnail = NULL; + $quality = 100; // Do this before anything else can modify the original -- $detailed_size // may hold IPTC metadata we need to write to our clone @@ -1187,18 +1271,20 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin { $destpath = $clone_path; $thumbnail = new C_NggLegacy_Thumbnail($image_path, true); + if (!$thumbnail->error) { + if ($crop) { + $crop_area = $result['crop_area']; + $crop_x = $crop_area['x']; + $crop_y = $crop_area['y']; + $crop_width = $crop_area['width']; + $crop_height = $crop_area['height']; + + $thumbnail->crop($crop_x, $crop_y, $crop_width, $crop_height); + } - if ($crop) { - $crop_area = $result['crop_area']; - $crop_x = $crop_area['x']; - $crop_y = $crop_area['y']; - $crop_width = $crop_area['width']; - $crop_height = $crop_area['height']; - - $thumbnail->crop($crop_x, $crop_y, $crop_width, $crop_height); - } - - $thumbnail->resize($width, $height); + $thumbnail->resize($width, $height); + } + else $thumbnail = NULL; } // We successfully generated the thumbnail @@ -1310,11 +1396,12 @@ class Mixin_GalleryStorage_Driver_Base extends Mixin $thumbnail->save($destpath, $quality); // IF the original contained IPTC metadata we should attempt to copy it - if (isset($detailed_size['APP13'])) { - $metadata = iptcembed($detailed_size['APP13'], $destpath); - $fp = fopen($destpath, 'wb'); - fwrite($fp, $metadata); - fclose($fp); + if (isset($detailed_size['APP13']) && function_exists('iptcembed')) + { + $metadata = @iptcembed($detailed_size['APP13'], $destpath); + $fp = @fopen($destpath, 'wb'); + @fwrite($fp, $metadata); + @fclose($fp); } } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image.php old mode 100644 new mode 100755 index e0f012ef564d5c1d411769fd10b5945871f94f5e..1da15d98829ad4e11552d28268cf811029625293 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image.php @@ -21,7 +21,7 @@ class C_Image extends C_DataMapper_Model { var $_mapper_interface = 'I_Image_Mapper'; - function define($properties=FALSE, $mapper=FALSE, $context=FALSE) + function define($properties=array(), $mapper=FALSE, $context=FALSE) { parent::define($mapper, $properties, $context); $this->add_mixin('Mixin_NextGen_Gallery_Image_Validation'); @@ -34,7 +34,8 @@ class C_Image extends C_DataMapper_Model * @param C_DataMapper $mapper * @param string $context */ - function initialize($properties = FALSE, $mapper=FALSE, $context=FALSE) { + function initialize($properties=array(), $mapper=FALSE, $context=FALSE) + { // Get the mapper is not specified if (!$mapper) { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image_mapper.php index 5d747cb473280bfe9720a27c836d97bdd9d76bf9..85f63a47a6030503603e4a04aeaa6a5372823607 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image_mapper.php @@ -8,27 +8,40 @@ class C_Image_Mapper extends C_CustomTable_DataMapper_Driver * Defines the gallery image mapper * @param type $context */ - function define($context=FALSE) + function define($context=FALSE, $not_used=FALSE) { // Add 'attachment' context if (!is_array($context)) $context = array($context); array_push($context, 'attachment'); - $this->primary_key_column = 'pid'; - + // Define the mapper + $this->_primary_key_column = 'pid'; parent::define('ngg_pictures', $context); + $this->add_mixin('Mixin_NextGen_Table_Extras'); $this->add_mixin('Mixin_Gallery_Image_Mapper'); - $this->add_post_hook( - '_convert_to_entity', - 'Unserialize Metadata', - 'Hook_Unserialize_Image_Metadata', - 'unserialize_metadata' - ); $this->implement('I_Image_Mapper'); $this->set_model_factory_method('image'); + + // Define the columns + $this->define_column('pid', 'BIGINT', 0); + $this->define_column('image_slug', 'VARCHAR(255)'); + $this->define_column('post_id', 'BIGINT', 0); + $this->define_column('galleryid', 'BIGINT', 0); + $this->define_column('filename', 'VARCHAR(255)'); + $this->define_column('description', 'TEXT'); + $this->define_column('alttext', 'TEXT'); + $this->define_column('imagedate', 'DATETIME'); + $this->define_column('exclude', 'INT', 0); + $this->define_column('sortorder', 'BIGINT', 0); + $this->define_column('meta_data', 'TEXT'); + $this->define_column('extras_post_id', 'BIGINT', 0); + $this->define_column('updated_at', 'BIGINT'); + + // Mark the columns which should be unserialized + $this->add_serialized_column('meta_data'); } - function initialize() + function initialize($object_name=FALSE) { parent::initialize('ngg_pictures'); } @@ -55,27 +68,11 @@ class Mixin_Gallery_Image_Mapper extends Mixin return $retval; } - /** - * Override the save method to avoid trying to save the 'new_sortorder' property - * to the database, which will fail since the column doesn't exist in the - * database. - * TODO: This is just a workaround and should be removed when we implement - * https://www.wrike.com/open.htm?id=8250095 - * @param stdClass|C_DataMapper_Model $entity - * @return boolean - */ - function _convert_to_table_data($entity) - { - $new_sortorder = property_exists($entity, 'new_sortorder') ? $entity->new_sortorder : NULL; - unset($entity->new_sortorder); - $retval = $this->call_parent('_convert_to_table_data', $entity); - if ($new_sortorder) $entity->new_sortorder = $new_sortorder; - return $retval; - } - function _save_entity($entity) { + $entity->updated_at = time(); + // If successfully saved, then import metadata and $retval = $this->call_parent('_save_entity', $entity); if ($retval) { @@ -84,7 +81,7 @@ class Mixin_Gallery_Image_Mapper extends Mixin if (!isset($entity->meta_data['saved'])) { nggAdmin::import_MetaData($image_id); } - C_Photocrati_Cache::flush(); + C_Photocrati_Cache::flush('displayed_gallery_rendering'); } return $retval; } @@ -152,25 +149,16 @@ class Mixin_Gallery_Image_Mapper extends Mixin } // Set unique slug - if (isset($entity->alttext)) { - $this->object->_set_default_value($entity, 'image_slug', nggdb::get_unique_slug( sanitize_title_with_dashes( $entity->alttext ), 'image' )); + if (isset($entity->alttext) && !isset($entity->image_slug)) { + $entity->image_slug = nggdb::get_unique_slug( sanitize_title_with_dashes( $entity->alttext ), 'image' ); } // Ensure that the exclude parameter is an integer or boolean-evaluated // value if (is_string($entity->exclude)) $entity->exclude = intval($entity->exclude); - } -} -/** - * Unserializes the metadata when fetched from the database - */ -class Hook_Unserialize_Image_Metadata extends Hook -{ - function unserialize_metadata($entity) - { - if (isset($entity->meta_data) && is_string($entity->meta_data)) { - $entity->meta_data = $this->object->unserialize($entity->meta_data); - } + // Trim alttext and description + $entity->description = trim($entity->description); + $entity->alttext = trim($entity->alttext); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image_wrapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image_wrapper.php index c270e7835575ef41bf8e10ba0616919a2c53d79c..7b1009e5f236f93a690af55d7bba9dfe8e9191ed 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image_wrapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.image_wrapper.php @@ -122,7 +122,7 @@ class C_Image_Wrapper switch ($name) { case 'alttext': - $this->_cache['alttext'] = (empty($this->_cache['alttext'])) ? ' ' : html_entity_decode(stripslashes(nggGallery::i18n($this->_cache['alttext'], 'pic_' . $this->__get('id') . '_alttext'))); + $this->_cache['alttext'] = (empty($this->_cache['alttext'])) ? ' ' : html_entity_decode(stripslashes($this->_cache['alttext'])); return $this->_cache['alttext']; case 'author': @@ -138,7 +138,7 @@ class C_Image_Wrapper return $this->_cache['author']; case 'caption': - $caption = html_entity_decode(stripslashes(nggGallery::i18n($this->__get('description'), 'pic_' . $this->__get('id') . '_description'))); + $caption = html_entity_decode(stripslashes($this->__get('description'))); if (empty($caption)) { $caption = ' '; @@ -147,7 +147,7 @@ class C_Image_Wrapper return $this->_cache['caption']; case 'description': - $this->_cache['description'] = (empty($this->_cache['description'])) ? ' ' : html_entity_decode(stripslashes(nggGallery::i18n($this->_cache['description'], 'pic_' . $this->__get('id') . '_description'))); + $this->_cache['description'] = (empty($this->_cache['description'])) ? ' ' : html_entity_decode(stripslashes($this->_cache['description'])); return $this->_cache['description']; case 'galdesc': @@ -182,7 +182,7 @@ class C_Image_Wrapper case 'imageHTML': $tmp = '<a href="' . $this->__get('imageURL') . '" title="' - . htmlspecialchars(stripslashes(nggGallery::i18n($this->__get('description'), 'pic_' . $this->__get('id') . '_description'))) + . htmlspecialchars(stripslashes($this->__get('description'))) . '" ' . $this->get_thumbcode($this->__get('name')) . '>' . '<img alt="' . $this->__get('alttext') . '" src="' . $this->__get('imageURL') . '"/>' . '</a>'; $this->_cache['href'] = $tmp; @@ -200,7 +200,7 @@ class C_Image_Wrapper return $this->_cache['imageURL']; case 'linktitle': - $this->_cache['linktitle'] = htmlspecialchars(stripslashes(nggGallery::i18n($this->__get('description'), 'pic_' . $this->__get('id') . '_description'))); + $this->_cache['linktitle'] = htmlspecialchars(stripslashes($this->__get('description'))); return $this->_cache['linktitle']; case 'name': @@ -274,8 +274,13 @@ class C_Image_Wrapper $this->_orig_image->meta_data ); } - $w = $this->_orig_image->meta_data['thumbnail']['width']; - $h = $this->_orig_image->meta_data['thumbnail']['height']; + if (!isset($this->_orig_image->meta_data['thumbnail'])) { + $storage = $this->get_storage(); + $storage->generate_thumbnail($this->_orig_image); + } + $w = $this->_orig_image->meta_data['thumbnail']['width']; + $h = $this->_orig_image->meta_data['thumbnail']['height']; + return "width='{$w}' height='{$h}'"; case 'slug': @@ -296,7 +301,7 @@ class C_Image_Wrapper case 'thumbHTML': $tmp = '<a href="' . $this->__get('imageURL') . '" title="' - . htmlspecialchars(stripslashes(nggGallery::i18n($this->__get('description'), 'pic_' . $this->__get('id') . '_description'))) + . htmlspecialchars(stripslashes($this->__get('description'))) . '" ' . $this->get_thumbcode($this->__get('name')) . '>' . '<img alt="' . $this->__get('alttext') . '" src="' . $this->thumbURL . '"/>' . '</a>'; $this->_cache['href'] = $tmp; @@ -422,7 +427,13 @@ class C_Image_Wrapper $retval = apply_filters('ngg_get_thumbcode', $retval, $this); - $retval .= ' data-image-id="' . $this->__get('id') . '"'; + // ensure some additional data- fields are added; provides Pro-Lightbox compatibility + $retval .= ' data-image-id="' . $this->__get('id') . '"'; + $retval .= ' data-src="' . $this->__get('imageURL') . '"'; + $retval .= ' data-thumbnail="' . $this->__get('thumbnailURL') . '"'; + $retval .= ' data-image-id="' . $this->__get('pid') . '"'; + $retval .= ' data-title="' . esc_attr($this->__get('alttext')) . '"'; + $retval .= ' data-description="' . esc_attr($this->__get('description')) . '"'; $this->_cache['thumbcode'] = $retval; return $retval; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.nextgen_data_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.nextgen_data_installer.php index c930dcdf6203b3513e25ce008676f77fc681b13a..575dcb1d14244321e4bdf725f7e3b2d1dfe8a6fc 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.nextgen_data_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.nextgen_data_installer.php @@ -1,12 +1,31 @@ <?php -class C_NextGen_Data_Installer +class C_NextGen_Data_Installer extends C_NggLegacy_Installer { function get_registry() { return C_Component_Registry::get_instance(); } + function install() + { + $this->remove_table_extra_options(); + } + + function remove_table_extra_options() + { + global $wpdb; + + $likes = array( + "option_name LIKE '%ngg_gallery%'", + "option_name LIKE '%ngg_pictures%'", + "option_name LIKE '%ngg_album%'" + ); + + $sql = "DELETE FROM {$wpdb->options} WHERE ".implode(" OR ", $likes); + $wpdb->query($sql); + } + function uninstall($hard = FALSE) { if ($hard) { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php index 9e6030acbb820302d3b5c984b5bc68dfcb9b4dec..8f8089a691576ced2a6970034ea9827c7e90a8df 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php @@ -528,12 +528,12 @@ class C_NextGen_Metadata extends C_Component } /** - * nggMeta::i8n_name() - localize the tag name + * nggMeta::i18n_name() - localize the tag name * * @param mixed $key * @return translated $key */ - function i8n_name($key) + function i18n_name($key) { $tagnames = array( 'aperture' => __('Aperture', 'nggallery'), diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php index c6db0052845aed9e7ad859d29c630c5059ac9a5a..bf799a33920ef6671250bb3826db8a1907023db4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_gallerystorage_driver.php @@ -16,34 +16,18 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin { // Base upload path $retval = C_NextGen_Settings::get_instance()->gallerypath; - $fs = $this->get_registry()->get_utility('I_Fs'); + $fs = $this->get_registry()->get_utility('I_Fs'); // If a gallery has been specified, then we'll // append the slug - if ($gallery) { - if (!is_object($gallery)) { - $gallery = $this->object->_get_gallery_id($gallery); - $gallery = $this->object->_gallery_mapper->find($gallery); - } - - if ($gallery) { - $path = $gallery->path; - $base = basename($path); - $slug = $gallery->slug; - - if ($base == null) { - $base = $slug; - } - - $retval = $fs->join_paths($retval, $base); - } - } + if ($gallery) $retval = $this->get_gallery_abspath($gallery); // We need to make this an absolute path - if (strpos($retval, $fs->get_document_root()) === FALSE) - $retval = $fs->join_paths($fs->get_document_root(), $retval); + if (strpos($retval, $fs->get_document_root()) !== 0) + $retval = rtrim($fs->join_paths($fs->get_document_root(), $retval), "/\\"); - return $retval; + // Convert slashes + return $this->object->convert_slashes($retval); } @@ -63,17 +47,24 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin } } - // If a path was stored in the entity, then use that - if ($gallery && isset($gallery->path)) { - $retval = $fs->join_paths($fs->get_document_root(), $gallery->path); - } - elseif ($gallery) { - // fallback to the upload abspath - $storage = $this->object->get_registry()->get_utility('I_Gallery_Storage'); - $retval = $storage->get_upload_abspath($gallery); + // We we have a gallery, determine it's path + if ($gallery) { + if (isset($gallery->path)) { + $retval = $gallery->path; + } + elseif (isset($gallery->slug)) { + $fs = $this->get_registry()->get_utility('I_Fs'); + $basepath = C_NextGen_Settings::get_instance()->gallerypath; + $retval = $fs->join_paths($basepath, $gallery->slug); + + } } - return $retval; + // Ensure that the path is absolute + if (strpos($retval, $fs->get_document_root()) !== 0) + $retval = rtrim($fs->join_paths($fs->get_document_root(), $retval), "/\\"); + + return $this->object->convert_slashes(rtrim($retval, "/\\")); } @@ -151,7 +142,7 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin } } - return $retval; + return $retval ? rtrim($retval, "/\\") : $retval; } @@ -161,16 +152,31 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin * @param string $size * @returns array */ - function get_image_url($image, $size='full') + function get_image_url($image, $size='full', $check_existance=FALSE) { - $fs = $this->get_registry()->get_utility('I_Fs'); - $router = $this->get_registry()->get_utility('I_Router'); - $request_uri = str_replace( - trailingslashit($fs->get_document_root()), - '', - $this->object->get_image_abspath($image, $size) - ); - return $router->remove_url_segment('/index.php', $router->get_url($request_uri, FALSE, TRUE)); + $retval = NULL; + $fs = $this->get_registry()->get_utility('I_Fs'); + $router = $this->get_registry()->get_utility('I_Router'); + $abspath = $this->object->get_image_abspath($image, $size, $check_existance); + if ($abspath) { + $doc_root = $fs->get_document_root(); + + if ($doc_root != null) { + $doc_root = rtrim($doc_root, "/\\").DIRECTORY_SEPARATOR; + } + + $request_uri = str_replace( + $doc_root, + '', + $abspath + ); + + $request_uri = '/'.ltrim(str_replace("\\", '/', $request_uri), "/"); + + $retval = $router->remove_url_segment('/index.php', $router->get_url($request_uri, FALSE, TRUE)); + } + + return $retval; } /** @@ -562,7 +568,8 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin // Get the paths to fullsize and thumbnail files $abspaths = array( $this->object->get_full_abspath($image), - $this->object->get_thumb_abspath($image) + $this->object->get_thumb_abspath($image), + $this->object->get_backup_abspath($image) ); if (isset($image->meta_data)) @@ -624,30 +631,25 @@ class Mixin_NggLegacy_GalleryStorage_Driver extends Mixin } $image_key = $this->object->_image_mapper->get_primary_key_column(); + $gallery_abspath = $fs->join_paths($fs->get_document_root(), $gallery->path); // Check for folder permission - if (!is_dir($gallery->path) && !wp_mkdir_p($gallery->path)) + if (!is_dir($gallery_abspath) && !wp_mkdir_p($gallery_abspath)) { - $message .= sprintf(__('Unable to create directory %s.', 'nggallery'), esc_html(WINABSPATH . $gallery->path)); + $message .= sprintf(__('Unable to create directory %s.', 'nggallery'), esc_html($gallery_abspath)); return; } - if (!is_writable(WINABSPATH . $gallery->path)) + if (!is_writable($gallery_abspath)) { - $message .= sprintf(__('Unable to write to directory %s. Is this directory writable by the server?', 'nggallery'), esc_html(WINABSPATH . $gallery->path)); + $message .= sprintf(__('Unable to write to directory %s. Is this directory writable by the server?', 'nggallery'), esc_html($gallery_abspath)); return; } foreach ($images as $image) { - - // Ensure that there is capacity available - if ((is_multisite()) && $settings->get('wpmuQuotaCheck')) - { - require_once(ABSPATH . 'wp-admin/includes/ms.php'); - if (upload_is_user_over_quota(FALSE)) { - $message .= sprintf(__('Sorry, you have used your space allocation. Please delete some files to upload more files.', 'nggallery')); - throw new E_NoSpaceAvailableException(); - } - } + if ($this->object->is_current_user_over_quota()) { + $message = sprintf(__('Sorry, you have used your space allocation. Please delete some files to upload more files.', 'nggallery')); + throw new E_NoSpaceAvailableException($message); + } // Copy the db entry if (is_numeric($image)) diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php index 6caa17da6a3b547de88a0f83b34bd6f2524e2149..359cf92a2ce9458811c342b94770de0db5bd0d35 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php @@ -117,7 +117,7 @@ class C_NggLegacy_Thumbnail { if(!function_exists("gd_info")) { echo 'You do not have the GD Library installed. This class requires the GD library to function properly.' . "\n"; echo 'visit http://us2.php.net/manual/en/ref.image.php for more information'; - C_NextGEN_Bootstrap::shutdown(); + throw new E_No_Image_Library_Exception(); } //initialize variables $this->errmsg = ''; @@ -161,7 +161,7 @@ class C_NggLegacy_Thumbnail { } // increase memory-limit if possible, GD needs this for large images - // @ini_set('memory_limit', '128M'); + if (!extension_loaded('suhosin')) @ini_set('memory_limit', '512M'); if($this->error == false) { // Check memory consumption if file exists @@ -224,8 +224,9 @@ class C_NggLegacy_Thumbnail { $MB = 1048576; // number of bytes in 1M $K64 = 65536; // number of bytes in 64K $TWEAKFACTOR = 1.68; // Or whatever works for you + $bits = (!empty($imageInfo['bits']) ? $imageInfo['bits'] : 32); // imgInfo[bits] is not always available $memoryNeeded = round( ( $imageInfo[0] * $imageInfo[1] - * $imageInfo['bits'] + * $bits * $CHANNEL / 8 + $K64 ) * $TWEAKFACTOR @@ -340,30 +341,24 @@ class C_NggLegacy_Thumbnail { * @param int $height */ function calcImageSize($width,$height) { - $newSize = array('newWidth'=>$width,'newHeight'=>$height); - - if($this->maxWidth > 0) { - - $newSize = $this->calcWidth($width,$height); - - if($this->maxHeight > 0 && $newSize['newHeight'] > $this->maxHeight) { - $newSize = $this->calcHeight($newSize['newWidth'],$newSize['newHeight']); - } - - //$this->newDimensions = $newSize; + // $width and $height are the CURRENT image resolutions + $ratio_w = $this->maxWidth / $width; + $ratio_h = $this->maxHeight / $height; + + if ($ratio_w >= $ratio_h) + { + $width = $this->maxWidth; + $height = (int)round($height * $ratio_h, 0); } - - if($this->maxHeight > 0) { - $newSize = $this->calcHeight($width,$height); - - if($this->maxWidth > 0 && $newSize['newWidth'] > $this->maxWidth) { - $newSize = $this->calcWidth($newSize['newWidth'],$newSize['newHeight']); - } - - //$this->newDimensions = $newSize; + else { + $height = $this->maxHeight; + $width = (int)round($width * $ratio_w, 0); } - $this->newDimensions = $newSize; + $this->newDimensions = array( + 'newWidth' => $width, + 'newHeight' => $height, + ); } /** @@ -952,15 +947,25 @@ class C_NggLegacy_Thumbnail { function watermarkImage( $relPOS = 'botRight', $xPOS = 0, $yPOS = 0) { // if it's a resource ID take it as watermark text image - if(is_resource($this->watermarkImgPath)) { + if (is_resource($this->watermarkImgPath)) + { $this->workingImage = $this->watermarkImgPath; - } else { - // Would you really want to use anything other than a png? - $this->workingImage = @imagecreatefrompng($this->watermarkImgPath); - // if it's not a valid file die... - if (empty($this->workingImage) or (!$this->workingImage)) - return; - } + } + else { + // (possibly) search for the file from the document root + if (!is_file($this->watermarkImgPath)) + { + $fs = C_Fs::get_instance(); + if (is_file($fs->join_paths($fs->get_document_root(), $this->watermarkImgPath))) + $this->watermarkImgPath = $fs->get_document_root() . $this->watermarkImgPath; + } + + // Would you really want to use anything other than a png? + $this->workingImage = @imagecreatefrompng($this->watermarkImgPath); + // if it's not a valid file die... + if (empty($this->workingImage) or (!$this->workingImage)) + return; + } imagealphablending($this->workingImage, false); imagesavealpha($this->workingImage, true); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/interface.gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/interface.gallery.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/interface.gallery_type.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/interface.gallery_type.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/interface.image.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/interface.image.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/mixin.nextgen_table_extras.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/mixin.nextgen_table_extras.php new file mode 100644 index 0000000000000000000000000000000000000000..c65d4049e49c2d04a1a2073e1e1b0d89690d4195 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/mixin.nextgen_table_extras.php @@ -0,0 +1,184 @@ +<?php + +class Mixin_NextGen_Table_Extras extends Mixin +{ + const CUSTOM_POST_NAME = __CLASS__; + + function initialize() + { + // Each record in a NextGEN Gallery table has an associated custom post in the wp_posts table + $this->object->_custom_post_mapper = new C_CustomPost_DataMapper_Driver($this->object->get_object_name()); + $this->object->_custom_post_mapper->set_model_factory_method('extra_fields'); + } + + /** + * Defines a column for the mapper + * @param $name + * @param $data_type + * @param null $default_value + * @param bool $extra + */ + function define_column($name, $data_type, $default_value=NULL, $extra=FALSE) + { + $this->call_parent('define_column', $name, $data_type, $default_value); + if ($extra) { + $this->object->_columns[$name]['extra'] = TRUE; + } + else $this->object->_columns[$name]['extra'] = FALSE; + } + + /** + * Gets a list of all the extra columns defined for this table + * @return array + */ + function get_extra_columns() + { + $retval = array(); + + foreach ($this->object->_columns as $key => $properties) { + if ($properties['extra']) $retval[] = $key; + } + + return $retval; + } + + /** + * Adds a column to the database + * @param $column_name + * @param $datatype + * @param null $default_value + */ + function _add_column($column_name, $datatype, $default_value=NULL) + { + $skip = FALSE; + if (isset($this->object->_columns[$column_name]) and $this->object->_columns[$column_name]['extra']) { + $skip = TRUE; + } + if (!$skip) $this->call_parent('_add_column', $column_name, $datatype, $default_value); + } + + function create_custom_post_entity($entity) + { + $custom_post_entity = new stdClass; + + // If the custom post entity already exists then it needs + // an ID + if (isset($entity->extras_post_id)) $custom_post_entity->ID = $entity->extras_post_id; + + // If a property isn't a column for the table, then + // it belongs to the custom post record + foreach (get_object_vars($entity) as $key => $value) { + if (!$this->object->has_column($key)) { + unset($entity->$key); + if ($this->object->has_defined_column($key) && $key != $this->object->get_primary_key_column()) + $custom_post_entity->$key = $value; + } + } + + // Used to help find these type of records + $custom_post_entity->post_name = self::CUSTOM_POST_NAME; + + return $custom_post_entity; + } + + /** + * Creates a new record in the custom table, as well as a custom post record + * @param $entity + */ + function _create($entity) + { + $retval = FALSE; + $custom_post_entity = $this->create_custom_post_entity($entity); + + // Try persisting the custom post type record first + if (($custom_post_id = $this->object->_custom_post_mapper->save($custom_post_entity))) { + + // Try saving the custom table record. If that fails, then destroy the previously + // created custom post type record + if (!($retval = $this->call_parent('_create', $entity))) { + $this->object->_custom_post_mapper->destroy($custom_post_id); + } + + // Add the custom post id property + else { + $entity->extras_post_id = $custom_post_id; + } + } + + return $retval; + } + + // Updates a custom table record and it's associated custom post type record in the database + function _update($entity) + { + $retval = FALSE; + $custom_post_entity = $this->create_custom_post_entity($entity); + $custom_post_id = $this->object->_custom_post_mapper->save($custom_post_entity); + $entity->extras_post_id = $custom_post_id; + $retval = $this->call_parent('_update', $entity); + foreach ($this->get_extra_columns() as $key) { + if (isset($custom_post_entity->$key)) $entity->$key = $custom_post_entity->$key; + } + + return $retval; + } + + function destroy($entity) + { + if (isset($entity->extras_post_id)) { + wp_delete_post($entity->extras_post_id, TRUE); + } + + return $this->call_parent('destroy', $entity); + } + + /** + * Gets the generated query + */ + function get_generated_query() + { + // Add extras column + if ($this->object->is_select_statement() && stripos($this->object->_select_clause, 'count(') === FALSE) + { + global $wpdb; + $table_name = $this->object->get_table_name(); + $primary_key = "{$table_name}.{$this->object->get_primary_key_column()}"; + if (stripos($this->object->_select_clause, 'DISTINCT') === FALSE) { + $this->object->_select_clause = str_replace('SELECT', 'SELECT DISTINCT', $this->object->_select_clause); + } + $this->object->group_by($primary_key); + $sql = $this->call_parent('get_generated_query'); + $from = 'FROM `'.$this->object->get_table_name().'`'; + $sql = str_replace('FROM', ", GROUP_CONCAT(CONCAT_WS('@@', meta_key, meta_value)) AS 'extras' FROM", $sql); + $sql = str_replace($from, "{$from} LEFT OUTER JOIN `{$wpdb->postmeta}` ON `{$wpdb->postmeta}`.`post_id` = `extras_post_id` ", $sql); + } + else $sql = $this->call_parent('get_generated_query'); + + return $sql; + } + + function _convert_to_entity($entity) + { + // Add extra columns to entity + if (isset($entity->extras)) { + $extras = $entity->extras; + unset($entity->extras); + foreach (explode(',', $extras) as $extra) { + if ($extra) { + list($key, $value) = explode('@@', $extra); + if ($this->object->has_defined_column($key) && !isset($entity->key)) $entity->$key = $value; + } + } + } + + // Cast custom_post_id as integer + if (isset($entity->extras_post_id)) { + $entity->extras_post_id = intval($entity->extras_post_id); + } + else $entity->extras_post_id = 0; + + $retval = $this->call_parent('_convert_to_entity', $entity); + + return $entity; + } +} \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php old mode 100644 new mode 100755 index 5f956d6f8d2ffc57bc4454f1b6971069005afd33..75a1e396b16cf92f35c846b26da41f8346d834b0 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php @@ -15,7 +15,7 @@ class M_NextGen_Data extends C_Base_Module 'photocrati-nextgen-data', 'NextGEN Data Tier', "Provides a data tier for NextGEN gallery based on the DataMapper module", - '0.3', + '0.8', 'http://www.photocrati.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -61,6 +61,7 @@ class M_NextGen_Data extends C_Base_Module 'C_Image_Wrapper' => 'class.image_wrapper.php', 'C_Image_Wrapper_Collection' => 'class.image_wrapper_collection.php', 'C_Nextgen_Metadata' => 'class.nextgen_metadata.php', + 'Mixin_NextGen_Table_Extras' => 'mixin.nextgen_table_extras.php', 'C_Ngglegacy_Gallerystorage_Driver' => 'class.ngglegacy_gallerystorage_driver.php', 'C_Ngglegacy_Thumbnail' => 'class.ngglegacy_thumbnail.php', 'C_Wordpress_Gallerystorage_Driver' => 'class.wordpress_gallerystorage_driver.php', @@ -80,8 +81,26 @@ class M_NextGen_Data extends C_Base_Module function _register_hooks() { + add_action('init', array(&$this, 'register_custom_post_types')); add_filter('posts_orderby', array($this, 'wp_query_order_by'), 10, 2); } + + function register_custom_post_types() + { + $types = array( + 'ngg_album' => 'NextGEN Gallery - Album', + 'ngg_gallery' => 'NextGEN Gallery - Gallery', + 'ngg_pictures' => 'NextGEN Gallery - Image', + ); + + foreach ($types as $type => $label) { + register_post_type($type, array( + 'label' => $label, + 'publicly_queryable' => FALSE, + 'exclude_from_search' => TRUE, + )); + } + } function wp_query_order_by($order_by, $wp_query) { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_controller.php index 56d4f0963836f20b6932f092c9c96d50c50a4211..dab66f550f88810d90b31d319d6c38df900813af 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_controller.php @@ -14,7 +14,7 @@ class A_Display_Settings_Controller extends Mixin function get_page_title() { - return 'Gallery Settings'; + return __('Gallery Settings', 'nggallery'); } function get_required_permission() diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_page.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_page.php index b6e7f2c47cdca93561bcf249b023784cf3ed2c5e..2f1b1a667c46c78440773de3d07577da1873bf77 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_page.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_page.php @@ -4,10 +4,9 @@ class A_Display_Settings_Page extends Mixin { function initialize() { - $this->object->add( - 'ngg_display_settings', - 'A_Display_Settings_Controller', - NGGFOLDER - ); + $this->object->add('ngg_display_settings', array( + 'adapter' => 'A_Display_Settings_Controller', + 'parent' => NGGFOLDER + )); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.displayed_gallery_trigger_element.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.displayed_gallery_trigger_element.php new file mode 100644 index 0000000000000000000000000000000000000000..531d9ae4fdcff8cb67ca51f130e874b5da3aedc7 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.displayed_gallery_trigger_element.php @@ -0,0 +1,15 @@ +<?php + +class A_Displayed_Gallery_Trigger_Element extends Mixin +{ + function render_object() + { + $root_element = $this->call_parent('render_object'); + if (($displayed_gallery = $this->object->get_param('displayed_gallery')) && $this->object->get_param('display_type_rendering')) { + $triggers = C_Displayed_Gallery_Trigger_Manager::get_instance(); + $triggers->render($root_element, $displayed_gallery); + } + + return $root_element; + } +} \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.displayed_gallery_trigger_resources.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.displayed_gallery_trigger_resources.php new file mode 100644 index 0000000000000000000000000000000000000000..5ad485619c6666eec887f9e68a4345aa42e1a830 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.displayed_gallery_trigger_resources.php @@ -0,0 +1,49 @@ +<?php + +class A_Displayed_Gallery_Trigger_Resources extends Mixin +{ + protected $run_once = FALSE; + + function initialize() + { + $this->object->add_post_hook( + 'enqueue_frontend_resources', + 'Enqueues resources for trigger buttons', + get_class(), + 'enqueue_displayed_gallery_trigger_buttons_resources' + ); + } + + function enqueue_displayed_gallery_trigger_buttons_resources($displayed_gallery = FALSE) + { + if (!wp_style_is('fontawesome', 'registered')) + { + if (strpos(strtolower($_SERVER['SERVER_SOFTWARE']), 'microsoft-iis') !== FALSE) { + wp_register_style('fontawesome', site_url('/?ngg_serve_fontawesome_css=1')); + } else { + $router = C_Component_Registry::get_instance()->get_utility('I_Router'); + wp_register_style('fontawesome', $router->get_static_url('photocrati-nextgen_gallery_display#fontawesome/font-awesome.css')); + } + } + + if (!$this->run_once + && !empty($displayed_gallery) + && !empty($displayed_gallery->display_settings['ngg_triggers_display']) + && $displayed_gallery->display_settings['ngg_triggers_display'] !== 'never') + { + $pro_active = FALSE; + if (defined('NGG_PRO_PLUGIN_VERSION')) + $pro_active = 'NGG_PRO_PLUGIN_VERSION'; + if (defined('NEXTGEN_GALLERY_PRO_VERSION')) + $pro_active = 'NEXTGEN_GALLERY_PRO_VERSION'; + if (!empty($pro_active)) + $pro_active = constant($pro_active); + if (!is_admin() && (empty($pro_active) || version_compare($pro_active, '1.0.11') >= 0)) + { + wp_enqueue_style('fontawesome'); + $this->run_once = TRUE; + } + } + } +} + diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.gallery_display_ajax.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.gallery_display_ajax.php index 501fc5c0d82eddc01ed56fcb06ee2b557c690238..e1511388406b2568bc9cdc236f8e2db15d1358f4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.gallery_display_ajax.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.gallery_display_ajax.php @@ -2,13 +2,28 @@ class A_Gallery_Display_Ajax extends Mixin { + public $_run_count = 0; + function render_displayed_gallery_action() { $retval = array(); - if (isset($_POST['ajax_referrer'])) { - $_SERVER['REQUEST_URI'] = $_POST['ajax_referrer']; - C_Router::get_instance()->serve_request(); + // this must run ONLY twice + if (isset($_POST['ajax_referrer']) && $this->_run_count <= 1) + { + // set the router & routed app to use the uri provided in ajax_referrer + $parsed_url = parse_url($_POST['ajax_referrer']); + $url = $parsed_url['path']; + if (!empty($parsed_url['query'])) + $url .= '?' . $parsed_url['query']; + + $_SERVER['REQUEST_URI'] = $url; + $_SERVER['PATH_INFO'] = $parsed_url['path']; + $this->_run_count++; + $router = C_Router::get_instance(); + $router->get_routed_app() + ->set_app_request_uri($_SERVER['REQUEST_URI']); + $router->serve_request(); } if (isset($_POST['displayed_gallery_id'])) { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.gallery_display_factory.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.gallery_display_factory.php index 0255cb34eec89fb1782c529d92659212b59bf5fd..9a18a255eb0146cf130eef07a8536b1b0cf014ef 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.gallery_display_factory.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.gallery_display_factory.php @@ -8,9 +8,9 @@ class A_Gallery_Display_Factory extends Mixin * @param array|stdClass|C_DataMapper_Model $properties * @param string|array|FALSE $context */ - function display_type($mapper=FALSE, $properties=array(), $context=FALSE) + function display_type($properties=array(), $mapper=FALSE, $context=FALSE) { - return new C_Display_Type($mapper, $properties, $context); + return new C_Display_Type($properties, $mapper, $context); } /** @@ -19,9 +19,9 @@ class A_Gallery_Display_Factory extends Mixin * @param array|stdClass|C_DataMapper_Model $properties * @param string|array|FALSE $context */ - function displayed_gallery($mapper=FALSE, $properties=array(), $context=FALSE) + function displayed_gallery($properties=array(), $mapper=FALSE, $context=FALSE) { - return new C_Displayed_Gallery($mapper, $properties, $context); + return new C_Displayed_Gallery($properties, $mapper, $context); } /** @@ -31,8 +31,8 @@ class A_Gallery_Display_Factory extends Mixin * @param string|array|FALSE $context * @return C_Displayed_Gallery_Source */ - function displayed_gallery_source($mapper=FALSE, $properties=array(), $context=FALSE) + function displayed_gallery_source($properties=array(), $mapper=FALSE, $context=FALSE) { - return new C_Displayed_Gallery_Source($mapper, $properties, $context); + return new C_Displayed_Gallery_Source($properties, $mapper, $context); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type.php index 2a5a3e9c2b45a4f171746a5e708322adc1589fee..073d7143933eeb963c87220b1423ea71d37252ce 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type.php @@ -13,7 +13,7 @@ class C_Display_Type extends C_DataMapper_Model { var $_mapper_interface = 'I_Display_Type_Mapper'; - function define($mapper, $properties, $context=FALSE) + function define($properties=array(), $mapper=FALSE, $context=FALSE) { parent::define($mapper, $properties, $context); $this->add_mixin('Mixin_Display_Type_Validation'); @@ -27,7 +27,7 @@ class C_Display_Type extends C_DataMapper_Model * @param array|stdClass|C_Display_Type $properties * @param FALSE|string|array $context */ - function initialize($mapper=FALSE, $properties=array()) + function initialize($properties=array(), $mapper=FALSE, $context=FALSE) { // If no mapper was specified, then get the mapper if (!$mapper) $mapper = $this->get_registry()->get_utility($this->_mapper_interface); @@ -91,6 +91,6 @@ class Mixin_Display_Type_Instance_Methods extends Mixin function get_order() { - return NEXTGEN_DISPLAY_PRIORITY_BASE; + return NGG_DISPLAY_PRIORITY_BASE; } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type_controller.php index cdc5920eb3ddbf35dff63c5ff0d5ad000dea931a..27332882838a46c59d3b7e88ee3f27e4385d30bb 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type_controller.php @@ -7,6 +7,7 @@ class C_Display_Type_Controller extends C_MVC_Controller { static $_instances = array(); + var $cachable = TRUE; function define($context=FALSE) { @@ -69,45 +70,19 @@ class Mixin_Display_Type_Controller extends Mixin $settings = C_NextGen_Settings::get_instance(); $mapper = $this->object->get_registry()->get_utility('I_Lightbox_Library_Mapper'); $library = $mapper->find_by_name($settings->thumbEffect); + $thumbEffectContext = isset($settings->thumbEffectContext) ? $settings->thumbEffectContext : ''; // Make the path to the static resources available for libraries // Shutter-Reloaded in particular depends on this $this->object->_add_script_data( 'ngg_common', 'nextgen_lightbox_settings', - array('static_path' => $this->object->get_static_relpath('', 'photocrati-lightbox')), + array('static_path' => $this->object->get_static_url('', 'photocrati-lightbox'), 'context' => $thumbEffectContext), TRUE, - FALSE + true ); - { - $i=0; - foreach (explode("\n", $library->scripts) as $script) { - wp_enqueue_script( - $library->name.'-'.$i, - $script - ); - if ($i == 0 AND isset($library->values)) { - foreach ($library->values as $name => $value) { - $this->object->_add_script_data( - $library->name . '-0', - $name, - $value, - FALSE - ); - } - } - $i+=1; - } - $i=0; - foreach (explode("\n", $library->css_stylesheets) as $style) { - wp_enqueue_style( - $library->name.'-'.$i, - $style - ); - $i+=1; - } - } + M_Lightbox::_register_library_resources($library, FALSE); } @@ -140,15 +115,23 @@ class Mixin_Display_Type_Controller extends Mixin FALSE ); + // Enqueue trigger button resources + C_Displayed_Gallery_Trigger_Manager::get_instance()->enqueue_resources($displayed_gallery); + + // Enqueue lightbox library $this->object->enqueue_lightbox_resources($displayed_gallery); } function enqueue_ngg_styles() { - wp_enqueue_style( - 'nggallery', - C_NextGen_Style_Manager::get_instance()->get_selected_stylesheet_url() - ); + $settings = C_NextGen_Settings::get_instance(); + if ((!is_multisite() || (is_multisite() && $settings->wpmuStyle)) && $settings->activateCSS) + { + wp_enqueue_style( + 'nggallery', + C_NextGen_Style_Manager::get_instance()->get_selected_stylesheet_url() + ); + } } function get_render_mode() @@ -209,6 +192,11 @@ class Mixin_Display_Type_Controller extends Mixin $effect_code = $settings->thumbCode; $effect_code = str_replace('%GALLERY_ID%', $displayed_gallery->id(), $effect_code); $effect_code = str_replace('%GALLERY_NAME%', $displayed_gallery->id(), $effect_code); + + global $post; + if ($post && isset($post->ID) && $post->ID) + $effect_code = str_replace('%PAGE_ID%', $post->ID, $effect_code); + return $effect_code; } @@ -243,7 +231,7 @@ class Mixin_Display_Type_Controller extends Mixin // Get the associated data with this script $script = &$wp_scripts->registered[$handle]; - $data = &$script->extra['data']; + $data = isset($script->extra['data']) ? $script->extra['data'] : ''; // Construct the addition $addition = $define ? "\nvar {$object_name} = " . json_encode($object_value) . ';' : @@ -260,6 +248,8 @@ class Mixin_Display_Type_Controller extends Mixin } $script->extra['data'] = $data; + +unset($script); } return $retval; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type_mapper.php index 8f7a466dde4ea588970ed35988fb110a6d6d7b31..2a653cc5a81c9a68ec99a7889c8914547d2d2689 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.display_type_mapper.php @@ -7,7 +7,7 @@ class C_Display_Type_Mapper extends C_CustomPost_DataMapper_Driver { public static $_instances = array(); - function define($context=FALSE) + function define($context=FALSE, $not_used=FALSE) { $object_name = 'display_type'; @@ -15,7 +15,7 @@ class C_Display_Type_Mapper extends C_CustomPost_DataMapper_Driver // This allows us to adapt the driver itself, if required if (!is_array($context)) $context = array($context); array_push($context, $object_name); - parent::define(NULL, $context); + parent::define($object_name, $context); $this->add_mixin('Mixin_Display_Type_Mapper'); $this->implement('I_Display_Type_Mapper'); @@ -75,7 +75,7 @@ class Mixin_Display_Type_Mapper extends Mixin $retval = NULL; foreach ($this->object->find_all($model) as $display_type) { foreach ($find_entity_types as $entity_type) { - if (in_array($entity_type, $display_type->entity_types)) { + if (isset($display_type->entity_types) && in_array($entity_type, $display_type->entity_types)) { $retval[] = $display_type; break; } @@ -104,7 +104,7 @@ class Mixin_Display_Type_Mapper extends Mixin if (!isset($entity->settings)) $entity->settings = array(); $this->_set_default_value($entity, 'preview_image_relpath', ''); $this->_set_default_value($entity, 'default_source', ''); - $this->_set_default_value($entity, 'view_order', NEXTGEN_DISPLAY_PRIORITY_BASE); + $this->_set_default_value($entity, 'view_order', NGG_DISPLAY_PRIORITY_BASE); $this->_set_default_value($entity, 'settings', 'use_lightbox_effect', TRUE); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php index 4bc977f300605e72ee9ff030297abb0934d55dc0..a91629798f576afd376649483d92916a63df679b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php @@ -17,7 +17,7 @@ class C_Displayed_Gallery extends C_DataMapper_Model { var $_mapper_interface = 'I_Displayed_Gallery_Mapper'; - function define($mapper=FALSE, $properties=FALSE, $context=FALSE) + function define($properties=array(), $mapper=FALSE, $context=FALSE) { parent::define($mapper, $properties, $context); $this->add_mixin('Mixin_Displayed_Gallery_Validation'); @@ -33,10 +33,12 @@ class C_Displayed_Gallery extends C_DataMapper_Model * @param array|stdClass|C_Displayed_Gallery $properties * @param FALSE|string|array $context */ - function initialize($mapper=FALSE, $properties=array()) + function initialize($properties=array(), $mapper=FALSE, $context=FALSE) { if (!$mapper) $mapper = $this->get_registry()->get_utility($this->_mapper_interface); parent::initialize($mapper, $properties); + + $this->select_random_variation(); } } @@ -74,11 +76,17 @@ class Mixin_Displayed_Gallery_Validation extends Mixin } } - // If no maximum_entity_count has been given, then set a maximum - if (!isset($this->object->maximum_entity_count)) { + // Allow ONLY recent & random galleries to have their own maximum_entity_count + if (!empty($this->object->display_settings['maximum_entity_count']) + && in_array($this->object->source, array('random_images', 'recent_images', 'random', 'recent'))) { + $this->object->maximum_entity_count = $this->object->display_settings['maximum_entity_count']; + } + + // If no maximum_entity_count has been given, then set a maximum + if (!isset($this->object->maximum_entity_count)) + { $this->object->maximum_entity_count = C_Photocrati_Settings_Manager::get('maximum_entity_count', 500); } - } else { $this->object->add_error('Invalid display type', 'display_type'); @@ -90,21 +98,45 @@ class Mixin_Displayed_Gallery_Validation extends Mixin class Mixin_Displayed_Gallery_Queries extends Mixin { - function get_entities($limit=FALSE, $offset=FALSE, $id_only=FALSE, $returns='included') + function select_random_variation() { - $retval = array(); + $retval = FALSE; - // If a maximum entity count has been set for the displayed gallery, - // then ensure that's honoured - if (isset($this->object->maximum_entity_count)) { - if (!$limit OR (is_numeric($limit) && $limit > $this->object->maximum_entity_count)) { - $limit = intval($this->object->maximum_entity_count); + $source_obj = $this->object->get_source(); + if ($source_obj && $source_obj->has_variations) { + $max = 0; + if (!defined('NGG_MAX_VARIATIONS')) { + $settings = C_Photocrati_Global_Settings_Manager::get_instance(); + $max = $settings->get('max_variations', 5); + define('NGG_MAX_VARIATIONS', $max); } + else $max = NGG_MAX_VARIATIONS; + + $this->object->variation = floor(rand(1, $max)); + + $retval = $this->object->variation; } - // Ensure that all parameters have values that are expected - if ($this->object->_parse_parameters()) { + return $retval; + } + + function get_entities($limit=FALSE, $offset=FALSE, $id_only=FALSE, $returns='included') + { + $retval = array(); + // Honor the gallery 'maximum_entity_count' setting ONLY when dealing with random & recent galleries. All + // others will always obey the *global* 'maximum_entity_count' setting. + if (in_array($this->object->get_source()->name, array('random_images', 'recent_images', 'random', 'recent'))) + $max = intval($this->object->maximum_entity_count); + else + $max = intval(C_NextGen_Settings::get_instance()->get('maximum_entity_count', 500)); + + if (!$limit || (is_numeric($limit) && $limit > $max)) + $limit = $max; + + // Ensure that all parameters have values that are expected + if ($this->object->_parse_parameters()) + { // Is this an image query? $source_obj = $this->object->get_source(); if (in_array('image', $source_obj->returns)) { @@ -134,7 +166,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin // Find a way to minimalize or segment $mapper = $this->get_registry()->get_utility('I_Image_Mapper'); $image_key = $mapper->get_primary_key_column(); - $select = $id_only ? $image_key : '*'; + $select = $id_only ? $image_key : $mapper->get_table_name().'.*'; $sort_direction = $this->object->order_direction; $sort_by = $this->object->order_by; @@ -320,7 +352,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin } // Apply a sorting order - if ($sort_by) $mapper->order_by($sort_by, $sort_direction); + if ($sort_by) $mapper->order_by($sort_by, $sort_direction); // Apply a limit if ($limit) { @@ -328,7 +360,9 @@ class Mixin_Displayed_Gallery_Queries extends Mixin else $mapper->limit($limit); } - return $mapper->run_query(); + $results = $mapper->run_query(); + + return $results; } /** @@ -350,7 +384,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin $album_key = $album_mapper->get_primary_key_column(); $gallery_mapper = $this->get_registry()->get_utility('I_Gallery_Mapper'); $gallery_key = $gallery_mapper->get_primary_key_column(); - $select = $id_only ? $album_key.", sortorder" : '*'; + $select = $id_only ? $album_key.", sortorder" : $album_mapper->get_table_name().'.*'; $retval = array(); // If no exclusions are specified, are entity_ids are specified, @@ -405,8 +439,8 @@ class Mixin_Displayed_Gallery_Queries extends Mixin // always take precedence $included_ids = $this->object->entity_ids; foreach ($this->object->exclusions as $excluded_id) { - if (($index = array_search($excluded_id, $included_entity_ids)) !== FALSE) { - unset($included_entity_ids[$index]); + if (($index = array_search($excluded_id, $included_ids)) !== FALSE) { + unset($included_ids[$index]); } } $excluded_ids = array_diff($entity_ids, $included_ids); @@ -484,8 +518,8 @@ class Mixin_Displayed_Gallery_Queries extends Mixin $gallery_mapper = $this->get_registry()->get_utility('I_Gallery_Mapper'); $image_mapper = $this->object->get_registry()->get_utility('I_Image_Mapper'); $gallery_key = $gallery_mapper->get_primary_key_column(); - $album_select = ($id_only ? $album_key : '*').", 1 AS is_album, 0 AS is_gallery, name AS title, albumdesc AS galdesc"; - $gallery_select = ($id_only ? $gallery_key : '*').", 1 AS is_gallery, 0 AS is_album"; + $album_select = ($id_only ? $album_key : $album_mapper->get_table_name().'.*').", 1 AS is_album, 0 AS is_gallery, name AS title, albumdesc AS galdesc"; + $gallery_select = ($id_only ? $gallery_key : $gallery_mapper->get_table_name().'.*').", 1 AS is_gallery, 0 AS is_album"; // Modify the sort order of the entities if ($this->object->sortorder) { @@ -560,7 +594,7 @@ class Mixin_Displayed_Gallery_Queries extends Mixin array("{$gallery_key} IN %s", $gallery_ids) )->order_by('ordered_by', 'DESC')->run_query(); $counts = $image_mapper->select('galleryid, COUNT(*) as counter')->where( - array("galleryid IN %s", $gallery_ids))->group_by('galleryid')->run_query(); + array("galleryid IN %s", $gallery_ids))->group_by('galleryid')->run_query(FALSE, TRUE); $albums = $album_mapper->select($album_select)->where( array("{$album_key} IN %s", $album_ids) )->order_by('ordered_by', 'DESC')->run_query(); @@ -621,9 +655,14 @@ class Mixin_Displayed_Gallery_Queries extends Mixin $retval = count($this->object->_get_album_and_gallery_entities($source_obj, FALSE, FALSE, TRUE, $returns)); } - if (isset($this->object->maximum_entity_count)) { + // Determine the correct maximum_entity_count + if (in_array($this->object->get_source()->name, array('random_images', 'recent_images', 'random', 'recent'))) $max = intval($this->object->maximum_entity_count); - if ($retval > $max) $retval = $max; + else + $max = intval(C_NextGen_Settings::get_instance()->get('maximum_entity_count', 500)); + + if ($retval > $max) { + $retval = $max; } return $retval; @@ -727,12 +766,12 @@ class Mixin_Displayed_Gallery_Queries extends Mixin global $wpdb; // If no tags were provided, get them from the container_ids - if (!$tags) $tags = $this->object->container_ids; + if (!$tags || !is_array($tags)) $tags = $this->object->container_ids; // Convert container ids to a string suitable for WHERE IN $container_ids = array(); - if (!in_array('all', array_map('strtolower', $tags))) { - foreach ($tags as $container) { + if (is_array($tags) && !in_array('all', array_map('strtolower', $tags))) { + foreach ($tags as $ndx => $container) { $container_ids[]= "'{$container}'"; } $container_ids = implode(',', $container_ids); @@ -750,9 +789,13 @@ class Mixin_Displayed_Gallery_Queries extends Mixin // Get all term_ids for each image tag slug $term_ids = array(); - foreach ($wpdb->get_results($query) as $row) { - $term_ids[] = $row->term_id; - } + $results = $wpdb->get_results($query); + if (is_array($results) && !empty($results)) + { + foreach ($results as $row) { + $term_ids[] = $row->term_id; + } + } return $term_ids; } @@ -820,9 +863,13 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin */ function get_source() { + $retval = NULL; $sources = $this->object->_get_source_map(); - $mapper = $this->get_registry()->get_utility('I_Displayed_Gallery_Source_Mapper'); - $retval = $mapper->find_by_name($sources[$this->object->source], TRUE); + if (isset($sources[$this->object->source])) { + $mapper = $this->get_registry()->get_utility('I_Displayed_Gallery_Source_Mapper'); + $retval = $mapper->find_by_name($sources[$this->object->source], TRUE); + } + return $retval; } @@ -873,35 +920,15 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin */ function to_transient() { - // TODO: put this someplace more appropriate - // If the source is random do a separate image id lookup and fill those values into the gallery entity_ids - // This is necessary for compat w/Pro Lightbox so it can retrieve (through it's iframe request) the same images - // the viewer was previously looking at. - if (in_array($this->object->source, array('random', 'random_images')) && empty($this->object->entity_ids)) - { - global $wpdb; - - $image_ids = array(); - $limit = (!empty($this->object->display_settings['images_per_page']) ? $this->object->display_settings['images_per_page'] : $this->object->maximum_entity_count); - - $sql = "SELECT `pid` FROM `{$wpdb->nggpictures}` WHERE `exclude` = 0"; - if (!empty($this->object->exclusions)) - $sql .= sprintf(" AND `pid` NOT IN (%s)", implode(',', $this->object->exclusions)); - $sql .= " ORDER BY RAND() LIMIT {$limit}"; - - foreach ($wpdb->get_results($sql, ARRAY_N) as $res) { - $image_ids[] = reset($res); - } - - $this->object->entity_ids = $image_ids; - } - $group = 'displayed_galleries'; $key = C_Photocrati_Cache::generate_key($this->object->get_entity(), $group); if (is_null(C_Photocrati_Cache::get($key, NULL, $group))) { C_Photocrati_Cache::set($key, $this->object->get_entity(), $group, 1800); } + $this->object->transient_id = $key; + if (!$this->object->id()) $this->object->id($key); + return $key; } @@ -910,11 +937,16 @@ class Mixin_Displayed_Gallery_Instance_Methods extends Mixin * Applies the values of a transient to this object * @param string $transient_id */ - function apply_transient($transient_id) + function apply_transient($transient_id=NULL) { $retval = FALSE; - if (($transient = C_Photocrati_Cache::get($transient_id, FALSE, 'displayed_galleries'))) { + + if (!$transient_id && isset($this->object->transient_id)) $transient_id = $this->object->transient_id; + + if ($transient_id && ($transient = C_Photocrati_Cache::get($transient_id, FALSE, 'displayed_galleries'))) { $this->object->_stdObject = $transient; + $this->object->transient_id = $transient_id; + if (!$this->object->id()) $this->object->id($transient_id); $retval = TRUE; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_mapper.php index bbacde657a26dd6de582cf9d3af9ae1c4ae76a54..cd80c4aeca90919bd2f4bc77a9ba38083e5b19d4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_mapper.php @@ -4,9 +4,9 @@ class C_Displayed_Gallery_Mapper extends C_CustomPost_DataMapper_Driver { static $_instances = array(); - function define($context=FALSE) + function define($context=FALSE, $not_used=FALSE) { - parent::define(NULL, array($context, 'display_gallery')); + parent::define('displayed_gallery', array($context, 'displayed_gallery', 'display_gallery')); $this->add_mixin('Mixin_Displayed_Gallery_Defaults'); $this->implement('I_Displayed_Gallery_Mapper'); $this->set_model_factory_method('displayed_gallery'); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php index a3bbc9bfbc17a58da8dc1526eb5e5ca3dd48c96f..d4d40909f8ca33b7a5bb1d5927bc0322d5272579 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php @@ -95,7 +95,7 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin // Configure the arguments $defaults = array( - 'id' => NULL, + 'id' => NULL, 'source' => '', 'container_ids' => array(), 'gallery_ids' => array(), @@ -186,7 +186,7 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin // Create the displayed gallery $factory = $this->get_registry()->get_utility('I_Component_Factory'); - $displayed_gallery = $factory->create('displayed_gallery', $mapper, $args); + $displayed_gallery = $factory->create('displayed_gallery', $args, $mapper); unset($factory); } @@ -198,7 +198,6 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin // Set a temporary id $displayed_gallery->id($displayed_gallery->to_transient()); - // Display! return $this->object->render($displayed_gallery, TRUE, $mode); } @@ -215,6 +214,26 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin return $retval; } + function debug_msg($msg, $print_r=FALSE) + { + $retval = ''; + + if (C_NextGEN_Bootstrap::$debug) { + ob_start(); + if ($print_r) { + echo '<pre>'; + print_r($msg); + echo '</pre>'; + } + else + var_dump($msg); + + $retval = ob_get_clean(); + } + + return $retval; + } + /** * Renders a displayed gallery on the frontend @@ -222,44 +241,58 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin */ function render($displayed_gallery, $return=FALSE, $mode = null) { + $retval = ''; + $lookup = TRUE; + $cache = C_Photocrati_Cache::get_instance('displayed_gallery_rendering'); + // Simply throwing our rendered gallery into a feed will most likely not work correctly. // The MediaRSS option in NextGEN is available as an alternative. if(is_feed()) return ''; - if ($mode == null) - { - $mode = 'normal'; - } + if ($mode == null) + { + $mode = 'normal'; + } // Save the displayed gallery as a transient if it hasn't already. Allows for ajax operations // to add or modify the gallery without losing a retrievable ID - if (empty($displayed_gallery->transient_id)) - $displayed_gallery->transient_id = $displayed_gallery->to_transient(); + if (!$displayed_gallery->apply_transient()) { + $displayed_gallery->to_transient(); + } // Get the display type controller $controller = $this->get_registry()->get_utility( 'I_Display_Type_Controller', $displayed_gallery->display_type ); - // Enqueue any necessary static resources - $controller->enqueue_frontend_resources($displayed_gallery); - // Get routing info $router = $url = C_Router::get_instance(); $url = $router->get_url($router->get_request_uri(), TRUE); // Should we lookup in cache? - $lookup = TRUE; - if ($displayed_gallery->source == 'random_images') $lookup = FALSE; - elseif (is_array($displayed_gallery->container_ids) && in_array('All', $displayed_gallery->container_ids)) $lookup = FALSE; + if (is_array($displayed_gallery->container_ids) && in_array('All', $displayed_gallery->container_ids)) $lookup = FALSE; elseif ($displayed_gallery->source == 'albums' && ($controller->param('gallery')) OR $controller->param('album')) $lookup = FALSE; - elseif (!$controller->cachable) $lookup = FALSE; + elseif ($controller->param('show')) $lookup = FALSE; + elseif ($controller->cachable === FALSE) $lookup = FALSE; + + // Enqueue any necessary static resources + $controller->enqueue_frontend_resources($displayed_gallery); // Try cache lookup, if we're to do so $key = null; $html = FALSE; if ($lookup) { + + // The display type may need to output some things + // even when serving from the cache + if ($controller->has_method('cache_action')) { + $retval = $controller->cache_action($displayed_gallery); + } + + // Output debug message + $retval .= $this->debug_msg("Lookup!"); + // Some settings affect display types $settings = C_NextGen_Settings::get_instance(); $key_params = apply_filters('ngg_displayed_gallery_cache_params', array( @@ -272,47 +305,51 @@ class Mixin_Displayed_Gallery_Renderer extends Mixin $settings->thumbEffect, $settings->thumbCode, $settings->galSort, - $settings->galSortDir + $settings->galSortDir, )); + // Any displayed gallery links on the home page will need to be regenerated if the permalink structure + // changes + if (is_home() OR is_front_page()) $key_params[] = get_option('permalink_structure'); + // Try getting the rendered HTML from the cache - $key = C_Photocrati_Cache::generate_key($key_params); - $html = C_Photocrati_Cache::get($key, FALSE); + $key = $cache->generate_key($key_params); + $html = $cache->lookup($key, FALSE); + + // Output debug messages + if ($html) $retval .= $this->debug_msg("HIT!"); + else $retval .= $this->debug_msg("MISS!"); + // TODO: This is hack. We need to figure out a more uniform way of detecting dynamic image urls - if (strpos($html, C_Photocrati_Settings_Manager::get_instance()->dynamic_thumbnail_slug) !== FALSE) { + if (strpos($html, C_Photocrati_Settings_Manager::get_instance()->dynamic_thumbnail_slug.'/') !== FALSE) { $html = FALSE; // forces the cache to be re-generated } } + else $retval .= $this->debug_msg("Not looking up in cache as per rules"); + + // If we're displaying a variant, I want to know it + if (isset($displayed_gallery->variation) && is_numeric($displayed_gallery->variation) && $displayed_gallery->variation > 0) { + $retval .= $this->debug_msg("Using variation #{$displayed_gallery->variation}!"); + } // If a cached version doesn't exist, then create the cache if (!$html) { + + $retval .= $this->debug_msg("Rendering displayed gallery"); + $current_mode = $controller->get_render_mode(); $controller->set_render_mode($mode); $html = $controller->index_action($displayed_gallery, TRUE); - if ($key != null) - C_Photocrati_Cache::set($key, $html); + if ($key != null) $cache->update($key, $html, NGG_RENDERING_CACHE_TTL); $controller->set_render_mode($current_mode); - - // Compress the html to avoid wpautop problems - $html = $this->compress_html($html); } - if (!$return) echo $html; + $retval .= $html; - return $html; - } - /** - * Removes any un-nessessary whitespace from the HTML - * @param string $html - * @return string - */ - function compress_html($html) - { - $html = preg_replace("/>\\s+/", ">", $html); - $html = preg_replace("/\\s+</", "<", $html); - $html = preg_replace("/<!--(?:(?!-->).)*-->/m", "", $html); - return $html; - } + if (!$return) echo $retval; + + return $retval; + } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source.php index 39a26ad4d91e98e4ea41ac44242da6a31a8037f4..ae4d549423c154fdf020d136f73706ba8adf6c9f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source.php @@ -9,7 +9,7 @@ class C_Displayed_Gallery_Source extends C_DataMapper_Model { var $_mapper_interface = 'I_Displayed_Gallery_Source_Mapper'; - function define($mapper, $properties, $context=FALSE) + function define($properties=array(), $mapper=FALSE, $context=FALSE) { parent::define($mapper, $properties, $context); $this->add_mixin('Mixin_Displayed_Gallery_Source'); @@ -22,7 +22,7 @@ class C_Displayed_Gallery_Source extends C_DataMapper_Model * @param type $mapper * @param type $properties */ - function initialize($mapper=FALSE, $properties=array()) + function initialize($properties=array(), $mapper=FALSE, $context=FALSE) { // If no mapper was specified, then get the mapper if (!$mapper) $mapper = $this->get_registry()->get_utility($this->_mapper_interface); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_mapper.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_mapper.php index 5262f9eb3adcd2fb646b68ced79689d7357e4568..94bff7e0c2713b521407414d74775b7f7b9a0ce4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_mapper.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_mapper.php @@ -25,7 +25,7 @@ class C_Displayed_Gallery_Source_Mapper extends C_CustomPost_DataMapper_Driver * Define the mapper * @param string|array|bool $context */ - function define($context=FALSE) + function define($context=FALSE, $not_used=FALSE) { $object_name = 'gal_display_source'; @@ -35,7 +35,7 @@ class C_Displayed_Gallery_Source_Mapper extends C_CustomPost_DataMapper_Driver array_push($context, $object_name); // Define the driver - parent::define(NULL, $context); + parent::define($object_name, $context); // Add the mixin of instance methods $this->add_mixin('Mixin_Displayed_Gallery_Source_Mapper'); @@ -85,5 +85,7 @@ class Mixin_Displayed_Gallery_Source_Mapper extends Mixin function set_defaults($entity) { if (!isset($entity->aliases)) $entity->aliases = array(); + $this->object->_set_default_value($entity, 'has_variations', FALSE); + $this->object->_set_default_value($entity, 'variation', 0); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_trigger.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_trigger.php new file mode 100644 index 0000000000000000000000000000000000000000..c4645d30117b76f4e42e62ba806fff6827f3eaee --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_trigger.php @@ -0,0 +1,32 @@ +<?php + +abstract class C_Displayed_Gallery_Trigger +{ + static function is_renderable($name, $displayed_gallery) + { + return TRUE; + } + + function get_css_class() + { + return 'fa fa-circle'; + } + + function get_attributes() + { + return array('class' => $this->get_css_class() ); + } + + function render() + { + $attributes = array(); + foreach ($this->get_attributes() as $k=>$v) { + $k = esc_attr($k); + $v = esc_attr($v); + $attributes[] = "{$k}='{$v}'"; + } + $attributes = implode(" ", $attributes); + + return "<i {$attributes}></i>"; + } +} \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_trigger_manager.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_trigger_manager.php new file mode 100644 index 0000000000000000000000000000000000000000..a5d668f3d8debb8195f53b96c5e559bd3c356059 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_trigger_manager.php @@ -0,0 +1,284 @@ +<?php + +/** + * The Trigger Manager displays "trigger buttons" for a displayed gallery. + * + * Each display type can register a "handler", which is a class with a render method, which is used + * to render the display of the trigger buttons. + * + * Each trigger button is registered with a handler, which is also a class with a render() method. + * Class C_Displayed_Gallery_Trigger_Manager + */ +class C_Displayed_Gallery_Trigger_Manager +{ + static $_instance = NULL; + private $_triggers = array(); + private $_trigger_order = array(); + private $_display_type_handlers = array(); + private $_default_display_type_handler = NULL; + private $css_class = 'ngg-trigger-buttons'; + private $_default_image_types = array( + 'photocrati-nextgen_basic_thumbnails', + 'photocrati-nextgen_basic_singlepic', + 'photocrati-nextgen_pro_thumbnail_grid', + 'photocrati-nextgen_pro_blog_gallery', + 'photocrati-nextgen_pro_film' + ); + + /** + * @return C_Displayed_Gallery_Trigger_Manager + */ + static function get_instance() + { + if (!self::$_instance) { + $klass = get_class(); + self::$_instance = new $klass; + } + return self::$_instance; + } + + function __construct() + { + $this->_default_display_type_handler = 'C_Displayed_Gallery_Trigger_Handler'; + foreach ($this->_default_image_types as $display_type) { + $this->register_display_type_handler($display_type, 'C_Displayed_Gallery_Image_Trigger_Handler'); + } + } + + function register_display_type_handler($display_type, $klass) + { + $this->_display_type_handlers[$display_type] = $klass; + } + + function deregister_display_type_handler($display_type) + { + unset($this->_display_type_handlers[$display_type]); + } + + function add($name, $handler) + { + $this->_triggers[$name] = $handler; + $this->_trigger_order[] = $name; + + return $this; + } + + function remove($name) + { + $order = array(); + unset($this->_triggers[$name]); + foreach ($this->_trigger_order as $trigger) { + if ($trigger != $name) $order[] = $trigger; + } + $this->_trigger_order = $order; + + return $this; + } + + function _rebuild_index() + { + $order = array(); + foreach ($this->_trigger_order as $name) { + $order[] = $name; + } + $this->_trigger_order = $order; + + return $this; + } + + function increment_position($name) + { + if (($current_index = array_search($name, $this->_trigger_order)) !== FALSE) { + $next_index = $current_index += 1; + + // 1,2,3,4,5 => 1,2,4,3,5 + if (isset($this->_trigger_order[$next_index])) { + $next = $this->_trigger_order[$next_index]; + $this->_trigger_order[$next_index] = $name; + $this->_trigger_order[$current_index] = $next; + } + } + + return $this->position_of($name); + } + + function decrement_position($name) + { + if (($current_index = array_search($name, $this->_trigger_order)) !== FALSE) { + $previous_index = $current_index -= 1; + if (isset($this->_trigger_order[$previous_index])) { + $previous = $this->_trigger_order[$previous_index]; + $this->_trigger_order[$previous_index] = $name; + $this->_trigger_order[$current_index] = $previous; + } + } + + return $this->position_of($name); + } + + function position_of($name) + { + return array_search($name, $this->_trigger_order); + } + + function move_to_position($name, $position_index) + { + if (($current_index = $this->position_of($name)) !== FALSE) { + $func = 'increment_position'; + if ($current_index < $position_index) $func = 'decrement_position'; + while ($this->position_of($name) != $position_index) { + $this->$func($name); + } + } + + return $this->position_of($name); + } + + function move_to_start($name) + { + if (($index = $this->position_of($name))) { + unset($this->_trigger_order[$index]); + array_unshift($this->_trigger_order, $name); + $this->_rebuild_index(); + } + + return $this->position_of($name); + } + + function count() + { + return count($this->_trigger_order); + } + + function move_to_end($name) + { + $index = $this->position_of($name); + if ($index !== FALSE OR $index != $this->count()-1) { + unset($this->_trigger_order[$index]); + $this->_trigger_order[] = $name; + $this->_rebuild_index(); + } + + return $this->position_of($name); + } + + function get_handler_for_displayed_gallery($displayed_gallery) + { + // Find the trigger handler for the current display type. + + // First, check the display settings for the displayed gallery. Some third-party + // display types might specify their own handler + $klass = NULL; + if (isset($displayed_gallery->display_settings['trigger_handler'])) { + $klass = $displayed_gallery->display_settings['trigger_handler']; + } + + // Check if a handler has been registered + else { + $klass = $this->_default_display_type_handler; + if (isset($this->_display_type_handlers[$displayed_gallery->display_type])) { + $klass = $this->_display_type_handlers[$displayed_gallery->display_type]; + } + } + + return $klass; + } + + function render($view, $displayed_gallery) + { + if (($klass = $this->get_handler_for_displayed_gallery($displayed_gallery))) { + $handler = new $klass; + $handler->view = $view; + $handler->displayed_gallery = $displayed_gallery; + $handler->manager = $this; + if (method_exists($handler, 'render')) { + $handler->render(); + } + } + + return $view; + } + + function render_trigger($name, $view, $displayed_gallery) + { + $retval = ''; + + if (isset($this->_triggers[$name])) { + $klass = $this->_triggers[$name]; + if (call_user_func(array($klass, 'is_renderable'), $name, $displayed_gallery)) { + $handler = new $klass; + $handler->name = $name; + $handler->view = $this->view = $view; + $handler->displayed_gallery = $displayed_gallery; + $retval = $handler->render(); + } + } + + return $retval; + } + + function render_triggers($view, $displayed_gallery) + { + $output = FALSE; + $css_class = esc_attr($this->css_class); + $retval = array("<div class='{$css_class}'>"); + + foreach ($this->_trigger_order as $name) { + if (($markup = $this->render_trigger($name, $view, $displayed_gallery))) { + $output = TRUE; + $retval[] = $markup; + } + } + + if ($output) { + $retval[] = "</div>"; + $retval = implode("\n", $retval); + } + else { + $retval = ''; + } + + return $retval; + } + + function enqueue_resources($displayed_gallery) + { + if (($handler = $this->get_handler_for_displayed_gallery($displayed_gallery))) { + wp_enqueue_style('fontawesome'); + wp_enqueue_style('ngg_trigger_buttons'); + + if (method_exists($handler, 'enqueue_resources')) { + call_user_func(array($handler, 'enqueue_resources'), $displayed_gallery); + foreach ($this->_trigger_order as $name) { + $handler = $this->_triggers[$name]; + $renderable = TRUE; + if (method_exists($handler, 'is_renderable')) { + $renderable = call_user_func($handler, 'is_renderable', $name, $displayed_gallery); + } + + if ($renderable && method_exists($handler, 'enqueue_resources')) { + call_user_func(array($handler, 'enqueue_resources', $name, $displayed_gallery)); + } + } + } + } + } +} + +class C_Displayed_Gallery_Image_Trigger_Handler +{ + function render() + { + foreach ($this->view->find('nextgen_gallery.image', true) as $image_element) { + $image_element->append($this->manager->render_triggers($image_element, $this->displayed_gallery)); + } + } +} + +class C_Displayed_Gallery_Trigger_Handler +{ + function render() + { + $this->view->append($this->manager->render_triggers($this->view, $this->displayed_gallery)); + } +} \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.gallery_display_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.gallery_display_installer.php index c6c9d7dc802b0bdd818f4c4b296cc82ac3b92a69..93cc040a25899c803771cee9e7936d8799fd01dc 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.gallery_display_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/class.gallery_display_installer.php @@ -94,7 +94,8 @@ class C_Gallery_Display_Installer $this->install_displayed_gallery_source('random_images', array( 'title' => 'Random Images', 'returns' => array('image'), - 'aliases' => array('random', 'random_image') + 'aliases' => array('random', 'random_image'), + 'has_variations' => TRUE )); $this->install_displayed_gallery_source('recent_images', array( @@ -121,6 +122,7 @@ class C_Gallery_Display_Installer // Flush displayed gallery cache C_Photocrati_Cache::flush(); C_Photocrati_Cache::flush('displayed_galleries'); + C_Photocrati_Cache::flush('displayed_gallery_rendering'); $this->uninstall_display_types(); $this->uninstall_displayed_gallery_sources(); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php index bafc2fc0139451ac72373887806d731902c74b44..c8380fbaca4051a2259772475ee99c04d646b18f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php @@ -41,7 +41,7 @@ class Mixin_Display_Type_Form extends Mixin */ function get_title() { - return $this->object->get_model()->title; + return __($this->object->get_model()->title, 'nggallery'); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php index 9eabfcd478bc883c5b3e733e71a3e3b49c8e4f17..1be01f1874a03da647371a0c4df3afb3ddbb61a6 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php @@ -2,14 +2,15 @@ /*** { - Module: photocrati-nextgen_gallery_display, - Depends: { photocrati-simple_html_dom } + Module: photocrati-nextgen_gallery_display } ***/ -define('NEXTGEN_DISPLAY_SETTINGS_SLUG', 'ngg_display_settings'); -define('NEXTGEN_DISPLAY_PRIORITY_BASE', 10000); -define('NEXTGEN_DISPLAY_PRIORITY_STEP', 2000); +define('NGG_DISPLAY_SETTINGS_SLUG', 'ngg_display_settings'); +define('NGG_DISPLAY_PRIORITY_BASE', 10000); +define('NGG_DISPLAY_PRIORITY_STEP', 2000); +if (!defined('NGG_RENDERING_CACHE_TTL')) define('NGG_RENDERING_CACHE_TTL', PHOTOCRATI_CACHE_TTL); +if (!defined('NGG_DISPLAYED_GALLERY_CACHE_TTL')) define('NGG_DISPLAYED_GALLERY_CACHE_TTL', PHOTOCRATI_CACHE_TTL); class M_Gallery_Display extends C_Base_Module { @@ -19,7 +20,7 @@ class M_Gallery_Display extends C_Base_Module 'photocrati-nextgen_gallery_display', 'Gallery Display', 'Provides the ability to display gallery of images', - '0.3', + '0.9', 'http://www.photocrati.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -82,10 +83,12 @@ class M_Gallery_Display extends C_Base_Module 'I_Component_Factory', 'A_Gallery_Display_Factory' ); - $this->get_registry()->add_adapter( - 'I_Page_Manager', - 'A_Display_Settings_Page' - ); + if (is_admin()) { + $this->get_registry()->add_adapter( + 'I_Page_Manager', + 'A_Display_Settings_Page' + ); + } $this->_get_registry()->add_adapter( 'I_Ajax_Controller', @@ -93,6 +96,8 @@ class M_Gallery_Display extends C_Base_Module ); $this->get_registry()->add_adapter('I_MVC_View', 'A_Gallery_Display_View'); + $this->get_registry()->add_adapter('I_MVC_View', 'A_Displayed_Gallery_Trigger_Element'); + $this->get_registry()->add_adapter('I_Display_Type_Controller', 'A_Displayed_Gallery_Trigger_Resources'); } /** @@ -105,6 +110,54 @@ class M_Gallery_Display extends C_Base_Module add_action('init', array(&$this, '_register_resources')); add_action('admin_bar_menu', array(&$this, 'add_admin_bar_menu'), 100); add_filter('the_content', array($this, '_render_related_images')); + add_action('wp_enqueue_scripts', array(&$this, 'no_resources_mode'), PHP_INT_MAX-1); + add_filter('run_ngg_resource_manager', array(&$this, 'no_resources_mode')); + add_action('init', array(&$this, 'serve_fontawesome'), 15); + } + + /** + * Serves the fontawesome woff file via PHP. We do this, as IIS won't serve .woff files. + * @throws E_Clean_Exit + */ + function serve_fontawesome() + { + if (isset($_REQUEST['ngg_serve_fontawesome_woff'])) { + $fs = $this->get_registry()->get_utility('I_Fs'); + $abspath = $fs->find_static_abspath('photocrati-nextgen_gallery_display#fonts/fontawesome-webfont.woff'); + if ($abspath) { + header("Content-Type: application/x-font-woff"); + readfile($abspath); + throw new E_Clean_Exit(); + } + } + elseif (isset($_REQUEST['ngg_serve_fontawesome_css'])) { + $fs = $this->get_registry()->get_utility('I_Fs'); + $abspath = $fs->find_static_abspath('photocrati-nextgen_gallery_display#fontawesome/font-awesome.css'); + if ($abspath) { + $file_content = file_get_contents($abspath); + $file_content = str_replace('../fonts/fontawesome-webfont.woff', site_url('/?ngg_serve_fontawesome_woff=1'), $file_content); + header('Content-Type: text/css'); + echo $file_content; + throw new E_Clean_Exit(); + } + } + } + + + function no_resources_mode($valid_request=TRUE) + { + if (isset($_REQUEST['ngg_no_resources'])) { + global $wp_scripts, $wp_styles; + + // Don't enqueue any stylesheets + if ($wp_scripts) + $wp_scripts->queue = $wp_styles->queue = array(); + + // Don't run the resource manager + $valid_request = FALSE; + } + + return $valid_request; } function _render_related_string() @@ -148,7 +201,7 @@ class M_Gallery_Display extends C_Base_Module $retval = $renderer->display_images(array( 'source' => 'tags', 'container_ids' => $taglist, - 'display_type' => NEXTGEN_GALLERY_BASIC_THUMBNAILS, + 'display_type' => NGG_BASIC_THUMBNAILS, 'images_per_page' => $maxImages, 'maximum_entity_count' => $maxImages, 'template' => $view->get_template_abspath('photocrati-nextgen_gallery_display#related'), @@ -199,7 +252,21 @@ class M_Gallery_Display extends C_Base_Module */ function _register_resources() { - $router = $this->get_registry()->get_utility('I_Router'); + // Register custom post types for compatibility + $types = array( + 'displayed_gallery' => 'NextGEN Gallery - Displayed Gallery', + 'display_type' => 'NextGEN Gallery - Display Type', + 'gal_display_source' => 'NextGEN Gallery - Displayed Gallery Source' + ); + foreach ($types as $type => $label) { + register_post_type($type, array( + 'label' => $label, + 'publicly_queryable' => FALSE, + 'exclude_from_search' => TRUE, + )); + } + + $router = $this->get_registry()->get_utility('I_Router'); wp_register_script( 'nextgen_gallery_display_settings', @@ -218,13 +285,8 @@ class M_Gallery_Display extends C_Base_Module ); wp_enqueue_style('nextgen_gallery_related_images'); - wp_register_script( - 'jquery.nextgen_radio_toggle', - $router->get_static_url('photocrati-nextgen_gallery_display#jquery.nextgen_radio_toggle.js'), - array('jquery') - ); - wp_register_script('ngg_common', $router->get_static_url('photocrati-nextgen_gallery_display#common.js'), array('jquery')); + wp_register_style('ngg_trigger_buttons', $router->get_static_url('photocrati-nextgen_gallery_display#trigger_buttons.css')); } @@ -235,10 +297,10 @@ class M_Gallery_Display extends C_Base_Module { add_submenu_page( NGGFOLDER, - _('NextGEN Gallery & Album Settings'), - _('Gallery Settings'), + __('NextGEN Gallery & Album Settings', 'nggallery'), + __('Gallery Settings', 'nggallery'), 'NextGEN Change options', - NEXTGEN_DISPLAY_SETTINGS_SLUG, + NGG_DISPLAY_SETTINGS_SLUG, array(&$this->controller, 'index_action') ); } @@ -271,6 +333,10 @@ class M_Gallery_Display extends C_Base_Module function get_type_list() { return array( + 'C_Displayed_Gallery_Trigger' => 'class.displayed_gallery_trigger.php', + 'C_Displayed_Gallery_Trigger_Manager' => 'class.displayed_gallery_trigger_manager.php', + 'A_Displayed_Gallery_Trigger_Element' => 'adapter.displayed_gallery_trigger_element.php', + 'A_Displayed_Gallery_Trigger_Resources' => 'adapter.displayed_gallery_trigger_resources.php', 'A_Gallery_Display_Ajax' => 'adapter.gallery_display_ajax.php', 'A_Display_Settings_Controller' => 'adapter.display_settings_controller.php', 'A_Display_Settings_Page' => 'adapter.display_settings_page.php', diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/common.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/common.js index 717453a5a36da27ededa2806295afd84e04abbfa..d4e10b3ee678113d808fbddd9ff58e3c5f75856b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/common.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/common.js @@ -29,7 +29,7 @@ action: 'render_displayed_gallery', displayed_gallery_id: transient_id, ajax_referrer: $link.attr('href') - } + }; // Notify the user that we're busy obj.do_ajax(request); @@ -40,6 +40,7 @@ this.do_ajax = function(request){ var container = this.container; + var self = this; // Adjust the user notification window['ngg_ajax_operaton_count']++; @@ -58,7 +59,13 @@ // Ensure that the server returned JSON if (typeof(response) != 'object') response = JSON.parse(response); if (response) { - container.replaceWith(response.html); + container.each(function() { + if ($(this).data('nextgen-gallery-id') != self.displayed_gallery_id) { + return true; + } + $(this).replaceWith(response.html); + return true; + }); // Let the user know that we've refreshed the content $(document).trigger('refreshed'); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fontawesome/font-awesome.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fontawesome/font-awesome.css new file mode 100644 index 0000000000000000000000000000000000000000..449d6ac551a286a868c5f102b303dbf2ac527552 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fontawesome/font-awesome.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-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)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"} \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/FontAwesome.otf b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..8b0f54e47e1d356dcf1496942a50e228e0f1ee14 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/FontAwesome.otf differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.eot b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.eot new file mode 100755 index 0000000000000000000000000000000000000000..7c79c6a6bc9a128a2a8eaffbe49a4338625fdbc2 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.eot differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.svg b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.svg new file mode 100755 index 0000000000000000000000000000000000000000..45fdf33830123533459b17fbbf91735489fd6bd8 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.svg @@ -0,0 +1,414 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="fontawesomeregular" horiz-adv-x="1536" > +<font-face units-per-em="1792" ascent="1536" descent="-256" /> +<missing-glyph horiz-adv-x="448" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode="	" horiz-adv-x="448" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode="¨" horiz-adv-x="1792" /> +<glyph unicode="©" horiz-adv-x="1792" /> +<glyph unicode="®" horiz-adv-x="1792" /> +<glyph unicode="´" horiz-adv-x="1792" /> +<glyph unicode="Æ" horiz-adv-x="1792" /> +<glyph unicode=" " horiz-adv-x="768" /> +<glyph unicode=" " /> +<glyph unicode=" " horiz-adv-x="768" /> +<glyph unicode=" " /> +<glyph unicode=" " horiz-adv-x="512" /> +<glyph unicode=" " horiz-adv-x="384" /> +<glyph unicode=" " horiz-adv-x="256" /> +<glyph unicode=" " horiz-adv-x="256" /> +<glyph unicode=" " horiz-adv-x="192" /> +<glyph unicode=" " horiz-adv-x="307" /> +<glyph unicode=" " horiz-adv-x="85" /> +<glyph unicode=" " horiz-adv-x="307" /> +<glyph unicode=" " horiz-adv-x="384" /> +<glyph unicode="™" horiz-adv-x="1792" /> +<glyph unicode="∞" horiz-adv-x="1792" /> +<glyph unicode="≠" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" /> +<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " /> +<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /> +<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" /> +<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /> +<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" /> +<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" /> +<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" /> +<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" /> +<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> +<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" /> +<glyph unicode="" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" /> +<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" /> +<glyph unicode="" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" /> +<glyph unicode="" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" /> +<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" /> +<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" /> +<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" /> +<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" /> +<glyph unicode="" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" /> +<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" /> +<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" /> +<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" /> +<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" /> +<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" /> +<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" /> +<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" /> +<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" /> +<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " /> +<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" /> +<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" /> +<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" /> +<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" /> +<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" /> +<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" /> +<glyph unicode="" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" /> +<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> +<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" /> +<glyph unicode="" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" /> +<glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" /> +<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" /> +<glyph unicode="" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" /> +<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" /> +<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" /> +<glyph unicode="" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" /> +<glyph unicode="" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " /> +<glyph unicode="" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " /> +<glyph unicode="" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" /> +<glyph unicode="" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" /> +<glyph unicode="" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" /> +<glyph unicode="" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" /> +<glyph unicode="" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" /> +<glyph unicode="" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" /> +<glyph unicode="" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" /> +<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" /> +<glyph unicode="" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" /> +<glyph unicode="" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" /> +<glyph unicode="" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" /> +<glyph unicode="" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" /> +<glyph unicode="" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" /> +<glyph unicode="" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" /> +<glyph unicode="" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> +<glyph unicode="" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" /> +<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" /> +<glyph unicode="" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> +<glyph unicode="" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> +<glyph unicode="" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" /> +<glyph unicode="" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" /> +<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" /> +<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" /> +<glyph unicode="" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" /> +<glyph unicode="" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" /> +<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" /> +<glyph unicode="" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" /> +<glyph unicode="" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" /> +<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> +<glyph unicode="" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" /> +<glyph unicode="" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" /> +<glyph unicode="" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" /> +<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" /> +<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" /> +<glyph unicode="" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" /> +<glyph unicode="" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" /> +<glyph unicode="" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" /> +<glyph unicode="" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" /> +<glyph unicode="" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" /> +<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" /> +<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" /> +<glyph unicode="" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" /> +<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" /> +<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" /> +<glyph unicode="" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " /> +<glyph unicode="" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" /> +<glyph unicode="" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" /> +<glyph unicode="" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" /> +<glyph unicode="" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" /> +<glyph unicode="" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" /> +<glyph unicode="" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" /> +<glyph unicode="" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" /> +<glyph unicode="" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" /> +<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " /> +<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" /> +<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.ttf b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.ttf new file mode 100755 index 0000000000000000000000000000000000000000..e89738de5eaf8fca33a2f2cdc5cb4929caa62b71 Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.ttf differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.woff b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..8c1748aab7a790d510fb3f42a8a8971d96efa79d Binary files /dev/null and b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/fonts/fontawesome-webfont.woff differ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.css index 8dc1b740a407a2b0a4fb9fa57bd8ec346960d802..2b8a2f544a31c07854712ee7840d6aaf8f5a2796 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/nextgen_gallery_display_settings.css @@ -2,10 +2,15 @@ height: 100%; } +.gallery_page_ngg_display_settings table tr { + height: 28px; +} + .gallery_page_ngg_display_settings table tr td:first-child { vertical-align: top; text-align: right; padding-right: 7px; + padding-top: 5px; } .gallery_page_ngg_display_settings textarea { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/trigger_buttons.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/trigger_buttons.css new file mode 100644 index 0000000000000000000000000000000000000000..c7516b5e55354574d0ad3fa0534982be0d18c383 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_gallery_display/static/trigger_buttons.css @@ -0,0 +1,40 @@ +.ngg-trigger-buttons { +clear: both; +text-align: right; +font-size: 12px; +line-height: 1em; +margin: 0; +} +.ngg-trigger-buttons.hidden { +display: none; +} +.ngg-trigger-large { +font-size: 16px; +margin: 0 10px; +} +.ngg-trigger-buttons .ngg-trigger { +margin-left: 0.3em; +cursor: pointer; +} +.ngg-trigger-buttons .ngg-trigger:active, +.ngg-trigger-buttons .ngg-trigger:focus, +.ngg-trigger-buttons .ngg-trigger:visited, +.ngg-trigger-buttons .ngg-trigger { + color: #999; +} +.ngg-trigger-buttons .ngg-trigger:hover { +color: #333; +} +.ngg-trigger-large .ngg-trigger { +} + +/* small exception for slideshows/filmstrip adjustments... seems kind of overkill to create 2 extra stylesheets just for a 2 liners fix */ +.galleria.photocrati-nextgen_pro_horizontal_filmstrip { +margin-bottom: 5px; +} + +@media screen and (min-width: 0px) and (max-width: 1024px) { + .ngg-trigger-buttons.mobile-hide { + display: none; + } +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php index 509e4d193170d58f3277f980a1fdaec3bf25f367..dcd48efcae0ee02eb55fd64a4e6c28b19f1e0311 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php @@ -9,7 +9,7 @@ class A_Image_Options_Form extends Mixin function get_title() { - return 'Image Options'; + return __('Image Options', 'nggallery'); } /** @@ -19,11 +19,11 @@ class A_Image_Options_Form extends Mixin function _get_image_sorting_options() { return array( - 'Custom' => 'sortorder', - 'Image ID' => 'pid', - 'Filename' => 'filename', - 'Alt/Title Text' => 'alttext', - 'Date/Time' => 'imagedate' + __('Custom', 'nggallery') => 'sortorder', + __('Image ID', 'nggallery') => 'pid', + __('Filename', 'nggallery') => 'filename', + __('Alt/Title Text', 'nggallery') => 'alttext', + __('Date/Time', 'nggallery') => 'imagedate' ); } @@ -35,8 +35,8 @@ class A_Image_Options_Form extends Mixin function _get_sorting_direction_options() { return array( - 'Ascending' => 'ASC', - 'Descending' => 'DESC' + __('Ascending', 'nggallery') => 'ASC', + __('Descending', 'nggallery') => 'DESC' ); } @@ -47,8 +47,8 @@ class A_Image_Options_Form extends Mixin function _get_related_image_match_options() { return array( - 'Categories' => 'category', - 'Tags' => 'tags' + __('Categories', 'nggallery') => 'category', + __('Tags', 'nggallery') => 'tags' ); } @@ -78,49 +78,49 @@ class A_Image_Options_Form extends Mixin function render() { if (!$this->object->_create_gallery_storage_dir()) { - $this->object->get_model()->add_error( _('Gallery path does not exist and could not be created'), 'gallerypath'); + $this->object->get_model()->add_error( __('Gallery path does not exist and could not be created', 'nggallery'), 'gallerypath'); } $settings = $this->object->get_model(); return $this->render_partial('photocrati-nextgen_other_options#image_options_tab', array( - 'gallery_path_label' => _('Where would you like galleries stored?'), - 'gallery_path_help' => _('Where galleries and their images are stored'), + 'gallery_path_label' => __('Where would you like galleries stored?', 'nggallery'), + 'gallery_path_help' => __('Where galleries and their images are stored', 'nggallery'), 'gallery_path' => $settings->gallerypath, - 'delete_image_files_label' => _('Delete Image Files?'), - 'delete_image_files_help' => _('When enabled, image files will be removed after a Gallery has been deleted'), + 'delete_image_files_label' => __('Delete Image Files?', 'nggallery'), + 'delete_image_files_help' => __('When enabled, image files will be removed after a Gallery has been deleted', 'nggallery'), 'delete_image_files' => $settings->deleteImg, - 'show_related_images_label' => _('Show Related Images on Posts?'), - 'show_related_images_help' => _('When enabled, related images will be appended to each post by matching the posts tags/categories to image tags'), + 'show_related_images_label' => __('Show Related Images on Posts?', 'nggallery'), + 'show_related_images_help' => __('When enabled, related images will be appended to each post by matching the posts tags/categories to image tags', 'nggallery'), 'show_related_images' => $settings->activateTags, - 'related_images_hidden_label' => _('(Show Customization Settings)'), - 'related_images_active_label' => _('(Hide Customization Settings)'), - 'match_related_images_label' => _('How should related images be match?'), + 'related_images_hidden_label' => __('(Show Customization Settings)', 'nggallery'), + 'related_images_active_label' => __('(Hide Customization Settings)', 'nggallery'), + 'match_related_images_label' => __('How should related images be match?', 'nggallery'), 'match_related_images' => $settings->appendType, 'match_related_image_options' => $this->object->_get_related_image_match_options(), - 'max_related_images_label' => _('Maximum # of related images to display'), + 'max_related_images_label' => __('Maximum # of related images to display', 'nggallery'), 'max_related_images' => $settings->maxImages, - 'related_images_heading_label' => _('Heading for related images'), - 'related_images_heading' => $settings->relatedHeading, - 'sorting_order_label' => _("What's the default sorting method?"), + 'related_images_heading_label' => __('Heading for related images', 'nggallery'), + 'related_images_heading' => $settings->relatedHeading, + 'sorting_order_label' => __("What's the default sorting method?", 'nggallery'), 'sorting_order_options' => $this->object->_get_image_sorting_options(), 'sorting_order' => $settings->galSort, - 'sorting_direction_label' => _('Sort in what direction?'), + 'sorting_direction_label' => __('Sort in what direction?', 'nggallery'), 'sorting_direction_options' => $this->object->_get_sorting_direction_options(), 'sorting_direction' => $settings->galSortDir, - 'automatic_resize_label' => 'Automatically resize images after upload', - 'automatic_resize_help' => 'It is recommended that your images be resized to be web friendly', + 'automatic_resize_label' => __('Automatically resize images after upload', 'nggallery'), + 'automatic_resize_help' => __('It is recommended that your images be resized to be web friendly', 'nggallery'), 'automatic_resize' => $settings->imgAutoResize, - 'resize_images_label' => _('What should images be resized to?'), - 'resize_images_help' => _('After images are uploaded, they will be resized to the above dimensions and quality'), - 'resized_image_width_label' => _('Width:'), - 'resized_image_height_label' => _('Height:'), - 'resized_image_quality_label' => _('Quality:'), + 'resize_images_label' => __('What should images be resized to?', 'nggallery'), + 'resize_images_help' => __('After images are uploaded, they will be resized to the above dimensions and quality', 'nggallery'), + 'resized_image_width_label' => __('Width:', 'nggallery'), + 'resized_image_height_label' => __('Height:', 'nggallery'), + 'resized_image_quality_label' => __('Quality:', 'nggallery'), 'resized_image_width' => $settings->imgWidth, 'resized_image_height' => $settings->imgHeight, 'resized_image_quality' => $settings->imgQuality, - 'backup_images_label' => _('Backup the original images?'), - 'backup_images_yes_label' => _('Yes'), - 'backup_images_no_label' => _('No'), + 'backup_images_label' => __('Backup the original images?', 'nggallery'), + 'backup_images_yes_label' => __('Yes'), + 'backup_images_no_label' => __('No'), 'backup_images' => $settings->imgBackup ), TRUE); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php index c8e21908cba403354f33de6512eb0d822f8c35d4..be7ac6135cd27553c431177eb4dd80ea84ed27dd 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php @@ -9,7 +9,7 @@ class A_Lightbox_Manager_Form extends Mixin function get_title() { - return 'Lightbox Effects'; + return __('Lightbox Effects', 'nggallery'); } function render() @@ -21,12 +21,12 @@ class A_Lightbox_Manager_Form extends Mixin $sub_fields = array(); $advanced_fields = array(); - foreach ($form_manager->get_forms(NEXTGEN_LIGHTBOX_OPTIONS_SLUG, TRUE) as $form) { + foreach ($form_manager->get_forms(NGG_LIGHTBOX_OPTIONS_SLUG, TRUE) as $form) { $form->enqueue_static_resources(); $sub_fields[$form->context] = $form->render(FALSE); } - foreach ($form_manager->get_forms(NEXTGEN_LIGHTBOX_ADVANCED_OPTIONS_SLUG, TRUE) as $form) { + foreach ($form_manager->get_forms(NGG_LIGHTBOX_ADVANCED_OPTIONS_SLUG, TRUE) as $form) { $form->enqueue_static_resources(); $advanced_fields[$form->context] = $form->render(FALSE); } @@ -35,12 +35,13 @@ class A_Lightbox_Manager_Form extends Mixin return $this->render_partial( 'photocrati-nextgen_other_options#lightbox_library_tab', array( - 'lightbox_library_label' => _('What effect would you like to use?'), + 'lightbox_library_label' => __('What effect would you like to use?', 'nggallery'), 'libs' => $mapper->find_all(), 'id_field' => $mapper->get_primary_key_column(), 'selected' => $this->object->get_model()->thumbEffect, 'sub_fields' => $sub_fields, - 'adv_fields' => $advanced_fields + 'adv_fields' => $advanced_fields, + 'lightbox_global' => $this->object->get_model()->thumbEffectContext, ), TRUE ); @@ -70,7 +71,6 @@ class A_Lightbox_Manager_Form extends Mixin else { $library->display_settings[$k] = $v; } - } $mapper->save($library); @@ -94,5 +94,10 @@ class A_Lightbox_Manager_Form extends Mixin } } } + + if (($thumbEffectContext = $this->object->param('thumbEffectContext'))) { + $settings->thumbEffectContext = $thumbEffectContext; + $settings->save(); + } } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php index 98d5cb232a9f2e5e4579eb8a2d26270b6d24bec2..68e08376c4a0ae6f9bae1d5d464cf6129e132f44 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php @@ -9,7 +9,7 @@ class A_Miscellaneous_Form extends Mixin function get_title() { - return 'Miscellaneous'; + return __('Miscellaneous', 'nggallery'); } function render() @@ -18,27 +18,27 @@ class A_Miscellaneous_Form extends Mixin 'photocrati-nextgen_other_options#misc_tab', array( 'mediarss_activated' => C_NextGen_Settings::get_instance()->useMediaRSS, - 'mediarss_activated_label' => _('Add MediaRSS link?'), - 'mediarss_activated_help' => _('When enabled, adds a MediaRSS link to your header. Third-party web services can use this to publish your galleries'), - 'mediarss_activated_no' => _('No'), - 'mediarss_activated_yes' => _('Yes'), + 'mediarss_activated_label' => __('Add MediaRSS link?', 'nggallery'), + 'mediarss_activated_help' => __('When enabled, adds a MediaRSS link to your header. Third-party web services can use this to publish your galleries', 'nggallery'), + 'mediarss_activated_no' => __('No'), + 'mediarss_activated_yes' => __('Yes'), - 'cache_label' => _('Clear image cache'), - 'cache_confirmation' => _("Completely clear the NextGEN cache of all image modifications?\n\nChoose [Cancel] to Stop, [OK] to proceed."), + 'cache_label' => __('Clear image cache', 'nggallery'), + 'cache_confirmation' => __("Completely clear the NextGEN cache of all image modifications?\n\nChoose [Cancel] to Stop, [OK] to proceed.", 'nggallery'), 'slug_field' => $this->_render_text_field( (object)array('name' => 'misc_settings'), 'router_param_slug', - 'Permalink slug', + __('Permalink slug', 'nggallery'), $this->object->get_model()->router_param_slug ), 'maximum_entity_count_field' => $this->_render_number_field( (object)array('name' => 'misc_settings'), 'maximum_entity_count', - 'Maximum image count', + __('Maximum image count', 'nggallery'), $this->object->get_model()->maximum_entity_count, - 'This is the maximum limit of images that NextGEN will restrict itself to querying', + __('This is the maximum limit of images that NextGEN will restrict itself to querying', 'nggallery'), FALSE, '', 1 @@ -54,6 +54,7 @@ class A_Miscellaneous_Form extends Mixin $cache->flush_galleries(); C_Photocrati_Cache::flush(); C_Photocrati_Cache::flush('displayed_galleries'); + C_Photocrati_Cache::flush('displayed_gallery_rendering'); } function save_action() @@ -65,6 +66,10 @@ class A_Miscellaneous_Form extends Mixin $local_settings->set('useMediaRSS', $settings['useMediaRSS']); unset($settings['useMediaRSS']); + // It's important the router_param_slug never be empty + if (empty($settings['router_param_slug'])) + $settings['router_param_slug'] = 'nggallery'; + // If the router slug has changed, then flush the cache if ($settings['router_param_slug'] != $this->object->get_model()->router_param_slug) { C_Photocrati_Cache::flush(); @@ -75,4 +80,4 @@ class A_Miscellaneous_Form extends Mixin $local_settings->save(); } } -} \ No newline at end of file +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_controller.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_controller.php index eeb517969a50a66efeb964d655da9fd99a71d5c0..8b04acc8bbb91995faad7383b970a53a0461da63 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_controller.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_controller.php @@ -8,7 +8,7 @@ class A_Other_Options_Controller extends Mixin wp_enqueue_script( 'nextgen_settings_page', $this->get_static_url('photocrati-nextgen_other_options#nextgen_settings_page.js'), - array('jquery-ui-accordion', 'jquery-ui-tooltip', 'wp-color-picker') + array('jquery-ui-accordion', 'jquery-ui-tooltip', 'wp-color-picker', 'jquery.nextgen_radio_toggle') ); wp_enqueue_style( @@ -19,7 +19,7 @@ class A_Other_Options_Controller extends Mixin function get_page_title() { - return 'Other Options'; + return __('Other Options', 'nggallery'); } function get_required_permission() diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_forms.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_forms.php index 44d8c8b3806c3f26ae72396b0c639b9807aba231..fd1424722fde38e1f448fae96d6a0d446c16fdf4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_forms.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_forms.php @@ -22,9 +22,8 @@ class A_Other_Options_Forms extends Mixin 'thumbnail_options' => 'A_Thumbnail_Options_Form', 'lightbox_effects' => 'A_Lightbox_Manager_Form', 'watermarks' => 'A_Watermarks_Form', - 'styles' => 'A_Styles_Form', - 'roles_and_capabilities'=> 'A_Roles_Form', - 'miscellaneous' => 'A_Miscellaneous_Form' + 'miscellaneous' => 'A_Miscellaneous_Form', + 'reset' => 'A_Reset_Form' ); $registry = $this->object->get_registry(); @@ -33,7 +32,7 @@ class A_Other_Options_Forms extends Mixin $registry->add_adapter('I_Form', $adapter, $form); $this->object->add_form( - NEXTGEN_OTHER_OPTIONS_SLUG, + NGG_OTHER_OPTIONS_SLUG, $form ); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_page.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_page.php index a2c5b0100b16c6de1e15f1d4d2ba5b46e9e5fd23..697edbf5d1aa215e42c0f4cbcd7688cd9b23c124 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_page.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_page.php @@ -4,10 +4,9 @@ class A_Other_Options_Page extends Mixin { function initialize() { - $this->object->add( - NEXTGEN_OTHER_OPTIONS_SLUG, - 'A_Other_Options_Controller', - NGGFOLDER - ); + $this->object->add(NGG_OTHER_OPTIONS_SLUG, array( + 'adapter' => 'A_Other_Options_Controller', + 'parent' => NGGFOLDER + )); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php index 4385692bc58e86227655237d0537677921cd805d..c48cf5da32233d8b920edad6de0e4bdafd92e59c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php @@ -4,7 +4,7 @@ class A_Reset_Form extends Mixin { function get_title() { - return 'Reset Options'; + return __('Reset Options', 'nggallery'); } function render() @@ -12,10 +12,10 @@ class A_Reset_Form extends Mixin return $this->object->render_partial( 'photocrati-nextgen_other_options#reset_tab', array( - 'reset_value' => _('Reset all options to default settings'), - 'reset_warning' => _('Replace all existing options and gallery options with their default settings'), - 'reset_label' => _('Reset settings'), - 'reset_confirmation' => _("Reset all options to default settings?\n\nChoose [Cancel] to Stop, [OK] to proceed.") + 'reset_value' => __('Reset all options to default settings', 'nggallery'), + 'reset_warning' => __('Replace all existing options and gallery options with their default settings', 'nggallery'), + 'reset_label' => __('Reset settings', 'nggallery'), + 'reset_confirmation' => __("Reset all options to default settings?\n\nChoose [Cancel] to Stop, [OK] to proceed.", 'nggallery') // 'uninstall_label' => _('Deactivate & Uninstall'), // 'uninstall_confirmation'=>_("Completely uninstall NextGEN Gallery (will reset settings and de-activate)?\n\nChoose [Cancel] to Stop, [OK] to proceed."), ), @@ -27,32 +27,47 @@ class A_Reset_Form extends Mixin { global $wpdb; - $installer = C_Photocrati_Installer::get_instance(); - $settings = C_NextGen_Settings::get_instance(); + // Flush the cache + C_Photocrati_Cache::flush('all'); + + // Uninstall the plugin + $settings = C_NextGen_Settings::get_instance(); + + if (defined('NGG_PRO_PLUGIN_VERSION') || defined('NEXTGEN_GALLERY_PRO_VERSION')) + C_Photocrati_Installer::uninstall('photocrati-nextgen-pro'); - // removes lightbox, display type, and source settings - $installer->uninstall(NEXTGEN_GALLERY_PLUGIN_BASENAME); + C_Photocrati_Installer::uninstall('photocrati-nextgen'); - // removes ngg_options entry in wp_options + // removes all ngg_options entry in wp_options + $settings->reset(); $settings->destroy(); - $settings->save(); - // TODO: remove this sometime after 2.0.21 - // - // Some installations of NextGen that upgraded from 1.9x to 2.0x have duplicate display types installed, - // so for now (as of 2.0.21) we explicitly remove all display types from the db as a way of fixing this + // Some installations of NextGen that upgraded from 1.9x to 2.0x have duplicates installed, + // so for now (as of 2.0.21) we explicitly remove all display types and lightboxes from the + // db as a way of fixing this. $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->posts} WHERE post_type = %s", 'display_type')); + $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->posts} WHERE post_type = %s", 'lightbox_library')); + + // the installation will run on the next page load; so make our own request before reloading the browser + wp_remote_get( + admin_url('plugins.php'), + array( + 'timeout' => 180, + 'blocking' => true, + 'sslverify' => false + ) + ); - // trigger the install routine - $installer->update(TRUE); + header('Location: ' . $_SERVER['REQUEST_URI']); + throw new E_Clean_Exit(); } /* function uninstall_action() { $installer = C_Photocrati_Installer::get_instance(); - $installer->uninstall(NEXTGEN_GALLERY_PLUGIN_BASENAME, TRUE); - deactivate_plugins(NEXTGEN_GALLERY_PLUGIN_BASENAME); + $installer->uninstall(NGG_PLUGIN_BASENAME, TRUE); + deactivate_plugins(NGG_PLUGIN_BASENAME); wp_redirect(admin_url('/plugins.php')); } */ diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.roles_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.roles_form.php index a5bfab8a0220adab73592ba009b97a4f71a74001..a312df349b8f9d2fd2f35816ce5bb082a25bca0d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.roles_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.roles_form.php @@ -4,14 +4,16 @@ class A_Roles_Form extends Mixin { function get_title() { - return 'Roles & Capabilities'; + return __('Roles & Capabilities', 'nggallery'); } function render() { - $view = path_join(NGGALLERY_ABSPATH, implode(DIRECTORY_SEPARATOR, array( - 'admin', 'roles.php' - ))); + $view = implode(DIRECTORY_SEPARATOR, array( + rtrim(NGGALLERY_ABSPATH, "/\\"), + 'admin', + 'roles.php' + )); include_once ( $view ); ob_start(); nggallery_admin_roles(); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php index f91b5ca7d68c9cd263fb4b7665fd85fbd1aeb716..abe4a6371be80da43c79dab698c997d54652464c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php @@ -9,34 +9,37 @@ class A_Styles_Form extends Mixin function get_title() { - return 'Styles'; + return __('Styles', 'nggallery'); } function render() { return $this->object->render_partial('photocrati-nextgen_other_options#styling_tab', array( - 'select_stylesheet_label' => 'What stylesheet would you like to use?', + 'activateCSS_label' => __('Enable custom CSS', 'nggallery'), + 'activateCSS' => $this->object->get_model()->activateCSS, + 'select_stylesheet_label' => __('What stylesheet would you like to use?', 'nggallery'), 'stylesheets' => C_NextGen_Style_Manager::get_instance()->find_all_stylesheets(), 'activated_stylesheet' => $this->object->get_model()->CSSfile, - 'hidden_label' => _('(Show Customization Options)'), - 'active_label' => _('(Hide Customization Options)'), - 'cssfile_contents_label' => _('File Content:'), - 'writable_label' => _('Changes you make to the contents will be saved to'), - 'readonly_label' => _('You could edit this file if it were writable') + 'hidden_label' => __('(Show Customization Options)', 'nggallery'), + 'active_label' => __('(Hide Customization Options)', 'nggallery'), + 'cssfile_contents_label' => __('File Content:', 'nggallery'), + 'writable_label' => __('Changes you make to the contents will be saved to', 'nggallery'), + 'readonly_label' => __('You could edit this file if it were writable', 'nggallery') ), TRUE); } function save_action() { // Ensure that we have - if (($settings = $this->object->param('style_settings'))) { + if (($settings = $this->object->param('style_settings'))) + { $this->object->get_model()->set($settings)->save(); // Are we to modify the CSS file? - if (($contents = $this->object->param('cssfile_contents'))) { - + if (($contents = $this->object->param('cssfile_contents'))) + { // Find filename - $css_file = $settings['CSSfile']; + $css_file = $settings['CSSfile']; $styles = C_NextGen_Style_Manager::get_instance(); $styles->save($contents, $css_file); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php index e61a07577d183f71c7a92f120b9c99dd665dc78c..83b1b6e4e7d7113856cd0b2a96749b9ec6326025 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php @@ -9,7 +9,7 @@ class A_Thumbnail_Options_Form extends Mixin function get_title() { - return 'Thumbnail Options'; + return __('Thumbnail Options', 'nggallery'); } function render() @@ -17,19 +17,19 @@ class A_Thumbnail_Options_Form extends Mixin $settings = $this->object->get_model(); return $this->render_partial('photocrati-nextgen_other_options#thumbnail_options_tab', array( - 'thumbnail_dimensions_label' => _('Default thumbnail dimensions:'), - 'thumbnail_dimensions_help' => _('When generating thumbnails, what image dimensions do you desire?'), - 'thumbnail_dimensions_width' => $settings->thumbwidth, - 'thumbnail_dimensions_height' => $settings->thumbheight, - 'thumbnail_crop_label' => _('Set fix dimension?'), - 'thumbnail_crop_help' => _('Ignore the aspect ratio, no portrait thumbnails?'), + 'thumbnail_dimensions_label' => __('Default thumbnail dimensions:', 'nggallery'), + 'thumbnail_dimensions_help' => __('When generating thumbnails, what image dimensions do you desire?', 'nggallery'), + 'thumbnail_dimensions_width' => $settings->thumbwidth, + 'thumbnail_dimensions_height' => $settings->thumbheight, + 'thumbnail_crop_label' => __('Set fix dimension?', 'nggallery'), + 'thumbnail_crop_help' => __('Ignore the aspect ratio, no portrait thumbnails?', 'nggallery'), 'thumbnail_crop' => $settings->thumbfix, - 'thumbnail_quality_label' => _('Adjust Thumbnail Quality?'), - 'thumbnail_quality_help' => _('When generating thumbnails, what image quality do you desire?'), + 'thumbnail_quality_label' => __('Adjust Thumbnail Quality?', 'nggallery'), + 'thumbnail_quality_help' => __('When generating thumbnails, what image quality do you desire?', 'nggallery'), 'thumbnail_quality' => $settings->thumbquality, - 'size_list_label' => _('Size List'), - 'size_list_help' => _('List of default sizes used for thumbnails and images'), - 'size_list' => $settings->thumbnail_dimensions, + 'size_list_label' => __('Size List', 'nggallery'), + 'size_list_help' => __('List of default sizes used for thumbnails and images', 'nggallery'), + 'size_list' => $settings->thumbnail_dimensions, ), TRUE); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php index 1df3d16aa869c620b4beb6375abca125fedb0bd0..faffdd782b7d72c6c8a118067da03a74a918cc1f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php @@ -9,7 +9,7 @@ class A_Watermarks_Form extends Mixin function get_title() { - return 'Watermarks'; + return __('Watermarks', 'nggallery'); } /** @@ -19,7 +19,11 @@ class A_Watermarks_Form extends Mixin function _get_watermark_fonts() { $retval = array(); - foreach (scandir(path_join(NGGALLERY_ABSPATH, 'fonts')) as $filename) { + $path = implode(DIRECTORY_SEPARATOR, array( + rtrim(NGGALLERY_ABSPATH, "/\\"), + 'fonts' + )); + foreach (scandir($path) as $filename) { if (strpos($filename, '.') === 0) continue; else $retval[] = $filename; } @@ -34,8 +38,8 @@ class A_Watermarks_Form extends Mixin { // We do this so that an adapter can add new sources return array( - 'Using an Image' => 'image', - 'Using Text' => 'text', + __('Using an Image', 'nggallery') => 'image', + __('Using Text', 'nggallery') => 'text' ); } @@ -62,9 +66,14 @@ class A_Watermarks_Form extends Mixin */ function _render_watermark_image_fields() { - return $this->object->render_partial('photocrati-nextgen_other_options#watermark_image_fields', array( - 'image_url_label' => _('Image URL:'), + $message = __('An absolute or relative (to the site document root) file system path', 'nggallery'); + if (ini_get('allow_url_fopen')) + $message = __('An absolute or relative (to the site document root) file system path or an HTTP url', 'nggallery'); + + return $this->object->render_partial('photocrati-nextgen_other_options#watermark_image_fields', array( + 'image_url_label' => __('Image URL:', 'nggallery'), 'watermark_image_url' => $this->object->get_model()->wmPath, + 'watermark_image_text' => $message ), TRUE); } @@ -78,50 +87,57 @@ class A_Watermarks_Form extends Mixin $settings = $this->object->get_model(); return $this->object->render_partial('photocrati-nextgen_other_options#watermark_text_fields', array( 'fonts' => $this->object->_get_watermark_fonts($settings), - 'font_family_label' => _('Font Family:'), + 'font_family_label' => __('Font Family:', 'nggallery'), 'font_family' => $settings->wmFont, - 'font_size_label' => _('Font Size:'), + 'font_size_label' => __('Font Size:', 'nggallery'), 'font_size' => $settings->wmSize, - 'font_color_label' => _('Font Color:'), + 'font_color_label' => __('Font Color:', 'nggallery'), 'font_color' => strpos($settings->wmColor, '#') === 0 ? $settings->wmColor : "#{$settings->wmColor}", - 'watermark_text_label' => _('Text:'), + 'watermark_text_label' => __('Text:', 'nggallery'), 'watermark_text' => $settings->wmText, - 'opacity_label' => _('Opacity:'), + 'opacity_label' => __('Opacity:', 'nggallery'), 'opacity' => $settings->wmOpaque, ), TRUE); } + function _get_preview_image() + { + $registry = $this->object->get_registry(); + $storage = $registry->get_utility('I_Gallery_Storage'); + $image = $registry->get_utility('I_Image_Mapper')->find_first(); + $imagegen = $registry->get_utility('I_Dynamic_Thumbnails_Manager'); + $size = $imagegen->get_size_name(array( + 'height' => 250, + 'crop' => FALSE, + 'watermark' => TRUE + )); + $url = $image ? $storage->get_image_url($image, $size) : NULL; + $abspath = $image ? $storage->get_image_abspath($image, $size) : NULL; + return (array('url' => $url, 'abspath' => $abspath)); + } + function render() { - $settings = $this->get_model(); - $registry = $this->object->get_registry(); - $storage = $registry->get_utility('I_Gallery_Storage'); - $image = $registry->get_utility('I_Image_Mapper')->find_first(); - $imagegen = $registry->get_utility('I_Dynamic_Thumbnails_Manager'); - $size = $imagegen->get_size_name(array( - 'height' => 250, - 'crop' => FALSE, - 'watermark' => TRUE - )); - $thumb_url = $image ? $storage->get_image_url($image, $size) : NULL; + $settings = $this->get_model(); + $image = $this->object->_get_preview_image(); return $this->render_partial('photocrati-nextgen_other_options#watermarks_tab', array( - 'notice' => _('Please note : You can only activate the watermark under -> Manage Gallery . This action cannot be undone.'), - 'watermark_source_label' => _('How will you generate a watermark?'), + 'notice' => __('Please note: You can only activate the watermark under Manage Gallery. This action cannot be undone.', 'nggallery'), + 'watermark_source_label' => __('How will you generate a watermark?', 'nggallery'), 'watermark_sources' => $this->object->_get_watermark_sources(), 'watermark_fields' => $this->object->_get_watermark_source_fields($settings), 'watermark_source' => $settings->wmType, - 'position_label' => _('Position:'), + 'position_label' => __('Position:', 'nggallery'), 'position' => $settings->wmPos, - 'offset_label' => _('Offset:'), + 'offset_label' => __('Offset:', 'nggallery'), 'offset_x' => $settings->wmXpos, 'offset_y' => $settings->wmYpos, - 'hidden_label' => _('(Show Customization Options)'), - 'active_label' => _('(Hide Customization Options)'), - 'thumbnail_url' => $thumb_url, - 'preview_label' => _('Preview of saved settings:'), - 'refresh_label' => _('Refresh preview image'), + 'hidden_label' => __('(Show Customization Options)', 'nggallery'), + 'active_label' => __('(Hide Customization Options)', 'nggallery'), + 'thumbnail_url' => $image['url'], + 'preview_label' => __('Preview of saved settings:', 'nggallery'), + 'refresh_label' => __('Refresh preview image', 'nggallery'), 'refresh_url' => $settings->ajax_url ), TRUE); } @@ -130,6 +146,9 @@ class A_Watermarks_Form extends Mixin { if (($settings = $this->object->param('watermark_options'))) { $this->object->get_model()->set($settings)->save(); + $image = $this->object->_get_preview_image(); + if (is_file($image['abspath'])) + @unlink($image['abspath']); } } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php index 568a1ed216c425eb748dd9016beed5fbcb343a18..114d7103884ee277b487fb9a1a7c2908a33997ff 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php @@ -6,7 +6,7 @@ } */ -define('NEXTGEN_OTHER_OPTIONS_SLUG', 'ngg_other_options'); +define('NGG_OTHER_OPTIONS_SLUG', 'ngg_other_options'); class M_NextGen_Other_Options extends C_Base_Module { @@ -16,7 +16,7 @@ class M_NextGen_Other_Options extends C_Base_Module 'photocrati-nextgen_other_options', 'Other Options', 'NextGEN Gallery Others Options Page', - '0.4', + '0.7', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.css index f76de63839b2a3ff2654c63def7859632febb97d..2c65b2297697be21dbd839c9ff18d6d877b991b3 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.css @@ -15,10 +15,6 @@ .gallery_page_ngg_other_options table td.column2 { width: 200px; } -.gallery_page_ngg_other_options .image_options label { - position: relative; - bottom: 2px; -} .gallery_page_ngg_other_options textarea { height: 100px; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.js index 19797414e85d2b2946355451dc8c8afeb8cf18bd..b16aa5f32d6d9d6d7cafdf2664fa7eec11f0b612 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.js @@ -102,6 +102,20 @@ jQuery(function($){ }); /**** STYLES TAB ****/ + $('input[name="style_settings[activateCSS]"]') + .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_styles_activated_stylesheet')) + .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_styles_show_more')) + .bind('change', function() { + var $this = $(this); + if ($this.val() == '0') { + $('#cssfile_contents').prop('disabled', true); + $('#advanced_stylesheet_form').hide('slow'); + } else { + $('#cssfile_contents').prop('disabled', false); + } + }); + + // When the selected stylesheet changes, fetch it's contents $('#activated_stylesheet').change(function(){ var selected = $(this).find(':selected'); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php index 7026a296f6d7867ef66a520617f1f4e55bc3af2e..a41b3e89f635fd962a98038e71a89087cb08223e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php @@ -28,15 +28,16 @@ <?php } ?> <tr> - <td colspan="2"> + <td> <a href="#" id="lightbox_library_advanced_toggle" - data-hidden_label="<?php echo esc_attr(_('(Show Advanced Settings)'))?>" - data-active_label="<?php echo esc_attr(_('(Hide Advanced Settings)'))?>" + data-hidden_label="<?php echo esc_attr(__('(Show Advanced Settings)', 'nggallery')); ?>" + data-active_label="<?php echo esc_attr(__('(Hide Advanced Settings)', 'nggallery')); ?>" data-currently-hidden='true'> - <?php echo_h(_("(Show Advanced Settings)"))?> + <?php echo_h(__("(Show Advanced Settings)", 'nggallery')); ?> </a> </td> + <td> </td> </tr> <?php foreach ($adv_fields as $name => $form) { ?> @@ -44,6 +45,24 @@ <?php echo $form; ?> </tbody> <?php } ?> - + <tr> + <td> + </td> + <td> + </td> + </tr> + <tr> + <td class="column1"> + <label for="lightbox_global"><?php esc_html_e('What must the lightbox be applied to?', 'nggallery')?></label> + </td> + <td> + <select name="thumbEffectContext" id="lightbox_global"> + <option value="nextgen_images" <?php selected('nextgen_images', $lightbox_global, TRUE)?>><?php esc_html_e('Only apply to NextGEN images', 'nggallery'); ?></option> + <option value="nextgen_and_wp_images" <?php selected('nextgen_and_wp_images', $lightbox_global, TRUE)?>><?php esc_html_e('Only apply to NextGEN and WordPress images', 'nggallery'); ?></option> + <option value="all_images" <?php selected('all_images', $lightbox_global, TRUE)?>><?php esc_html_e('Try to apply to all images', 'nggallery'); ?></option> + <option value="all_images_direct" <?php selected('all_images_direct', $lightbox_global, TRUE)?>><?php esc_html_e('Try to apply to all images that link to image files', 'nggallery'); ?></option> + </select> + </td> + </tr> </tbody> -</table> \ No newline at end of file +</table> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php index 07125fac0ee7271a215e98bd2cacbcce360a8bc2..3d30d2ee9b4a2f1c4ae61865a92cf0d582f29313 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php @@ -1,5 +1,19 @@ <table class="full-width"> - <tr> + <tr> + <td class="column1"> + <label for="activateCSS"> + <?php echo_h($activateCSS_label); ?> + </label> + </td> + <td colspan="2"> + <input id="activateCSS" type="radio" name="style_settings[activateCSS]" value="1" <?php checked(1, $activateCSS); ?>/> + <label for="activateCSS"><?php _e('Yes', 'nggallery'); ?></label> + + <input id="activateCSS_no" type="radio" name="style_settings[activateCSS]" value="0" <?php checked(0, $activateCSS); ?>/> + <label for="activateCSS_no"><?php _e('No', 'nggallery'); ?></label> + </td> + </tr> + <tr id="tr_photocrati-nextgen_styles_activated_stylesheet" class="<?php echo ($activateCSS == 0 ? 'hidden' : ''); ?>"> <td class="column1"> <label for="activated_stylesheet"> <?php echo_h($select_stylesheet_label) ?> @@ -18,12 +32,18 @@ <?php endforeach ?> </select> <p class="description"> - Place any custom stylesheets in <strong>wp-content/ngg_styles</strong><br/> + <?php _e('Place any custom stylesheets in <strong>wp-content/ngg_styles</strong>', 'nggallery'); ?><br/> + <?php + printf( + __("All stylesheets must contain a <a href='#' onclick='%s'>file header</a>", 'nggallery'), + 'javascript:alert("/*\nCSS Name: Example\nDescription: This is an example stylesheet\nAuthor: John Smith\nVersion: 1.0\n*/");' + ); + ?> All stylesheets must contain a <a href='#' onclick='javascript:alert("/*\nCSS Name: Example\nDescription: This is an example stylesheet\nAuthor: John Smith\nVersion: 1.0\n*/");'>file header</a> </p> </td> </tr> - <tr> + <tr id="tr_photocrati-nextgen_styles_show_more" class="<?php echo ($activateCSS == 0 ? 'hidden' : ''); ?>"> <td colspan="2"> <a href="#" @@ -47,7 +67,7 @@ readonly_label="<?php echo esc_attr($readonly_label)?>" id="writable_identicator"> </p> - <textarea id="cssfile_contents" name="cssfile_contents"></textarea> + <textarea id="cssfile_contents" name="cssfile_contents" <?php echo ($activateCSS == 0 ? 'disabled' : ''); ?>></textarea> </td> </tr> </table> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php index d6fa45c55b06ce04add14f5861f669fcab5afe34..d0530104c8ed1b6edf9bb3599f1b22b00bbd2479 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/thumbnail_options_tab.php @@ -13,7 +13,11 @@ $thumbnails_template_height_id = 'thumbnail_dimensions_height'; $thumbnails_template_width_name = 'thumbnail_settings[thumbwidth]'; $thumbnails_template_height_name = 'thumbnail_settings[thumbheight]'; - include(path_join(NGGALLERY_ABSPATH, implode(DIRECTORY_SEPARATOR, array('admin', 'thumbnails-template.php')))); + include(implode(DIRECTORY_SEPARATOR, array( + rtrim(NGGALLERY_ABSPATH, "/\\"), + 'admin', + 'thumbnails-template.php' + ))); ?> <p class="description"><?php echo_h($thumbnail_dimensions_help)?></p> </td> @@ -41,6 +45,7 @@ <p class="description"><?php echo_h($thumbnail_crop_help); ?></p> </td> </tr> + <?php /* <tr> <td> <label for="thumbnail_quality"> @@ -58,6 +63,7 @@ <p class="description"><?php echo_h($thumbnail_quality_help)?></p> </td> </tr> + */ ?> <tr> <td> <label for="size_list"> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/watermark_image_fields.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/watermark_image_fields.php index a9d7fe2b9597119cb39da1405ae1cbdc94eeff8b..1474be72f93ea3c3e27309292a69d01221479e11 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/watermark_image_fields.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_other_options/templates/watermark_image_fields.php @@ -1,6 +1,8 @@ <tr> <td class="column1"> - <label for="watermark_image_url"> + <label for="watermark_image_url" + title="<?php echo esc_attr($watermark_image_text); ?>" + class="tooltip"> <?php echo_h($image_url_label)?> </label> </td> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/mixin.nextgen_basic_pagination.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/mixin.nextgen_basic_pagination.php index 7c24728d61076f3e06c730a738ae93ec196a2166..03b92aac2bc9276bcc4658584ccb606b6e9e6cd8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/mixin.nextgen_basic_pagination.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/mixin.nextgen_basic_pagination.php @@ -20,12 +20,33 @@ class Mixin_NextGen_Basic_Pagination extends Mixin $next_symbol = apply_filters('ngg_next_symbol', '►'); if (empty($current_url)) + { $current_url = $this->object->get_routed_url(TRUE); + if (is_archive()) + { + $id = get_the_ID(); + + if ($id == null) + { + global $post; + $id = $post ? $post->ID : null; + } + + if ($id != null && in_the_loop()) + { + $current_url = get_permalink($id); + } + } + } + $return = array('prev' => '', 'next' => '', 'output' => ''); if ($maxElement <= 0) + { + $return['output'] = "<div class='ngg-clear'></div>"; return $return; + } $total = $totalElement; @@ -36,7 +57,7 @@ class Mixin_NextGen_Basic_Pagination extends Mixin if (1 < $page) { $newpage = (1 == $page - 1) ? 1 : $page - 1; - $return['prev'] = $this->object->set_param_for($current_url, 'page', $newpage); + $return['prev'] = $this->object->set_param_for($current_url, 'nggpage', $newpage); $r .= '<a class="prev" data-pageid="' . $newpage . '" id="ngg-prev-' . $newpage . '" href="' . $return['prev'] . '">' . $prev_symbol . '</a>'; } @@ -53,7 +74,7 @@ class Mixin_NextGen_Basic_Pagination extends Mixin if ($page_num < 3 || ($page_num >= $page - 3 && $page_num <= $page + 3) || $page_num > $total_pages - 3) { $newpage = (1 == $page_num ) ? 1 : $page_num; - $link = $this->object->set_param_for($current_url, 'page', $newpage); + $link = $this->object->set_param_for($current_url, 'nggpage', $newpage); $r .= '<a class="page-numbers" data-pageid="' . $newpage . '" href="' . $link . '">' . ($page_num) . '</a>'; } } @@ -63,7 +84,7 @@ class Mixin_NextGen_Basic_Pagination extends Mixin if (($page) * $maxElement < $total || -1 == $total) { $newpage = $page + 1; - $return['next'] = $this->object->set_param_for($current_url, 'page', $newpage); + $return['next'] = $this->object->set_param_for($current_url, 'nggpage', $newpage); $r .= '<a class="next" data-pageid="' . $newpage . '" id="ngg-next-' . $newpage . '" href="' . $return['next'] . '">' . $next_symbol . '</a>'; } @@ -75,4 +96,4 @@ class Mixin_NextGen_Basic_Pagination extends Mixin return $return; } -} \ No newline at end of file +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/module.nextgen_pagination.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/module.nextgen_pagination.php index 4e4916aeec137af4fcb29dca8eca9d72bb2ed652..64bda4c269170b65f03ecee77d97238bf39305d9 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/module.nextgen_pagination.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pagination/module.nextgen_pagination.php @@ -12,7 +12,7 @@ class M_NextGen_Pagination extends C_Base_Module 'photocrati-nextgen_pagination', "Pagination", "Provides pagination for display types", - '0.1', + '0.3', "http://www.nextgen-gallery.com", "Photocrati Media", "http://www.photocrati.com" diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_page.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_page.php index 97f228ce745520150f7ecc49adb126d612384d2c..71e57140727fe1da55d63dd7d39b99e0f27518f6 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_page.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_page.php @@ -8,13 +8,18 @@ class A_NextGen_Pro_Upgrade_Page extends Mixin include_once(ABSPATH . 'wp-admin/includes/plugin.php'); // We shouldn't show the upgrade page if they already have the plugin and it's active - if (defined('NEXTGEN_GALLERY_PRO_PLUGIN_BASENAME') && is_plugin_active(NEXTGEN_GALLERY_PRO_PLUGIN_BASENAME)) + $found = false; + if (defined('NEXTGEN_GALLERY_PRO_PLUGIN_BASENAME')) + $found = 'NEXTGEN_GALLERY_PRO_PLUGIN_BASENAME'; + if (defined('NGG_PRO_PLUGIN_BASENAME')) + $found = 'NGG_PRO_PLUGIN_BASENAME'; + + if ($found && is_plugin_active(constant($found))) return; - $this->object->add( - 'ngg_pro_upgrade', - 'A_NextGen_Pro_Upgrade_Controller', - NGGFOLDER - ); + $this->object->add('ngg_pro_upgrade', array( + 'adapter' => 'A_NextGen_Pro_Upgrade_Controller', + 'parent' => NGGFOLDER + )); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/module.nextgen_pro_upgrade.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/module.nextgen_pro_upgrade.php index 3f9ee933c45099e823195329c9089aea1c0562f8..5bcf8b5f47e397152ff9752f7ca0f46b7c9acd88 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/module.nextgen_pro_upgrade.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_pro_upgrade/module.nextgen_pro_upgrade.php @@ -14,7 +14,7 @@ class M_NextGen_Pro_Upgrade extends C_Base_Module 'photocrati-nextgen_pro_upgrade', 'NextGEN Pro Page', 'NextGEN Gallery Pro Upgrade Page', - '0.1', + '0.3', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php index d4a0557549bc145e82ec602c9e5010525f66d7a0..3f9f285b5a490b1a489f66f2c606859ec9bcd784 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/class.nextgen_settings_installer.php @@ -11,12 +11,13 @@ class C_NextGen_Settings_Installer $this->site_settings = C_NextGen_Global_Settings::get_instance(); $this->_global_settings = array( - 'gallerypath' => 'wp-content/blogs.dir/%BLOG_ID%/files/', + 'gallerypath' => implode(DIRECTORY_SEPARATOR, array('wp-content', 'uploads', 'sites', '%BLOG_ID%', 'nggallery')).DIRECTORY_SEPARATOR, 'wpmuCSSfile' => 'nggallery.css', 'wpmuStyle' => FALSE, 'wpmuRoles' => FALSE, 'wpmuImportFolder' => FALSE, 'wpmuZipUpload' => FALSE, + 'wpmuQuotaCheck' => FALSE, 'datamapper_driver' => 'custom_table_datamapper', 'gallerystorage_driver' => 'ngglegacy_gallery_storage', 'maximum_entity_count' => 500, @@ -24,7 +25,7 @@ class C_NextGen_Settings_Installer ); $this->_local_settings = array( - 'gallerypath' => 'wp-content/gallery/', + 'gallerypath' => 'wp-content'.DIRECTORY_SEPARATOR.'gallery'.DIRECTORY_SEPARATOR, 'deleteImg' => True, // delete Images 'swfUpload' => True, // activate the batch upload 'usePermalinks' => False, // use permalinks for parameters @@ -38,7 +39,7 @@ class C_NextGen_Settings_Installer 'activateTags' => 0, // append related images 'appendType' => 'tags', // look for category or tags 'maxImages' => 7, // number of images toshow - 'relatedHeading' => __('<h3>Related Images:</h3>', 'nggallery'), // subheading for related images + 'relatedHeading' => '<h3>' . __('Related Images', 'nggallery') . ':</h3>', // subheading for related images // Thumbnail Settings 'thumbwidth' => 120, // Thumb Width @@ -71,6 +72,7 @@ class C_NextGen_Settings_Installer // Thumbnail Effect 'thumbEffect' => 'fancybox', // select effect 'thumbCode' => 'class="ngg-fancybox" rel="%GALLERY_NAME%"', + 'thumbEffectContext' => 'nextgen_images', // select effect // Watermark settings 'wmPos' => 'botRight', // Postion diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php index 36e54f3dcb15c76957b68dd59daaab188201874c..5f5ba28c42c6a14776f5e19de451c6c6c241072e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php @@ -17,7 +17,7 @@ class M_NextGen_Settings extends C_Base_Module 'photocrati-nextgen_settings', 'NextGEN Gallery Settings', 'Provides central management for NextGEN Gallery settings', - '0.2', + '0.4', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php index ec313ad5ff4aee432840049b86a124714a30a521..7bc8060cad228821ed0ebd76d389f561b2c8ad82 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/nextgen_xmlrpc/module.nextgen_xmlrpc.php @@ -13,7 +13,7 @@ class M_NextGen_XmlRpc extends C_Base_Module 'photocrati-nextgen_xmlrpc', 'NextGEN Gallery XML-RPC', 'Provides an XML-RPC API for NextGEN Gallery', - '0.1', + '0.4', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -57,7 +57,7 @@ class M_NextGen_XmlRpc extends C_Base_Module */ function get_version() { - return array('version' => NEXTGEN_GALLERY_PLUGIN_VERSION); + return array('version' => NGG_PLUGIN_VERSION); } /** @@ -66,7 +66,7 @@ class M_NextGen_XmlRpc extends C_Base_Module * @param $password * @return bool|WP_Error|WP_User */ - function login($username, $password, $blog_id=1) + function _login($username, $password, $blog_id=1) { $retval = FALSE; @@ -80,7 +80,7 @@ class M_NextGen_XmlRpc extends C_Base_Module return $retval; } - function can_manage_gallery($gallery_id_or_obj, $check_upload_capability=FALSE) + function _can_manage_gallery($gallery_id_or_obj, $check_upload_capability=FALSE) { $retval = FALSE; @@ -90,20 +90,45 @@ class M_NextGen_XmlRpc extends C_Base_Module $gallery_mapper = C_Gallery_Mapper::get_instance(); $gallery = $gallery_mapper->find($gallery_id_or_obj); } + else $gallery = $gallery_id_or_obj; - $security = $this->get_registry()->get_utility('I_Security_Manager'); - $actor = $security->get_current_actor(); - if ($actor->get_entity_id() == $gallery->author) $retval = TRUE; - elseif ($actor->is_allowed('nextgen_edit_gallery_unowned')) $retval = TRUE; + if ($gallery) { + $security = $this->get_registry()->get_utility('I_Security_Manager'); + $actor = $security->get_current_actor(); + if ($actor->get_entity_id() == $gallery->author) $retval = TRUE; + elseif ($actor->is_allowed('nextgen_edit_gallery_unowned')) $retval = TRUE; - // Optionally, check if the user can upload to this gallery - if ($retval && $check_upload_capability) { - $retval = $actor->is_allowed('nextgen_upload_image'); + // Optionally, check if the user can upload to this gallery + if ($retval && $check_upload_capability) { + $retval = $actor->is_allowed('nextgen_upload_image'); + } } return $retval; } + function _add_gallery_properties($gallery) + { + if (is_object($gallery)) { + + $image_mapper = C_Image_Mapper::get_instance(); + $storage = C_Gallery_Storage::get_instance(); + + // Vladimir's Lightroom plugins requires the 'id' to be a string + // Ask if he can accept integers as well. Currently, integers break + // his plugin + $gallery->gid = (string) $gallery->gid; + + // Set other gallery properties + $image_counter = array_pop($image_mapper->select('DISTINCT COUNT(*) as counter')->where(array("galleryid = %d", $gallery->gid))->run_query(FALSE, TRUE)); + $gallery->counter = $image_counter->counter; + $gallery->abspath = $storage->get_gallery_abspath($gallery); + } + else return FALSE; + + return TRUE; + } + /** * Returns a single image object * @param $args (blog_id, username, password, pid) @@ -117,7 +142,7 @@ class M_NextGen_XmlRpc extends C_Base_Module $image_id = intval($args[3]); // Authenticate the user - if ($this->login($username, $password, $blog_id)) { + if ($this->_login($username, $password, $blog_id)) { // Try to find the image $image_mapper = C_Image_Mapper::get_instance(); @@ -128,10 +153,10 @@ class M_NextGen_XmlRpc extends C_Base_Module if (($gallery = $gallery_mapper->find($image->galleryid))) { // Does the user have sufficient capabilities? - if ($this->can_manage_gallery($gallery)) { + if ($this->_can_manage_gallery($gallery)) { $storage = C_Gallery_Storage::get_instance(); - $image->imageURL = $storage->get_image_url($image); - $image->thumbURL = $storage->get_thumb_url($image); + $image->imageURL = $storage->get_image_url($image,'full', TRUE); + $image->thumbURL = $storage->get_thumb_url($image, TRUE); $image->imagePath = $storage->get_image_abspath($image); $image->thumbPath = $storage->get_thumb_abspath($image); $retval = $return_model ? $image : $image->get_entity(); @@ -168,14 +193,14 @@ class M_NextGen_XmlRpc extends C_Base_Module $gallery_id = intval($args[3]); // Authenticate the user - if ($this->login($username, $password, $blog_id)) { + if ($this->_login($username, $password, $blog_id)) { // Try to find the gallery $mapper = C_Gallery_Mapper::get_instance(); if (($gallery = $mapper->find($gallery_id, TRUE))) { // Does the user have sufficient capabilities? - if ($this->can_manage_gallery($gallery)) { + if ($this->_can_manage_gallery($gallery)) { $retval = $gallery->get_images(); } else { @@ -215,14 +240,14 @@ class M_NextGen_XmlRpc extends C_Base_Module $gallery_id = isset($data['gallery_id']) ? $data['gallery_id'] : $data['gallery']; // Authenticate the user - if ($this->login($username, $password, $blog_id)) { + if ($this->_login($username, $password, $blog_id)) { // Try to find the gallery $mapper = C_Gallery_Mapper::get_instance(); if (($gallery = $mapper->find($gallery_id, TRUE))) { // Does the user have sufficient capabilities? - if ($this->can_manage_gallery($gallery, TRUE)) { + if ($this->_can_manage_gallery($gallery, TRUE)) { // Upload the image $storage = C_Gallery_Storage::get_instance(); @@ -274,6 +299,11 @@ class M_NextGen_XmlRpc extends C_Base_Module $retval->$key = $value; } + // Unset any dynamic properties not part of the schema + foreach (array('imageURL', 'thumbURL', 'imagePath', 'thumbPath') as $key) { + unset($retval->$key); + } + $retval = $retval->save(); } @@ -306,7 +336,7 @@ class M_NextGen_XmlRpc extends C_Base_Module $title = strval($args[3]); // Authenticate the user - if ($this->login($username, $password, $blog_id)) { + if ($this->_login($username, $password, $blog_id)) { $security = $this->get_registry()->get_utility('I_Security_Manager'); if ($security->is_allowed('nextgen_edit_gallery')) { @@ -336,21 +366,28 @@ class M_NextGen_XmlRpc extends C_Base_Module $gallery_id = intval($args[3]); $name = strval($args[4]); $title = strval($args[5]); - $image_id = intval($args[6]); - $properties = isset($args[7]) ? (array) $args[7] : array(); + $galdesc = strval($args[6]); + $image_id = intval($args[7]); + $properties = isset($args[8]) ? (array) $args[8] : array(); // Authenticate the user - if ($this->login($username, $password, $blog_id)) { + if ($this->_login($username, $password, $blog_id)) { $mapper = C_Gallery_Mapper::get_instance(); if (($gallery = $mapper->find($gallery_id, TRUE))) { - if ($this->can_manage_gallery($gallery)) { + if ($this->_can_manage_gallery($gallery)) { $gallery->name = $name; $gallery->title = $title; + $gallery->galdesc = $galdesc; $gallery->previewpic = $image_id; foreach ($properties as $key => $value) { $gallery->$key = $value; } + + // Unset dynamic properties not part of the schema + unset($gallery->counter); + unset($gallery->abspath); + $retval = $gallery->save(); } else $retval = new IXR_Error(403, "You don't have permission to modify this gallery"); @@ -361,6 +398,36 @@ class M_NextGen_XmlRpc extends C_Base_Module return $retval; } + /** + * Returns all galleries + * @param $args (blog_id, username, password) + */ + function get_galleries($args) + { + $retval = new IXR_Error(403, 'Invalid username or password'); + $blog_id = intval($args[0]); + $username = strval($args[1]); + $password = strval($args[2]); + + // Authenticate the user + if ($this->_login($username, $password, $blog_id)) { + + // Do we have permission? + $security = $this->get_registry()->get_utility('I_Security_Manager'); + if ($security->is_allowed('nextgen_edit_gallery')) { + $mapper = C_Gallery_Mapper::get_instance(); + $retval = array(); + foreach ($mapper->find_all() as $gallery) { + $this->_add_gallery_properties($gallery); + $retval[$gallery->{$gallery->id_field}] = (array)$gallery; + } + } + else $retval = new IXR_Error( 401, __( 'Sorry, you must be able to manage galleries' ) ); + } + + return $retval; + } + /** * Gets a single gallery instance * @param $args (blog_id, username, password, gallery_id) @@ -374,12 +441,14 @@ class M_NextGen_XmlRpc extends C_Base_Module $gallery_id = intval($args[3]); // Authenticate the user - if ($this->login($username, $password, $blog_id)) { + if ($this->_login($username, $password, $blog_id)) { $mapper = C_Gallery_Mapper::get_instance(); if (($gallery = $mapper->find($gallery_id, TRUE))) { - if ($this->can_manage_gallery($gallery)) { + if ($this->_can_manage_gallery($gallery)) { + $this->_add_gallery_properties($gallery); $retval = $return_model ? $gallery : $gallery->get_entity(); } + else $retval = new IXR_Error(403, "Sorry, but you don't have permission to manage gallery #{$gallery->gid}"); } else $retval = FALSE; } @@ -395,7 +464,7 @@ class M_NextGen_XmlRpc extends C_Base_Module { $retval = $this->get_gallery($args, TRUE); - if (!($retval instanceof IXR_Error)) { + if (!($retval instanceof IXR_Error) and is_object($retval)) { $retval = $retval->destroy(); } @@ -412,14 +481,14 @@ class M_NextGen_XmlRpc extends C_Base_Module $blog_id = intval($args[0]); $username = strval($args[1]); $password = strval($args[2]); - $title = intval($args[3]); + $title = strval($args[3]); $previewpic = isset($args[4]) ? intval($args[4]): 0; $desc = isset($args[5]) ? strval($args[5]) : ''; $sortorder = isset($args[6]) ? $args[6] : ''; $page_id = isset($args[7]) ? intval($args[7]) : 0; // Authenticate the user - if ($this->login($username, $password, $blog_id)) { + if ($this->_login($username, $password, $blog_id)) { // Is request allowed? $security = $this->get_registry()->get_utility('I_Security_Manager'); @@ -431,7 +500,7 @@ class M_NextGen_XmlRpc extends C_Base_Module 'previewpic' => $previewpic, 'albumdesc' => $desc, 'sortorder' => $sortorder, - 'page_id' => $page_id + 'pageid' => $page_id )); if ($album->save()) $retval = $album->id(); @@ -456,7 +525,7 @@ class M_NextGen_XmlRpc extends C_Base_Module $password = strval($args[2]); // Authenticate the user - if ($this->login($username, $password, $blog_id)) { + if ($this->_login($username, $password, $blog_id)) { // Are we allowed? $security = $this->get_registry()->get_utility('I_Security_Manager'); @@ -496,21 +565,23 @@ class M_NextGen_XmlRpc extends C_Base_Module $album_id = intval($args[3]); // Authenticate the user - if ($this->login($username, $password, $blog_id)) { + if ($this->_login($username, $password, $blog_id)) { // Are we allowed? $security = $this->get_registry()->get_utility('I_Security_Manager'); if ($security->is_allowed('nextgen_edit_album')) { $mapper = C_Album_Mapper::get_instance(); - $album = $mapper->find($album_id, TRUE); + if (($album = $mapper->find($album_id, TRUE))) { + // Vladimir's Lightroom plugins requires the 'id' to be a string + // Ask if he can accept integers as well. Currently, integers break + // his plugin + $album->id = (string) $album->id; + $album->galleries = $album->sortorder; - // Vladimir's Lightroom plugins requires the 'id' to be a string - // Ask if he can accept integers as well. Currently, integers break - // his plugin - $album->id = (string) $album->id; - $album->galleries = $album->sortorder; + $retval = $return_model ? $album : $album->get_entity(); + } + else $retval = FALSE; - $retval = $return_model ? $album : $album->get_entity(); } else $retval = new IXR_Error(403, "Sorry, you must be able to manage albums"); } @@ -556,47 +627,6 @@ class M_NextGen_XmlRpc extends C_Base_Module return $retval; } - - - /** - * Returns all galleries - * @param $args (blog_id, username, password) - */ - function get_galleries($args) - { - $retval = new IXR_Error(403, 'Invalid username or password'); - $blog_id = intval($args[0]); - $username = strval($args[1]); - $password = strval($args[2]); - - // Authenticate the user - if ($this->login($username, $password, $blog_id)) { - - // Do we have permission? - $security = $this->get_registry()->get_utility('I_Security_Manager'); - if ($security->is_allowed('nextgen_edit_gallery')) { - $mapper = C_Gallery_Mapper::get_instance(); - $image_mapper = C_Image_Mapper::get_instance(); - $storage = C_Gallery_Storage::get_instance(); - $retval = array(); - foreach ($mapper->find_all() as $gallery) { - // Vladimir's Lightroom plugins requires the 'id' to be a string - // Ask if he can accept integers as well. Currently, integers break - // his plugin - $gallery->gid = (string) $gallery->gid; - - // Set other gallery properties - $image_counter = array_pop($image_mapper->select('COUNT(*) as counter')->where(array("galleryid = %d", $gallery->gid))->run_query()); - $gallery->counter = $image_counter->counter; - $gallery->abspath = $storage->get_gallery_abspath($gallery); - $retval[$gallery->{$gallery->id_field}] = (array)$gallery; - } - } - else $retval = new IXR_Error( 401, __( 'Sorry, you must be able to manage galleries' ) ); - } - - return $retval; - } } new M_NextGen_XmlRpc; \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/admin.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/admin.php index 64b5f5cebbe8f57eaf7eb2934bd842af07b675b3..bde3b8912ce50ed67005fdcc390a034e1c19ce81 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/admin.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/admin.php @@ -32,10 +32,6 @@ class nggAdminPanel{ //TODO: remove after release of Wordpress 3.3 add_filter('contextual_help', array(&$this, 'show_help'), 10, 2); add_filter('current_screen', array(&$this, 'edit_current_screen')); - - // Add WPML hook to register description / alt text for translation - add_action('ngg_image_updated', array('nggGallery', 'RegisterString') ); - } function start_buffer() @@ -97,7 +93,7 @@ class nggAdminPanel{ if (preg_match_all("/<script.*wp-content.*jquery[-_\.](min\.)?js.*<\script>/", $html, $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { $old_script = array_shift($match); - if (strpos($old_script, NEXTGEN_GALLERY_PLUGIN_DIR) === FALSE) + if (strpos($old_script, NGG_PLUGIN_DIR) === FALSE) $html = str_replace($old_script, '', $html); } } @@ -107,7 +103,7 @@ class nggAdminPanel{ $detected_jquery_ui = TRUE; foreach ($matches as $match) { $old_script = array_shift($match); - if (strpos($old_script, NEXTGEN_GALLERY_PLUGIN_DIR) === FALSE) + if (strpos($old_script, NGG_PLUGIN_DIR) === FALSE) $html = str_replace($old_script, '', $html); } } @@ -160,8 +156,6 @@ class nggAdminPanel{ add_submenu_page( NGGFOLDER , __('Manage Galleries', 'nggallery'), __('Manage Galleries', 'nggallery'), 'NextGEN Manage gallery', 'nggallery-manage-gallery', array (&$this, 'show_menu')); add_submenu_page( NGGFOLDER , _n( 'Manage Albums', 'Albums', 1, 'nggallery' ), _n( 'Manage Albums', 'Manage Albums', 1, 'nggallery' ), 'NextGEN Edit album', 'nggallery-manage-album', array (&$this, 'show_menu')); add_submenu_page( NGGFOLDER , __('Manage Tags', 'nggallery'), __('Manage Tags', 'nggallery'), 'NextGEN Manage tags', 'nggallery-tags', array (&$this, 'show_menu')); -// if ( !is_multisite() || wpmu_site_admin() ) -// add_submenu_page( NGGFOLDER , __('Reset / Uninstall', 'nggallery'), __('Reset / Uninstall', 'nggallery'), 'activate_plugins', 'nggallery-setup', array (&$this, 'show_menu')); //register the column fields $this->register_columns(); @@ -172,7 +166,6 @@ class nggAdminPanel{ add_menu_page( _n( 'Gallery', 'Galleries', 1, 'nggallery' ), _n( 'Gallery', 'Galleries', 1, 'nggallery' ), 'nggallery-wpmu', NGGFOLDER, array (&$this, 'show_network_settings'), path_join(NGGALLERY_URLPATH, 'admin/images/nextgen_16_color.png') ); add_submenu_page( NGGFOLDER , __('Network settings', 'nggallery'), __('Network settings', 'nggallery'), 'nggallery-wpmu', NGGFOLDER, array (&$this, 'show_network_settings')); - // add_submenu_page( NGGFOLDER , __('Reset / Uninstall', 'nggallery'), __('Reset / Uninstall', 'nggallery'), 'activate_plugins', 'nggallery-setup', array (&$this, 'show_menu')); } /** @@ -251,10 +244,6 @@ class nggAdminPanel{ include_once ( dirname (__FILE__) . '/style.php' ); // nggallery_admin_style nggallery_admin_style(); break; - case "nggallery-setup" : - include_once ( dirname (__FILE__) . '/setup.php' ); // nggallery_admin_setup - nggallery_admin_setup(); - break; case "nggallery-roles" : include_once ( dirname (__FILE__) . '/roles.php' ); // nggallery_admin_roles nggallery_admin_roles(); @@ -361,6 +350,9 @@ class nggAdminPanel{ 'imageCount' => '1' ) ); wp_enqueue_script( 'shutter' ); + + // includes tooltip styling + wp_enqueue_style('nextgen_admin_page', $router->get_static_url('photocrati-nextgen_admin#nextgen_admin_page.css')); break; case "nggallery-manage-album" : wp_enqueue_script( 'jquery-ui-autocomplete' ); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/ajax.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/ajax.php index e2ac69298ed6b2496610dc205f0b2f7e703bfa11..f8461d15c264d0515e8642dae114d637dccbdb7d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/ajax.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/ajax.php @@ -186,10 +186,6 @@ function ngg_ajax_dashboard() { ngg_overview_news(); break; - case 'ngg_locale' : - ngg_locale(); - break; - case 'dashboard_plugins' : ngg_related_plugins(); break; @@ -239,9 +235,10 @@ function ngg_ajax_file_browser() { } // start from the default path - $root = trailingslashit ( WINABSPATH ); + $root = rtrim(ABSPATH, "\\/").DIRECTORY_SEPARATOR; + // get the current directory - $dir = trailingslashit ( urldecode($_POST['dir']) ); + $dir = rtrim( urldecode($_POST['dir']),"/\\").DIRECTORY_SEPARATOR; if( file_exists($root . $dir) ) { $files = scandir($root . $dir); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/album.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/album.php index db02e0eebab66bb2ca61c778d5cbbb81248922f1..7fbb33f0797b8c622f1cfd09621e3785bff2b16a 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/album.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/album.php @@ -70,19 +70,6 @@ class nggManageAlbum { return $this->_registry; } - /** - * Gets the album mapper - * @return C_Album_Mapper - */ - function get_album_mapper() - { - if (!isset($this->_album_mapper)) { - $this->_album_mapper = $this->get_registry()->get_utility('I_Album_Mapper'); - } - - return $this->_album_mapper; - } - /** * Init the album output * @@ -92,9 +79,6 @@ class nggManageAlbum { } function controller() { - global $nggdb; - - $this->currentID = isset($_REQUEST['act_album']) ? (int) $_REQUEST['act_album'] : 0 ; if (isset ($_POST['update']) || isset( $_POST['delete'] ) || isset( $_POST['add'] ) ) $this->processor(); @@ -103,12 +87,43 @@ class nggManageAlbum { $this->update_album(); // get first all galleries & albums - $this->albums = $nggdb->find_all_album(); - $this->galleries = $nggdb->find_all_galleries(); + $this->albums = array(); + foreach (C_Album_Mapper::get_instance()->find_all() as $album) { + $this->albums[$album->{$album->id_field}] = $album; + } + + $this->galleries = array(); + foreach (C_Gallery_Mapper::get_instance()->find_all() as $gallery) { + $this->galleries[$gallery->{$gallery->id_field}] = $gallery; + } $this->num_albums = count( $this->albums ); $this->num_galleries = count( $this->galleries ); + $this->output(); + } + + function _get_album($id) + { + $retval = NULL; + + if (isset($this->albums[$id])) { + $retval = $this->albums[$id]; + } + else $retval = C_Album_Mapper::get_instance()->find($id); + + return $retval; + } + + function _get_gallery($id) + { + $retval = NULL; + + if (isset($this->galleries[$id])) { + $retval = $this->galleries[$id]; + } + else $retval = C_Gallery_Mapper::get_instance()->find($id); + return $retval; } /** @@ -119,27 +134,23 @@ class nggManageAlbum { */ function _set_album_preview_pic($album) { - $set_previewpic = FALSE; - $sortorder = $album->sortorder; + $sortorder = array_merge($album->sortorder); while(!$album->previewpic) { // If the album is missing a preview pic, set one! - if (($first_entity = array_shift($sortorder))) { + if (($first_entity = array_pop($sortorder))) { // Is the first entity a gallery or album if (substr($first_entity, 0, 1) == 'a') { - $subalbum = $this->get_album_mapper()->find(substr($first_entity, 1)); + $subalbum = $this->_get_album(substr($first_entity, 1)); if ($subalbum->previewpic) { $album->previewpic = $subalbum->previewpic; - $set_previewpic = TRUE; } } else { - $gallery_mapper = $this->get_registry()->get_utility('I_Gallery_Mapper'); - $gallery = $gallery_mapper->find($first_entity); - if ($gallery->previewpic) { + $gallery = $this->_get_gallery($first_entity); + if ($gallery && $gallery->previewpic) { $album->previewpic = $gallery->previewpic; - $set_previewpic = TRUE; } } } @@ -162,23 +173,23 @@ class nggManageAlbum { $album = new stdClass(); $album->name = $_POST['newalbum']; - $result = $this->get_album_mapper()->save($album); - $this->currentID = $album->{$album->id_field}; - if (!$this->currentID) $this->currentID = 0; - - //hook for other plugins - do_action('ngg_add_album', $this->currentID); - - if ($result) - nggGallery::show_message(__('Update Successfully','nggallery')); + if (C_Album_Mapper::get_instance()->save($album)) { + $this->currentID = $_REQUEST['act_album'] = $album->{$album->id_field}; + $this->albums[$this->currentID] = $album; + do_action('ngg_add_album', $this->currentID); + nggGallery::show_message(__('Update Successfully','nggallery')); + } + else { + $this->currentID = $_REQUEST['act_album'] = 0; + } } - if ( isset($_POST['update']) && ($this->currentID > 0) ) { + else if ( isset($_POST['update']) && isset($_REQUEST['act_album']) && $this->currentID = intval($_REQUEST['act_album']) ) { $gid = array(); // Get the current album being updated - $album = $this->get_album_mapper()->find($this->currentID); + $album = $this->_get_album($this->currentID); // Get the list of galleries/sub-albums to be added to this album parse_str($_REQUEST['sortorder']); @@ -190,7 +201,7 @@ class nggManageAlbum { $this->_set_album_preview_pic($album); // Save the changes - $this->get_album_mapper()->save($album); + C_Album_Mapper::get_instance()->save($album); //hook for other plugins do_action('ngg_update_album_sortorder', $this->currentID); @@ -204,34 +215,36 @@ class nggManageAlbum { if (!nggGallery::current_user_can( 'NextGEN Add/Delete album' )) wp_die(__('Cheatin’ uh?')); - $result = nggdb::delete_album( $this->currentID ); + $this->currentID = $_REQUEST['act_album']; - //hook for other plugins - do_action('ngg_delete_album', $this->currentID); + if (C_Album_Mapper::get_instance()->destroy($this->currentID)) { + //hook for other plugins + do_action('ngg_delete_album', $this->currentID); - // jump back to main selection - $this->currentID = 0; + // jump back to main selection + $this->currentID = $_REQUEST['act_album'] = 0; - if ($result) nggGallery::show_message(__('Album deleted','nggallery')); + } + } } function update_album() { - global $wpdb, $nggdb; check_admin_referer('ngg_thickbox_form'); if (!nggGallery::current_user_can( 'NextGEN Edit album settings' )) wp_die(__('Cheatin’ uh?')); - $album = $this->get_album_mapper()->find($this->currentID, TRUE); + $this->currentID = $_REQUEST['act_album']; + $album = $this->_get_album($this->currentID); $album->name = stripslashes($_POST['album_name']); $album->albumdesc = stripslashes($_POST['album_desc']); $album->previewpic = (int)$_POST['previewpic']; $album->pageid = (int)$_POST['pageid']; - $result = $album->save(); + $result = C_Album_Mapper::get_instance()->save($album); //hook for other plugin to update the fields do_action('ngg_update_album', $this->currentID, $_POST); @@ -244,11 +257,12 @@ class nggManageAlbum { global $wpdb, $nggdb; - $this->currentID = isset($_REQUEST['act_album']) ? (int) $_REQUEST['act_album'] : 0 ; + if (isset($_REQUEST['act_album'])) $this->currentID = intval($_REQUEST['act_album']); //TODO:Code MUST be optimized, how to flag a used gallery better ? $used_list = $this->get_used_galleries(); + $album = $this->_get_album($this->currentID); ?> <script type="text/javascript"> @@ -398,14 +412,14 @@ function showDialog() { <option value="0" ><?php esc_html_e('No album selected', 'nggallery') ?></option> <?php if( is_array($this->albums) ) { - foreach($this->albums as $album) { - $selected = ($this->currentID == $album->id) ? 'selected="selected" ' : ''; - echo '<option value="' . $album->id . '" ' . $selected . '>' . $album->id . ' - ' . esc_attr( $album->name ) . '</option>'."\n"; + foreach($this->albums as $a) { + $selected = ($this->currentID == $a->id) ? 'selected="selected" ' : ''; + echo '<option value="' . $a->id . '" ' . $selected . '>' . $a->id . ' - ' . esc_attr( $a->name ) . '</option>'."\n"; } } ?> </select> - <?php if ($this->currentID > 0){ ?> + <?php if ($album && $this->currentID){ ?> <input class="button-primary" type="submit" name="update" value="<?php esc_attr_e('Update', 'nggallery'); ?>"/> <?php if(nggGallery::current_user_can( 'NextGEN Edit album settings' )) { ?> <input class="button-secondary" type="submit" name="showThickbox" value="<?php esc_attr_e( 'Edit album', 'nggallery'); ?>" onclick="showDialog(); return false;" /> @@ -447,8 +461,8 @@ function showDialog() { <div id="albumContainer" class="widget-holder"> <?php if( is_array( $this->albums ) ) { - foreach($this->albums as $album) { - $this->get_container('a' . $album->id); + foreach($this->albums as $a) { + $this->get_container('a' . $a->id); } } ?> @@ -465,7 +479,7 @@ function showDialog() { if( is_array( $this->galleries ) ) { //get the array of galleries - $sort_array = $this->currentID > 0 ? (array) $this->albums[$this->currentID]->galleries : array() ; + $sort_array = $album ? $album->sortorder : array(); foreach($this->galleries as $gallery) { if (!in_array($gallery->gid, $sort_array)) { if (in_array($gallery->gid,$used_list)) @@ -481,17 +495,13 @@ function showDialog() { <!-- /#target-album --> <div class="widget target-album widget-left"> - - <?php - if ($this->currentID > 0){ - $album = $this->albums[$this->currentID]; - ?> + <?php if ($album && $this->currentID){ ?> <div class="widget-top"> <h3><?php esc_html_e('Album ID', 'nggallery'); ?> <?php echo $album->id . ' : ' . esc_html( $album->name ); ?> </h3> </div> <div id="galleryContainer" class="widget-holder target"> <?php - $sort_array = (array) $this->albums[$this->currentID]->galleries; + $sort_array = $album->sortorder; foreach($sort_array as $galleryid) { $this->get_container($galleryid, false); } @@ -512,7 +522,7 @@ function showDialog() { </div><!-- /#container --> </div><!-- /#wrap --> -<?php if ($this->currentID > 0) : ?> +<?php if ($album && $this->currentID): ?> <!-- #editalbum --> <div id="editalbum" style="display: none;" > <form id="form-edit-album" method="POST" accept-charset="utf-8"> @@ -601,7 +611,7 @@ function showDialog() { // if the id started with a 'a', then it's a sub album if (substr( $id, 0, 1) == 'a') { - if ( !$album = $this->albums[ substr( $id, 1) ] ) + if ( !$album = $this->_get_album(substr( $id, 1))) return; $obj['id'] = $album->id; @@ -620,7 +630,7 @@ function showDialog() { $image = $nggdb->find_image( $album->previewpic ); if ($image) $thumbURL = @add_query_arg('timestamp', time(), $image->thumbURL); } - $preview_image = $thumbURL ? '<div class="inlinepicture"><img rel="'.$album->previewpic.'" src="' . esc_url( $thumbURL ). '" /></div>' : ''; + $preview_image = $thumbURL ? '<div class="inlinepicture"><img rel="'.$album->previewpic.'" src="' . nextgen_esc_url( $thumbURL ). '" /></div>' : ''; } // this indicates that we have a album container @@ -647,7 +657,7 @@ function showDialog() { $image = $nggdb->find_image( $gallery->previewpic ); $thumbURL = @add_query_arg('timestamp', time(), $image->thumbURL); } - $preview_image = ( !is_null($thumbURL) ) ? '<div class="inlinepicture"><img rel="'.$gallery->previewpic.'" src="' . esc_url( $thumbURL ). '" /></div>' : ''; + $preview_image = ( !is_null($thumbURL) ) ? '<div class="inlinepicture"><img rel="'.$gallery->previewpic.'" src="' . nextgen_esc_url( $thumbURL ). '" /></div>' : ''; } $prefix = ''; @@ -683,9 +693,8 @@ function showDialog() { $used = array(); if ($this->albums) { - foreach($this->albums as $key => $value) { - $sort_array = $this->albums[$key]->galleries; - foreach($sort_array as $galleryid) { + foreach($this->albums as $album) { + foreach($album->sortorder as $galleryid) { if (!in_array($galleryid, $used)) $used[] = $galleryid; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/menu.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/menu.css index f59d26c3e90d4e8f0c5649d6b51040c166200506..3fe128b9236f8563a7cc415904fc24036f550aa0 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/menu.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/menu.css @@ -1,3 +1,3 @@ -#icon-nextgen-gallery { - background:url("../images/nextgen_32_grey.png") no-repeat scroll 1px 1px transparent; +#icon-nextgen-gallery { + background:url("../images/nextgen_32_grey.png") no-repeat scroll 1px 1px transparent; } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggColorPicker.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggColorPicker.css index f772424108442d5df64fcde0809f1c985ed4910f..6b7775fb962c18c35924800f292780bb63b8d11c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggColorPicker.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggColorPicker.css @@ -1,14 +1,14 @@ -#colorSelector{ - background:transparent url(../images/select.png) repeat scroll 0 0; - height:36px; - position:relative; - width:36px; -} -#colorSelector div{ - background:transparent url(../images/select.png) repeat scroll center center; - height:30px; - left:3px; - position:absolute; - top:3px; - width:30px; +#colorSelector{ + background:transparent url(../images/select.png) repeat scroll 0 0; + height:36px; + position:relative; + width:36px; +} +#colorSelector div{ + background:transparent url(../images/select.png) repeat scroll center center; + height:30px; + left:3px; + position:absolute; + top:3px; + width:30px; } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggSorter.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggSorter.css index 73a0ed8300c40e17b51fde88bd671be9f3ae3a4c..e0d61b9b451fe5135e010e88001de81e3ccff698 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggSorter.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggSorter.css @@ -1,76 +1,76 @@ -.imageBox,.imageBoxHighlighted{ - width:130px; /* Total width of each image box */ - height:160px; /* Total height of each image box */ - float:left; -} -.imageBox_theImage{ - width:110px; /* Width of image */ - height:125px; /* Height of image */ - - /* - Don't change these values * - */ - background-position: center; - background-repeat: no-repeat; - margin: 0 auto; - margin-bottom:2px; -} - -.imageBox .imageBox_theImage{ - border:1px solid #DDD; /* Border color for not selected images */ - padding:2px; -} -.imageBoxHighlighted .imageBox_theImage{ - border:3px solid #316AC5; /* Border color for selected image */ - padding:0px; - -} -.imageBoxHighlighted span{ /* Title of selected image */ - background-color: #316AC5; - color:#FFFFFF; - padding:2px; -} - -.imageBox_label{ /* Title of images - both selected and not selected */ - text-align:center; - font-family: arial; - font-size:11px; - padding-top:2px; - margin: 0 auto; -} - -/* -DIV that indicates where the dragged image will be placed -*/ -#insertionMarker{ - height:150px; - width:6px; - position:absolute; -} - -#insertionMarkerLine{ - width:6px; /* No need to change this value */ - height:145px; /* To adjust the height of the div that indicates where the dragged image will be dropped */ - -} - -#insertionMarker img{ - float:left; -} - -/* -DIV that shows the image as you drag it -*/ -#dragDropContent{ - - opacity:0.4; /* 40 % opacity */ - filter:alpha(opacity=40); /* 40 % opacity */ - - /* - No need to change these three values - */ - position:absolute; - z-index:10; - display:none; - +.imageBox,.imageBoxHighlighted{ + width:130px; /* Total width of each image box */ + height:160px; /* Total height of each image box */ + float:left; +} +.imageBox_theImage{ + width:110px; /* Width of image */ + height:125px; /* Height of image */ + + /* + Don't change these values * + */ + background-position: center; + background-repeat: no-repeat; + margin: 0 auto; + margin-bottom:2px; +} + +.imageBox .imageBox_theImage{ + border:1px solid #DDD; /* Border color for not selected images */ + padding:2px; +} +.imageBoxHighlighted .imageBox_theImage{ + border:3px solid #316AC5; /* Border color for selected image */ + padding:0px; + +} +.imageBoxHighlighted span{ /* Title of selected image */ + background-color: #316AC5; + color:#FFFFFF; + padding:2px; +} + +.imageBox_label{ /* Title of images - both selected and not selected */ + text-align:center; + font-family: arial; + font-size:11px; + padding-top:2px; + margin: 0 auto; +} + +/* +DIV that indicates where the dragged image will be placed +*/ +#insertionMarker{ + height:150px; + width:6px; + position:absolute; +} + +#insertionMarkerLine{ + width:6px; /* No need to change this value */ + height:145px; /* To adjust the height of the div that indicates where the dragged image will be dropped */ + +} + +#insertionMarker img{ + float:left; +} + +/* +DIV that shows the image as you drag it +*/ +#dragDropContent{ + + opacity:0.4; /* 40 % opacity */ + filter:alpha(opacity=40); /* 40 % opacity */ + + /* + No need to change these three values + */ + position:absolute; + z-index:10; + display:none; + } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css index b3cc7f27779e7386234e8f3d695d185aaaefcfa5..cb0202fad473e7448589dec7f8237e0613457597 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css @@ -1,458 +1,528 @@ -/* -** NextGEN Gallery Style for Wordpress 3.3 -*/ - -#iframely h2.title { - display: none; -} - -/* SETTINGS FOR Overview Gallery */ - -#newversion { - border-color:#CCCCCC; - border-style:solid; - border-width:1px; - margin-right:7px; - margin-top:10px; - padding:2px; -} - -.ngg-dashboard-widget ul.settings span { - padding-left : 10px; - color:#2583AD; - font-weight:bold; -} - -.ngg-overview .postbox .handlediv { - float:right; - height:24px; - width:24px; -} - -.warning { - color: #9F6000; - background-color: #FEEFB3; - border: 1px solid; - margin: 5px 0px; - padding:5px; -} - -#donator_message { - margin:5px 0 15px; - background-color:#BDE5F8; - border-color:#00529B; - -moz-border-radius-bottomleft:3px; - -moz-border-radius-bottomright:3px; - -moz-border-radius-topleft:3px; - -moz-border-radius-topright:3px; - border-style:solid; - border-width:1px; - margin:5px 15px 2px; - padding:0 0.6em; -} - -#donator_message p{ - line-height:1; - margin:0.5em 0; - padding:2px; - padding-bottom:10px; -} - -#donator_message span{ - padding-top:10px; - float:right; -} - -#plugin_check img { - float: right; -} - -#plugin_check p.message { - font-size: 90%; - color: #666; -} -/* SETTING FOR FLASH UPLOAD BUTTON */ -.swfupload { - position:absolute; - z-index:1; - vertical-align:top; -} - -/* SETTINGS FOR THE OPTIONS TABLE */ -.ngg-options th { - width:22%; -} - -a.switch-expert { - text-decoration:none; -} - -/* WATERMARK */ -#wm-preview { - float:right; - font-size:90%; - width:35%; - border-color:#EBEBEB rgb(204, 204, 204) rgb(204, 204, 204) rgb(235, 235, 235); - border-style:solid; - border-width:1px; - margin-bottom:10px; - margin-left:10px; - margin-right:8px; - padding:2px; -} -#wm-preview h3{ - background:#F9F9F9 none repeat scroll 0%; - font-size:14px; - font-weight:bold; - margin:0pt 0pt 10px; - padding:8px 5px; -} - -#wm-position { - width:100%; - margin-left:40px; -} - -.wm-table { - border-collapse:collapse; - margin-top:1em; - width: 60%; - clear:none; -} -.wm-table td { - border-bottom:8px solid #FFFFFF; - line-height:20px; - margin-bottom:9px; - padding:10px; -} -.wm-table th { - border-bottom:8px solid #FFFFFF; - padding:10px; - text-align:left; -} -.wm-table tr { - background:#F9F9F9 none repeat scroll 0%; -} - -/* SETTINGS FOR MANAGE TABLE */ - -div#poststuff #gallerydiv { - cursor:pointer; -} - -p#ngg-inlinebutton { - float:right; - margin:0pt; - position:relative; - top:-25pt; -} - -.fixed tbody th.column-cb { - padding:7px 0 22px; -} - -.fixed .column-thumbnail{ - width:85px; -} - -.fixed .column-thumbnail img{ - max-height:80px; - max-width:80px; -} - -.fixed .column-id { - width: 5em; -} - -.fixed .column-title { - width: 25%; -} - -.fixed .column-description { - width: 40%; -} - -.fixed .column-exclude, .fixed .column-action, .fixed .column-delete { - width: 10%; -} - -/* SETTINGS FOR PROGRESS BAR */ - -div .progressborder { - border:1px solid #DDDDDD; - display: block; - height: 30px; - background-color: #464646; - width: 100%; - margin-top: 15px; - margin-bottom: 15px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; -} - -div .progressbar { - border: medium none ; - display: block; - height: 30px; - background-color: #D54E21; - width: 0%; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; -} - -div .progressbar span { - display: inline; - position: absolute; - color: white; - font-weight: bold; - padding: 5px 0 0 5px; -} - -.show_details -{ - height: 16px; - line-height: 20px; - overflow: hidden; - min-width: 8em; - padding: 3px; - cursor:pointer; -} - -.show_details span -{ - border-bottom:1px solid #999; - white-space:pre; -} -.show_details:hover -{ - height: auto; - overflow: visible; - border: 1px solid #999; -} - - /* SETTINGS FOR ALBUM PAGE */ - -.albumnav select[name="act_album"] { - width:150px; -} - -.albumnav span { - padding-left: 50px; -} - -#editalbum select[name='pageid'] { - width: 95%; -} - -div .groupItem -{ - cursor: move; - width: 295px; - padding: 5px; - line-height: 1.5; -} - -div .innerhandle { - background-color:#FBFBFB; -} - -.groupItem .item_top -{ - background-color:#2683AE; - color: #FFFFFF; - font-weight:bold; - line-height: 28px; - height: 28px; - padding: 0 5px; - -moz-border-radius: 3px; - -khtml-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} - -.groupItem .album_obj -{ - background-color:#D54E21; -} - -.groupItem .item_top a -{ - color:#FFFFFF; - float:right; - text-decoration: none; -} - -.groupItem .item_top a:hover -{ - color:#FFFFFF; -} - -.itemContent { - border-color:#DFDFDF; - border-style:none solid solid; - border-width:0 1px 1px; - padding:2px 0 20px 2px; -} - -.itemContent p { - border: 0; - margin: 0; - padding: 0; -} - -.inlinepicture -{ - float:left; - display:inline; - margin:0pt; - padding:0pt 3px 1px; -} - -.inlinepicture img -{ - margin:3px; - max-height:60px; -} - -.sort_placeholder -{ - border:1px dashed #bba !important; - margin: 5px; - background: #F9F9F9; -} - -.container { - margin-top: 10px; -} - -.target-album { - margin:10px 685px 10px 10px; -} - -.widget-right { - float:right; - margin:0pt 10px; - width:315px; -} - -.widget-holder { - min-height: 400px; - padding-top:1px; -} - -.target { - background-color:#F1F1F1; -} - -div.widget-top h3 { - text-align:center; - line-height:25px; - margin: 0; - padding: 5px 12px; - font-size: 13px; -} - -div.widget-top { - text-shadow:0 1px 0 #FFFFFF; - background-repeat: repeat-x; - background-position: 0 0; - font-size: 13px; -} - -.ui-autocomplete-start { background-position: 99% center; } - -/* SETTINGS FOR SORT GALLERY */ - -#sortGallery { - position:relative; -} - -p#sortButton{ - margin:0; - position:absolute; - right:0; - top:0; -} - -.imageBox,.imageBoxHighlighted{ - width:130px; /* Total width of each image box */ - height:160px; /* Total height of each image box */ - float:left; - overflow: hidden; - text-overflow: ellipsis; - padding: 5px; -} -.imageBox_theImage{ - width:110px; /* Width of image */ - height:125px; /* Height of image */ - - background-position: center; - background-repeat: no-repeat; - margin: 0 auto; - margin-bottom:2px; -} - -.imageBox_label{ /* Title of images - both selected and not selected */ - text-align:center; - font-family: arial; - font-size:11px; - padding-top:2px; - margin: 0 auto; -} - -/* -DIV that indicates where the dragged image will be placed -*/ - -#insertionMarker{ - height:150px; - width:6px; - position:absolute; -} - -#insertionMarkerLine{ - width:6px; /* No need to change this value */ - height:145px; /* To adjust the height of the div that indicates where the dragged image will be dropped */ - -} - -#insertionMarker img{ - float:left; -} - -/* -DIV that shows the image as you drag it -*/ - -#dragDropContent{ - - opacity:0.4; /* 40 % opacity */ - filter:alpha(opacity=40); /* 40 % opacity */ - - /* - No need to change these three values - */ - position:absolute; - z-index:10; - display:none; - -} - -/* UPGRADE PAGE */ - -.error_inline { - background:#FFEBE8 none repeat scroll 0%; - border:1px solid #CC0000; - margin:5px auto; - padding:10px; -} - -/* ABOUT PAGE */ -.ngg-list { - font-size:11px; - margin-left:15px; - list-style-position:inside; - list-style-type:disc; -} +/* +** NextGEN Gallery Style for Wordpress 3.3 +*/ + +#iframely h2.title { + display: none; +} + +/* SETTINGS FOR Overview Gallery */ + +#newversion { + border-color:#CCCCCC; + border-style:solid; + border-width:1px; + margin-right:7px; + margin-top:10px; + padding:2px; +} + +.ngg-dashboard-widget ul.settings span { + padding-left : 10px; + color:#2583AD; + font-weight:bold; +} + +.ngg-overview .postbox .handlediv { + float:right; + height:24px; + width:24px; +} + +.warning { + color: #9F6000; + background-color: #FEEFB3; + border: 1px solid; + margin: 5px 0px; + padding:5px; +} + +#donator_message { + margin:5px 0 15px; + background-color:#BDE5F8; + border-color:#00529B; + -moz-border-radius-bottomleft:3px; + -moz-border-radius-bottomright:3px; + -moz-border-radius-topleft:3px; + -moz-border-radius-topright:3px; + border-style:solid; + border-width:1px; + margin:5px 15px 2px; + padding:0 0.6em; +} + +#donator_message p{ + line-height:1; + margin:0.5em 0; + padding:2px; + padding-bottom:10px; +} + +#donator_message span{ + padding-top:10px; + float:right; +} + +#plugin_check img { + float: right; +} + +#plugin_check p.message { + font-size: 90%; + color: #666; +} +/* SETTING FOR FLASH UPLOAD BUTTON */ +.swfupload { + position:absolute; + z-index:1; + vertical-align:top; +} + +/* SETTINGS FOR THE OPTIONS TABLE */ +.ngg-options th { + width:22%; +} + +a.switch-expert { + text-decoration:none; +} + +/* WATERMARK */ +#wm-preview { + float:right; + font-size:90%; + width:35%; + border-color:#EBEBEB rgb(204, 204, 204) rgb(204, 204, 204) rgb(235, 235, 235); + border-style:solid; + border-width:1px; + margin-bottom:10px; + margin-left:10px; + margin-right:8px; + padding:2px; +} +#wm-preview h3{ + background:#F9F9F9 none repeat scroll 0%; + font-size:14px; + font-weight:bold; + margin:0pt 0pt 10px; + padding:8px 5px; +} + +#wm-position { + width:100%; + margin-left:40px; +} + +.wm-table { + border-collapse:collapse; + margin-top:1em; + width: 60%; + clear:none; +} +.wm-table td { + border-bottom:8px solid #FFFFFF; + line-height:20px; + margin-bottom:9px; + padding:10px; +} +.wm-table th { + border-bottom:8px solid #FFFFFF; + padding:10px; + text-align:left; +} +.wm-table tr { + background:#F9F9F9 none repeat scroll 0%; +} + +/* SETTINGS FOR MANAGE TABLE */ + +div#poststuff #gallerydiv { + cursor:pointer; +} + +p#ngg-inlinebutton { + float:right; + margin:0pt; + position:relative; + top:-25pt; +} + +#gallery_fields { + width: 100%; +} + +#gallery_fields td{ + padding: 5px; + min-width: 105px; +} + +#gallery_fields input[type=text], +#gallery_fields textarea, +#gallery_fields select { + min-width: 220px; + width: 99%; +} + +#ngg-listimages .row_actions, +#ngg-listimages .row_actions td { + border-top: none; + /* background-color: #F9F9F9; */ + padding-top: 0px; + padding-bottom: 0px; +} + +#ngg-listimages .row_actions.alternate, +#ngg-listimages .row_actions.alternate td { + /* background-color: #FCFCFC; */ +} + +#ngg-listimages .row-actions { + padding-left: 0px; + margin-bottom: -2px; + position: relative; + bottom: 4px; +} + +#ngg-listimages .iedit, +#ngg-listimages .iedit td, +#ngg-listimages .iedit th { + border: none; +} + +#ngg-listimages .iedit td { + padding-top: 8px; +} + +#ngg-listimages .column select { + width: 100%; +} + +#ngg-listimages .column-1 input { + margin: 0 0 0 8px; +} + +#ngg-listimages .column-1, +#ngg-listimages .column-2 { + width: 3%; + min-width: 33px; +} + +#ngg-listimages .column-3 { + min-width: 80px; + width: 8%; +} + +#ngg-listimages .column-3 .thumb { + max-height: 80px; + max-width: 80px; +} + +#ngg-listimages .column-4 { + width: 22%; + max-width: 220px; + +} + +#ngg-listimages .column-4 .meta { + font-size: 11px; +} + +#ngg-listimages .column-4 label input[type=checkbox] { + position: relative; + top: -2px; +} + +#ngg-listimages .column-5 input[type=text], +#ngg-listimages .column-5 textarea, +#ngg-listimages .column-6 textarea { + width: 100%; +} + +#ngg-listimages .column-5 textarea { + height: 57px; +} + +#ngg-listimages .column-6 textarea { + height: 80px; +} + +/* SETTINGS FOR PROGRESS BAR */ + +div .progressborder { + border:1px solid #DDDDDD; + display: block; + height: 30px; + background-color: #464646; + width: 100%; + margin-top: 15px; + margin-bottom: 15px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +div .progressbar { + border: medium none ; + display: block; + height: 30px; + background-color: #D54E21; + width: 0%; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +div .progressbar span { + display: inline; + position: absolute; + color: white; + font-weight: bold; + padding: 5px 0 0 5px; +} + +.show_details +{ + height: 16px; + line-height: 20px; + overflow: hidden; + min-width: 8em; + padding: 3px; + cursor:pointer; +} + +.show_details span +{ + border-bottom:1px solid #999; + white-space:pre; +} +.show_details:hover +{ + height: auto; + overflow: visible; + border: 1px solid #999; +} + + /* SETTINGS FOR ALBUM PAGE */ + +.albumnav select[name="act_album"] { + width:150px; +} + +.albumnav span { + padding-left: 50px; +} + +#editalbum select[name='pageid'] { + width: 95%; +} + +div .groupItem +{ + cursor: move; + width: 295px; + padding: 5px; + line-height: 1.5; +} + +div .innerhandle { + background-color:#FBFBFB; +} + +.groupItem .item_top +{ + background-color:#2683AE; + color: #FFFFFF; + font-weight:bold; + line-height: 28px; + height: 28px; + padding: 0 5px; + -moz-border-radius: 3px; + -khtml-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.groupItem .album_obj +{ + background-color:#D54E21; +} + +.groupItem .item_top a +{ + color:#FFFFFF; + float:right; + text-decoration: none; +} + +.groupItem .item_top a:hover +{ + color:#FFFFFF; +} + +.itemContent { + border-color:#DFDFDF; + border-style:none solid solid; + border-width:0 1px 1px; + padding:2px 0 20px 2px; +} + +.itemContent p { + border: 0; + margin: 0; + padding: 0; +} + +.inlinepicture +{ + float:left; + display:inline; + margin:0pt; + padding:0pt 3px 1px; +} + +.inlinepicture img +{ + margin:3px; + max-height:60px; +} + +.sort_placeholder +{ + border:1px dashed #bba !important; + margin: 5px; + background: #F9F9F9; +} + +.container { + margin-top: 10px; +} + +.target-album { + margin:10px 685px 10px 10px; +} + +.widget-right { + float:right; + margin:0pt 10px; + width:315px; +} + +.widget-holder { + min-height: 400px; + padding-top:1px; +} + +.target { + background-color:#F1F1F1; +} + +div.widget-top h3 { + text-align:center; + line-height:25px; + margin: 0; + padding: 5px 12px; + font-size: 13px; +} + +div.widget-top { + text-shadow:0 1px 0 #FFFFFF; + background-repeat: repeat-x; + background-position: 0 0; + font-size: 13px; +} + +.ui-autocomplete-start { background-position: 99% center; } + +/* SETTINGS FOR SORT GALLERY */ + +#sortGallery { + position:relative; +} + +p#sortButton{ + margin:0; + position:absolute; + right:0; + top:0; +} + +.imageBox,.imageBoxHighlighted{ + width:130px; /* Total width of each image box */ + height:160px; /* Total height of each image box */ + float:left; + overflow: hidden; + text-overflow: ellipsis; + padding: 5px; +} +.imageBox_theImage{ + width:110px; /* Width of image */ + height:125px; /* Height of image */ + + background-position: center; + background-repeat: no-repeat; + margin: 0 auto; + margin-bottom:2px; +} + +.imageBox_label{ /* Title of images - both selected and not selected */ + text-align:center; + font-family: arial; + font-size:11px; + padding-top:2px; + margin: 0 auto; +} + +/* +DIV that indicates where the dragged image will be placed +*/ + +#insertionMarker{ + height:150px; + width:6px; + position:absolute; +} + +#insertionMarkerLine{ + width:6px; /* No need to change this value */ + height:145px; /* To adjust the height of the div that indicates where the dragged image will be dropped */ + +} + +#insertionMarker img{ + float:left; +} + +/* +DIV that shows the image as you drag it +*/ + +#dragDropContent{ + + opacity:0.4; /* 40 % opacity */ + filter:alpha(opacity=40); /* 40 % opacity */ + + /* + No need to change these three values + */ + position:absolute; + z-index:10; + display:none; + +} + +/* UPGRADE PAGE */ + +.error_inline { + background:#FFEBE8 none repeat scroll 0%; + border:1px solid #CC0000; + margin:5px auto; + padding:10px; +} + +/* ABOUT PAGE */ +.ngg-list { + font-size:11px; + margin-left:15px; + list-style-position:inside; + list-style-type:disc; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/tags-admin.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/tags-admin.css index eec3fbe4109e5633babdc6aaef407dfd2ff6a5d9..a7f5e273e4c0de92a0c31cbfc026de0ded178103 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/tags-admin.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/css/tags-admin.css @@ -1,10 +1,10 @@ -.ngg_wrap .auto_list{width:98%;margin:3px 0;padding:3px 5px;} -.ngg_wrap .list_tags {width:240px;vertical-align:top;} -.ngg_wrap .forms_manage {vertical-align:top;} -.ngg_wrap .forms_manage h3 {margin-bottom:5px;} -.ngg_wrap .forms_manage .form-table {margin-top:0;} -.ngg_wrap .sort_order h3 {margin:0;} -.ngg_wrap #ajax_area_tagslist {} -.ngg_wrap #ajax_area_tagslist ul{list-style:square;margin:10px 0 10px 20px;padding:0;} -.ngg_wrap #ajax_area_tagslist ul li{margin:0;padding:0;line-height:1.4;} +.ngg_wrap .auto_list{width:98%;margin:3px 0;padding:3px 5px;} +.ngg_wrap .list_tags {width:240px;vertical-align:top;} +.ngg_wrap .forms_manage {vertical-align:top;} +.ngg_wrap .forms_manage h3 {margin-bottom:5px;} +.ngg_wrap .forms_manage .form-table {margin-top:0;} +.ngg_wrap .sort_order h3 {margin:0;} +.ngg_wrap #ajax_area_tagslist {} +.ngg_wrap #ajax_area_tagslist ul{list-style:square;margin:10px 0 10px 20px;padding:0;} +.ngg_wrap #ajax_area_tagslist ul li{margin:0;padding:0;line-height:1.4;} .ngg_wrap #ajax_area_tagslist ul li span{cursor:pointer;} \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php index 3722f6a6686b88b618a2e595f8e9c8a67fc6a4a0..33deff75b97dd559afc45d72a76e75351493dad4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php @@ -145,7 +145,7 @@ if ($thumbnail_crop_frame != null) <table width="98%" align="center" style="border:1px solid #DADADA"> <tr> <td rowspan="3" valign="middle" align="center" width="350" style="background-color:#DADADA;"> - <img src="<?php echo esc_url( $preview_image ); ?>" alt="" id="imageToEdit" /> + <img src="<?php echo nextgen_esc_url( $preview_image ); ?>" alt="" id="imageToEdit" /> </td> <td width="300" style="background-color : #DADADA;"> <small style="margin-left:6px; display:block;"><?php esc_html_e('Select the area for the thumbnail from the picture on the left.', 'nggallery'); ?></small> @@ -154,10 +154,10 @@ if ($thumbnail_crop_frame != null) <tr> <td align="center" width="300" height="320"> <div id="previewNewThumb" style="display:none;width:<?php echo $WidthHtmlPrev; ?>px;height:<?php echo $HeightHtmlPrev; ?>px;overflow:hidden; margin-left:5px;"> - <img src="<?php echo esc_url( $preview_image ); ?>" id="imageToEditPreview" /> + <img src="<?php echo nextgen_esc_url( $preview_image ); ?>" id="imageToEditPreview" /> </div> <div id="actualThumb"> - <img src="<?php echo esc_url( $picture->thumbURL ); ?>?<?php echo time()?>" /> + <img src="<?php echo nextgen_esc_url( $picture->thumbURL ); ?>?<?php echo time()?>" /> </div> </td> </tr> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/functions.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/functions.php index c5f1a32563f0a4902cc86c713b28ae3d27ab7bc4..b45196d3f93bf733f5139c28f5b3bf2240bbda37 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/functions.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/functions.php @@ -31,7 +31,7 @@ class nggAdmin{ //cleanup pathname $name = sanitize_file_name( sanitize_title($title) ); $name = apply_filters('ngg_gallery_name', $name); - $nggRoot = WINABSPATH . $defaultpath; + $nggRoot = ABSPATH . $defaultpath; $txt = ''; // No gallery name ? @@ -59,11 +59,11 @@ class nggAdmin{ } // 1. Check for existing folder - if ( is_dir(WINABSPATH . $defaultpath . $name ) && !(SAFE_MODE) ) { + if ( is_dir(ABSPATH . $defaultpath . $name ) && !(SAFE_MODE) ) { $suffix = 1; do { $alt_name = substr ($name, 0, 200 - ( strlen( $suffix ) + 1 ) ) . "_$suffix"; - $dir_check = is_dir(WINABSPATH . $defaultpath . $alt_name ); + $dir_check = is_dir(ABSPATH . $defaultpath . $alt_name ); $suffix++; } while ( $dir_check ); $name = $alt_name; @@ -72,16 +72,16 @@ class nggAdmin{ $nggpath = $defaultpath . $name; // 2. Create new gallery folder - if ( !wp_mkdir_p (WINABSPATH . $nggpath) ) + if ( !wp_mkdir_p (ABSPATH . $nggpath) ) $txt = __('Unable to create directory ', 'nggallery') . esc_html( $nggpath ) . '!<br />'; // 3. Check folder permission - if ( !is_writeable(WINABSPATH . $nggpath ) ) + if ( !is_writeable(ABSPATH . $nggpath ) ) $txt .= __('Directory', 'nggallery').' <strong>' . esc_html( $nggpath ) . '</strong> '.__('is not writeable !', 'nggallery').'<br />'; // 4. Now create thumbnail folder inside - if ( !is_dir(WINABSPATH . $nggpath . '/thumbs') ) { - if ( !wp_mkdir_p ( WINABSPATH . $nggpath . '/thumbs') ) + if ( !is_dir(ABSPATH . $nggpath . '/thumbs') ) { + if ( !wp_mkdir_p ( ABSPATH . $nggpath . '/thumbs') ) $txt .= __('Unable to create directory ', 'nggallery').' <strong>' . esc_html( $nggpath ) . '/thumbs !</strong>'; } @@ -96,8 +96,8 @@ class nggAdmin{ if ( !empty($txt) ) { if (SAFE_MODE) { // for safe_mode , better delete folder, both folder must be created manually - @rmdir(WINABSPATH . $nggpath . '/thumbs'); - @rmdir(WINABSPATH . $nggpath); + @rmdir(ABSPATH . $nggpath . '/thumbs'); + @rmdir(ABSPATH . $nggpath); } if ($output) nggGallery::show_error($txt); return false; @@ -124,109 +124,6 @@ class nggAdmin{ return true; } - /** - * nggAdmin::import_gallery() - * TODO: Check permission of existing thumb folder & images - * - * @class nggAdmin - * @param string $galleryfolder contains relative path to the gallery itself - * @return void - */ - function import_gallery($galleryfolder) { - - global $wpdb, $user_ID; - - // get the current user ID - get_currentuserinfo(); - - $created_msg = ''; - - // remove trailing slash at the end, if somebody use it - $galleryfolder = untrailingslashit($galleryfolder); - $gallerypath = WINABSPATH . $galleryfolder; - - if (!is_dir($gallerypath)) { - nggGallery::show_error(__('Directory', 'nggallery').' <strong>' . esc_html( $gallerypath ) .'</strong> '.__('doesn`t exist!', 'nggallery')); - return ; - } - - // read list of images - $new_imageslist = nggAdmin::scandir($gallerypath); - - if (empty($new_imageslist)) { - nggGallery::show_message(__('Directory', 'nggallery').' <strong>' . esc_html( $gallerypath ) . '</strong> '.__('contains no pictures', 'nggallery')); - return; - } - - // check & create thumbnail folder - if ( !nggGallery::get_thumbnail_folder($gallerypath) ) - return; - - // take folder name as gallery name - $galleryname = basename($galleryfolder); - $galleryname = apply_filters('ngg_gallery_name', $galleryname); - - // check for existing gallery folder - $gallery_id = $wpdb->get_var("SELECT gid FROM $wpdb->nggallery WHERE path = '$galleryfolder' "); - - if (!$gallery_id) { - // now add the gallery to the database - $gallery_id = nggdb::add_gallery( $galleryname, $galleryfolder, '', 0, 0, $user_ID ); - if (!$gallery_id) { - nggGallery::show_error(__('Database error. Could not add gallery!','nggallery')); - return; - } - else { - do_action('ngg_created_new_gallery', $gallery_id); - } - $created_msg = _n( 'Gallery', 'Galleries', 1, 'nggallery' ) . ' <strong>' . esc_html( $galleryname ) . '</strong> ' . __('successfully created!','nggallery') . '<br />'; - } - - // Look for existing image list - $old_imageslist = $wpdb->get_col("SELECT filename FROM $wpdb->nggpictures WHERE galleryid = '$gallery_id' "); - - // if no images are there, create empty array - if ($old_imageslist == NULL) - $old_imageslist = array(); - - // check difference - $new_images = array_diff($new_imageslist, $old_imageslist); - - // all images must be valid files - foreach($new_images as $key => $picture) { - - // filter function to rename/change/modify image before - $picture = apply_filters('ngg_pre_add_new_image', $picture, $gallery_id); - $new_images[$key] = $picture; - - if (!@getimagesize($gallerypath . '/' . $picture) ) { - unset($new_images[$key]); - @unlink($gallerypath . '/' . $picture); - } - } - - // add images to database - $image_ids = nggAdmin::add_Images($gallery_id, $new_images); - do_action('ngg_after_new_images_added', $gallery_id, $image_ids); - - //add the preview image if needed - nggAdmin::set_gallery_preview ( $gallery_id ); - - // now create thumbnails - nggAdmin::do_ajax_operation( 'create_thumbnail' , $image_ids, __('Create new thumbnails','nggallery') ); - - //TODO:Message will not shown, because AJAX routine require more time, message should be passed to AJAX - $message = $created_msg . count($image_ids) .__(' picture(s) successfully added','nggallery'); - $message .= ' [<a href="' . admin_url() . 'admin.php?page=nggallery-manage-gallery&mode=edit&gid=' . $gallery_id . '" >'; - $message .= __('Edit gallery','nggallery'); - $message .= '</a>]'; - - nggGallery::show_message($message); - - return; - - } - /** * Scan folder for new images * @@ -578,7 +475,7 @@ class nggAdmin{ * @param array|int $imagesIds * @return string result code */ - function import_MetaData($imagesIds) { + static function import_MetaData($imagesIds) { global $wpdb; @@ -825,7 +722,7 @@ class nggAdmin{ } // set complete folder path - $newfolder = WINABSPATH . $foldername; + $newfolder = ABSPATH . $foldername; // check first if the traget folder exist if (!is_dir($newfolder)) { @@ -856,6 +753,111 @@ class nggAdmin{ return true; } + /** + * nggAdmin::import_gallery() + * TODO: Check permission of existing thumb folder & images + * + * @class nggAdmin + * @param string $galleryfolder contains relative path to the gallery itself + * @return void + */ + function import_gallery($galleryfolder, $gallery_id=NULL) { + + global $wpdb, $user_ID; + + // get the current user ID + get_currentuserinfo(); + + $created_msg = ''; + + // remove trailing slash at the end, if somebody use it + $galleryfolder = untrailingslashit($galleryfolder); + + $fs = C_Fs::get_instance(); + $gallerypath = $fs->join_paths($fs->get_document_root(), $galleryfolder); + + if (!is_dir($gallerypath)) { + nggGallery::show_error(__('Directory', 'nggallery').' <strong>' . esc_html( $gallerypath ) .'</strong> '.__('doesn`t exist!', 'nggallery')); + return ; + } + + // read list of images + $new_imageslist = nggAdmin::scandir($gallerypath); + + if (empty($new_imageslist)) { + nggGallery::show_message(__('Directory', 'nggallery').' <strong>' . esc_html( $gallerypath ) . '</strong> '.__('contains no pictures', 'nggallery')); + return; + } + + // check & create thumbnail folder + if ( !nggGallery::get_thumbnail_folder($gallerypath) ) + return; + + // take folder name as gallery name + $galleryname = basename($galleryfolder); + $galleryname = apply_filters('ngg_gallery_name', $galleryname); + + // check for existing gallery folder + if (is_null($gallery_id)) + $gallery_id = $wpdb->get_var("SELECT gid FROM $wpdb->nggallery WHERE path = '$galleryfolder' "); + + if (!$gallery_id) { + // now add the gallery to the database + $gallery_id = nggdb::add_gallery( $galleryname, $galleryfolder, '', 0, 0, $user_ID ); + if (!$gallery_id) { + nggGallery::show_error(__('Database error. Could not add gallery!','nggallery')); + return; + } + else { + do_action('ngg_created_new_gallery', $gallery_id); + } + $created_msg = _n( 'Gallery', 'Galleries', 1, 'nggallery' ) . ' <strong>' . esc_html( $galleryname ) . '</strong> ' . __('successfully created!','nggallery') . '<br />'; + } + + // Look for existing image list + $old_imageslist = $wpdb->get_col("SELECT filename FROM $wpdb->nggpictures WHERE galleryid = '$gallery_id' "); + + // if no images are there, create empty array + if ($old_imageslist == NULL) + $old_imageslist = array(); + + // check difference + $new_images = array_diff($new_imageslist, $old_imageslist); + + // all images must be valid files + foreach($new_images as $key => $picture) { + + // filter function to rename/change/modify image before + $picture = apply_filters('ngg_pre_add_new_image', $picture, $gallery_id); + $new_images[$key] = $picture; + + if (!@getimagesize($gallerypath . '/' . $picture) ) { + unset($new_images[$key]); + @unlink($gallerypath . '/' . $picture); + } + } + + // add images to database + $image_ids = nggAdmin::add_Images($gallery_id, $new_images); + do_action('ngg_after_new_images_added', $gallery_id, $image_ids); + + //add the preview image if needed + nggAdmin::set_gallery_preview ( $gallery_id ); + + // now create thumbnails + nggAdmin::do_ajax_operation( 'create_thumbnail' , $image_ids, __('Create new thumbnails','nggallery') ); + + //TODO:Message will not shown, because AJAX routine require more time, message should be passed to AJAX + $message = $created_msg . count($image_ids) .__(' picture(s) successfully added','nggallery'); + $message .= ' [<a href="' . admin_url() . 'admin.php?page=nggallery-manage-gallery&mode=edit&gid=' . $gallery_id . '" >'; + $message .= __('Edit gallery','nggallery'); + $message .= '</a>]'; + + nggGallery::show_message($message); + + return; + } + /** * Function for uploading of images via the upload form * @@ -1006,7 +1008,7 @@ class nggAdmin{ } // read list of images - $imageslist = nggAdmin::scandir( WINABSPATH . $gallery->path ); + $imageslist = nggAdmin::scandir( ABSPATH . $gallery->path ); // check if this filename already exist $i = 0; @@ -1014,11 +1016,11 @@ class nggAdmin{ $filename = $filepart['filename'] . '_' . $i++ . '.' . $filepart['extension']; } - $dest_file = WINABSPATH . $gallery->path . '/' . $filename; + $dest_file = ABSPATH . $gallery->path . '/' . $filename; // save temp file to gallery if ( !@move_uploaded_file($_FILES["Filedata"]['tmp_name'], $dest_file) ){ - nggAdmin::check_safemode(WINABSPATH . $gallery->path); + nggAdmin::check_safemode(ABSPATH . $gallery->path); return __('Error, the file could not be moved to : ','nggallery'). esc_html( $dest_file ); } @@ -1112,7 +1114,7 @@ class nggAdmin{ // Get destination gallery $destination = nggdb::find_gallery( $dest_gid ); - $dest_abspath = WINABSPATH . $destination->path; + $dest_abspath = ABSPATH . $destination->path; if ( $destination == null ) { nggGallery::show_error(__('The destination gallery does not exist','nggallery')); @@ -1196,16 +1198,23 @@ class nggAdmin{ return; } + // The gallery path should be relative, but in the past on IIS we were storing this incorrectly + // as the absolute path. So, we need to normalize the path + $destination_path = str_replace('/', DIRECTORY_SEPARATOR, $destination->path); + $fs = C_Fs::get_instance(); + if (strpos($destination_path, $fs->get_document_root()) !== 0) { + $destination_path = $fs->join_paths($fs->get_document_root(), $destination->path); + } + // Check for folder permission - if (!is_writeable(WINABSPATH.$destination->path)) { - $message = sprintf(__('Unable to write to directory %s. Is this directory writable by the server?', 'nggallery'), esc_html( WINABSPATH.$destination->path) ); + if (!is_writeable($destination_path)) { + $message = sprintf(__('Unable to write to directory %s. Is this directory writable by the server?', 'nggallery'), esc_html( $destination_path) ); nggGallery::show_error($message); return; } // Get pictures $images = nggdb::find_images_in_list($pic_ids); - $destination_path = WINABSPATH . $destination->path; foreach ($images as $image) { // WPMU action diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/install.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/install.php index 299285b0d93654c95f2de6dfef5d633e100a3677..6b90505119101a2927aabd3efea9c97d5b819305 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/install.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/install.php @@ -8,14 +8,11 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You * @access internal * @return void */ -function nggallery_install () { +function nggallery_install($installer) +{ global $wpdb , $wp_roles, $wp_version; - // Check for capability - if ( !current_user_can('activate_plugins') ) - return; - // Set the capabilities for the administrator $role = get_role('administrator'); // We need this role, no other chance @@ -35,19 +32,6 @@ function nggallery_install () { $role->add_cap('NextGEN Change options'); $role->add_cap('NextGEN Attach Interface'); - // upgrade function changed in WordPress 2.3 - require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); - - // add charset & collate like wp core - $charset_collate = ''; - - if ( version_compare(mysql_get_server_info(), '4.1.0', '>=') ) { - if ( ! empty($wpdb->charset) ) - $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; - if ( ! empty($wpdb->collate) ) - $charset_collate .= " COLLATE $wpdb->collate"; - } - $nggpictures = $wpdb->prefix . 'ngg_pictures'; $nggallery = $wpdb->prefix . 'ngg_gallery'; $nggalbum = $wpdb->prefix . 'ngg_album'; @@ -65,10 +49,11 @@ function nggallery_install () { exclude TINYINT NULL DEFAULT '0' , sortorder BIGINT(20) DEFAULT '0' NOT NULL , meta_data LONGTEXT, + extras_post_id BIGINT(20) DEFAULT '0' NOT NULL, PRIMARY KEY (pid), - KEY post_id (post_id) - ) $charset_collate;"; - dbDelta($sql); + KEY extras_post_id_key (extras_post_id) + );"; + $installer->upgrade_schema($sql); // Create gallery table $sql = "CREATE TABLE " . $nggallery . " ( @@ -81,9 +66,11 @@ function nggallery_install () { pageid BIGINT(20) DEFAULT '0' NOT NULL , previewpic BIGINT(20) DEFAULT '0' NOT NULL , author BIGINT(20) DEFAULT '0' NOT NULL , - PRIMARY KEY (gid) - ) $charset_collate;"; - dbDelta($sql); + extras_post_id BIGINT(20) DEFAULT '0' NOT NULL, + PRIMARY KEY (gid), + KEY extras_post_id_key (extras_post_id) + )"; + $installer->upgrade_schema($sql); // Create albums table $sql = "CREATE TABLE " . $nggalbum . " ( @@ -94,18 +81,18 @@ function nggallery_install () { albumdesc MEDIUMTEXT NULL , sortorder LONGTEXT NOT NULL, pageid BIGINT(20) DEFAULT '0' NOT NULL, - PRIMARY KEY (id) - ) $charset_collate;"; - dbDelta($sql); + extras_post_id BIGINT(20) DEFAULT '0' NOT NULL, + PRIMARY KEY (id), + KEY extras_post_id_key (extras_post_id) + )"; + $installer->upgrade_schema($sql); - // check one table again, to be sure + // check one table again, to be sure if( !$wpdb->get_var( "SHOW TABLES LIKE '$nggpictures'" ) ) { update_option( "ngg_init_check", __('NextGEN Gallery : Tables could not created, please check your database settings',"nggallery") ); return; } - $options = get_option('ngg_options'); - // if all is passed , save the DBVERSION add_option("ngg_db_version", NGG_DBVERSION); @@ -129,36 +116,3 @@ function ngg_remove_capability($capability){ } } - -/** - * Uninstall all settings and tables - * Called via Setup and register_unstall hook - * - * @access internal - * @return void - */ -function nggallery_uninstall() { - global $wpdb; - - // TODO don't remove data on uninstall - // first remove all tables -# $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}ngg_pictures"); -# $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}ngg_gallery"); -# $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}ngg_album"); - - // then remove all options - delete_option( 'ngg_options' ); - delete_option( 'ngg_db_version' ); - delete_option( 'ngg_update_exists' ); - delete_option( 'ngg_next_update' ); - - // now remove the capability - ngg_remove_capability("NextGEN Gallery overview"); - ngg_remove_capability("NextGEN Use TinyMCE"); - ngg_remove_capability("NextGEN Upload images"); - ngg_remove_capability("NextGEN Manage gallery"); - ngg_remove_capability("NextGEN Edit album"); - ngg_remove_capability("NextGEN Change style"); - ngg_remove_capability("NextGEN Change options"); - ngg_remove_capability("NextGEN Attach Interface"); -} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/colorpicker/css/colorpicker.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/colorpicker/css/colorpicker.css index d687c9db827a175bb504f84241ad5355e58076b5..6f0e570b4931263b0e365783ccc386b604ebbb1e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/colorpicker/css/colorpicker.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/colorpicker/css/colorpicker.css @@ -1,161 +1,161 @@ -.colorpicker { - width: 356px; - height: 176px; - overflow: hidden; - position: absolute; - background: url(../images/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_overlay.png); -} -.colorpicker_color div div { - position: absolute; - top: 0; - left: 0; - width: 11px; - height: 11px; - overflow: hidden; - background: url(../images/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_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: 13px; -} -.colorpicker_hex { - position: absolute; - width: 72px; - height: 22px; - background: url(../images/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_rgb_r.png); - top: 52px; - left: 212px; -} -.colorpicker_rgb_g { - background-image: url(../images/colorpicker_rgb_g.png); - top: 82px; - left: 212px; -} -.colorpicker_rgb_b { - background-image: url(../images/colorpicker_rgb_b.png); - top: 112px; - left: 212px; -} -.colorpicker_hsb_h { - background-image: url(../images/colorpicker_hsb_h.png); - top: 52px; - left: 282px; -} -.colorpicker_hsb_s { - background-image: url(../images/colorpicker_hsb_s.png); - top: 82px; - left: 282px; -} -.colorpicker_hsb_b { - background-image: url(../images/colorpicker_hsb_b.png); - top: 112px; - left: 282px; -} -.colorpicker_submit { - position: absolute; - width: 22px; - height: 22px; - background: url(../images/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; -} +.colorpicker { + width: 356px; + height: 176px; + overflow: hidden; + position: absolute; + background: url(../images/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_overlay.png); +} +.colorpicker_color div div { + position: absolute; + top: 0; + left: 0; + width: 11px; + height: 11px; + overflow: hidden; + background: url(../images/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_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: 13px; +} +.colorpicker_hex { + position: absolute; + width: 72px; + height: 22px; + background: url(../images/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_rgb_r.png); + top: 52px; + left: 212px; +} +.colorpicker_rgb_g { + background-image: url(../images/colorpicker_rgb_g.png); + top: 82px; + left: 212px; +} +.colorpicker_rgb_b { + background-image: url(../images/colorpicker_rgb_b.png); + top: 112px; + left: 212px; +} +.colorpicker_hsb_h { + background-image: url(../images/colorpicker_hsb_h.png); + top: 52px; + left: 282px; +} +.colorpicker_hsb_s { + background-image: url(../images/colorpicker_hsb_s.png); + top: 82px; + left: 282px; +} +.colorpicker_hsb_b { + background-image: url(../images/colorpicker_hsb_b.png); + top: 112px; + left: 282px; +} +.colorpicker_submit { + position: absolute; + width: 22px; + height: 22px; + background: url(../images/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; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/colorpicker/js/colorpicker.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/colorpicker/js/colorpicker.js index 45f56ced7aff8c353d67e64b83592074de815614..10a2b2244b13f2b875676d4a64151a2f5701be2c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/colorpicker/js/colorpicker.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/colorpicker/js/colorpicker.js @@ -1,484 +1,484 @@ -/** - * - * Color picker - * Author: Stefan Petre www.eyecon.ro - * - * Dual licensed under the MIT and GPL licenses - * - */ -(function ($) { - var ColorPicker = function () { - var - ids = {}, - inAction, - charMin = 65, - visible, - tpl = '<div class="colorpicker"><div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"></div></div>', - defaults = { - eventName: 'click', - onShow: function () {}, - onBeforeShow: function(){}, - onHide: function () {}, - onChange: function () {}, - onSubmit: function () {}, - color: 'ff0000', - livePreview: true, - flat: false - }, - fillRGBFields = function (hsb, cal) { - var rgb = HSBToRGB(hsb); - $(cal).data('colorpicker').fields - .eq(1).val(rgb.r).end() - .eq(2).val(rgb.g).end() - .eq(3).val(rgb.b).end(); - }, - fillHSBFields = function (hsb, cal) { - $(cal).data('colorpicker').fields - .eq(4).val(hsb.h).end() - .eq(5).val(hsb.s).end() - .eq(6).val(hsb.b).end(); - }, - fillHexFields = function (hsb, cal) { - $(cal).data('colorpicker').fields - .eq(0).val(HSBToHex(hsb)).end(); - }, - setSelector = function (hsb, cal) { - $(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100})); - $(cal).data('colorpicker').selectorIndic.css({ - left: parseInt(150 * hsb.s/100, 10), - top: parseInt(150 * (100-hsb.b)/100, 10) - }); - }, - setHue = function (hsb, cal) { - $(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10)); - }, - setCurrentColor = function (hsb, cal) { - $(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb)); - }, - setNewColor = function (hsb, cal) { - $(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb)); - }, - keyDown = function (ev) { - var pressedKey = ev.charCode || ev.keyCode || -1; - if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) { - return false; - } - var cal = $(this).parent().parent(); - if (cal.data('colorpicker').livePreview === true) { - change.apply(this); - } - }, - change = function (ev) { - var cal = $(this).parent().parent(), col; - if (this.parentNode.className.indexOf('_hex') > 0) { - cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value)); - } else if (this.parentNode.className.indexOf('_hsb') > 0) { - cal.data('colorpicker').color = col = fixHSB({ - h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10), - s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10), - b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10) - }); - } else { - cal.data('colorpicker').color = col = RGBToHSB(fixRGB({ - r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10), - g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10), - b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10) - })); - } - if (ev) { - fillRGBFields(col, cal.get(0)); - fillHexFields(col, cal.get(0)); - fillHSBFields(col, cal.get(0)); - } - setSelector(col, cal.get(0)); - setHue(col, cal.get(0)); - setNewColor(col, cal.get(0)); - cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]); - }, - blur = function (ev) { - var cal = $(this).parent().parent(); - cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus'); - }, - focus = function () { - charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65; - $(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus'); - $(this).parent().addClass('colorpicker_focus'); - }, - downIncrement = function (ev) { - var field = $(this).parent().find('input').focus(); - var current = { - el: $(this).parent().addClass('colorpicker_slider'), - max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255), - y: ev.pageY, - field: field, - val: parseInt(field.val(), 10), - preview: $(this).parent().parent().data('colorpicker').livePreview - }; - $(document).bind('mouseup', current, upIncrement); - $(document).bind('mousemove', current, moveIncrement); - }, - moveIncrement = function (ev) { - ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10)))); - if (ev.data.preview) { - change.apply(ev.data.field.get(0), [true]); - } - return false; - }, - upIncrement = function (ev) { - change.apply(ev.data.field.get(0), [true]); - ev.data.el.removeClass('colorpicker_slider').find('input').focus(); - $(document).unbind('mouseup', upIncrement); - $(document).unbind('mousemove', moveIncrement); - return false; - }, - downHue = function (ev) { - var current = { - cal: $(this).parent(), - y: $(this).offset().top - }; - current.preview = current.cal.data('colorpicker').livePreview; - $(document).bind('mouseup', current, upHue); - $(document).bind('mousemove', current, moveHue); - }, - moveHue = function (ev) { - change.apply( - ev.data.cal.data('colorpicker') - .fields - .eq(4) - .val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10)) - .get(0), - [ev.data.preview] - ); - return false; - }, - upHue = function (ev) { - fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); - fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); - $(document).unbind('mouseup', upHue); - $(document).unbind('mousemove', moveHue); - return false; - }, - downSelector = function (ev) { - var current = { - cal: $(this).parent(), - pos: $(this).offset() - }; - current.preview = current.cal.data('colorpicker').livePreview; - $(document).bind('mouseup', current, upSelector); - $(document).bind('mousemove', current, moveSelector); - }, - moveSelector = function (ev) { - change.apply( - ev.data.cal.data('colorpicker') - .fields - .eq(6) - .val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10)) - .end() - .eq(5) - .val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10)) - .get(0), - [ev.data.preview] - ); - return false; - }, - upSelector = function (ev) { - fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); - fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); - $(document).unbind('mouseup', upSelector); - $(document).unbind('mousemove', moveSelector); - return false; - }, - enterSubmit = function (ev) { - $(this).addClass('colorpicker_focus'); - }, - leaveSubmit = function (ev) { - $(this).removeClass('colorpicker_focus'); - }, - clickSubmit = function (ev) { - var cal = $(this).parent(); - var col = cal.data('colorpicker').color; - cal.data('colorpicker').origColor = col; - setCurrentColor(col, cal.get(0)); - cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el); - }, - show = function (ev) { - var cal = $('#' + $(this).data('colorpickerId')); - cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]); - var pos = $(this).offset(); - var viewPort = getViewport(); - var top = pos.top + this.offsetHeight; - var left = pos.left; - if (top + 176 > viewPort.t + viewPort.h) { - top -= this.offsetHeight + 176; - } - if (left + 356 > viewPort.l + viewPort.w) { - left -= 356; - } - cal.css({left: left + 'px', top: top + 'px'}); - if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) { - cal.show(); - } - $(document).bind('mousedown', {cal: cal}, hide); - return false; - }, - hide = function (ev) { - if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) { - if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) { - ev.data.cal.hide(); - } - $(document).unbind('mousedown', hide); - } - }, - isChildOf = function(parentEl, el, container) { - if (parentEl == el) { - return true; - } - if (parentEl.contains) { - return parentEl.contains(el); - } - if ( parentEl.compareDocumentPosition ) { - return !!(parentEl.compareDocumentPosition(el) & 16); - } - var prEl = el.parentNode; - while(prEl && prEl != container) { - if (prEl == parentEl) - return true; - prEl = prEl.parentNode; - } - return false; - }, - getViewport = function () { - var m = document.compatMode == 'CSS1Compat'; - return { - l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft), - t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop), - w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth), - h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight) - }; - }, - fixHSB = function (hsb) { - return { - h: Math.min(360, Math.max(0, hsb.h)), - s: Math.min(100, Math.max(0, hsb.s)), - b: Math.min(100, Math.max(0, hsb.b)) - }; - }, - fixRGB = function (rgb) { - return { - r: Math.min(255, Math.max(0, rgb.r)), - g: Math.min(255, Math.max(0, rgb.g)), - b: Math.min(255, Math.max(0, rgb.b)) - }; - }, - fixHex = function (hex) { - var len = 6 - hex.length; - if (len > 0) { - var o = []; - for (var i=0; i<len; i++) { - o.push('0'); - } - o.push(hex); - hex = o.join(''); - } - return hex; - }, - HexToRGB = function (hex) { - var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); - return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)}; - }, - HexToHSB = function (hex) { - return RGBToHSB(HexToRGB(hex)); - }, - RGBToHSB = function (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; - if (max != 0) { - - } - 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; - }, - HSBToRGB = function (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)}; - }, - RGBToHex = function (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(''); - }, - HSBToHex = function (hsb) { - return RGBToHex(HSBToRGB(hsb)); - }, - restoreOriginal = function () { - var cal = $(this).parent(); - var col = cal.data('colorpicker').origColor; - cal.data('colorpicker').color = col; - fillRGBFields(col, cal.get(0)); - fillHexFields(col, cal.get(0)); - fillHSBFields(col, cal.get(0)); - setSelector(col, cal.get(0)); - setHue(col, cal.get(0)); - setNewColor(col, cal.get(0)); - }; - return { - init: function (opt) { - opt = $.extend({}, defaults, opt||{}); - if (typeof opt.color == 'string') { - opt.color = HexToHSB(opt.color); - } else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) { - opt.color = RGBToHSB(opt.color); - } else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) { - opt.color = fixHSB(opt.color); - } else { - return this; - } - return this.each(function () { - if (!$(this).data('colorpickerId')) { - var options = $.extend({}, opt); - options.origColor = opt.color; - var id = 'collorpicker_' + parseInt(Math.random() * 1000); - $(this).data('colorpickerId', id); - var cal = $(tpl).attr('id', id); - if (options.flat) { - cal.appendTo(this).show(); - } else { - cal.appendTo(document.body); - } - options.fields = cal - .find('input') - .bind('keyup', keyDown) - .bind('change', change) - .bind('blur', blur) - .bind('focus', focus); - cal - .find('span').bind('mousedown', downIncrement).end() - .find('>div.colorpicker_current_color').bind('click', restoreOriginal); - options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector); - options.selectorIndic = options.selector.find('div div'); - options.el = this; - options.hue = cal.find('div.colorpicker_hue div'); - cal.find('div.colorpicker_hue').bind('mousedown', downHue); - options.newColor = cal.find('div.colorpicker_new_color'); - options.currentColor = cal.find('div.colorpicker_current_color'); - cal.data('colorpicker', options); - cal.find('div.colorpicker_submit') - .bind('mouseenter', enterSubmit) - .bind('mouseleave', leaveSubmit) - .bind('click', clickSubmit); - fillRGBFields(options.color, cal.get(0)); - fillHSBFields(options.color, cal.get(0)); - fillHexFields(options.color, cal.get(0)); - setHue(options.color, cal.get(0)); - setSelector(options.color, cal.get(0)); - setCurrentColor(options.color, cal.get(0)); - setNewColor(options.color, cal.get(0)); - if (options.flat) { - cal.css({ - position: 'relative', - display: 'block' - }); - } else { - $(this).bind(options.eventName, show); - } - } - }); - }, - showPicker: function() { - return this.each( function () { - if ($(this).data('colorpickerId')) { - show.apply(this); - } - }); - }, - hidePicker: function() { - return this.each( function () { - if ($(this).data('colorpickerId')) { - $('#' + $(this).data('colorpickerId')).hide(); - } - }); - }, - setColor: function(col) { - if (typeof col == 'string') { - col = HexToHSB(col); - } else if (col.r != undefined && col.g != undefined && col.b != undefined) { - col = RGBToHSB(col); - } else if (col.h != undefined && col.s != undefined && col.b != undefined) { - col = fixHSB(col); - } else { - return this; - } - return this.each(function(){ - if ($(this).data('colorpickerId')) { - var cal = $('#' + $(this).data('colorpickerId')); - cal.data('colorpicker').color = col; - cal.data('colorpicker').origColor = col; - fillRGBFields(col, cal.get(0)); - fillHSBFields(col, cal.get(0)); - fillHexFields(col, cal.get(0)); - setHue(col, cal.get(0)); - setSelector(col, cal.get(0)); - setCurrentColor(col, cal.get(0)); - setNewColor(col, cal.get(0)); - } - }); - } - }; - }(); - $.fn.extend({ - ColorPicker: ColorPicker.init, - ColorPickerHide: ColorPicker.hidePicker, - ColorPickerShow: ColorPicker.showPicker, - ColorPickerSetColor: ColorPicker.setColor - }); +/** + * + * Color picker + * Author: Stefan Petre www.eyecon.ro + * + * Dual licensed under the MIT and GPL licenses + * + */ +(function ($) { + var ColorPicker = function () { + var + ids = {}, + inAction, + charMin = 65, + visible, + tpl = '<div class="colorpicker"><div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"></div></div>', + defaults = { + eventName: 'click', + onShow: function () {}, + onBeforeShow: function(){}, + onHide: function () {}, + onChange: function () {}, + onSubmit: function () {}, + color: 'ff0000', + livePreview: true, + flat: false + }, + fillRGBFields = function (hsb, cal) { + var rgb = HSBToRGB(hsb); + $(cal).data('colorpicker').fields + .eq(1).val(rgb.r).end() + .eq(2).val(rgb.g).end() + .eq(3).val(rgb.b).end(); + }, + fillHSBFields = function (hsb, cal) { + $(cal).data('colorpicker').fields + .eq(4).val(hsb.h).end() + .eq(5).val(hsb.s).end() + .eq(6).val(hsb.b).end(); + }, + fillHexFields = function (hsb, cal) { + $(cal).data('colorpicker').fields + .eq(0).val(HSBToHex(hsb)).end(); + }, + setSelector = function (hsb, cal) { + $(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100})); + $(cal).data('colorpicker').selectorIndic.css({ + left: parseInt(150 * hsb.s/100, 10), + top: parseInt(150 * (100-hsb.b)/100, 10) + }); + }, + setHue = function (hsb, cal) { + $(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10)); + }, + setCurrentColor = function (hsb, cal) { + $(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb)); + }, + setNewColor = function (hsb, cal) { + $(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb)); + }, + keyDown = function (ev) { + var pressedKey = ev.charCode || ev.keyCode || -1; + if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) { + return false; + } + var cal = $(this).parent().parent(); + if (cal.data('colorpicker').livePreview === true) { + change.apply(this); + } + }, + change = function (ev) { + var cal = $(this).parent().parent(), col; + if (this.parentNode.className.indexOf('_hex') > 0) { + cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value)); + } else if (this.parentNode.className.indexOf('_hsb') > 0) { + cal.data('colorpicker').color = col = fixHSB({ + h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10), + s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10), + b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10) + }); + } else { + cal.data('colorpicker').color = col = RGBToHSB(fixRGB({ + r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10), + g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10), + b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10) + })); + } + if (ev) { + fillRGBFields(col, cal.get(0)); + fillHexFields(col, cal.get(0)); + fillHSBFields(col, cal.get(0)); + } + setSelector(col, cal.get(0)); + setHue(col, cal.get(0)); + setNewColor(col, cal.get(0)); + cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]); + }, + blur = function (ev) { + var cal = $(this).parent().parent(); + cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus'); + }, + focus = function () { + charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65; + $(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus'); + $(this).parent().addClass('colorpicker_focus'); + }, + downIncrement = function (ev) { + var field = $(this).parent().find('input').focus(); + var current = { + el: $(this).parent().addClass('colorpicker_slider'), + max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255), + y: ev.pageY, + field: field, + val: parseInt(field.val(), 10), + preview: $(this).parent().parent().data('colorpicker').livePreview + }; + $(document).bind('mouseup', current, upIncrement); + $(document).bind('mousemove', current, moveIncrement); + }, + moveIncrement = function (ev) { + ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10)))); + if (ev.data.preview) { + change.apply(ev.data.field.get(0), [true]); + } + return false; + }, + upIncrement = function (ev) { + change.apply(ev.data.field.get(0), [true]); + ev.data.el.removeClass('colorpicker_slider').find('input').focus(); + $(document).unbind('mouseup', upIncrement); + $(document).unbind('mousemove', moveIncrement); + return false; + }, + downHue = function (ev) { + var current = { + cal: $(this).parent(), + y: $(this).offset().top + }; + current.preview = current.cal.data('colorpicker').livePreview; + $(document).bind('mouseup', current, upHue); + $(document).bind('mousemove', current, moveHue); + }, + moveHue = function (ev) { + change.apply( + ev.data.cal.data('colorpicker') + .fields + .eq(4) + .val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10)) + .get(0), + [ev.data.preview] + ); + return false; + }, + upHue = function (ev) { + fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); + fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); + $(document).unbind('mouseup', upHue); + $(document).unbind('mousemove', moveHue); + return false; + }, + downSelector = function (ev) { + var current = { + cal: $(this).parent(), + pos: $(this).offset() + }; + current.preview = current.cal.data('colorpicker').livePreview; + $(document).bind('mouseup', current, upSelector); + $(document).bind('mousemove', current, moveSelector); + }, + moveSelector = function (ev) { + change.apply( + ev.data.cal.data('colorpicker') + .fields + .eq(6) + .val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10)) + .end() + .eq(5) + .val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10)) + .get(0), + [ev.data.preview] + ); + return false; + }, + upSelector = function (ev) { + fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); + fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); + $(document).unbind('mouseup', upSelector); + $(document).unbind('mousemove', moveSelector); + return false; + }, + enterSubmit = function (ev) { + $(this).addClass('colorpicker_focus'); + }, + leaveSubmit = function (ev) { + $(this).removeClass('colorpicker_focus'); + }, + clickSubmit = function (ev) { + var cal = $(this).parent(); + var col = cal.data('colorpicker').color; + cal.data('colorpicker').origColor = col; + setCurrentColor(col, cal.get(0)); + cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el); + }, + show = function (ev) { + var cal = $('#' + $(this).data('colorpickerId')); + cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]); + var pos = $(this).offset(); + var viewPort = getViewport(); + var top = pos.top + this.offsetHeight; + var left = pos.left; + if (top + 176 > viewPort.t + viewPort.h) { + top -= this.offsetHeight + 176; + } + if (left + 356 > viewPort.l + viewPort.w) { + left -= 356; + } + cal.css({left: left + 'px', top: top + 'px'}); + if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) { + cal.show(); + } + $(document).bind('mousedown', {cal: cal}, hide); + return false; + }, + hide = function (ev) { + if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) { + if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) { + ev.data.cal.hide(); + } + $(document).unbind('mousedown', hide); + } + }, + isChildOf = function(parentEl, el, container) { + if (parentEl == el) { + return true; + } + if (parentEl.contains) { + return parentEl.contains(el); + } + if ( parentEl.compareDocumentPosition ) { + return !!(parentEl.compareDocumentPosition(el) & 16); + } + var prEl = el.parentNode; + while(prEl && prEl != container) { + if (prEl == parentEl) + return true; + prEl = prEl.parentNode; + } + return false; + }, + getViewport = function () { + var m = document.compatMode == 'CSS1Compat'; + return { + l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft), + t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop), + w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth), + h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight) + }; + }, + fixHSB = function (hsb) { + return { + h: Math.min(360, Math.max(0, hsb.h)), + s: Math.min(100, Math.max(0, hsb.s)), + b: Math.min(100, Math.max(0, hsb.b)) + }; + }, + fixRGB = function (rgb) { + return { + r: Math.min(255, Math.max(0, rgb.r)), + g: Math.min(255, Math.max(0, rgb.g)), + b: Math.min(255, Math.max(0, rgb.b)) + }; + }, + fixHex = function (hex) { + var len = 6 - hex.length; + if (len > 0) { + var o = []; + for (var i=0; i<len; i++) { + o.push('0'); + } + o.push(hex); + hex = o.join(''); + } + return hex; + }, + HexToRGB = function (hex) { + var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); + return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)}; + }, + HexToHSB = function (hex) { + return RGBToHSB(HexToRGB(hex)); + }, + RGBToHSB = function (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; + if (max != 0) { + + } + 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; + }, + HSBToRGB = function (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)}; + }, + RGBToHex = function (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(''); + }, + HSBToHex = function (hsb) { + return RGBToHex(HSBToRGB(hsb)); + }, + restoreOriginal = function () { + var cal = $(this).parent(); + var col = cal.data('colorpicker').origColor; + cal.data('colorpicker').color = col; + fillRGBFields(col, cal.get(0)); + fillHexFields(col, cal.get(0)); + fillHSBFields(col, cal.get(0)); + setSelector(col, cal.get(0)); + setHue(col, cal.get(0)); + setNewColor(col, cal.get(0)); + }; + return { + init: function (opt) { + opt = $.extend({}, defaults, opt||{}); + if (typeof opt.color == 'string') { + opt.color = HexToHSB(opt.color); + } else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) { + opt.color = RGBToHSB(opt.color); + } else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) { + opt.color = fixHSB(opt.color); + } else { + return this; + } + return this.each(function () { + if (!$(this).data('colorpickerId')) { + var options = $.extend({}, opt); + options.origColor = opt.color; + var id = 'collorpicker_' + parseInt(Math.random() * 1000); + $(this).data('colorpickerId', id); + var cal = $(tpl).attr('id', id); + if (options.flat) { + cal.appendTo(this).show(); + } else { + cal.appendTo(document.body); + } + options.fields = cal + .find('input') + .bind('keyup', keyDown) + .bind('change', change) + .bind('blur', blur) + .bind('focus', focus); + cal + .find('span').bind('mousedown', downIncrement).end() + .find('>div.colorpicker_current_color').bind('click', restoreOriginal); + options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector); + options.selectorIndic = options.selector.find('div div'); + options.el = this; + options.hue = cal.find('div.colorpicker_hue div'); + cal.find('div.colorpicker_hue').bind('mousedown', downHue); + options.newColor = cal.find('div.colorpicker_new_color'); + options.currentColor = cal.find('div.colorpicker_current_color'); + cal.data('colorpicker', options); + cal.find('div.colorpicker_submit') + .bind('mouseenter', enterSubmit) + .bind('mouseleave', leaveSubmit) + .bind('click', clickSubmit); + fillRGBFields(options.color, cal.get(0)); + fillHSBFields(options.color, cal.get(0)); + fillHexFields(options.color, cal.get(0)); + setHue(options.color, cal.get(0)); + setSelector(options.color, cal.get(0)); + setCurrentColor(options.color, cal.get(0)); + setNewColor(options.color, cal.get(0)); + if (options.flat) { + cal.css({ + position: 'relative', + display: 'block' + }); + } else { + $(this).bind(options.eventName, show); + } + } + }); + }, + showPicker: function() { + return this.each( function () { + if ($(this).data('colorpickerId')) { + show.apply(this); + } + }); + }, + hidePicker: function() { + return this.each( function () { + if ($(this).data('colorpickerId')) { + $('#' + $(this).data('colorpickerId')).hide(); + } + }); + }, + setColor: function(col) { + if (typeof col == 'string') { + col = HexToHSB(col); + } else if (col.r != undefined && col.g != undefined && col.b != undefined) { + col = RGBToHSB(col); + } else if (col.h != undefined && col.s != undefined && col.b != undefined) { + col = fixHSB(col); + } else { + return this; + } + return this.each(function(){ + if ($(this).data('colorpickerId')) { + var cal = $('#' + $(this).data('colorpickerId')); + cal.data('colorpicker').color = col; + cal.data('colorpicker').origColor = col; + fillRGBFields(col, cal.get(0)); + fillHSBFields(col, cal.get(0)); + fillHexFields(col, cal.get(0)); + setHue(col, cal.get(0)); + setSelector(col, cal.get(0)); + setCurrentColor(col, cal.get(0)); + setNewColor(col, cal.get(0)); + } + }); + } + }; + }(); + $.fn.extend({ + ColorPicker: ColorPicker.init, + ColorPickerHide: ColorPicker.hidePicker, + ColorPickerShow: ColorPicker.showPicker, + ColorPickerSetColor: ColorPicker.setColor + }); })(jQuery) \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/jqueryFileTree/jqueryFileTree.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/jqueryFileTree/jqueryFileTree.css index 39b5770cf4547631ab0083c926f84c418a8bfe44..0017d0786cbd56a16c29f353fb619c3f4644f30c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/jqueryFileTree/jqueryFileTree.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/jqueryFileTree/jqueryFileTree.css @@ -1,81 +1,81 @@ -#file_browser { - border: 2px solid #999; - height: 200px; - overflow: auto; - padding: 4px 8px; - background: #fff; - margin: 4px 0px; - width: 350px; - position:relative; - display:none; -} -.browsefiles {margin-left:5px;} - -ul.jqueryDirTree { - font-family: Verdana, sans-serif; - font-size: 11px; - line-height: 18px; - padding: 0px; - margin: 0px; -} - -ul.jqueryDirTree li { - list-style: none; - padding: 2px 0px; - padding-left: 20px; - margin: 0px; - white-space: nowrap; -} - -ul.jqueryDirTree a { - color: #333; - text-decoration: none; - display: block; - padding: 0px 2px; -} - -ul.jqueryDirTree a:hover { - background: #bdf; -} -ul.jqueryDirTree li.active a { - background: #bdf; -} -ul.jqueryDirTree li.active li a { - background: none; -} -ul.jqueryDirTree li.active li a:hover { - background: #bdf; -} - -/* Core Styles */ -.jqueryDirTree li.directory { background: url(images/directory.png) left top no-repeat; } -.jqueryDirTree li.expanded { background: url(images/folder_open.png) left top no-repeat; } -.jqueryDirTree li.file { background: url(images/file.png) left top no-repeat; } -.jqueryDirTree li.wait { background: url(images/spinner.gif) left top no-repeat; } -/* File Extensions*/ -.jqueryDirTree li.ext_3gp { background: url(images/film.png) left top no-repeat; } -.jqueryDirTree li.ext_avi { background: url(images/film.png) left top no-repeat; } -.jqueryDirTree li.ext_bat { background: url(images/application.png) left top no-repeat; } -.jqueryDirTree li.ext_bmp { background: url(images/picture.png) left top no-repeat; } -.jqueryDirTree li.ext_com { background: url(images/application.png) left top no-repeat; } -.jqueryDirTree li.ext_exe { background: url(images/application.png) left top no-repeat; } -.jqueryDirTree li.ext_gif { background: url(images/picture.png) left top no-repeat; } -.jqueryDirTree li.ext_fla { background: url(images/flash.png) left top no-repeat; } -.jqueryDirTree li.ext_jpg { background: url(images/picture.png) left top no-repeat; } -.jqueryDirTree li.ext_jpeg { background: url(images/picture.png) left top no-repeat; } -.jqueryDirTree li.ext_m4p { background: url(images/music.png) left top no-repeat; } -.jqueryDirTree li.ext_mov { background: url(images/film.png) left top no-repeat; } -.jqueryDirTree li.ext_mp3 { background: url(images/music.png) left top no-repeat; } -.jqueryDirTree li.ext_mp4 { background: url(images/film.png) left top no-repeat; } -.jqueryDirTree li.ext_mpg { background: url(images/film.png) left top no-repeat; } -.jqueryDirTree li.ext_mpeg { background: url(images/film.png) left top no-repeat; } -.jqueryDirTree li.ext_ogg { background: url(images/music.png) left top no-repeat; } -.jqueryDirTree li.ext_pcx { background: url(images/picture.png) left top no-repeat; } -.jqueryDirTree li.ext_pdf { background: url(images/pdf.png) left top no-repeat; } -.jqueryDirTree li.ext_png { background: url(images/picture.png) left top no-repeat; } -.jqueryDirTree li.ext_swf { background: url(images/flash.png) left top no-repeat; } -.jqueryDirTree li.ext_tif { background: url(images/picture.png) left top no-repeat; } -.jqueryDirTree li.ext_tiff { background: url(images/picture.png) left top no-repeat; } -.jqueryDirTree li.ext_wav { background: url(images/music.png) left top no-repeat; } -.jqueryDirTree li.ext_wmv { background: url(images/film.png) left top no-repeat; } +#file_browser { + border: 2px solid #999; + height: 200px; + overflow: auto; + padding: 4px 8px; + background: #fff; + margin: 4px 0px; + width: 350px; + position:relative; + display:none; +} +.browsefiles {margin-left:5px;} + +ul.jqueryDirTree { + font-family: Verdana, sans-serif; + font-size: 11px; + line-height: 18px; + padding: 0px; + margin: 0px; +} + +ul.jqueryDirTree li { + list-style: none; + padding: 2px 0px; + padding-left: 20px; + margin: 0px; + white-space: nowrap; +} + +ul.jqueryDirTree a { + color: #333; + text-decoration: none; + display: block; + padding: 0px 2px; +} + +ul.jqueryDirTree a:hover { + background: #bdf; +} +ul.jqueryDirTree li.active a { + background: #bdf; +} +ul.jqueryDirTree li.active li a { + background: none; +} +ul.jqueryDirTree li.active li a:hover { + background: #bdf; +} + +/* Core Styles */ +.jqueryDirTree li.directory { background: url(images/directory.png) left top no-repeat; } +.jqueryDirTree li.expanded { background: url(images/folder_open.png) left top no-repeat; } +.jqueryDirTree li.file { background: url(images/file.png) left top no-repeat; } +.jqueryDirTree li.wait { background: url(images/spinner.gif) left top no-repeat; } +/* File Extensions*/ +.jqueryDirTree li.ext_3gp { background: url(images/film.png) left top no-repeat; } +.jqueryDirTree li.ext_avi { background: url(images/film.png) left top no-repeat; } +.jqueryDirTree li.ext_bat { background: url(images/application.png) left top no-repeat; } +.jqueryDirTree li.ext_bmp { background: url(images/picture.png) left top no-repeat; } +.jqueryDirTree li.ext_com { background: url(images/application.png) left top no-repeat; } +.jqueryDirTree li.ext_exe { background: url(images/application.png) left top no-repeat; } +.jqueryDirTree li.ext_gif { background: url(images/picture.png) left top no-repeat; } +.jqueryDirTree li.ext_fla { background: url(images/flash.png) left top no-repeat; } +.jqueryDirTree li.ext_jpg { background: url(images/picture.png) left top no-repeat; } +.jqueryDirTree li.ext_jpeg { background: url(images/picture.png) left top no-repeat; } +.jqueryDirTree li.ext_m4p { background: url(images/music.png) left top no-repeat; } +.jqueryDirTree li.ext_mov { background: url(images/film.png) left top no-repeat; } +.jqueryDirTree li.ext_mp3 { background: url(images/music.png) left top no-repeat; } +.jqueryDirTree li.ext_mp4 { background: url(images/film.png) left top no-repeat; } +.jqueryDirTree li.ext_mpg { background: url(images/film.png) left top no-repeat; } +.jqueryDirTree li.ext_mpeg { background: url(images/film.png) left top no-repeat; } +.jqueryDirTree li.ext_ogg { background: url(images/music.png) left top no-repeat; } +.jqueryDirTree li.ext_pcx { background: url(images/picture.png) left top no-repeat; } +.jqueryDirTree li.ext_pdf { background: url(images/pdf.png) left top no-repeat; } +.jqueryDirTree li.ext_png { background: url(images/picture.png) left top no-repeat; } +.jqueryDirTree li.ext_swf { background: url(images/flash.png) left top no-repeat; } +.jqueryDirTree li.ext_tif { background: url(images/picture.png) left top no-repeat; } +.jqueryDirTree li.ext_tiff { background: url(images/picture.png) left top no-repeat; } +.jqueryDirTree li.ext_wav { background: url(images/music.png) left top no-repeat; } +.jqueryDirTree li.ext_wmv { background: url(images/film.png) left top no-repeat; } .jqueryDirTree li.ext_zip { background: url(images/zip.png) left top no-repeat; } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.ajax.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.ajax.js index e23799cc64a49c7defcbbee5fcb66e2cbf3e8523..42ba93f67c57089e70002e69d21c1f2e81daab99 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.ajax.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.ajax.js @@ -26,7 +26,7 @@ nggAjax = { url: s.url, data:"action=" + s.action + "&operation=" + s.operation + "&_wpnonce=" + s.nonce + "&image=" + s.ids[index], cache: false, - timeout: 10000, + timeout: 30000, success: function(msg){ switch ( parseInt(msg) ) { case -1: @@ -73,7 +73,7 @@ nggAjax = { data:"action=" + s.action + "&operation=" + s.operation + "&_wpnonce=" + s.nonce + "&image=" + s.ids[index], dataType: "json", cache: false, - timeout: 10000, + timeout: 30000, success: function(msg){ // join the array imageIDS = imageIDS.concat(msg); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.autocomplete.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.autocomplete.js index 7d697518c20c37c931a4a6b27aaf8b1850100870..08519caa3472e4af48e74f8954f5ce667d7ae1a7 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.autocomplete.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/ngg.autocomplete.js @@ -1,77 +1,77 @@ -/* - * Implementation of jQuery UI Autocomplete - * see http://jqueryui.com/demos/autocomplete/ - * Version: 1.0.1 - * Author : Alex Rabe - * - */ -jQuery.fn.nggAutocomplete = function ( args ) { - - var defaults = { type: 'image', - domain: '', - limit: 50 }; - - var s = jQuery.extend( {}, defaults, args); - - var settings = { method: 'autocomplete', - type: s.type, - format: 'json', - callback: 'json', - limit: s.limit }; - - var obj = this.selector; - var id = jQuery(this).attr('id'); - var cache = {}, lastXhr; - - // get current value of drop down field - var c_text = jQuery(obj + ' :selected').text(); - var c_val = jQuery(obj).val(); - // IE7 / IE 8 didnt get often the correct width - if (s.width == undefined) - var c_width = jQuery(this).width(); - else - var c_width = s.width; - //hide first the drop down field - jQuery(obj).hide(); - jQuery(obj).after('<input name="' + id + '_ac" type="text" id="' + id + '_ac"/>'); - // Fill up current value & style - jQuery(obj + "_ac").val(c_text); - jQuery(obj + "_ac").css('width', c_width); - // Add the dropdown icon - jQuery(obj + "_ac").addClass('ui-autocomplete-start'); - jQuery(obj + "_ac").autocomplete({ - source: function( request, response ) { - var term = request.term; - if ( term in cache ) { - response( cache[ term ] ); - return; - } - // adding more $_GET parameter - request = jQuery.extend( {}, settings, request); - lastXhr = jQuery.getJSON( s.domain, request, function( data, status, xhr ) { - // add term to cache - cache[ term ] = data; - if ( xhr === lastXhr ) - response( data ); - }); - }, - minLength: 0, - select: function( event, ui ) { - // adding this to the dropdown list - jQuery(obj).append( new Option(ui.item.label, ui.item.id) ); - // now select it - jQuery(obj).val(ui.item.id); - jQuery(obj + "_ac").removeClass('ui-autocomplete-start'); - } - }); - - jQuery(obj + "_ac").click(function() { - - var search = jQuery(obj + "_ac").val(); - // if the value is prefilled, we pass a empty string - if ( search == c_text) - search = ''; - // pass empty string as value to search for, displaying all results - jQuery(obj + "_ac").autocomplete('search', search ); - }); -}; +/* + * Implementation of jQuery UI Autocomplete + * see http://jqueryui.com/demos/autocomplete/ + * Version: 1.0.1 + * Author : Alex Rabe + * + */ +jQuery.fn.nggAutocomplete = function ( args ) { + + var defaults = { type: 'image', + domain: '', + limit: 50 }; + + var s = jQuery.extend( {}, defaults, args); + + var settings = { method: 'autocomplete', + type: s.type, + format: 'json', + callback: 'json', + limit: s.limit }; + + var obj = this.selector; + var id = jQuery(this).attr('id'); + var cache = {}, lastXhr; + + // get current value of drop down field + var c_text = jQuery(obj + ' :selected').text(); + var c_val = jQuery(obj).val(); + // IE7 / IE 8 didnt get often the correct width + if (s.width == undefined) + var c_width = jQuery(this).width(); + else + var c_width = s.width; + //hide first the drop down field + jQuery(obj).hide(); + jQuery(obj).after('<input name="' + id + '_ac" type="text" id="' + id + '_ac"/>'); + // Fill up current value & style + jQuery(obj + "_ac").val(c_text); + jQuery(obj + "_ac").css('width', c_width); + // Add the dropdown icon + jQuery(obj + "_ac").addClass('ui-autocomplete-start'); + jQuery(obj + "_ac").autocomplete({ + source: function( request, response ) { + var term = request.term; + if ( term in cache ) { + response( cache[ term ] ); + return; + } + // adding more $_GET parameter + request = jQuery.extend( {}, settings, request); + lastXhr = jQuery.getJSON( s.domain, request, function( data, status, xhr ) { + // add term to cache + cache[ term ] = data; + if ( xhr === lastXhr ) + response( data ); + }); + }, + minLength: 0, + select: function( event, ui ) { + // adding this to the dropdown list + jQuery(obj).append( new Option(ui.item.label, ui.item.id) ); + // now select it + jQuery(obj).val(ui.item.id); + jQuery(obj + "_ac").removeClass('ui-autocomplete-start'); + } + }); + + jQuery(obj + "_ac").click(function() { + + var search = jQuery(obj + "_ac").val(); + // if the value is prefilled, we pass a empty string + if ( search == c_text) + search = ''; + // pass empty string as value to search for, displaying all results + jQuery(obj + "_ac").autocomplete('search', search ); + }); +}; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/plupload.handler.js b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/plupload.handler.js index 3d8f5b9a731c461e5d3c563e8e332cd226eb4ef7..3120c31860dc3653dfdfbfa35685bc004167a1bc 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/plupload.handler.js +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/js/plupload.handler.js @@ -1,247 +1,247 @@ -/** - * NextGEN Gallery - plupload Handlers - * - * Built on top of the plupload library - * http://www.plupload.com version 1.4.2 - * - * version 1.0.0 - */ - -// on load change the upload to plupload -function initUploader() { - - jQuery(document).ready(function($){ - - /* Not working in chrome, needs rework - var dropElm = jQuery('#' + uploader.settings.drop_element); - if (dropElm.length && uploader.features.dragdrop) { - dropElm.bind('dragenter', function() { - jQuery(this).css('border', '3px dashed #cccccc'); - }); - dropElm.bind('dragout drop', function() { - jQuery(this).css('border', 'none'); - }); - }*/ - - // enable or disable the resize feature - jQuery('#image_resize').bind('change', function() { - var arg = jQuery(this).prop('checked'); - setResize( arg ); - - if ( arg ) - setUserSetting('ngg_upload_resize', '1'); - else - deleteUserSetting('ngg_upload_resize'); - }); - - // get user settings from cookie - setResize( getUserSetting('ngg_upload_resize', false) ); - - if ( uploader.features.dragdrop ) - jQuery('.ngg-dragdrop-info').show(); - - jQuery("#uploadimage_btn").after("<input class='button-primary' type='button' name='uploadimage' id='plupload_btn' value='" + uploader.settings.i18n.upload + "' />") - .remove(); - jQuery("#plupload_btn").click( function() { uploader.start(); } ); - }); -} - -// called when a file is added -function fileQueued( fileObj ) { - debug('[FilesAdded]', fileObj); - - filesize = " (" + plupload.formatSize(fileObj.size) + ") "; - jQuery("#txtFileName").val(fileObj.name); - jQuery("#uploadQueue") - .append("<div id='" + fileObj.id + "' class='nggUploadItem'> [<a href=''>" + uploader.settings.i18n.remove + "</a>] " + fileObj.name + filesize + "</div>") - .children("div:last").slideDown("slow") - .end(); - jQuery('#' + fileObj.id + ' a').click(function(e) { - jQuery('#' + fileObj.id).remove(); - uploader.removeFile(fileObj); - e.preventDefault(); - }); -} - -// called before the uploads start -function uploadStart(fileObj) { - debug('[uploadStart]'); - nggProgressBar.init(nggAjaxOptions); - // check if a gallery is selected - if (jQuery('#galleryselect').val() > "0") { - debug('[gallery selected]'); - // update the selected gallery in the post_params - uploader.settings.multipart_params.galleryselect = jQuery('#galleryselect').val(); - } else { - debug('[gallery not selected]'); - jQuery('#uploadimage_form').prepend("<input type=\"hidden\" name=\"swf_callback\" value=\"-1\">"); - jQuery("#uploadimage_form").submit(); - } - return true; -} - -// called during the upload progress -function uploadProgress(fileObj, bytesDone, bytesTotal) { - var percent = 100; - if (bytesTotal != undefined) - percent = Math.ceil((bytesDone / bytesTotal) * 100); - debug('[uploadProgress]', fileObj.name + ' : ' + percent + "%"); - nggProgressBar.increase( percent ); - jQuery("#progressbar span").text(percent + "% - " + fileObj.name); -} - -// called when all files are uploaded -function uploadComplete(fileObj) { - debug('[uploadComplete]'); - - // Upload the next file until queue is empty - if ( uploader.total.queued == 0) { - //TODO: we submit here no error code - jQuery('#uploadimage_form').prepend("<input type=\"hidden\" name=\"swf_callback\" value=\"0\">"); - nggProgressBar.finished(); - jQuery("#uploadimage_form").submit(); - } -} - -// called when the file is uploaded -function uploadSuccess(fileObj, serverData) { - debug('[uploadSuccess]', serverData); - - if (serverData.response != 0 && serverData.response != '<pre>0</pre>') - nggProgressBar.addNote("<strong>ERROR</strong>: " + fileObj.name + " : " + serverData.response); - - jQuery("#" + fileObj.id).hide("slow"); - jQuery("#" + fileObj.id).remove(); -} - -function cancelUpload() { - uploader.stop(); - jQuery.each(uploader.files, function(i,file) { - if (file.status == plupload.STOPPED) - jQuery('#' + file.id).remove(); - }); -} - -function uploadError(fileObj, errorCode, message) { - debug('[uploadError]', errorCode, message); - switch (errorCode) { - case plupload.FAILED: - error_name = fileObj.name + " : " + pluploadL10n.upload_failed; - break; - case plupload.FILE_EXTENSION_ERROR: - error_name = fileObj.name + " : " + pluploadL10n.invalid_filetype; - break; - case plupload.FILE_SIZE_ERROR: - error_name = fileObj.name + " : " + pluploadL10n.upload_limit_exceeded; - break; - case plupload.IMAGE_FORMAT_ERROR: - error_name = fileObj.name + " : " + pluploadL10n.not_an_image; - break; - case plupload.IMAGE_MEMORY_ERROR: - error_name = fileObj.name + " : " + pluploadL10n.image_memory_exceeded; - break; - case plupload.IMAGE_DIMENSIONS_ERROR: - error_name = fileObj.name + " : " + pluploadL10n.image_dimensions_exceeded; - break; - case plupload.GENERIC_ERROR: - error_name = pluploadL10n.upload_failed; - break; - case plupload.IO_ERROR: - error_name = pluploadL10n.io_error; - break; - case plupload.HTTP_ERROR: - error_name = pluploadL10n.http_error; - break; - case plupload.INIT_ERROR: - /* what should we do in this case ? */ - //switchUploader(0); - //jQuery('.upload-html-bypass').hide(); - break; - case plupload.SECURITY_ERROR: - error_name = pluploadL10n.security_error; - break; - case plupload.UPLOAD_ERROR.UPLOAD_STOPPED: - case plupload.UPLOAD_ERROR.FILE_CANCELLED: - break; - default: - FileError(fileObj, pluploadL10n.default_error); - } - nggProgressBar.addNote("<strong>ERROR " + error_name + " </strong>: " + message); - - jQuery("#" + fileObj.id).hide("slow"); - jQuery("#" + fileObj.id).remove(); -} - -// client side resize feature -function setResize(arg) { - if ( arg ) { - debug('[enable resize]'); - if ( uploader.features.jpgresize ) - uploader.settings['resize'] = { width: resize_width, height: resize_height, quality: resize_quality }; - else - uploader.settings.multipart_params.image_resize = true; - } else { - debug('[disable resize]'); - delete(uploader.settings.resize); - delete(uploader.settings.multipart_params.image_resize); - } -} - -function debug() { - if ( uploader.settings.debug ) { - plupload.each(arguments, function(message) { - var exceptionMessage, exceptionValues = []; - - // Check for an exception object and print it nicely - if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") { - for (var key in message) { - if (message.hasOwnProperty(key)) { - exceptionValues.push(key + ": " + message[key]); - } - } - exceptionMessage = exceptionValues.join("\n") || ""; - exceptionValues = exceptionMessage.split("\n"); - exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: "); - if (window.console) - console.log(exceptionMessage); - else - debugConsole(exceptionMessage); - } else { - if (window.console) - console.log(message); - else - debugConsole(message); - } - }); - } -}; - -function debugConsole(message) { - var console, documentForm; - - try { - console = document.getElementById("plupload_Console"); - - if (!console) { - documentForm = document.createElement("form"); - document.getElementsByTagName("body")[0].appendChild(documentForm); - - console = document.createElement("textarea"); - console.id = "plupload_Console"; - console.style.fontFamily = "monospace"; - console.setAttribute("wrap", "off"); - console.wrap = "off"; - console.style.overflow = "auto"; - console.style.width = "99%"; - console.style.height = "350px"; - console.style.margin = "5px"; - documentForm.appendChild(console); - } - - console.value += message + "\n"; - - console.scrollTop = console.scrollHeight - console.clientHeight; - } catch (ex) { - alert("Exception: " + ex.name + " Message: " + ex.message); - } -}; +/** + * NextGEN Gallery - plupload Handlers + * + * Built on top of the plupload library + * http://www.plupload.com version 1.4.2 + * + * version 1.0.0 + */ + +// on load change the upload to plupload +function initUploader() { + + jQuery(document).ready(function($){ + + /* Not working in chrome, needs rework + var dropElm = jQuery('#' + uploader.settings.drop_element); + if (dropElm.length && uploader.features.dragdrop) { + dropElm.bind('dragenter', function() { + jQuery(this).css('border', '3px dashed #cccccc'); + }); + dropElm.bind('dragout drop', function() { + jQuery(this).css('border', 'none'); + }); + }*/ + + // enable or disable the resize feature + jQuery('#image_resize').bind('change', function() { + var arg = jQuery(this).prop('checked'); + setResize( arg ); + + if ( arg ) + setUserSetting('ngg_upload_resize', '1'); + else + deleteUserSetting('ngg_upload_resize'); + }); + + // get user settings from cookie + setResize( getUserSetting('ngg_upload_resize', false) ); + + if ( uploader.features.dragdrop ) + jQuery('.ngg-dragdrop-info').show(); + + jQuery("#uploadimage_btn").after("<input class='button-primary' type='button' name='uploadimage' id='plupload_btn' value='" + uploader.settings.i18n.upload + "' />") + .remove(); + jQuery("#plupload_btn").click( function() { uploader.start(); } ); + }); +} + +// called when a file is added +function fileQueued( fileObj ) { + debug('[FilesAdded]', fileObj); + + filesize = " (" + plupload.formatSize(fileObj.size) + ") "; + jQuery("#txtFileName").val(fileObj.name); + jQuery("#uploadQueue") + .append("<div id='" + fileObj.id + "' class='nggUploadItem'> [<a href=''>" + uploader.settings.i18n.remove + "</a>] " + fileObj.name + filesize + "</div>") + .children("div:last").slideDown("slow") + .end(); + jQuery('#' + fileObj.id + ' a').click(function(e) { + jQuery('#' + fileObj.id).remove(); + uploader.removeFile(fileObj); + e.preventDefault(); + }); +} + +// called before the uploads start +function uploadStart(fileObj) { + debug('[uploadStart]'); + nggProgressBar.init(nggAjaxOptions); + // check if a gallery is selected + if (jQuery('#galleryselect').val() > "0") { + debug('[gallery selected]'); + // update the selected gallery in the post_params + uploader.settings.multipart_params.galleryselect = jQuery('#galleryselect').val(); + } else { + debug('[gallery not selected]'); + jQuery('#uploadimage_form').prepend("<input type=\"hidden\" name=\"swf_callback\" value=\"-1\">"); + jQuery("#uploadimage_form").submit(); + } + return true; +} + +// called during the upload progress +function uploadProgress(fileObj, bytesDone, bytesTotal) { + var percent = 100; + if (bytesTotal != undefined) + percent = Math.ceil((bytesDone / bytesTotal) * 100); + debug('[uploadProgress]', fileObj.name + ' : ' + percent + "%"); + nggProgressBar.increase( percent ); + jQuery("#progressbar span").text(percent + "% - " + fileObj.name); +} + +// called when all files are uploaded +function uploadComplete(fileObj) { + debug('[uploadComplete]'); + + // Upload the next file until queue is empty + if ( uploader.total.queued == 0) { + //TODO: we submit here no error code + jQuery('#uploadimage_form').prepend("<input type=\"hidden\" name=\"swf_callback\" value=\"0\">"); + nggProgressBar.finished(); + jQuery("#uploadimage_form").submit(); + } +} + +// called when the file is uploaded +function uploadSuccess(fileObj, serverData) { + debug('[uploadSuccess]', serverData); + + if (serverData.response != 0 && serverData.response != '<pre>0</pre>') + nggProgressBar.addNote("<strong>ERROR</strong>: " + fileObj.name + " : " + serverData.response); + + jQuery("#" + fileObj.id).hide("slow"); + jQuery("#" + fileObj.id).remove(); +} + +function cancelUpload() { + uploader.stop(); + jQuery.each(uploader.files, function(i,file) { + if (file.status == plupload.STOPPED) + jQuery('#' + file.id).remove(); + }); +} + +function uploadError(fileObj, errorCode, message) { + debug('[uploadError]', errorCode, message); + switch (errorCode) { + case plupload.FAILED: + error_name = fileObj.name + " : " + pluploadL10n.upload_failed; + break; + case plupload.FILE_EXTENSION_ERROR: + error_name = fileObj.name + " : " + pluploadL10n.invalid_filetype; + break; + case plupload.FILE_SIZE_ERROR: + error_name = fileObj.name + " : " + pluploadL10n.upload_limit_exceeded; + break; + case plupload.IMAGE_FORMAT_ERROR: + error_name = fileObj.name + " : " + pluploadL10n.not_an_image; + break; + case plupload.IMAGE_MEMORY_ERROR: + error_name = fileObj.name + " : " + pluploadL10n.image_memory_exceeded; + break; + case plupload.IMAGE_DIMENSIONS_ERROR: + error_name = fileObj.name + " : " + pluploadL10n.image_dimensions_exceeded; + break; + case plupload.GENERIC_ERROR: + error_name = pluploadL10n.upload_failed; + break; + case plupload.IO_ERROR: + error_name = pluploadL10n.io_error; + break; + case plupload.HTTP_ERROR: + error_name = pluploadL10n.http_error; + break; + case plupload.INIT_ERROR: + /* what should we do in this case ? */ + //switchUploader(0); + //jQuery('.upload-html-bypass').hide(); + break; + case plupload.SECURITY_ERROR: + error_name = pluploadL10n.security_error; + break; + case plupload.UPLOAD_ERROR.UPLOAD_STOPPED: + case plupload.UPLOAD_ERROR.FILE_CANCELLED: + break; + default: + FileError(fileObj, pluploadL10n.default_error); + } + nggProgressBar.addNote("<strong>ERROR " + error_name + " </strong>: " + message); + + jQuery("#" + fileObj.id).hide("slow"); + jQuery("#" + fileObj.id).remove(); +} + +// client side resize feature +function setResize(arg) { + if ( arg ) { + debug('[enable resize]'); + if ( uploader.features.jpgresize ) + uploader.settings['resize'] = { width: resize_width, height: resize_height, quality: resize_quality }; + else + uploader.settings.multipart_params.image_resize = true; + } else { + debug('[disable resize]'); + delete(uploader.settings.resize); + delete(uploader.settings.multipart_params.image_resize); + } +} + +function debug() { + if ( uploader.settings.debug ) { + plupload.each(arguments, function(message) { + var exceptionMessage, exceptionValues = []; + + // Check for an exception object and print it nicely + if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") { + for (var key in message) { + if (message.hasOwnProperty(key)) { + exceptionValues.push(key + ": " + message[key]); + } + } + exceptionMessage = exceptionValues.join("\n") || ""; + exceptionValues = exceptionMessage.split("\n"); + exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: "); + if (window.console) + console.log(exceptionMessage); + else + debugConsole(exceptionMessage); + } else { + if (window.console) + console.log(message); + else + debugConsole(message); + } + }); + } +}; + +function debugConsole(message) { + var console, documentForm; + + try { + console = document.getElementById("plupload_Console"); + + if (!console) { + documentForm = document.createElement("form"); + document.getElementsByTagName("body")[0].appendChild(documentForm); + + console = document.createElement("textarea"); + console.id = "plupload_Console"; + console.style.fontFamily = "monospace"; + console.setAttribute("wrap", "off"); + console.wrap = "off"; + console.style.overflow = "auto"; + console.style.width = "99%"; + console.style.height = "350px"; + console.style.margin = "5px"; + documentForm.appendChild(console); + } + + console.value += message + "\n"; + + console.scrollTop = console.scrollHeight - console.clientHeight; + } catch (ex) { + alert("Exception: " + ex.name + " Message: " + ex.message); + } +}; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php index fd4f37dda533d99d02df341639ad2fe40803525f..43ddd9eb797049c6b2ebddbb2af7e1008873bde8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php @@ -17,7 +17,21 @@ function nggallery_manage_gallery_main() { $order = ( isset ( $_GET['order'] ) && $_GET['order'] == 'desc' ) ? 'DESC' : 'ASC'; $orderby = ( isset ( $_GET['orderby'] ) && ( in_array( $_GET['orderby'], array('gid', 'title', 'author') )) ) ? $_GET['orderby'] : 'gid'; - $gallerylist = $nggdb->find_all_galleries( $orderby, $order , TRUE, $items_per_page, $start, false); + $mapper = C_Gallery_Mapper::get_instance(); + $total_number_of_galleries = $mapper->count(); + $gallerylist = $mapper->select()->order_by($orderby, $order)->limit($items_per_page, $start)->run_query(); + + // Need for upgrading from 2.0.40 to 2.0.52 or later. + // For some reason, the installer doesn't always run. + // TODO: Remove in 2.1 + if (!$gallerylist){ + global $wpdb; + if ($wpdb->get_results("SELECT gid FROM {$wpdb->nggallery} LIMIT 1")) { + $installer = new C_NggLegacy_Installer(); + $installer->install(); + $gallerylist = $mapper->select()->order_by($orderby, $order)->limit($items_per_page, $start)->run_query(); + } + } $wp_list_table = new _NGG_Galleries_List_Table('nggallery-manage-gallery'); ?> @@ -185,7 +199,7 @@ function nggallery_manage_gallery_main() { </div> - <?php $ngg->manage_page->pagination( 'top', $_GET['paged'], $nggdb->paged['total_objects'], $nggdb->paged['objects_per_page'] ); ?> + <?php $ngg->manage_page->pagination( 'top', $_GET['paged'], $total_number_of_galleries, $items_per_page ); ?> </div> <table class="wp-list-table widefat fixed" cellspacing="0"> @@ -207,6 +221,7 @@ if($gallerylist) { $gallery_columns = $wp_list_table->get_columns(); $hidden_columns = get_hidden_columns('nggallery-manage-gallery'); $num_columns = count($gallery_columns) - count($hidden_columns); + $image_mapper = C_Image_Mapper::get_instance(); foreach($gallerylist as $gallery) { $alternate = ( !isset($alternate) || $alternate == 'class="alternate"' ) ? '' : 'class="alternate"'; @@ -270,6 +285,12 @@ if($gallerylist) { <?php break; case 'quantity' : + $gallery->counter = count( + $image_mapper->select($image_mapper->get_primary_key_column())-> + where(array("galleryid = %d", $gallery->{$gallery->id_field}))-> + run_query(FALSE, TRUE) + ); + ?> <td <?php echo $attributes ?>><?php echo $gallery->counter; ?></td> <?php @@ -291,7 +312,7 @@ if($gallerylist) { </tbody> </table> <div class="tablenav bottom"> - <?php $ngg->manage_page->pagination( 'bottom', $_GET['paged'], $nggdb->paged['total_objects'], $nggdb->paged['objects_per_page'] ); ?> + <?php $ngg->manage_page->pagination( 'bottom', $_GET['paged'], $total_number_of_galleries, $items_per_page ); ?> </div> </form> </div> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php index 6a19c61fb547f13f0b4206ffda6a216639608e4b..ac1130152bbb853aa7e36496164f69093238a955 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php @@ -2,7 +2,7 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You are not allowed to call this page directly.');} -function nggallery_picturelist() { +function nggallery_picturelist($controller) { // *** show picture list global $wpdb, $nggdb, $user_ID, $ngg; @@ -28,7 +28,8 @@ function nggallery_picturelist() { $act_gid = $ngg->manage_page->gid; // Load the gallery metadata - $gallery = $nggdb->find_gallery($act_gid); + $mapper = C_Gallery_Mapper::get_instance(); + $gallery = $mapper->find($act_gid); if (!$gallery) { nggGallery::show_error(__('Gallery not found.', 'nggallery')); @@ -43,11 +44,20 @@ function nggallery_picturelist() { // look for pagination $_GET['paged'] = isset($_GET['paged']) && ($_GET['paged'] > 0) ? absint($_GET['paged']) : 1; + $items_per_page = 50; - $start = ( $_GET['paged'] - 1 ) * 50; + $start = ( $_GET['paged'] - 1 ) * $items_per_page; // get picture values - $picturelist = $nggdb->get_gallery($act_gid, $ngg->options['galSort'], $ngg->options['galSortDir'], false, 50, $start ); + $image_mapper = C_Image_Mapper::get_instance(); + + $total_number_of_images = count($image_mapper->select($image_mapper->get_primary_key_column())-> + where(array("galleryid = %d", $act_gid))->run_query(FALSE, TRUE)); + + $picturelist = $image_mapper->select()-> + where(array("galleryid = %d", $act_gid))-> + order_by($ngg->options['galSort'], $ngg->options['galSortDir'])-> + limit($items_per_page, $start)->run_query(); // get the current author $act_author_user = get_userdata( (int) $gallery->author ); @@ -240,6 +250,13 @@ jQuery(document).ready( function($) { jQuery('.if-js-closed').removeClass('if-js-closed').addClass('closed'); postboxes.add_postbox_toggles('ngg-manage-gallery'); + jQuery('.iedit').mouseover( + function(e){ + jQuery(this).parent().find('.row-actions').css('visibility', 'hidden'); + jQuery(this).next('.row_actions:first').find('.row-actions:first').css('visibility', 'visible'); + } + ); + $(this).data('ready', true); }); @@ -280,91 +297,10 @@ jQuery(document).ready( function($) { <div id="gallerydiv" class="postbox <?php echo postbox_classes('gallerydiv', 'ngg-manage-gallery'); ?>" > <h3><?php _e('Gallery settings', 'nggallery') ?><small> (<?php _e('Click here for more settings', 'nggallery') ?>)</small></h3> <div class="inside"> - <table class="form-table" > - <tr> - <th align="left"><?php _e('Title') ?>:</th> - <th align="left"><input <?php nggGallery::current_user_can_form( 'NextGEN Edit gallery title' ); ?> type="text" size="50" name="title" value="<?php echo esc_attr(stripslashes($gallery->title)); ?>" /></th> - <th align="right"><?php _e('Page Link to', 'nggallery') ?>:</th> - <th align="left"> - <select <?php nggGallery::current_user_can_form( 'NextGEN Edit gallery page id' ); ?> name="pageid" style="width:95%"> - <option value="0" ><?php _e('Not linked', 'nggallery') ?></option> - <?php foreach (get_pages() as $page): ?> - <option <?php selected($gallery->pageid, $page->ID) ?> value="<?php echo esc_attr($page->ID)?>"><?php echo esc_html($page->post_title)?></option> - <?php endforeach ?> - </select> - </th> - </tr> - <tr> - <th align="left"><?php _e('Description') ?>:</th> - <th align="left"><textarea <?php nggGallery::current_user_can_form( 'NextGEN Edit gallery description' ); ?> name="gallerydesc" cols="30" rows="3" style="width: 95%" ><?php echo esc_attr(stripslashes($gallery->galdesc)); ?></textarea></th> - <th align="right"><?php _e('Preview image', 'nggallery') ?>:</th> - <th align="left"> - <select <?php nggGallery::current_user_can_form( 'NextGEN Edit gallery preview pic' ); ?> name="previewpic" style="width:95%" > - <option value="0" ><?php _e('No Picture', 'nggallery') ?></option> - <?php - // ensure that a preview pic from a other page is still shown here - if ( intval($gallery->previewpic) != 0) { - if ( !array_key_exists ($gallery->previewpic, $picturelist )){ - $previewpic = $nggdb->find_image($gallery->previewpic); - if ($previewpic) - echo '<option value="'.$previewpic->pid.'" selected="selected" >'.$previewpic->pid.' - ' . esc_attr( $previewpic->filename ) . '</option>'."\n"; - } - } - if(is_array($picturelist)) { - foreach($picturelist as $picture) { - if ($picture->exclude) continue; - $selected = ($picture->pid == $gallery->previewpic) ? 'selected="selected" ' : ''; - echo '<option value="'.$picture->pid.'" '.$selected.'>'.$picture->pid.' - ' . esc_attr( $picture->filename ) . '</option>'."\n"; - } - } - ?> - </select> - </th> - </tr> - <tr> - <th align="left"><?php _e('Path', 'nggallery') ?>:</th> - <th align="left"><input readonly="readonly" type="text" size="50" name="path" value="<?php echo $gallery->path; ?>" /></th> - <th align="right"><?php _e('Author', 'nggallery'); ?>:</th> - <th align="left"> - <?php - $editable_ids = $ngg->manage_page->get_editable_user_ids( $user_ID ); - if ( $editable_ids && count( $editable_ids ) > 1 && nggGallery::current_user_can( 'NextGEN Edit gallery author') ) - wp_dropdown_users( array('include' => $editable_ids, 'name' => 'author', 'selected' => empty( $gallery->author ) ? 0 : $gallery->author ) ); - else - echo $act_author_user->display_name; - ?> - </th> - </tr> - <?php if(current_user_can( 'publish_pages' )) : ?> - <tr> - <th align="left"> </th> - <th align="left"> </th> - <th align="right"> - <label for='ngg_settings_parent_id' - class='tooltip' - title="Clicking <?php _e('Add Page'); ?> will create a new page with the same name as this gallery and will display the gallery on that new page. You can create a sub-page by selecting the parent page from the drop down."> - <?php _e('Create new page', 'nggallery') ?>: - </label> - </th> - <th align="left"> - <select name="parent_id" style="width:95%" id='ngg_settings_parent_id'> - <option value="0"><?php _e ('Main page (No parent)', 'nggallery'); ?></option> - <?php foreach (get_pages() as $page): ?> - <option value="<?php echo esc_attr($page->ID)?>"><?php echo esc_html($page->post_title)?></option> - <?php endforeach ?> - </select> - <input class="button-secondary action" type="submit" name="addnewpage" value="<?php _e ('Add page', 'nggallery'); ?>" id="group"/> - </th> - </tr> - <?php endif; ?> - <?php do_action('ngg_manage_gallery_settings', $act_gid); ?> - - </table> + <?php $controller->render_gallery_fields(); ?> <div class="submit"> - <?php - if ( wpmu_enable_function('wpmuScanFolder') && nggGallery::current_user_can( 'NextGEN Scan folder' ) ) : - ?> + <?php if ( wpmu_enable_function('wpmuImportFolder') && nggGallery::current_user_can( 'NextGEN Import image folder' ) ) : ?> <input type="submit" class="button-secondary" name="scanfolder" value="<?php _e("Scan Folder for new images",'nggallery'); ?> " /> <?php endif; ?> <input type="submit" class="button-primary action" name="updatepictures" value="<?php _e("Save Changes",'nggallery'); ?>" /> @@ -378,7 +314,7 @@ jQuery(document).ready( function($) { <?php endif; ?> <div class="tablenav top ngg-tablenav"> - <?php $ngg->manage_page->pagination( 'top', $_GET['paged'], $nggdb->paged['total_objects'], $nggdb->paged['objects_per_page'] ); ?> + <?php $ngg->manage_page->pagination( 'top', $_GET['paged'], $total_number_of_images, $items_per_page ); ?> <div class="alignleft actions"> <select id="bulkaction" name="bulkaction"> <option value="no_action" ><?php _e("Bulk actions",'nggallery'); ?></option> @@ -405,24 +341,20 @@ jQuery(document).ready( function($) { <input type="submit" name="updatepictures" class="button-primary action" value="<?php _e('Save Changes', 'nggallery');?>" /> </div> </div> - <table id="ngg-listimages" class="widefat fixed" cellspacing="0" > <thead> - <tr> -<?php $wp_list_table->print_column_headers(true); ?> - </tr> + <?php $controller->render_image_row_header() ?> </thead> <tfoot> - <tr> -<?php $wp_list_table->print_column_headers(false); ?> - </tr> + <?php $controller->render_image_row_header() ?> </tfoot> <tbody id="the-list"> <?php if($picturelist) { $thumbsize = ''; + $storage = C_Gallery_Storage::get_instance(); if ($ngg->options['thumbfix']) $thumbsize = 'width="' . $ngg->options['thumbwidth'] . '" height="' . $ngg->options['thumbheight'] . '"'; @@ -430,118 +362,15 @@ if($picturelist) { foreach($picturelist as $picture) { //for search result we need to check the capatibiliy - if ( !nggAdmin::can_manage_this_gallery($picture->author) && $is_search ) + if ( !nggAdmin::can_manage_this_gallery($gallery->author) && $is_search ) continue; $counter++; - $pid = (int) $picture->pid; - $alternate = ( !isset($alternate) || $alternate == 'alternate' ) ? '' : 'alternate'; - $exclude = ( $picture->exclude ) ? 'checked="checked"' : ''; - $date = mysql2date(get_option('date_format'), $picture->imagedate); - $time = mysql2date(get_option('time_format'), $picture->imagedate); - - ?> - <tr id="picture-<?php echo $pid ?>" class="<?php echo $alternate ?> iedit" valign="top"> - <?php - foreach($image_columns as $image_column_key => $column_display_name) { - $class = "class='$image_column_key column-$image_column_key'"; - - $style = ''; - if ( in_array($image_column_key, $hidden_columns) ) - $style = ' style="display:none;"'; - - $attributes = $class . $style; - - switch ($image_column_key) { - case 'cb' : - $attributes = 'class="column-cb check-column"' . $style; - ?> - <th <?php echo $attributes ?> scope="row"><input name="doaction[]" type="checkbox" value="<?php echo $pid ?>" /></th> - <?php - break; - case 'id' : - ?> - <td <?php echo $attributes ?> style=""><?php echo $pid; ?> - <input type="hidden" name="pid[]" value="<?php echo $pid ?>" /> - </td> - <?php - break; - case 'filename' : - $attributes = 'class="title column-filename column-title"' . $style; - ?> - <td <?php echo $attributes ?>> - <strong><a href="<?php echo esc_url( $picture->imageURL ); ?>" class="thickbox" title="<?php echo esc_attr ($picture->filename); ?>"> - <?php echo ( empty($picture->alttext) ) ? esc_html( $picture->filename ) : esc_html( stripslashes(nggGallery::i18n($picture->alttext)) ); ?> - </a></strong> - <br /><?php echo $date; ?> - <?php if ( !empty($picture->meta_data) ): ?> - <br /><?php echo $picture->meta_data['width']; ?> x <?php echo $picture->meta_data['height']; ?> <?php _e('pixel', 'nggallery'); ?> - - <?php endif; ?> - <p> - <?php - $actions = array(); - $actions['view'] = '<a class="shutter" href="' . esc_url( $picture->imageURL ) . '" title="' . esc_attr( sprintf(__('View "%s"'), sanitize_title ($picture->filename) )) . '">' . __('View', 'nggallery') . '</a>'; - $actions['meta'] = '<a class="ngg-dialog" href="' . NGGALLERY_URLPATH . 'admin/showmeta.php?id=' . $pid . '" title="' . __('Show Meta data','nggallery') . '">' . __('Meta', 'nggallery') . '</a>'; - $actions['custom_thumb'] = '<a class="ngg-dialog" href="' . NGGALLERY_URLPATH . 'admin/edit-thumbnail.php?id=' . $pid . '" title="' . __('Customize thumbnail','nggallery') . '">' . __('Edit thumb', 'nggallery') . '</a>'; - $actions['rotate'] = '<a class="ngg-dialog" href="' . NGGALLERY_URLPATH . 'admin/rotate.php?id=' . $pid . '" title="' . __('Rotate','nggallery') . '">' . __('Rotate', 'nggallery') . '</a>'; - if ( current_user_can( 'publish_posts' ) ) - $actions['publish'] = '<a class="ngg-dialog" href="' . NGGALLERY_URLPATH . 'admin/publish.php?id=' . $pid . '&h=230" title="' . __('Publish this image','nggallery') . '">' . __('Publish', 'nggallery') . '</a>'; - if ( file_exists( $picture->imagePath . '_backup' ) ) - $actions['recover'] = '<a class="confirmrecover" href="' .wp_nonce_url("admin.php?page=nggallery-manage-gallery&mode=recoverpic&gid=" . $act_gid . "&pid=" . $pid, 'ngg_recoverpicture'). '" title="' . __('Recover','nggallery') . '" onclick="javascript:check=confirm( \'' . esc_attr(sprintf(__('Recover "%s" ?' , 'nggallery'), $picture->filename)). '\');if(check==false) return false;">' . __('Recover', 'nggallery') . '</a>'; - $actions['delete'] = '<a class="submitdelete" href="' . wp_nonce_url("admin.php?page=nggallery-manage-gallery&mode=delpic&gid=" . $act_gid . "&pid=" . $pid, 'ngg_delpicture'). '" class="delete column-delete" onclick="javascript:check=confirm( \'' . esc_attr(sprintf(__('Delete "%s" ?' , 'nggallery'), $picture->filename)). '\');if(check==false) return false;">' . __('Delete') . '</a>'; - $action_count = count($actions); - $i = 0; - echo '<div class="row-actions">'; - foreach ( $actions as $action => $link ) { - ++$i; - ( $i == $action_count ) ? $sep = '' : $sep = ' | '; - echo "<span class='$action'>$link$sep</span>"; - } - echo '</div>'; - ?></p> - </td> - <?php - break; - case 'thumbnail' : - $attributes = 'class="id column-thumbnail media-icon"' . $style; - ?> - <td <?php echo $attributes ?>><a href="<?php echo esc_url ( add_query_arg('i', mt_rand(), $picture->imageURL) ); ?>" class="shutter" title="<?php echo $picture->filename ?>"> - <img class="thumb" src="<?php echo esc_url ( add_query_arg('i', mt_rand(), $picture->thumbURL) ); ?>" id="thumb<?php echo $pid ?>" /> - </a> - </td> - <?php - break; - case 'alt_title_desc' : - ?> - <td <?php echo $attributes ?>> - <input name="alttext[<?php echo $pid ?>]" type="text" style="width:95%; margin-bottom: 2px;" value="<?php echo esc_attr(stripslashes($picture->alttext)) ?>" /><br/> - <textarea name="description[<?php echo $pid ?>]" style="width:95%; margin-top: 2px;" rows="2" ><?php echo esc_attr(stripslashes($picture->description)) ?></textarea> - </td> - <?php - break; - case 'exclude' : - ?> - <td <?php echo $attributes ?>><input name="exclude[<?php echo $pid ?>]" type="checkbox" value="1" <?php echo $exclude ?> /></td> - <?php - break; - case 'tags' : - $picture->tags = wp_get_object_terms($pid, 'ngg_tag', 'fields=names'); - if (is_array ($picture->tags) ) $picture->tags = implode(', ', $picture->tags); - ?> - <td <?php echo $attributes ?>><textarea name="tags[<?php echo $pid ?>]" style="width:95%;" rows="2"><?php echo $picture->tags ?></textarea></td> - <?php - break; - default : - ?> - <td <?php echo $attributes ?>><?php do_action('ngg_manage_image_custom_column', $image_column_key, $pid); ?></td> - <?php - break; - } - ?> - <?php } ?> - </tr> - <?php + $picture->imageURL = $storage->get_image_url($picture); + $picture->thumbURL = $storage->get_thumb_url($picture); + $picture->imagePath = $storage->get_image_abspath($picture); + $picture->thumbPath = $storage->get_thumb_abspath($picture); + echo apply_filters('ngg_manage_images_row', $picture, $counter); } } @@ -555,7 +384,7 @@ if ( $counter == 0 ) </table> <div class="tablenav bottom"> <input type="submit" class="button-primary action" name="updatepictures" value="<?php _e('Save Changes', 'nggallery'); ?>" /> - <?php $ngg->manage_page->pagination( 'bottom', $_GET['paged'], $nggdb->paged['total_objects'], $nggdb->paged['objects_per_page'] ); ?> + <?php $ngg->manage_page->pagination( 'bottom', $_GET['paged'], $total_number_of_images, $items_per_page ); ?> </div> </form> <br class="clear"/> @@ -741,8 +570,6 @@ class _NGG_Images_List_Table extends WP_List_Table { $columns['filename'] = __('Filename', 'nggallery'); $columns['alt_title_desc'] = __('Alt & Title Text', 'nggallery') . ' / ' . __('Description', 'nggallery'); $columns['tags'] = __('Tags (comma separated list)', 'nggallery'); - $columns['exclude'] = __('exclude', 'nggallery'); - $columns = apply_filters('ngg_manage_images_columns', $columns); return $columns; @@ -751,6 +578,11 @@ class _NGG_Images_List_Table extends WP_List_Table { function get_sortable_columns() { return array(); } + + function the_list() + { + + } } ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php index 71538a2cafd0053db765b7b0b7887895d6305638..65e0fc80562ca5f57f1ade0e08947beab346773a 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php @@ -28,7 +28,7 @@ function nggallery_sortorder($galleryID = 0){ $sortindex++; } - C_Photocrati_Cache::flush(); + C_Photocrati_Cache::flush('displayed_gallery_rendering'); do_action('ngg_gallery_sort', $galleryID); @@ -101,7 +101,7 @@ function nggallery_sortorder($galleryID = 0){ <input class="button-primary action" type="submit" name="updateSortorder" onclick="saveImageOrder()" value="<?php _e('Update Sort Order', 'nggallery') ?>" /> </div> <div class="alignright actions"> - <a href="<?php echo esc_url( $back_url ); ?>" class="button"><?php _e('Back to gallery', 'nggallery'); ?></a> + <a href="<?php echo nextgen_esc_url( $back_url ); ?>" class="button"><?php _e('Back to gallery', 'nggallery'); ?></a> </div> </div> <input name="sortorder" type="hidden" /> @@ -123,7 +123,7 @@ function nggallery_sortorder($galleryID = 0){ foreach($picturelist as $picture) { ?> <div class="imageBox" id="pid-<?php echo $picture->pid ?>"> - <div class="imageBox_theImage" style="background-image:url('<?php echo esc_url( $picture->thumbURL ); ?>')"></div> + <div class="imageBox_theImage" style="background-image:url('<?php echo nextgen_esc_url( $picture->thumbURL ); ?>')"></div> <div class="imageBox_label"><span><?php echo esc_html( stripslashes($picture->alttext) ); ?></span></div> </div> <?php diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage.php index df1de53d80d71b469d26e7cc816034c0d8070c27..aa7d34aa1916e706769b9d52d2fe57ad1ed6b6da 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/manage.php @@ -6,6 +6,7 @@ class nggManageGallery { var $mode = 'main'; var $gid = false; + var $gallery = NULL; var $pid = false; var $base_page = 'admin.php?page=nggallery-manage-gallery'; var $search_result = false; @@ -14,8 +15,10 @@ class nggManageGallery { function nggManageGallery() { // GET variables - if( isset($_GET['gid']) ) + if( isset($_GET['gid']) ) { $this->gid = (int) $_GET['gid']; + $this->gallery = C_Gallery_Mapper::get_instance()->find($this->gid); + } if( isset($_GET['pid']) ) $this->pid = (int) $_GET['pid']; if( isset($_GET['mode']) ) @@ -50,8 +53,10 @@ class nggManageGallery { nggallery_sortorder($this->gid); break; case 'edit': + $this->setup_gallery_fields(); + $this->setup_image_rows(); include_once (dirname (__FILE__) . '/manage-images.php'); - nggallery_picturelist(); + nggallery_picturelist($this); break; case 'main': default: @@ -73,12 +78,11 @@ class nggManageGallery { $image = $nggdb->find_image( $this->pid ); if ($image) { if ($ngg->options['deleteImg']) { - @unlink($image->imagePath); - @unlink($image->thumbPath); - @unlink($image->imagePath . '_backup' ); + $storage = C_Component_Registry::get_instance()->get_utility('I_Gallery_Storage'); + $storage->delete_image($this->pid); } $mapper = C_Image_Mapper::get_instance(); - $mapper->destroy($this->pid); + $result = $mapper->destroy($this->pid); do_action('ngg_delete_picture', $this->pid); if ($result) @@ -119,6 +123,431 @@ class nggManageGallery { } + function setup_image_rows() + { + add_filter('ngg_manage_images_row', array(&$this, 'render_image_row'), 10, 2); + add_filter('ngg_manage_images_column_1_header', array(&$this, 'render_image_column_1_header')); + add_filter('ngg_manage_images_column_1_content', array(&$this, 'render_image_column_1'), 10, 2); + + add_filter('ngg_manage_images_column_2_header', array(&$this, 'render_image_column_2_header')); + add_filter('ngg_manage_images_column_2_content', array(&$this, 'render_image_column_2'), 10, 2); + + add_filter('ngg_manage_images_column_3_header', array(&$this, 'render_image_column_3_header')); + add_filter('ngg_manage_images_column_3_content', array(&$this, 'render_image_column_3'), 10, 2); + + add_filter('ngg_manage_images_column_4_header', array(&$this, 'render_image_column_4_header')); + add_filter('ngg_manage_images_column_4_content', array(&$this, 'render_image_column_4'), 10, 2); + + add_filter('ngg_manage_images_column_5_header', array(&$this, 'render_image_column_5_header')); + add_filter('ngg_manage_images_column_5_content', array(&$this, 'render_image_column_5'), 10, 2); + + add_filter('ngg_manage_images_column_6_header', array(&$this, 'render_image_column_6_header')); + add_filter('ngg_manage_images_column_6_content', array(&$this, 'render_image_column_6'), 10, 2); + } + + function render_image_column_1_header() + { + return '<input type="checkbox" id="cb-select-all-1" onclick="checkAll(document.getElementById(\'updategallery\'));">'; + } + + function render_image_column_2_header() + { + return __('ID', 'nggallery'); + } + + function render_image_column_3_header() + { + return __('Thumbnail', 'nggallery'); + } + + function render_image_column_4_header() + { + return __('Filename', 'nggallery'); + } + + function render_image_column_5_header() + { + return __('Alt & Title Text / Description', 'nggallery'); + } + + function render_image_column_6_header() + { + return __('Tags', 'nggallery'); + } + + function render_image_column_1($output='', $picture=array()) + { + return "<input type='checkbox' name='doaction[]' value='{$picture->pid}'/>"; + } + + function render_image_column_2($output='', $picture=array()) + { + return $picture->pid; + } + + function render_image_column_3($output='', $picture=array()) + { + $image_url = nextgen_esc_url(add_query_arg('i', mt_rand(), $picture->imageURL)); + $thumb_url = nextgen_esc_url(add_query_arg('i', mt_rand(), $picture->thumbURL)); + $filename = esc_attr($picture->filename); + + $output = array(); + + $output[] = "<a href='{$image_url}' class='shutter' title='{$filename}'>"; + $output[] = "<img class='thumb' src='{$thumb_url}' id='thumb{$picture->pid}'/>"; + $output[] = "</a>"; + + return ($output = implode("\n", $output)); + } + + function render_image_column_4($output='', $picture=array()) + { + $image_url = nextgen_esc_url($picture->imageURL); + $filename = esc_attr($picture->filename); + $caption = esc_html((empty($picture->alttext) ? $picture->filename: $picture->alttext)); + $date = mysql2date(get_option('date_format'), $picture->imagedate); + $width = $picture->meta_data['width']; + $height = $picture->meta_data['height']; + $pixels = "{$width} x {$height} pixels"; + $excluded = checked($picture->exclude, 1, false); + $exclude_label = __("Exclude ?", 'nggallery'); + + $output = array(); + + $output[] = "<div><strong><a href='{$image_url}' class='thickbox' title='{$filename}'>{$caption}</a></strong></div>"; + $output[] = '<div class="meta">'. esc_html($date) . '</div>'; + $output[] = "<div class='meta'>{$pixels}</div>"; + $output[] = "<label for='exclude_{$picture->pid}'>"; + $output[] = "<input type='checkbox' id='exclude_{$picture->pid}' value='1' name='images[{$picture->pid}][exclude]' {$excluded}/> {$exclude_label}"; + $output[] = "</label>"; + + return ($output = implode("\n", $output)); + } + + function render_image_column_5($output='', $picture=array()) + { + $alttext = esc_attr(stripslashes($picture->alttext)); + $desc = esc_html(stripslashes($picture->description)); + + $output = array(); + + $output[] = "<input title='Alt/Title Text' type='text' name='images[{$picture->pid}][alttext]' value='{$alttext}'/>"; + $output[] = "<textarea title='Description' rows='3' name='images[$picture->pid][description]'>{$desc}</textarea>"; + + return ($output = implode("\n", $output)); + } + + function render_image_column_6($output='', $picture=array()) + { + $tags = wp_get_object_terms($picture->pid, 'ngg_tag', 'fields=names'); + if (is_array($tags)) $tags = implode(', ', $tags); + $tags = esc_html($tags); + + return "<textarea rows='4' name='images[{$picture->pid}][tags]'>{$tags}</textarea>"; + } + + function render_image_row($picture, $counter) + { + // Get number of columns + $class = !($counter % 2 == 0) ? '' : 'alternate'; + $columns = apply_filters('ngg_manage_images_number_of_columns', 6); + + // Get the valid row actions + $actions = array(); + $row_actions = apply_filters('ngg_manage_images_row_actions', array( + 'view' => array(&$this, 'render_view_action_link'), + 'meta' => array(&$this, 'render_meta_action_link'), + 'custom_thumb' => array(&$this, 'render_custom_thumb_action_link'), + 'rotate' => array(&$this, 'render_rotate_action_link'), + 'publish' => array(&$this, 'render_publish_action_link'), + 'recover' => array(&$this, 'render_recover_action_link'), + 'delete' => array(&$this, 'render_delete_action_link') + )); + foreach ($row_actions as $id => $callback) { + if (is_callable($callback)) { + $result = call_user_func($callback, $id, $picture); + if ($result) $actions[] = $result; + } + } + + // Output row columns + echo "<tr class='{$class} iedit' valign='top'>"; + for ($i=1; $i <= $columns; $i++) { + $rowspan = $i > 4 ? "rowspan='2'" : ''; + echo "<td class='column column-{$i}' {$rowspan}>"; + echo apply_filters("ngg_manage_images_column_{$i}_content", '', $picture); + echo '</td>'; + } + echo '</tr>'; + + // Actions row + echo "<tr class='{$class} row_actions'>"; + echo '<td colspan="2"></td>'; + echo "<td colspan='".($columns-2)."'>"; + echo "<div class='row-actions'>"; + echo implode(" | ", $actions); + echo "</div>"; + echo "</td>"; + echo '</tr>'; + } + + + function render_view_action_link($id, $picture) + { + $image_url = nextgen_esc_url($picture->imageURL); + $label = esc_html__('View', 'nggallery'); + $alt_text = empty($picture->alttext) ? $picture->filename: $picture->alttext; + $title = esc_attr(__('View', 'nggallery'). " \"{$alt_text}\""); + + return "<a href='{$image_url}' class='shutter' title='{$title}'>{$label}</a>"; + } + + function render_meta_action_link($id, $picture) + { + $url = nextgen_esc_url(NGGALLERY_URLPATH.'admin/showmeta.php?id='.$picture->pid); + $title = esc_attr__('Show meta data', 'nggallery'); + $label = esc_html__('Meta', 'nggallery'); + + return "<a href='{$url}' class='ngg-dialog' title='{$title}'>{$label}</a>"; + } + + function render_custom_thumb_action_link($id, $picture) + { + $url = nextgen_esc_url(NGGALLERY_URLPATH.'admin/edit-thumbnail.php?id='.$picture->pid); + $title = esc_attr__('Customize thumbnail', 'nggallery'); + $label = esc_html__("Edit thumb", 'nggallery'); + + return "<a href='{$url}' class='ngg-dialog' title='{$title}'>{$label}</a>"; + } + + function render_rotate_action_link($id, $picture) + { + $url = nextgen_esc_url(NGGALLERY_URLPATH.'admin/rotate.php?id='.$picture->pid); + $title = esc_attr__('Rotate', 'nggallery'); + $label = esc_html__('Rotate', 'nggallery'); + + return "<a href='{$url}' class='ngg-dialog' title='{$title}'>{$label}</a>"; + } + + function render_publish_action_link($id, $picture) + { + if (!current_user_can('publish_posts')) return FALSE; + + $url = nextgen_esc_url(NGGALLERY_URLPATH.'admin/publish.php?h=230&id='.$picture->pid); + $title = esc_attr__('Publish this image', 'nggallery'); + $label = esc_html__('Publish', 'nggallery'); + + return "<a href='{$url}' class='ngg-dialog' title='{$title}'>{$label}</a>"; + } + + function render_recover_action_link($id, $picture) + { + if ( !file_exists( $picture->imagePath . '_backup' )) return FALSE; + + $url = wp_nonce_url("admin.php?page=nggallery-manage-gallery&mode=recoverpic&gid={$picture->galleryid}&pid={$picture->pid}", 'ngg_recoverpicture'); + $title = esc_attr__('Recover image from backup', 'nggallery'); + $label = esc_html__('Recover', 'nggallery'); + $alttext = empty($picture->alttext) ? $picture->filename : $picture->alttext; + $confirm = addslashes(__("Recover", 'nggallery'). " \"{$alttext}\"?"); + $onclick = "javascript:if(!confirm(\"{$confirm}\")) return false"; + + return "<a href='{$url}' onclick='{$onclick}' class='confirmrecover' title='{$title}'>{$label}</a>"; + } + + function render_delete_action_link($id, $picture) + { + $url = wp_nonce_url("admin.php?page=nggallery-manage-gallery&mode=delpic&gid={$picture->galleryid}&pid={$picture->pid}", 'ngg_delpicture'); + $title = esc_attr__('Delete image', 'nggallery'); + $label = esc_html__('Delete', 'nggallery'); + $alttext = empty($picture->alttext) ? $picture->filename : $picture->alttext; + $confirm = addslashes(__("Delete", 'nggallery'). " \"{$alttext}\"?"); + $onclick = "javascript:if(!confirm(\"{$confirm}\")) return false;"; + + return "<a href='{$url}' onclick='{$onclick}' class='submitdelete delete' title='{$title}'>{$label}</a>"; + } + + function render_image_row_header() + { + $columns = apply_filters('ngg_manage_images_number_of_columns', 6); + echo '<tr>'; + for($i=1; $i<=$columns; $i++) { + echo "<th class='column column-{$i}'>"; + echo apply_filters('ngg_manage_images_column_'.$i.'_header', "Column #{$i}"); + echo '</th>'; + } + echo '</tr>'; + } + + function setup_gallery_fields() + { + add_filter('ngg_manage_gallery_fields', array(&$this, 'default_gallery_fields'), 10, 2); + } + + function default_gallery_fields($fields=array(), $gallery=NULL) + { + $fields['left'] = array( + 'title' => array( + 'callback' => array(&$this, 'render_gallery_title_field'), + 'label' => __('Title:', 'nggallery'), + 'tooltip' => NULL, + 'id' => 'gallery_title' + ), + 'description' => array( + 'callback' => array(&$this, 'render_gallery_desc_field'), + 'label' => __('Description:', 'nggallery'), + 'tooltip' => NULL, + 'id' => 'gallery_desc' + ), + 'path' => array( + 'callback' => array(&$this, 'render_gallery_path_field'), + 'label' => __('Gallery path:', 'nggallery'), + 'tooltip' => NULL, + 'id' => 'gallery_path' + ), + 'gallery_author'=> array( + 'callback' => array(&$this, 'render_gallery_author_field'), + 'label' => __('Author', 'nggallery'), + 'tooltip' => NULL, + 'id' => 'gallery_author' + ) + ); + + $fields['right'] = array( + 'page_link_to' => array( + 'callback' => array(&$this, 'render_gallery_link_to_page_field'), + 'label' => __('Link to page:', 'nggallery'), + 'tooltip' => __('Albums will link this gallery to the selected page', 'nggallery'), + 'id' => 'gallery_page_link_to' + ), + 'preview_image' => array( + 'callback' => array(&$this, 'render_gallery_preview_image_field'), + 'label' => __('Preview image:', 'nggallery'), + 'tooltip' => NULL, + 'id' => 'gallery_preview_image', + ), + 'create_page' => array( + 'callback' => array(&$this, 'render_gallery_create_page_field'), + 'label' => __('Create new page:', 'nggallery'), + 'tooltip' => NULL, + 'id' => 'gallery_create_new_page' + ) + ); + + return $fields; + } + + function render_gallery_field_label_column($text, $for, $tooltip = NULL) + { + $for = esc_attr($for); + + if (!empty($tooltip)) + $tooltip = "title='{$tooltip}' class='tooltip'"; + + echo "<td><label {$tooltip} for='{$for}'>{$text}</label></td>"; + } + + function render_gallery_fields() + { + // Get the gallery entity + $gallery = C_Gallery_Mapper::get_instance()->find($this->gid); + + // Get fields + $fields = apply_filters('ngg_manage_gallery_fields', array(), $gallery); + $left = isset($fields['left']) ? $fields['left'] : array(); + $right = isset($fields['right'])? $fields['right']: array(); + + // Output table + echo '<table id="gallery_fields">'; + $number_of_fields = max(count($left), count($right)); + $left_keys = array_keys($left); + $right_keys = array_keys($right); + for($i=0; $i<$number_of_fields; $i++) { + // Start row + echo '<tr>'; + + // Left column + if (isset($left_keys[$i])) { + extract($left[$left_keys[$i]]); + + // Label + $this->render_gallery_field_label_column($label, $id, $tooltip); + + // Input field + if (is_callable($callback)) { + echo '<td>'; + call_user_func($callback, $gallery); + echo '</td>'; + } + elseif (WP_DEBUG) echo "<p>Could not render {$left_keys[$i]} field. No callback exists</p>"; + } + else $output[] = '<td colspan="2"></td>'; + + // Right column + if (isset($right_keys[$i])) { + extract($right[$right_keys[$i]]); + // Label + $this->render_gallery_field_label_column($label, $id, $tooltip); + + // Input field + if (is_callable($callback)) { + echo '<td>'; + call_user_func($callback, $gallery); + echo '</td>'; + } + elseif (WP_DEBUG) echo "<p>Could not render {$right_keys[$i]} field. No callback exists</p>"; + + } + else $output[] = '<td colspan="2"></td>'; + + // End row + echo '</tr>'; + } + echo '</table>'; + } + + function render_gallery_title_field($gallery) + { + include('templates/manage_gallery/gallery_title_field.php'); + } + + function render_gallery_desc_field($gallery) + { + include('templates/manage_gallery/gallery_desc_field.php'); + } + + function render_gallery_path_field($gallery) + { + include('templates/manage_gallery/gallery_path_field.php'); + } + + function render_gallery_author_field($gallery) + { + $user = get_userdata($gallery->author); + $author = isset($user->display_name) ? $user->display_name : $user->user_nicename; + include('templates/manage_gallery/gallery_author_field.php'); + } + + function render_gallery_link_to_page_field($gallery) + { + $pages = get_pages(); + include('templates/manage_gallery/gallery_link_to_page_field.php'); + } + + function render_gallery_preview_image_field($gallery) + { + $images = array(); + foreach (C_Image_Mapper::get_instance()->find_all(array("galleryid = %s", $gallery->{$gallery->id_field})) as $image) { + $images[$image->{$image->id_field}] = "[{$image->{$image->id_field}}] {$image->filename}"; + } + include('templates/manage_gallery/gallery_preview_image_field.php'); + } + + function render_gallery_create_page_field($gallery) + { + $pages = get_pages(); + include('templates/manage_gallery/gallery_create_page_field.php'); + } + function post_processor_galleries() { global $wpdb, $ngg, $nggdb; @@ -155,18 +584,18 @@ class nggManageGallery { $gallery = nggdb::find_gallery($id); if ($gallery){ //TODO:Remove also Tag reference, look here for ids instead filename - $imagelist = $wpdb->get_col("SELECT filename FROM $wpdb->nggpictures WHERE galleryid = '$gallery->gid' "); + $imagelist = $wpdb->get_col("SELECT pid FROM $wpdb->nggpictures WHERE galleryid = '$gallery->gid' "); if ($ngg->options['deleteImg']) { + $storage = C_Component_Registry::get_instance()->get_utility('I_Gallery_Storage'); if (is_array($imagelist)) { - foreach ($imagelist as $filename) { - @unlink(WINABSPATH . $gallery->path . '/thumbs/thumbs_' . $filename); - @unlink(WINABSPATH . $gallery->path .'/'. $filename); - @unlink(WINABSPATH . $gallery->path .'/'. $filename . '_backup'); + foreach ($imagelist as $pid) { + $storage->delete_image($pid); } } // delete folder - @rmdir( WINABSPATH . $gallery->path . '/thumbs' ); - @rmdir( WINABSPATH . $gallery->path ); + @rmdir( ABSPATH . $gallery->path . '/thumbs' ); + @rmdir( ABSPATH . $gallery->path . '/dynamic' ); + @rmdir( ABSPATH . $gallery->path ); } } do_action('ngg_delete_gallery', $id); @@ -186,11 +615,11 @@ class nggManageGallery { check_admin_referer('ngg_addgallery'); if ( !nggGallery::current_user_can( 'NextGEN Add new gallery' )) - wp_die(__('Cheatin’ uh?')); + wp_die(__('Cheatin’ uh?', 'nggallery')); // get the default path for a new gallery $defaultpath = $ngg->options['gallerypath']; - $newgallery = esc_attr( $_POST['galleryname']); + $newgallery = $_POST['galleryname']; if ( !empty($newgallery) ) nggAdmin::create_gallery($newgallery, $defaultpath); @@ -216,15 +645,17 @@ class nggManageGallery { check_admin_referer('ngg_thickbox_form'); - //save the new values for the next operation - $ngg->options['thumbwidth'] = (int) $_POST['thumbwidth']; - $ngg->options['thumbheight'] = (int) $_POST['thumbheight']; - $ngg->options['thumbfix'] = isset ($_POST['thumbfix']) ? true : false; - // What is in the case the user has no if cap 'NextGEN Change options' ? Check feedback - update_option('ngg_options', $ngg->options); + // save the new values for the next operation + $settings = C_NextGen_Settings::get_instance(); + $settings->thumbwidth = (int)$_POST['thumbwidth']; + $settings->thumbheight = (int)$_POST['thumbheight']; + $settings->thumbfix = isset($_POST['thumbfix']) ? TRUE : FALSE; + $settings->save(); ngg_refreshSavedSettings(); + // What is in the case the user has no if cap 'NextGEN Change options' ? Check feedback $gallery_ids = explode(',', $_POST['TB_imagelist']); + // A prefix 'gallery_' will first fetch all ids from the selected galleries nggAdmin::do_ajax_operation( 'gallery_create_thumbnail' , $gallery_ids, __('Create new thumbnails','nggallery') ); } @@ -260,9 +691,8 @@ class nggManageGallery { $image = $nggdb->find_image( $imageID ); if ($image) { if ($ngg->options['deleteImg']) { - @unlink($image->imagePath); - @unlink($image->thumbPath); - @unlink($image->imagePath."_backup"); + $storage = C_Component_Registry::get_instance()->get_utility('I_Gallery_Storage'); + $storage->delete_image($image->pid); } do_action('ngg_delete_picture', $image->pid); $delete_pic = nggdb::delete_image( $image->pid ); @@ -289,22 +719,23 @@ class nggManageGallery { update_option('ngg_options', $ngg->options); $pic_ids = explode(',', $_POST['TB_imagelist']); - nggAdmin::do_ajax_operation( 'resize_image' , $pic_ids, __('Resize images','nggallery') ); + nggAdmin::do_ajax_operation( 'resize_image' , $pic_ids, __('Resize images', 'nggallery') ); } if (isset ($_POST['TB_bulkaction']) && isset ($_POST['TB_NewThumbnail'])) { check_admin_referer('ngg_thickbox_form'); - //save the new values for the next operation - $ngg->options['thumbwidth'] = (int) $_POST['thumbwidth']; - $ngg->options['thumbheight'] = (int) $_POST['thumbheight']; - $ngg->options['thumbfix'] = isset ( $_POST['thumbfix'] ) ? true : false; - update_option('ngg_options', $ngg->options); + // save the new values for the next operation + $settings = C_NextGen_Settings::get_instance(); + $settings->thumbwidth = (int)$_POST['thumbwidth']; + $settings->thumbheight = (int)$_POST['thumbheight']; + $settings->thumbfix = isset($_POST['thumbfix']) ? TRUE : FALSE; + $settings->save(); ngg_refreshSavedSettings(); $pic_ids = explode(',', $_POST['TB_imagelist']); - nggAdmin::do_ajax_operation( 'create_thumbnail' , $pic_ids, __('Create new thumbnails','nggallery') ); + nggAdmin::do_ajax_operation( 'create_thumbnail' , $pic_ids, __('Create new thumbnails', 'nggallery') ); } if (isset ($_POST['TB_bulkaction']) && isset ($_POST['TB_SelectGallery'])) { @@ -376,22 +807,26 @@ class nggManageGallery { check_admin_referer('ngg_updategallery'); if ( nggGallery::current_user_can( 'NextGEN Edit gallery options' ) && !isset ($_GET['s']) ) { + $tags = array('<a>', '<abbr>', '<acronym>', '<address>', '<b>', '<base>', '<basefont>', '<big>', '<blockquote>', '<br>', '<br/>', '<caption>', '<center>', '<cite>', '<code>', '<col>', '<colgroup>', '<dd>', '<del>', '<dfn>', '<dir>', '<div>', '<dl>', '<dt>', '<em>', '<fieldset>', '<font>', '<h1>', '<h2>', '<h3>', '<h4>', '<h5>', '<h6>', '<hr>', '<i>', '<ins>', '<label>', '<legend>', '<li>', '<menu>', '<noframes>', '<noscript>', '<ol>', '<optgroup>', '<option>', '<p>', '<pre>', '<q>', '<s>', '<samp>', '<select>', '<small>', '<span>', '<strike>', '<strong>', '<sub>', '<sup>', '<table>', '<tbody>', '<td>', '<tfoot>', '<th>', '<thead>', '<tr>', '<tt>', '<u>', '<ul>'); + $fields = array('title', 'galdesc'); + + // Sanitize fields + foreach ($fields as $field) { + $html = $_POST[$field]; + $html = preg_replace('/\\s+on\\w+=(["\']).*?\\1/i', '', $html); + $html = preg_replace('/(<\/[^>]+?>)(<[^>\/][^>]*?>)/', '$1 $2', $html); + $html = strip_tags($html, implode('', $tags)); + $_POST[$field] = $html; + } - if ( nggGallery::current_user_can( 'NextGEN Edit gallery title' )) { - // don't forget to update the slug - $slug = nggdb::get_unique_slug( sanitize_title( $_POST['title'] ), 'gallery', $this->gid ); - $wpdb->query( $wpdb->prepare ("UPDATE $wpdb->nggallery SET title= '%s', slug= '%s' WHERE gid = %d", stripslashes($_POST['title']), $slug, $this->gid) ); + // Update the gallery + $mapper = C_Gallery_Mapper::get_instance(); + if ($entity = $mapper->find($this->gid)) { + foreach ($_POST as $key => $value) { + $entity->$key = $value; + } + $mapper->save($entity); } - if ( nggGallery::current_user_can( 'NextGEN Edit gallery path' )) - $wpdb->query( $wpdb->prepare ("UPDATE $wpdb->nggallery SET path= '%s' WHERE gid = %d", untrailingslashit ( str_replace('\\', '/', trim( stripslashes($_POST['path']) )) ), $this->gid ) ); - if ( nggGallery::current_user_can( 'NextGEN Edit gallery description' )) - $wpdb->query( $wpdb->prepare ("UPDATE $wpdb->nggallery SET galdesc= '%s' WHERE gid = %d", stripslashes($_POST['gallerydesc']), $this->gid) ); - if ( nggGallery::current_user_can( 'NextGEN Edit gallery page id' )) - $wpdb->query( $wpdb->prepare ("UPDATE $wpdb->nggallery SET pageid= '%d' WHERE gid = %d", (int) $_POST['pageid'], $this->gid) ); - if ( nggGallery::current_user_can( 'NextGEN Edit gallery preview pic' )) - $wpdb->query( $wpdb->prepare ("UPDATE $wpdb->nggallery SET previewpic= '%d' WHERE gid = %d", (int) $_POST['previewpic'], $this->gid) ); - if ( isset ($_POST['author']) && nggGallery::current_user_can( 'NextGEN Edit gallery author' ) ) - $wpdb->query( $wpdb->prepare ("UPDATE $wpdb->nggallery SET author= '%d' WHERE gid = %d", (int) $_POST['author'], $this->gid) ); wp_cache_delete($this->gid, 'ngg_gallery'); @@ -402,7 +837,7 @@ class nggManageGallery { //hook for other plugin to update the fields do_action('ngg_update_gallery', $this->gid, $_POST); - nggGallery::show_message(__('Update successful',"nggallery")); + nggGallery::show_message(__('Update successful', 'nggallery')); } if (isset ($_POST['scanfolder'])) { @@ -410,7 +845,7 @@ class nggManageGallery { check_admin_referer('ngg_updategallery'); $gallerypath = $wpdb->get_var("SELECT path FROM $wpdb->nggallery WHERE gid = '$this->gid' "); - nggAdmin::import_gallery($gallerypath); + nggAdmin::import_gallery($gallerypath, $this->gid); } if (isset ($_POST['addnewpage'])) { @@ -475,62 +910,79 @@ class nggManageGallery { $post_id = wp_insert_post ($post); if ($post_id != 0) - nggGallery::show_message( __('Published a new post','nggallery') ); - + nggGallery::show_message( __('Published a new post', 'nggallery') ); } - function update_pictures() { - global $wpdb, $nggdb; - - //TODO:Error message when update failed - - $description = isset ( $_POST['description'] ) ? $_POST['description'] : array(); - $alttext = isset ( $_POST['alttext'] ) ? $_POST['alttext'] : array(); - $exclude = isset ( $_POST['exclude'] ) ? $_POST['exclude'] : false; - $taglist = isset ( $_POST['tags'] ) ? $_POST['tags'] : false; - $pictures = isset ( $_POST['pid'] ) ? $_POST['pid'] : false; - - if ( is_array($pictures) ){ - foreach( $pictures as $pid ){ - $image = $nggdb->find_image( $pid ); - if ($image) { - // description field - $image->description = stripslashes($description[$image->pid]); - - // only uptade this field if someone change the alttext - if ( $image->alttext != $alttext[$image->pid] ) { - $image->alttext = stripslashes($alttext[$image->pid]); - $image->image_slug = nggdb::get_unique_slug( sanitize_title( $image->alttext ), 'image', $image->pid ); - } - - // set exclude flag - if ( is_array($exclude) ) - $image->exclude = ( array_key_exists($image->pid, $exclude) )? 1 : 0; - else - $image->exclude = 0; - - // update the database - $wpdb->query( $wpdb->prepare ("UPDATE $wpdb->nggpictures SET image_slug = '%s', alttext = '%s', description = '%s', exclude = %d WHERE pid = %d", - $image->image_slug, $image->alttext, $image->description, $image->exclude, $image->pid) ); - // remove from cache - wp_cache_delete($image->pid, 'ngg_image'); - - // hook for other plugins after image is updated - do_action('ngg_image_updated', $image); - } + function can_user_manage_gallery() + { + $retval = FALSE; + $registry = C_Component_Registry::get_instance(); + $security = $registry->get_utility('I_Security_Manager'); + $actor = $security->get_current_actor(); - } - } + if ($this->gallery && $actor->get_entity_id()== $this->gallery->author) { + $retval = TRUE; + } + elseif($actor->is_allowed('nextgen_edit_gallery_unowned')) { + $retval = TRUE; + } - //TODO: This produce 300-400 queries ! - if ( is_array($taglist) ){ - foreach($taglist as $key=>$value) { - $tags = explode(',', $value); - wp_set_object_terms($key, $tags, 'ngg_tag'); + return $retval; + } + + function update_pictures() + { + $updated = 0; + + if (!$this->can_user_manage_gallery()) $updated; + + if (isset($_POST['images']) && is_array($_POST['images'])) { + $image_mapper = C_Image_Mapper::get_instance(); + + foreach ($_POST['images'] as $pid => $data) { + if (!isset($data['exclude'])) $data['exclude'] = 0; + if (($image = $image_mapper->find($pid))) { + // Strip slashes from title/description/alttext fields + if (isset($data['description'])) { + $data['description'] = stripslashes($data['description']); + } + if (isset($data['alttext'])) { + $data['alttext'] = stripslashes($data['alttext']); + } + if (isset($data['title'])) { + $data['title'] = stripslashes($data['title']); + } + + // Generate new slug if the alttext has changed + if (isset($data['alttext']) && $image->alttext != $data['alttext']) { + $data['slug'] = NULL; // will cause a new slug to be generated + } + + // Update all fields + foreach ($data as $key => $value) { + $image->$key = $value; + } + if ($image_mapper->save($image)) { + $updated += 1; + + // Update the tags for the image + if (isset($data['tags'])) { + $tags = $data['tags']; + if (!is_array($tags)) $tags = explode(',', $tags); + foreach ($tags as &$tag) $tag = trim($tag); + wp_set_object_terms($image->{$image->id_field},$tags, 'ngg_tag'); + } + + // remove from cache + wp_cache_delete($image->pid, 'ngg_image'); + + // hook for other plugins after image is updated + do_action('ngg_image_updated', $image); + } + } } } - - return; + return $updated; } // Check if user can select a author @@ -606,14 +1058,14 @@ class nggManageGallery { $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>", 'first-page' . $disable_first, esc_attr__( 'Go to the first page' ), - esc_url( remove_query_arg( 'paged', $current_url ) ), + nextgen_esc_url( remove_query_arg( 'paged', $current_url ) ), '«' ); $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>", 'prev-page' . $disable_first, esc_attr__( 'Go to the previous page' ), - esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ), + nextgen_esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ), '‹' ); @@ -633,14 +1085,14 @@ class nggManageGallery { $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>", 'next-page' . $disable_last, esc_attr__( 'Go to the next page' ), - esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ), + nextgen_esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ), '›' ); $page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>", 'last-page' . $disable_last, esc_attr__( 'Go to the last page' ), - esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ), + nextgen_esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ), '»' ); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php index 88f7945f866ec142978f71a182958b08e16c5b78..43c009971232f3e2249f68a2cce02b3a56255f62 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php @@ -39,9 +39,9 @@ function media_upload_nextgen() { $mapper = $registry->get_utility('I_Displayed_Gallery_Mapper'); $factory = $registry->get_utility('I_Component_Factory'); $args = array( - 'display_type' => NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME + 'display_type' => NGG_BASIC_SINGLEPIC ); - $displayed_gallery = $factory->create('displayed_gallery', $mapper, $args); + $displayed_gallery = $factory->create('displayed_gallery', $args, $mapper); $width = $displayed_gallery->display_settings['width']; $height = $displayed_gallery->display_settings['height']; @@ -200,7 +200,7 @@ if ($chromeless) <br style="clear:both;" /> </div> </form> - +<br style="clear:both;"/> <form enctype="multipart/form-data" method="post" action="<?php echo esc_attr($form_action_url); ?>" class="media-upload-form" id="library-form"> <?php wp_nonce_field('ngg-media-form'); ?> @@ -259,11 +259,11 @@ if ($chromeless) </td> </tr> <tr class="image-size"> - <th class="label"><label for="image[<?php echo $picid ?>][size]"><span class="alignleft"><?php esc_attr_e("Size") ; ?></span></label> + <th class="label"><label for="image[<?php echo $picid ?>][size]"><span class="alignleft"><?php esc_attr_e('Size', 'nggallery') ; ?></span></label> </th> <td class="field"> <input name="image[<?php echo $picid ?>][size]" id="image-size-thumb-<?php echo $picid ?>" type="radio" checked="checked" value="thumbnail" /> - <label for="image-size-thumb-<?php echo $picid ?>"><?php esc_attr_e("Thumbnail") ; ?></label> + <label for="image-size-thumb-<?php echo $picid ?>"><?php esc_attr_e('Thumbnail', 'nggallery') ; ?></label> <input name="image[<?php echo $picid ?>][size]" id="image-size-full-<?php echo $picid ?>" type="radio" value="full" /> <label for="image-size-full-<?php echo $picid ?>"><?php esc_attr_e("Full size") ; ?></label> <input name="image[<?php echo $picid ?>][size]" id="image-size-singlepic-<?php echo $picid ?>" type="radio" value="singlepic" /> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/overview.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/overview.php index 435eefeb7c094045a484bc14635be0df7e0fd414..dd573ae7ebed1e86eb35cc642ffbe6d55c922456 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/overview.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/overview.php @@ -36,7 +36,6 @@ function nggallery_admin_overview() { // These widgets are sometimes populated via ajax ajaxWidgets = [ 'dashboard_primary', - 'ngg_locale', 'dashboard_plugins' ]; @@ -84,8 +83,6 @@ function nggallery_admin_overview() { */ add_meta_box('dashboard_right_now', __('Welcome to NextGEN Gallery !', 'nggallery'), 'ngg_overview_right_now', 'ngg_overview', 'left', 'core'); add_meta_box('ngg_meta_box', __('Do you like this Plugin?', 'nggallery'), 'ngg_likeThisMetaBox', 'ngg_overview', 'right', 'core'); -if ( !(get_locale() == 'en_US') ) - add_meta_box('ngg_locale', __('Translation', 'nggallery'), 'ngg_widget_locale', 'ngg_overview', 'right', 'core'); //add_meta_box('dashboard_primary', __('Latest News', 'nggallery'), 'ngg_widget_overview_news', 'ngg_overview', 'left', 'core'); add_meta_box('ngg_about_meta_box', __('About', 'nggallery'), 'ngg_AboutMetaBox', 'ngg_overview', 'left', 'core'); //add_meta_box('ngg_lastdonators', __('Recent donators', 'nggallery'), 'ngg_widget_overview_donators', 'ngg_overview', 'right', 'core'); @@ -97,7 +94,7 @@ function ngg_AboutMetaBox() { ?> <div id="poststuff"> - <p><?php _e("NextGEN Gallery is one of the most popular Wordpress plugins of all time with over 7 million downloads. It is developed and supported by Photocrati Media. We'd like to offer a special thanks to Alex Rabe, who first developed the plugin and maintained it through 2011.", 'nggallery'); ?></p> + <p><?php _e("NextGEN Gallery is one of the most popular Wordpress plugins of all time with over 9 million downloads. It is developed and supported by Photocrati Media. We'd like to offer a special thanks to Alex Rabe, who first developed the plugin and maintained it through 2011.", 'nggallery'); ?></p> <p><?php _e("<strong>NEED HELP?</strong> If you need help or assistance please visit the <a href='http://wordpress.org/support/plugin/nextgen-gallery'>NextGEN Gallery forums on WordPress.org</a>. Please note that we actively monitor and participate in the forums, but given that NextGEN Gallery is a free product, we don't guarantee replies to support queries.", 'nggallery'); ?></p> <p><?php _e("<strong>EXTENDING NEXTGEN?</strong> There are many third party plugins that add displays and functionality for NextGEN Gallery. See our <a href='http://www.nextgen-gallery.com/nextgen-gallery-extension-plugins/'>Complete List of NextGEN Extension Plugins</a>.", 'nggallery'); ?></p> </div> @@ -235,7 +232,7 @@ function ngg_overview_news(){ $link = $item->get_link(); while ( stristr($link, 'http') != $link ) $link = substr($link, 1); - $link = esc_url(strip_tags($link)); + $link = nextgen_esc_url(strip_tags($link)); $title = esc_attr(strip_tags($item->get_title())); if ( empty($title) ) $title = __('Untitled'); @@ -287,8 +284,23 @@ function ngg_overview_right_now() { $galleries = intval( $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->nggallery") ); $albums = intval( $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->nggalbum") ); ?> -<div class="table table_content"> - <p class="sub"><?php _e('At a Glance', 'nggallery'); ?></p> +<style type='text/css'> + #ngg_overview_right_now p { + padding: 0 0 6px 10px; + margin: 0; + } + #ngg_overview_right_now table { + margin-left: 10px; + } + #ngg_overview_right_now td { + padding: 4px; + } + #ngg_overview_right_now td:first-child { + font-size: 16px; + } +</style> +<div class="table table_content" id='ngg_overview_right_now'> + <p><?php _e('At a Glance', 'nggallery'); ?></p> <table> <tbody> <tr class="first"> @@ -329,8 +341,12 @@ function ngg_dashboard_quota() { if ( !wpmu_enable_function('wpmuQuotaCheck') ) return; + $settings = C_NextGen_Settings::get_instance(); + $fs = C_Fs::get_instance(); + $dir = $fs->join_paths($fs->get_document_root(), $settings->gallerypath); + $quota = get_space_allowed(); - $used = get_dirsize( BLOGUPLOADDIR ) / 1024 / 1024; + $used = get_dirsize( $dir ) / 1024 / 1024; if ( $used > $quota ) $percentused = '100'; @@ -345,7 +361,7 @@ function ngg_dashboard_quota() { <div class="table table_content musubtable"> <table> <tr class="first"> - <td class="first b b-posts"><?php printf( __( '<a href="%1$s" title="Manage Uploads" class="musublink">%2$sMB</a>' ), esc_url( admin_url( 'admin.php?page=nggallery-manage-gallery' ) ), $quota ); ?></td> + <td class="first b b-posts"><?php printf( __( '<a href="%1$s" title="Manage Uploads" class="musublink">%2$sMB</a>' ), nextgen_esc_url( admin_url( 'admin.php?page=nggallery-manage-gallery' ) ), $quota ); ?></td> <td class="t posts"><?php _e( 'Space Allowed' ); ?></td> </tr> </table> @@ -353,7 +369,7 @@ function ngg_dashboard_quota() { <div class="table table_discussion musubtable"> <table> <tr class="first"> - <td class="b b-comments"><?php printf( __( '<a href="%1$s" title="Manage Uploads" class="musublink">%2$sMB (%3$s%%)</a>' ), esc_url( admin_url( 'admin.php?page=nggallery-manage-gallery' ) ), $used, $percentused ); ?></td> + <td class="b b-comments"><?php printf( __( '<a href="%1$s" title="Manage Uploads" class="musublink">%2$sMB (%3$s%%)</a>' ), nextgen_esc_url( admin_url( 'admin.php?page=nggallery-manage-gallery' ) ), $used, $percentused ); ?></td> <td class="last t comments <?php echo $used_color;?>"><?php _e( 'Space Used' );?></td> </tr> </table> @@ -362,82 +378,6 @@ function ngg_dashboard_quota() { <?php } -/** - * Looks up for translation file - * - * @return void - */ -function ngg_widget_locale() { - - require_once(NGGALLERY_ABSPATH . '/lib/locale.php'); - - $locale = new ngg_locale(); - - $overview_url = admin_url() . 'admin.php?page=' . NGGFOLDER; - - // Check if someone would like to update the translation file - if ( isset($_GET['locale']) && $_GET['locale'] == 'update' ) { - check_admin_referer('ngg_update_locale'); - - $result = $locale->download_locale(); - - if ($result == true) { - ?> - <p class="hint"><?php _e('Translation file successful updated. Please reload page.', 'nggallery'); ?></p> - <p class="textright"> - <a class="button" href="<?php echo esc_url(strip_tags($overview_url)); ?>"><?php _e('Reload page', 'nggallery'); ?></a> - </p> - <?php - } else { - ?> - <p class="hint"><?php _e('Translation file couldn\'t be updated', 'nggallery'); ?></p> - <?php - } - - return; - } - - echo '<p class="widget-loading hide-if-no-js">' . __( 'Loading…' ) . '</p><p class="describe hide-if-js">' . __('This widget requires JavaScript.') . '</p>'; -} - -function ngg_locale() { - global $ngg; - - require_once(NGGALLERY_ABSPATH . '/lib/locale.php'); - - $locale = new ngg_locale(); - $overview_url = admin_url() . 'admin.php?page=' . NGGFOLDER; - $result = $locale->check(); - $update_url = wp_nonce_url ( $overview_url . '&locale=update', 'ngg_update_locale'); - - //Translators can change this text via gettext - if ($result == 'installed') { - echo $ngg->translator; - if ( !is_wp_error($locale->response) && $locale->response['response']['code'] == '200') { - ?> - <p class="textright"> - <a class="button" href="<?php echo esc_url( strip_tags($update_url) ); ?>"><?php _e('Update', 'nggallery'); ?></a> - </p> - <?php - } - } - - //Translators can change this text via gettext - if ($result == 'available') { - ?> - <p><strong>Download now your language file !</strong></p> - <p class="textright"> - <a class="button" href="<?php echo esc_url( strip_tags($update_url) ); ?>"><?php _e('Download', 'nggallery'); ?></a> - </p> - <?php - } - - - if ($result == 'not_exist') - echo '<p class="hint">'. sprintf( '<strong>Would you like to help translating this plugin?</strong> <a target="_blank" href="%s">Download</a> the current pot file and read <a href="http://www.nextgen-gallery.com/translating-nextgen-gallery/">here</a> how you can translate the plugin.', NGGALLERY_URLPATH . 'lang/nggallery.pot').'</p>'; - -} - /** * Show GD Library version information * @@ -496,7 +436,8 @@ function ngg_get_serverinfo() { if(ini_get('allow_url_fopen')) $allow_url_fopen = __('On', 'nggallery'); else $allow_url_fopen = __('Off', 'nggallery'); // Get PHP Max Upload Size - if(ini_get('upload_max_filesize')) $upload_max = ini_get('upload_max_filesize'); + if (function_exists('wp_max_upload_size')) $upload_max = strval(round( (int) wp_max_upload_size() / (1024 * 1024) )) . 'M'; + else if(ini_get('upload_max_filesize')) $upload_max = ini_get('upload_max_filesize'); else $upload_max = __('N/A', 'nggallery'); // Get PHP Output buffer Size if(ini_get('pcre.backtrack_limit')) $backtrack_limit = ini_get('pcre.backtrack_limit'); @@ -556,136 +497,3 @@ function ngg_check_for_PHP5() { <?php } -/** - * ngg_get_phpinfo() - Extract all of the data from phpinfo into a nested array - * - * @author jon@sitewizard.ca - * @return array - */ -function ngg_get_phpinfo() { - - ob_start(); - phpinfo(); - $phpinfo = array('phpinfo' => array()); - - if ( preg_match_all('#(?:<h2>(?:<a name=".*?">)?(.*?)(?:</a>)?</h2>)|(?:<tr(?: class=".*?")?><t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>)?)?</tr>)#s', ob_get_clean(), $matches, PREG_SET_ORDER) ) - foreach($matches as $match) { - if(strlen($match[1])) - $phpinfo[$match[1]] = array(); - elseif(isset($match[3])) - $phpinfo[end(array_keys($phpinfo))][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3]; - else - $phpinfo[end(array_keys($phpinfo))][] = $match[2]; - } - - return $phpinfo; -} - -function ngg_list_contributors() { -/* The list of my contributors. Thanks to all of them !*/ - - $contributors = array( - 'Anty (Code contributor)' => 'http://www.anty.at/', - 'Bjoern von Prollius (Code contributor)' => 'http://www.prollius.de/', - 'Simone Fumagalli (Code contributor)' => 'http://www.iliveinperego.com/', - 'Vincent Prat (Code contributor)' => 'http://www.vincentprat.info', - 'Frederic De Ranter (AJAX code contributor)' => 'http://li.deranter.com/', - 'Christian Arnold (Code contributor)' => 'http://blog.arctic-media.de/', - 'Thomas Matzke (Album code contributor)' => 'http://mufuschnu.mu.funpic.de/', - 'KeViN (Sidebar Widget developer)' => 'http://www.kev.hu/', - 'Lazy (German Translation)' => 'http://www.lazychris.de/', - 'Lise (French Translation)' => 'http://liseweb.fr/', - 'Anja (Dutch Translation)' => 'http://www.werkgroepen.net/wordpress', - 'Adrian (Indonesian Translation)' => 'http://adrian.web.id/', - 'Gaspard Tseng / SillyCCSmile (Chinese Translation)' => '', - 'Mika Pennanen (Finnish Translation)' => 'http://kapsi.fi/~penni', - 'Wojciech Owczarek (Polish Translation)' => 'http://www.owczi.net', - 'Dilip Ramirez (Spanish Translation)' => 'http://jmtd.110mb.com/blog', - 'Oleinikov Vedmak Evgeny (Russian Translation)' => 'http://ka-2-03.mirea.org/', - 'Sebastien MALHERBE (Logo design)' => 'http://www.7vision.com/', - 'Claudia (German documentation)' => 'http://www.blog-werkstatt.de/', - 'Robert (German documentation)' => 'http://www.curlyrob.de/', - 'Pierpaolo Mannone (Italian Translation)' => 'http://www.interscambiocasa.com/', - 'Mattias Tengblad (Swedish Translation)' => 'http://wp-support.se/', - 'Müfit Kiper (Swedish Translation)' => 'http://www.kiper.se/', - 'Gil Yaker (Documentation)' => 'http://bamboosoup.com/', - 'Morten Johansen (Danish Translation)' => 'http://www.fr3ak.dk/', - 'Vidar Seland (Norwegian Translation)' => 'http://www.viidar.net/', - 'Emre Güler (Turkish Translation)' => 'http://www.emreguler.com/', - 'Emilio Lauretti (Italian Translation)' => '', - 'Jan Angelovic (Czech Translation)' => 'http://www.angelovic.cz/', - 'Laki (Slovak Translation)' => 'http://www.laki.sk/', - 'Rowan Crane (WPMU support)' => 'http://blog.rowancrane.com/', - 'Kuba Zwolinski (Polish Translation)' => 'http://kubazwolinski.com/', - 'Rina Jiang (Chinese Translation)' => 'http://http://mysticecho.net/', - 'Anthony (Chinese Translation)' => 'http://www.angryouth.com/', - 'Milan Vasicek (Czech Translation)' => 'http://www.NoWorkTeam.cz/', - 'Joo Gi-young (Korean Translation)' => 'http://lombric.linuxstudy.pe.kr/wp/', - 'Oleg A. Safonov (Russian Translation)' => 'http://blog.olart.ru', - 'AleXander Kirichev (Bulgarian Translation)' => 'http://xsakex.art-bg.org/', - 'Richer Yang (Chinese Translation)' => 'http://fantasyworld.idv.tw/', - 'Bill Jones (Forums contributor)' => 'http://jonesphoto.bluehorizoninternet.com/', - 'TheDonSansone (Forums contributor)' => 'http://abseiling.200blogs.co.uk/', - 'Komyshov (Russian Translation)' => 'http://kf-web.ru/', - 'aleX Zhang (Chinese Translation)' => 'http://zhangfei.info/', - 'TheSoloist (Chinese Translation)' => 'http://www.soloist-ic.cn/', - 'Nica Luigi Cristian (Romanian Translation)' => 'http://www.cristiannica.com/', - 'Zdenek Hatas (Czech Translation)' => '', - 'David Potter (Documentation and Help)' => 'http://dpotter.net/', - 'Carlale Chen (Chinese Translation)' => 'http://0-o-0.cc/', - 'Nica Luigi Cristian (Romanian Translation)' => 'http://www.cristiannica.com/', - 'Igor Shevkoplyas (Russian Translation)' => 'http://www.russian-translation-matters.com', - 'Alexandr Kindras (Code contributor)' => 'http://www.fixdev.com', - 'Manabu Togawa (Japanese Translation)' => 'http://www.churadesign.com/', - 'Serhiy Tretyak (Ukrainian Translation)' => 'http://designpoint.com.ua/', - 'Janis Grinvalds (Latvian Translation)' => 'http://riga.bmxrace.lv/', - 'Kristoffer Thøring (Norwegian Translation)' => '', - 'Flactarus (Italian Translation)' => 'http://www.giroevago.it', - 'Felip Alfred Galitó i Trilla (Catalan Translation)' => 'http://www.bratac.cat', - 'Luka Komac (Slovenian Translation)' => 'http://www.komac.biz', - 'Dimitris Ikonomou / Nikos Mouratidis (Greek Translation)' => 'http://www.kepik.gr' - ); - - ksort($contributors); - $i = count($contributors); - foreach ($contributors as $name => $url) - { - if ($url) - echo "<a href=\"$url\" target=\"_blank\">$name</a>"; - else - echo $name; - $i--; - if ($i == 1) - echo " & "; - elseif ($i) - echo ", "; - } -} - -function ngg_list_support() { -/* The list of my supporters. Thanks to all of them !*/ - - global $ngg; - - $supporter = nggAdminPanel::get_remote_array($ngg->donators); - - // Ensure that this is a array - if ( !is_array($supporter) ) - return _e('and all donators...', 'nggallery'); - - ksort($supporter); - $i = count($supporter); - foreach ($supporter as $name => $url) - { - if ($url) - echo "<a href=\"$url\" target=\"_blank\">$name</a>"; - else - echo $name; - $i--; - if ($i == 1) - echo " & "; - elseif ($i) - echo ", "; - } -} -?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/publish.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/publish.php index cd8c9047640c0a874778e8e1503f727957066988..bd6b7ff79cfb29c36752de0fffbd0b86a6173d58 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/publish.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/publish.php @@ -1,64 +1,64 @@ -<?php - -require_once( dirname( dirname(__FILE__) ) . '/ngg-config.php'); -require_once( NGGALLERY_ABSPATH . '/lib/image.php' ); - -if ( !is_user_logged_in() ) - die(__('Cheatin’ uh?')); - -if ( !current_user_can('NextGEN Manage gallery') ) - die(__('Cheatin’ uh?')); - -if ( !current_user_can( 'publish_posts' ) ) - die(__('Cheatin’ uh?')); - -global $wpdb; - -$id = (int) $_GET['id']; - -// let's get the image data -$picture = nggdb::find_image($id); - -// use defaults the first time -$width = empty ($ngg->options['publish_width']) ? $ngg->options['thumbwidth'] : $ngg->options['publish_width']; -$height = empty ($ngg->options['publish_height']) ? $ngg->options['thumbheight'] : $ngg->options['publish_height']; -$align = empty ($ngg->options['publish_align']) ? 'none' : $ngg->options['publish_align']; - -?> - -<form id="form-publish-post" method="POST" accept-charset="utf-8"> -<?php wp_nonce_field('publish-post') ?> -<input type="hidden" name="page" value="publish-post" /> -<input type="hidden" name="pid" value="<?php echo $picture->pid; ?>" /> -<table width="100%" border="0" cellspacing="3" cellpadding="3" > - <tr valign="top"> - <th align="left"><?php _e('Post title','nggallery') ?></th> - <td><input type="text" size="70" name="post_title" value="<?php echo esc_attr( $picture->alttext); ?>" /> - <br /><small><?php _e('Enter the post title ','nggallery') ?></small></td> - </tr> - <tr valign="top"> - <th align="left"><?php _e('Width x height (in pixel)','nggallery') ?></th> - <td><input type="text" size="5" maxlength="5" name="width" value="<?php echo $width; ?>" /> x <input type="text" size="5" maxlength="5" name="height" value="<?php echo $height; ?>" /> - <br /><small><?php _e('Size of the image','nggallery') ?></small></td> - </tr> - <tr valign="top"> - <th align="left"><?php _e('Alignment','nggallery') ?></th> - <td><input type="radio" value="none" <?php checked('none', $align); ?> id="image-align-none" name="align"/> - <label class="align" for="image-align-none"><?php _e('None','nggallery'); ?></label> - <input type="radio" value="left" <?php checked('left', $align); ?> id="image-align-left" name="align"/> - <label class="align" for="image-align-left"><?php _e('Left','nggallery'); ?></label> - <input type="radio" value="center" <?php checked('center', $align); ?> id="image-align-center" name="align"/> - <label class="align" for="image-align-center"><?php _e('Center','nggallery'); ?></label> - <input type="radio" value="right" <?php checked('right', $align); ?> id="image-align-right" name="align"/> - <label class="align" for="image-align-right"><?php _e('Right','nggallery'); ?></label> - </td> - </tr> - <tr align="right"> - <td colspan="2" class="submit"> - <input class="button-primary" type="submit" name="publish" value="<?php _e('Publish', 'nggallery');?>" /> - - <input class="button-secondary" type="submit" name="draft" value=" <?php _e('Draft', 'nggallery'); ?> " /> - </td> - </tr> -</table> +<?php + +require_once( dirname( dirname(__FILE__) ) . '/ngg-config.php'); +require_once( NGGALLERY_ABSPATH . '/lib/image.php' ); + +if ( !is_user_logged_in() ) + die(__('Cheatin’ uh?')); + +if ( !current_user_can('NextGEN Manage gallery') ) + die(__('Cheatin’ uh?')); + +if ( !current_user_can( 'publish_posts' ) ) + die(__('Cheatin’ uh?')); + +global $wpdb; + +$id = (int) $_GET['id']; + +// let's get the image data +$picture = nggdb::find_image($id); + +// use defaults the first time +$width = empty ($ngg->options['publish_width']) ? $ngg->options['thumbwidth'] : $ngg->options['publish_width']; +$height = empty ($ngg->options['publish_height']) ? $ngg->options['thumbheight'] : $ngg->options['publish_height']; +$align = empty ($ngg->options['publish_align']) ? 'none' : $ngg->options['publish_align']; + +?> + +<form id="form-publish-post" method="POST" accept-charset="utf-8"> +<?php wp_nonce_field('publish-post') ?> +<input type="hidden" name="page" value="publish-post" /> +<input type="hidden" name="pid" value="<?php echo $picture->pid; ?>" /> +<table width="100%" border="0" cellspacing="3" cellpadding="3" > + <tr valign="top"> + <th align="left"><?php _e('Post title','nggallery') ?></th> + <td><input type="text" size="70" name="post_title" value="<?php echo esc_attr( $picture->alttext); ?>" /> + <br /><small><?php _e('Enter the post title ','nggallery') ?></small></td> + </tr> + <tr valign="top"> + <th align="left"><?php _e('Width x height (in pixel)','nggallery') ?></th> + <td><input type="text" size="5" maxlength="5" name="width" value="<?php echo $width; ?>" /> x <input type="text" size="5" maxlength="5" name="height" value="<?php echo $height; ?>" /> + <br /><small><?php _e('Size of the image','nggallery') ?></small></td> + </tr> + <tr valign="top"> + <th align="left"><?php _e('Alignment','nggallery') ?></th> + <td><input type="radio" value="none" <?php checked('none', $align); ?> id="image-align-none" name="align"/> + <label class="align" for="image-align-none"><?php _e('None','nggallery'); ?></label> + <input type="radio" value="left" <?php checked('left', $align); ?> id="image-align-left" name="align"/> + <label class="align" for="image-align-left"><?php _e('Left','nggallery'); ?></label> + <input type="radio" value="center" <?php checked('center', $align); ?> id="image-align-center" name="align"/> + <label class="align" for="image-align-center"><?php _e('Center','nggallery'); ?></label> + <input type="radio" value="right" <?php checked('right', $align); ?> id="image-align-right" name="align"/> + <label class="align" for="image-align-right"><?php _e('Right','nggallery'); ?></label> + </td> + </tr> + <tr align="right"> + <td colspan="2" class="submit"> + <input class="button-primary" type="submit" name="publish" value="<?php _e('Publish', 'nggallery');?>" /> + + <input class="button-secondary" type="submit" name="draft" value=" <?php _e('Draft', 'nggallery'); ?> " /> + </td> + </tr> +</table> </form> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php index 4899df5a162d8cbaca003eb0f04a8c5e3d501c19..2461e3fea66eb7af6e9d720227accb6043b883cf 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php @@ -79,7 +79,7 @@ $preview_image = trailingslashit( home_url() ) . 'index.php?callback=image& <table width="98%" align="center" style="border:1px solid #DADADA"> <tr style="height : 360px;"> <td valign="middle" align="center" style="background-color:#DADADA; width : 370px;"> - <img src="<?php echo esc_url( $preview_image ); ?>" alt="" id="imageToEdit" /> + <img src="<?php echo nextgen_esc_url( $preview_image ); ?>" alt="" id="imageToEdit" /> </td> <td> <input type="radio" name="ra" value="cw" /><?php esc_html_e('90° clockwise', 'nggallery'); ?><br /> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/settings.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/settings.php index 0f1ebba393d20d21c26f5befae89b01b79bbca17..24407f1286e9f51c40fa8e69690ee5ab80806990 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/settings.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/settings.php @@ -181,7 +181,7 @@ class nggOptions { if ( isset($_POST['clearcache']) ) { check_admin_referer('ngg_settings'); - $path = WINABSPATH . $ngg->options['gallerypath'] . 'cache/'; + $path = ABSPATH . $ngg->options['gallerypath'] . 'cache/'; if (is_dir($path)) if ($handle = opendir($path)) { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php index 5ef1f24b2fa812cbca372630133776881a78985c..96c694b8b5c1040c33ebf3aa11b0f57a2075b445 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php @@ -40,7 +40,7 @@ $class = ''; if ( is_array($value) ) continue; $class = ( $class == 'class="alternate"' ) ? '' : 'class="alternate"'; echo '<tr '.$class.'> - <td style="width:230px">'. esc_html( $meta->i8n_name($key) ).'</td> + <td style="width:230px">'. esc_html( $meta->i18n_name($key) ).'</td> <td>' . esc_html( $value ) . '</td> </tr>'; } @@ -65,7 +65,7 @@ $class = ''; foreach ($exifdata as $key => $value){ $class = ( $class == 'class="alternate"' ) ? '' : 'class="alternate"'; echo '<tr '.$class.'> - <td style="width:230px">' . esc_html ( $meta->i8n_name($key) ) . '</td> + <td style="width:230px">' . esc_html ( $meta->i18n_name($key) ) . '</td> <td>' . esc_html( $value ) .'</td> </tr>'; } @@ -90,7 +90,7 @@ $class = ''; foreach ($iptcdata as $key => $value){ $class = ( $class == 'class="alternate"' ) ? '' : 'class="alternate"'; echo '<tr '.$class.'> - <td style="width:230px">' . esc_html( $meta->i8n_name($key) ) . '</td> + <td style="width:230px">' . esc_html( $meta->i18n_name($key) ) . '</td> <td>' . esc_html( $value ) . '</td> </tr>'; } @@ -114,7 +114,7 @@ $class = ''; foreach ($xmpdata as $key => $value){ $class = ( $class == 'class="alternate"' ) ? '' : 'class="alternate"'; echo '<tr '.$class.'> - <td style="width:230px">' . esc_html( $meta->i8n_name($key) ) . '</td> + <td style="width:230px">' . esc_html( $meta->i18n_name($key) ) . '</td> <td>' . esc_html( $value ) . '</td> </tr>'; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_author_field.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_author_field.php new file mode 100644 index 0000000000000000000000000000000000000000..75eefb044dec1df023f56e6fe570d2c5edbf29ed --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_author_field.php @@ -0,0 +1,3 @@ +<span class="field gallery_author_field"> + <?php echo esc_html($author)?> +</span> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php new file mode 100644 index 0000000000000000000000000000000000000000..8f0726a3f96f13dd1e55d5154d1ca3368ed67659 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php @@ -0,0 +1,11 @@ +<span class="field gallery_create_page_field"> + <select name="parent_id" id="gallery_create_page_parent"> + <option value="0"><?php _e('Main Page (no parent)', 'nggallery'); ?></option> + <?php foreach ($pages as $page): ?> + <option value="<?php echo esc_attr($page->ID) ?>"> + <?php echo esc_html($page->post_title)?> + </option> + <?php endforeach ?> + </select> + <input type="submit" id="group" value="<?php _e('Add page', 'nggallery'); ?>" name="addnewpage" class="button-secondary action"> +</span> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_desc_field.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_desc_field.php new file mode 100644 index 0000000000000000000000000000000000000000..a5059b082a1eaa93e790434c58135053a965a26f --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_desc_field.php @@ -0,0 +1,3 @@ +<span class="field gallery_description_field"> + <textarea name="galdesc" id="gallery_description"><?php echo esc_html($gallery->galdesc) ?></textarea> +</span> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_link_to_page_field.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_link_to_page_field.php new file mode 100644 index 0000000000000000000000000000000000000000..88ad1ed7e95740b94cbe165d11bc5a5abac5d1de --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_link_to_page_field.php @@ -0,0 +1,10 @@ +<span class="field gallery_link_to_page_field"> + <select id="gallery_link_to_page" name="pageid"> + <option <?php selected(0, $gallery->pageid ? $gallery->pageid : 0) ?>value="0"><?php _e('Not linked', 'nggallery'); ?></option> + <?php foreach($pages as $page):?> + <option <?php selected($page->ID, $gallery->pageid) ?> value="<?php echo esc_attr($page->ID) ?>"> + <?php echo esc_html($page->post_title)?> + </option> + <?php endforeach ?> + </select> +</span> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_path_field.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_path_field.php new file mode 100644 index 0000000000000000000000000000000000000000..f58757689e537e31e191268eb8bf137479b129d3 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_path_field.php @@ -0,0 +1,9 @@ +<span class="field gallery_path_field"> + <input + type="text" + name="path" + id="gallery_path" + value="<?php echo esc_attr(str_replace('\\', DIRECTORY_SEPARATOR, $gallery->path)) ?>" + <?php if (is_multisite()) echo "disabled"; ?> + /> +</span> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_preview_image_field.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_preview_image_field.php new file mode 100644 index 0000000000000000000000000000000000000000..95b6ecea23509d42ee676d4fb02f5313ef1a792b --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_preview_image_field.php @@ -0,0 +1,10 @@ +<span class="field gallery_preview_image_field"> + <select name="previewpic" id="gallery_preview_image"> + <option <?php selected(0, $gallery->previewpic ? $gallery->previewpic : 0) ?> value="0"><?php _e('No picture', 'nggallery'); ?></option> + <?php foreach ($images as $id => $filename): ?> + <option <?php selected($id, $gallery->previewpic) ?> value="<?php echo esc_attr($id) ?>"> + <?php echo esc_html($filename) ?> + </option> + <?php endforeach ?> + </select> +</span> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_title_field.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_title_field.php new file mode 100644 index 0000000000000000000000000000000000000000..57291188697b572c2a8c27a785cc772920c46629 --- /dev/null +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_title_field.php @@ -0,0 +1,8 @@ +<span class="field gallery_title_field"> + <input + type="text" + name="title" + id="gallery_title" + value="<?php echo esc_attr($gallery->title) ?>" + /> +</span> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php index 5b17cd99d5c804b0907331fe92171305e1652f87..9531c6a237caa0c0401692f8704bb1df8d2d49bc 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/admin/upgrade.php @@ -39,7 +39,7 @@ function ngg_convert_filestructure() { if ( is_array($gallerylist) ) { $errors = array(); foreach($gallerylist as $gallery) { - $gallerypath = WINABSPATH.$gallery->path; + $gallerypath = ABSPATH.$gallery->path; // old mygallery check, convert the wrong folder/ file name now if (@is_dir($gallerypath . '/tumbs')) { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/class.ngglegacy_installer.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/class.ngglegacy_installer.php index a795275b7a3b877d5e34f5f14cc3749a622862dd..7db28ae3d3bbea373dee9fe2c82a7bb733d714d3 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/class.ngglegacy_installer.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/class.ngglegacy_installer.php @@ -4,13 +4,105 @@ class C_NggLegacy_Installer { function install() { + global $wpdb; include_once('admin/install.php'); - nggallery_install(); + + $this->remove_transients(); + + if (is_multisite()) { + $network=isset($_SERVER['SCRIPT_NAME'])?$_SERVER['SCRIPT_NAME']:""; + $activate=isset($_GET['action'])?$_GET['action']:""; + $isNetwork=($network=='/wp-admin/network/plugins.php')?true:false; + $isActivation=($activate=='deactivate')?false:true; + + if ($isNetwork and $isActivation){ + $old_blog = $wpdb->blogid; + $blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs", NULL)); + foreach ($blogids as $blog_id) { + switch_to_blog($blog_id); + nggallery_install($this); + } + switch_to_blog($old_blog); + return; + } + } + // remove the update message + delete_option( 'ngg_update_exists' ); + nggallery_install($this); } function uninstall($hard=FALSE) { + include_once('admin/install.php'); + delete_option('ngg_init_check'); delete_option('ngg_update_exists'); + delete_option( 'ngg_options' ); + delete_option( 'ngg_db_version' ); + delete_option( 'ngg_update_exists' ); + delete_option( 'ngg_next_update' ); + + // now remove the capability + ngg_remove_capability("NextGEN Gallery overview"); + ngg_remove_capability("NextGEN Use TinyMCE"); + ngg_remove_capability("NextGEN Upload images"); + ngg_remove_capability("NextGEN Manage gallery"); + ngg_remove_capability("NextGEN Edit album"); + ngg_remove_capability("NextGEN Change style"); + ngg_remove_capability("NextGEN Change options"); + ngg_remove_capability("NextGEN Attach Interface"); + + $this->remove_transients(); + } + + function remove_transients() + { + global $wpdb, $_wp_using_ext_object_cache; + + // Fetch all transients + $query = " + SELECT option_name FROM {$wpdb->options} + WHERE option_name LIKE '%ngg_request%' + "; + $transient_names = $wpdb->get_col($query);; + + // Delete all transients in the database + $query = " + DELETE FROM {$wpdb->options} + WHERE option_name LIKE '%ngg_request%' + "; + $wpdb->query($query); + + // If using an external caching mechanism, delete the cached items + if ($_wp_using_ext_object_cache) { + foreach ($transient_names as $transient) { + wp_cache_delete($transient, 'transient'); + wp_cache_delete(substr($transient, 11), 'transient'); + } + } + } + + function upgrade_schema($sql) + { + global $wpdb; + + // upgrade function changed in WordPress 2.3 + require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); + + // add charset & collate like wp core + $charset_collate = ''; + + if ( version_compare($wpdb->get_var("SELECT VERSION() AS `mysql_version`"), '4.1.0', '>=') ) { + if ( ! empty($wpdb->charset) ) + $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; + if ( ! empty($wpdb->collate) ) + $charset_collate .= " COLLATE $wpdb->collate"; + } + + // Add charset to table creation query + $sql = str_replace($charset_collate, '', str_replace(';', '', $sql)); + + // Execute the query + return dbDelta($sql. ' '. $charset_collate. ';'); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/css/nggallery.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/css/nggallery.css index 13046decd8c3fad509e5376c13b386e49c8768be..4ec8118fa10634c912e492894d40524896939cc6 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/css/nggallery.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/css/nggallery.css @@ -1,8 +1,8 @@ -/* -CSS Name: Default Styles -Description: NextGEN Default Gallery Stylesheet -Author: Photocrati Media -Version: 2.12 - -This stylesheet is provided to allow users the ability of overriding the default styles for all display types +/* +CSS Name: Default Styles +Description: NextGEN Default Gallery Stylesheet +Author: Photocrati Media +Version: 2.12 + +This stylesheet is provided to allow users the ability of overriding the default styles for all display types */ \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/core.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/core.php index 110b9e42f2b88ae92188dd518375147e186a4b2a..a991dec4c239f84441d25f473d5b13742f7b51a8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/core.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/core.php @@ -81,7 +81,7 @@ class nggGallery { */ static function create_thumbnail_folder($gallerypath, $include_Abspath = TRUE) { if (!$include_Abspath) { - $gallerypath = WINABSPATH . $gallerypath; + $gallerypath = ABSPATH . $gallerypath; } if (!file_exists($gallerypath)) { @@ -361,20 +361,6 @@ class nggGallery { return $in; } - /** - * This function register strings for the use with WPML plugin (see http://wpml.org/ ) - * - * @param object $image - * @return void - */ - static function RegisterString($image) { - if (function_exists('icl_register_string')) { - global $wpdb; - icl_register_string('plugin_ngg', 'pic_' . $image->pid . '_description', $image->description, TRUE); - icl_register_string('plugin_ngg', 'pic_' . $image->pid . '_alttext', $image->alttext, TRUE); - } - } - /** * Check the memory_limit and calculate a recommended memory size * diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/media-rss.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/media-rss.php index f35cb09bbb74c4db804f00364fc70d5f386b01f7..f5bf83aabb43a241085f4f82a943d6bde186162c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/media-rss.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/media-rss.php @@ -221,10 +221,10 @@ class nggMediaRss { $out .= $indent . "\t<description><![CDATA[" . nggGallery::i18n($desc, 'pic_' . $image->pid . '_description') . "]]></description>\n"; $out .= $indent . "\t<link><![CDATA[" . $image->get_permalink() . "]]></link>\n"; $out .= $indent . "\t<guid>image-id:" . $image->pid . "</guid>\n"; - $out .= $indent . "\t<media:content url='" . esc_url($image->imageURL) . "' medium='image' />\n"; + $out .= $indent . "\t<media:content url='" . nextgen_esc_url($image->imageURL) . "' medium='image' />\n"; $out .= $indent . "\t<media:title><![CDATA[" . nggGallery::i18n($title, 'pic_' . $image->pid . '_alttext') . "]]></media:title>\n"; $out .= $indent . "\t<media:description><![CDATA[" . nggGallery::i18n($desc, 'pic_' . $image->pid . '_description') . "]]></media:description>\n"; - $out .= $indent . "\t<media:thumbnail url='" . esc_url($image->thumbURL) . "' width='" . $thumbwidth . "' height='" . $thumbheight . "' />\n"; + $out .= $indent . "\t<media:thumbnail url='" . nextgen_esc_url($image->thumbURL) . "' width='" . $thumbwidth . "' height='" . $thumbheight . "' />\n"; $out .= $indent . "\t<media:keywords><![CDATA[" . nggGallery::i18n($tag_names) . "]]></media:keywords>\n"; $out .= $indent . "\t<media:copyright><![CDATA[Copyright (c) " . get_option("blogname") . " (" . site_url() . ")]]></media:copyright>\n"; $out .= $indent . "</item>\n"; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/meta.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/meta.php index 1e15980f101ebe303152a362d4a98037a33ca2cb..be95384a4dc0878c90de83cf388877f0a5a21ca8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/meta.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/meta.php @@ -446,7 +446,7 @@ class nggMeta{ * @param mixed $key * @return translated $key */ - function i8n_name($key) { + function i18n_name($key) { $tagnames = array( 'aperture' => __('Aperture','nggallery'), diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/multisite.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/multisite.php index e8f36a9893db4eaf6a4b4763470e9d49a31fcba5..96dd2bc17b8f2b7bf591727cebb43ee4e6acb9cb 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/multisite.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/multisite.php @@ -1,57 +1,57 @@ -<?php -/** -* Main PHP Class for Multisite setup -* -* @author Alex Rabe -* -* -*/ -class nggWPMU{ - - /** - * Check the Quota under WPMU. Only needed for this case - * - * @class nggWPMU - * @return bool $result - */ - function check_quota() { - if ( get_site_option( 'upload_space_check_disabled' ) ) - return false; - - if ( (is_multisite()) && nggWPMU::wpmu_enable_function('wpmuQuotaCheck')) - if( $error = upload_is_user_over_quota( false ) ) { - nggGallery::show_error( __( 'Sorry, you have used your space allocation. Please delete some files to upload more files.','nggallery' ) ); - return true; - } - return false; - } - - /** - * Check for site admin - * - * @return - */ - function wpmu_site_admin() { - - if ( function_exists('is_super_admin') ) - if ( is_super_admin() ) - return true; - - return false; - } - - /** - * Check for site wide options - * - * @param string $value - * @return value - */ - function wpmu_enable_function($value) { - if (is_multisite()) { - $ngg_options = get_site_option('ngg_options'); - return $ngg_options[$value]; - } - // if this is not WPMU, enable it ! - return true; - } -} +<?php +/** +* Main PHP Class for Multisite setup +* +* @author Alex Rabe +* +* +*/ +class nggWPMU{ + + /** + * Check the Quota under WPMU. Only needed for this case + * + * @class nggWPMU + * @return bool $result + */ + function check_quota() { + if ( get_site_option( 'upload_space_check_disabled' ) ) + return false; + + if ( (is_multisite()) && nggWPMU::wpmu_enable_function('wpmuQuotaCheck')) + if( $error = upload_is_user_over_quota( false ) ) { + nggGallery::show_error( __( 'Sorry, you have used your space allocation. Please delete some files to upload more files.','nggallery' ) ); + return true; + } + return false; + } + + /** + * Check for site admin + * + * @return + */ + function wpmu_site_admin() { + + if ( function_exists('is_super_admin') ) + if ( is_super_admin() ) + return true; + + return false; + } + + /** + * Check for site wide options + * + * @param string $value + * @return value + */ + function wpmu_enable_function($value) { + if (is_multisite()) { + $ngg_options = get_site_option('ngg_options'); + return $ngg_options[$value]; + } + // if this is not WPMU, enable it ! + return true; + } +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php index b4491ffd3fd88128e832a0471ed6deb4160bac99..09078508a35d49f47698b9d58da72d3dd097563a 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php @@ -148,7 +148,7 @@ class nggdb { $this->galleries[$key]->counter = 0; $this->galleries[$key]->title = stripslashes($this->galleries[$key]->title); $this->galleries[$key]->galdesc = stripslashes($this->galleries[$key]->galdesc); - $this->galleries[$key]->abspath = WINABSPATH . $this->galleries[$key]->path; + $this->galleries[$key]->abspath = ABSPATH . $this->galleries[$key]->path; wp_cache_add($key, $this->galleries[$key], 'ngg_gallery'); } @@ -196,7 +196,7 @@ class nggdb { $gallery->title = stripslashes($gallery->title); $gallery->galdesc = stripslashes($gallery->galdesc); - $gallery->abspath = WINABSPATH . $gallery->path; + $gallery->abspath = ABSPATH . $gallery->path; //TODO:Possible failure , $id could be a number or name wp_cache_add($id, $gallery, 'ngg_gallery'); @@ -540,7 +540,7 @@ class nggdb { * @param int|string The image ID or Slug * @return object A nggImage object representing the image (false if not found) */ - function find_image( $id ) { + static function find_image( $id ) { global $wpdb; if( is_numeric($id) ) { @@ -1040,7 +1040,7 @@ class nggdb { * @param array $values An array with existing or new values * @return bool result of query */ - function update_image_meta( $id, $new_values ) { + static function update_image_meta( $id, $new_values ) { global $wpdb; // XXX nggdb is used statically, cannot inherit from Ngg_Serializable @@ -1064,47 +1064,58 @@ class nggdb { * Computes a unique slug for the gallery,album or image, when given the desired slug. * * @since 1.7.0 - * @author taken from WP Core includes/post.php * @param string $slug the desired slug (post_name) * @param string $type ('image', 'album' or 'gallery') * @param int (optional) $id of the object, so that it's not checked against itself * @return string unique slug for the object, based on $slug (with a -1, -2, etc. suffix) */ - function get_unique_slug( $slug, $type, $id = 0 ) { + static function get_unique_slug( $slug, $type, $id = 0 ) + { + global $wpdb; - global $wpdb; + $slug = stripslashes($slug); + $retval = $slug; + // We have to create a somewhat complex query to find the next available slug. The query could easily + // be simplified if we could use MySQL REGEX, but there are still hosts using MySQL 5.0, and REGEX is + // only supported in MySQL 5.1 and higher + $field = ''; + $table = ''; switch ($type) { case 'image': - $check_sql = "SELECT image_slug FROM $wpdb->nggpictures WHERE image_slug = %s AND NOT pid = %d LIMIT 1"; - break; + $field = 'image_slug'; + $table = $wpdb->nggpictures; + break; case 'album': - $check_sql = "SELECT slug FROM $wpdb->nggalbum WHERE slug = %s AND NOT id = %d LIMIT 1"; - break; + $field = 'slug'; + $table = $wpdb->nggalbum; + break; case 'gallery': - $check_sql = "SELECT slug FROM $wpdb->nggallery WHERE slug = %s AND NOT gid = %d LIMIT 1"; - break; - default: - return false; + $field = 'slug'; + $table = $wpdb->nggallery; + break; } - //if you didn't give us a name we take the type - $slug = empty($slug) ? $type: $slug; - - // Slugs must be unique across all objects. - $slug_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $id ) ); - - if ( $slug_check ) { - $suffix = 2; - do { - $alt_name = substr ($slug, 0, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; - $slug_check = $wpdb->get_var( $wpdb->prepare($check_sql, $alt_name, $id ) ); - $suffix++; - } while ( $slug_check ); - $slug = $alt_name; - } + // Generate SQL query + $query = array(); + $query[] = "SELECT {$field}, SUBSTR({$field}, %d) AS 'i' FROM {$table}"; + $query[] = "WHERE ({$field} LIKE '{$slug}-%%' AND CONVERT(SUBSTR({$field}, %d), SIGNED) BETWEEN 1 AND %d) OR {$field} = %s"; + $query[] = "ORDER BY i DESC LIMIT 1"; + $query = $wpdb->prepare(implode(" ", $query), strlen("{$slug}-")+1, strlen("{$slug}-")+1, PHP_INT_MAX, $slug); + + // If the above query returns a result, it means that the slug is already taken + if (($last_slug = $wpdb->get_var($query))) { + + // If the last known slug has an integer attached, then it means that we need to increment that integer + $quoted_slug = preg_quote($slug, '/'); + if (preg_match("/{$quoted_slug}-(\\d+)/", $last_slug, $matches)) { + $i = intval($matches[1]) + 1; + $retval = "{$slug}-{$i}"; + } + else $retval = "{$slug}-1"; + } - return $slug; + return $retval; } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php index a23e36f1deab612264ef547745eef5c596e4b54b..2ed81607c774149db7882721f8de300091acd4b8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php @@ -65,7 +65,7 @@ class nggPostThumbnail { $iframe_src = add_query_arg('chromeless', '1', $iframe_src); $iframe_src = add_query_arg('TB_iframe', '1', $iframe_src); - $set_thumbnail_link = '<p class="hide-if-no-js"><a title="' . esc_attr__( 'Set NextGEN featured image' ) . '" href="' . esc_url( $iframe_src ) . '" id="set-ngg-post-thumbnail" class="thickbox">%s</a></p>'; + $set_thumbnail_link = '<p class="hide-if-no-js"><a title="' . esc_attr__( 'Set NextGEN featured image' ) . '" href="' . nextgen_esc_url( $iframe_src ) . '" id="set-ngg-post-thumbnail" class="thickbox">%s</a></p>'; $content .= sprintf($set_thumbnail_link, esc_html__( 'Set NextGEN featured image' )); } @@ -201,7 +201,7 @@ class nggPostThumbnail { $upload_dir = wp_upload_dir(); $basedir = $upload_dir['basedir']; - $thumbs_dir = path_join($basedir, 'ngg_featured'); + $thumbs_dir = implode(DIRECTORY_SEPARATOR, array($basedir, 'ngg_featured')); $gallery_abspath = $storage->get_gallery_abspath($image->galleryid); $image_abspath = $storage->get_full_abspath($image); $target_path = null; @@ -325,7 +325,7 @@ class nggPostThumbnail { global $_wp_additional_image_sizes, $post_ID; - $set_thumbnail_link = '<p class="hide-if-no-js"><a title="' . esc_attr__( 'Set featured image' ) . '" href="' . esc_url( get_upload_iframe_src('image') ) . '" id="set-post-thumbnail" class="thickbox">%s</a></p>'; + $set_thumbnail_link = '<p class="hide-if-no-js"><a title="' . esc_attr__( 'Set featured image' ) . '" href="' . nextgen_esc_url( get_upload_iframe_src('image') ) . '" id="set-post-thumbnail" class="thickbox">%s</a></p>'; $content = sprintf($set_thumbnail_link, esc_html__( 'Set featured image' )); $image = nggdb::find_image($thumbnail_id); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/shortcodes.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/shortcodes.php index 130f2abcd5183bdcaa3d482390851f755bc7f426..dbb47065dde48033b1d123e1b2dfdfb8f7cda9ae 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/shortcodes.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/shortcodes.php @@ -15,7 +15,7 @@ class NextGEN_shortcodes { // Long posts should require a higher limit, see http://core.trac.wordpress.org/ticket/8553 $pcre_limit = 500000; - if ((int)ini_get('pcre.backtrack_ limit') < $pcre_limit) { + if ((int)ini_get('pcre.backtrack_limit') < $pcre_limit) { @ini_set('pcre.backtrack_limit', $pcre_limit); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/sitemap.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/sitemap.php index 7512e4e8240528b465bff94534ad2c93106d0b30..1bb9f0804bde2d33a50e74ca54286ec3425bd044 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/sitemap.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/sitemap.php @@ -44,11 +44,11 @@ class nggSitemaps { remove_all_shortcodes(); // We cannot parse at this point a album, just galleries & single images - C_NextGen_Shortcode_Manager::add( 'singlepic', array(&$this, 'add_images' ) ); - C_NextGen_Shortcode_Manager::add( 'thumb', array(&$this, 'add_images' ) ); - C_NextGen_Shortcode_Manager::add( 'nggallery', array(&$this, 'add_gallery') ); - C_NextGen_Shortcode_Manager::add( 'imagebrowser', array(&$this, 'add_gallery' ) ); - C_NextGen_Shortcode_Manager::add( 'slideshow', array(&$this, 'add_gallery' ) ); + C_NextGen_Shortcode_Manager::add('singlepic', array(&$this, 'add_images')); + C_NextGen_Shortcode_Manager::add('thumb', array(&$this, 'add_images')); + C_NextGen_Shortcode_Manager::add('nggallery', array(&$this, 'add_gallery')); + C_NextGen_Shortcode_Manager::add('imagebrowser', array(&$this, 'add_gallery')); + C_NextGen_Shortcode_Manager::add('slideshow', array(&$this, 'add_gallery')); // Search now for shortcodes do_shortcode( $p->post_content ); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/tags.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/tags.php index d1479158ab4103e22e7f4bf27a22fd903bf56adf..ce9a5f15e982d223fc4655fc2717a41b2731bb3a 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/tags.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/lib/tags.php @@ -143,7 +143,7 @@ class nggTags { $return_value['message'] = sprintf(__('Merge tag(s) «%1$s» to «%2$s». %3$s objects edited.', 'nggallery'), $old, $new, $counter); } } else { // Error - $return_value['message'] = sprintf(__('Error. No enough tags for rename. Too for merge. Choose !', 'nggallery'), $old); + $return_value['message'] = sprintf(__('Error. Not enough tags provided to rename or merge.', 'nggallery'), $old); $return_value['status'] = 'error'; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php index 710edb760dc915299c4aa807cc607b45c4f1b3d3..4b6718623d078d28c1d39b9ea36548fec131ccef 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/module.ngglegacy.php @@ -7,13 +7,11 @@ ***/ define( - 'NEXTGEN_GALLERY_NGGLEGACY_MOD_DIR', - path_join(NEXTGEN_GALLERY_MODULE_DIR, basename(dirname(__FILE__))) -); - -define( - 'NEXTGEN_GALLERY_NGGLEGACY_MOD_URL', - path_join(NEXTGEN_GALLERY_MODULE_URL, basename(dirname(__FILE__))) + 'NGG_LEGACY_MOD_DIR', + implode(DIRECTORY_SEPARATOR, array( + rtrim(NGG_MODULE_DIR, "/\\"), + basename(dirname(__FILE__)) + )) ); class M_NggLegacy extends C_Base_Module @@ -24,7 +22,7 @@ class M_NggLegacy extends C_Base_Module 'photocrati-nextgen-legacy', 'NextGEN Legacy', 'Embeds the original version of NextGEN 1.9.3 by Alex Rabe', - '0.2', + '0.13', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -37,7 +35,10 @@ class M_NggLegacy extends C_Base_Module function initialize() { parent::initialize(); - include_once(path_join(dirname(__FILE__), 'nggallery.php')); + include_once(implode(DIRECTORY_SEPARATOR, array( + dirname(__FILE__), + 'nggallery.php' + ))); } function get_type_list() diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/nggallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/nggallery.php index ae66f6f71888f6e3ec2e7f65b946274b104ad460..04b8dca9c84c2025fbc1177437e5b515fe940b27 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/nggallery.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/nggallery.php @@ -9,9 +9,9 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You if (!class_exists('nggLoader')) { class nggLoader { - var $version = NEXTGEN_GALLERY_PLUGIN_VERSION; + var $version = NGG_PLUGIN_VERSION; var $dbversion = '1.8.1'; - var $minimum_WP = '3.6'; + var $minimum_WP = '3.6.1'; var $donators = 'http://www.nextgen-gallery.com/donators.php'; var $options = ''; var $manage_page; @@ -26,7 +26,7 @@ if (!class_exists('nggLoader')) { // Determine plugin basename based on whether NGG is being used in // it's legacy form, or as a Photocrati Gallery - if (defined('NEXTGEN_GALLERY_PLUGIN_BASENAME')) $this->plugin_name = NEXTGEN_GALLERY_PLUGIN_BASENAME; + if (defined('NGG_PLUGIN_BASENAME')) $this->plugin_name = NGG_PLUGIN_BASENAME; else $this->plugin_name = basename(dirname(__FILE__)).'/'.basename(__FILE__); // Get some constants first @@ -34,14 +34,6 @@ if (!class_exists('nggLoader')) { $this->define_constant(); $this->define_tables(); $this->load_dependencies(); - $this->start_rewrite_module(); - - // Init options & tables during activation & deregister init option - register_activation_hook( $this->plugin_name, array(&$this, 'activate') ); - register_deactivation_hook( $this->plugin_name, array(&$this, 'deactivate') ); - - // Register a uninstall hook to remove all tables & option automatic - register_uninstall_hook( $this->plugin_name, array(__CLASS__, 'uninstall') ); // Start this plugin once all other plugins are fully loaded add_action( 'plugins_loaded', array(&$this, 'start_plugin') ); @@ -68,12 +60,9 @@ if (!class_exists('nggLoader')) { global $nggRewrite; - // Load the language file - $this->load_textdomain(); - // All credits to the tranlator - $this->translator = '<p class="hint">'. __('<strong>Translation by : </strong><a target="_blank" href="http://alexrabe.de/wordpress-plugins/nextgen-gallery/languages/">See here</a>', 'nggallery') . '</p>'; - $this->translator .= '<p class="hint">'. __('<strong>This translation is not yet updated for Version 1.9.0</strong>. If you would like to help with translation, download the current po from the plugin folder and read <a href="http://alexrabe.de/wordpress-plugins/wordtube/translation-of-plugins/">here</a> how you can translate the plugin.', 'nggallery') . '</p>'; + $this->translator = '<p class="hint">'. __('<strong>Translation by : </strong><a target="_blank" href="http://www.nextgen-gallery.com/languages/">See here</a>', 'nggallery') . '</p>'; + $this->translator .= '<p class="hint">'. __('<strong>This translation is not yet updated for Version 1.9.0</strong>. If you would like to help with translation, download the current po from the plugin folder and read <a href="http://www.nextgen-gallery.com/languages/">here</a> how you can translate the plugin.', 'nggallery') . '</p>'; // Content Filters add_filter('ngg_gallery_name', 'sanitize_title'); @@ -209,27 +198,29 @@ if (!class_exists('nggLoader')) { //TODO:SHOULD BE REMOVED LATER define('NGGVERSION', $this->version); // Minimum required database version - define('NGG_DBVERSION', $this->dbversion); - // required for Windows & XAMPP - define('WINABSPATH', str_replace("\\", "/", ABSPATH) ); + define('NGG_DBVERSION', $this->dbversion); // define URL define('NGGFOLDER', dirname( $this->plugin_name ) ); + // Legacy expects this to have a trailing slash define( 'NGGALLERY_ABSPATH', - defined('NEXTGEN_GALLERY_NGGLEGACY_MOD_DIR') ? - trailingslashit(NEXTGEN_GALLERY_NGGLEGACY_MOD_DIR) : - trailingslashit(dirname(__FILE__)) + defined('NGG_LEGACY_MOD_DIR') ? + rtrim(NGG_LEGACY_MOD_DIR, "/\\").DIRECTORY_SEPARATOR : + rtrim(dirname(__FILE__), "/\\").DIRECTORY_SEPARATOR ); - define( - 'NGGALLERY_URLPATH', - defined('NEXTGEN_GALLERY_NGGLEGACY_MOD_URL') ? - trailingslashit(NEXTGEN_GALLERY_NGGLEGACY_MOD_URL) : - trailingslashit( plugins_url( NGGFOLDER ) ) - ); + // Legacy expects this to have a trailing slash + define( + 'NGGALLERY_URLPATH', + str_replace("\\", '/', str_replace( + rtrim(ABSPATH, "\\/"), + site_url(), + NGG_LEGACY_MOD_DIR.'/' + )) + ); // look for imagerotator define('NGGALLERY_IREXIST', !empty( $this->options['irURL'] )); @@ -281,12 +272,6 @@ if (!class_exists('nggLoader')) { } } - function load_textdomain() { - - load_plugin_textdomain('nggallery', false, NGGFOLDER . '/lang'); - - } - function load_thickbox_images() { // WP core reference relative to the images. Bad idea echo "\n" . '<script type="text/javascript">tb_pathToImage = "' . site_url() . '/wp-includes/js/thickbox/loadingAnimation.gif";tb_closeImage = "' . site_url() . '/wp-includes/js/thickbox/tb-close.png";</script>'. "\n"; @@ -297,13 +282,6 @@ if (!class_exists('nggLoader')) { $this->options = get_option('ngg_options'); } - // Add rewrite rules - function start_rewrite_module() { - // global $nggRewrite; - // if (class_exists('nggRewrite')) - // $nggRewrite = new nggRewrite(); - } - // THX to Shiba for the code // See: http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site function multisite_new_blog($blog_id, $user_id, $domain, $path, $site_id, $meta ) { @@ -314,99 +292,12 @@ if (!class_exists('nggLoader')) { if (is_plugin_active_for_network( $this->plugin_name )) { $current_blog = $wpdb->blogid; switch_to_blog($blog_id); - nggallery_install(); + $installer = new C_NggLegacy_Installer; + nggallery_install($installer); switch_to_blog($current_blog); } } - /** - * Removes all transients created by NextGEN. Called during activation - * and deactivation routines - */ - static function remove_transients() - { - global $wpdb, $_wp_using_ext_object_cache; - - // Fetch all transients - $query = " - SELECT option_name FROM {$wpdb->options} - WHERE option_name LIKE '%ngg_request%' - "; - $transient_names = $wpdb->get_col($query);; - - // Delete all transients in the database - $query = " - DELETE FROM {$wpdb->options} - WHERE option_name LIKE '%ngg_request%' - "; - $wpdb->query($query); - - // If using an external caching mechanism, delete the cached items - if ($_wp_using_ext_object_cache) { - foreach ($transient_names as $transient) { - wp_cache_delete($transient, 'transient'); - wp_cache_delete(substr($transient, 11), 'transient'); - } - } - } - - function activate() { - global $wpdb; - //Starting from version 1.8.0 it's works only with PHP5.2 - if (version_compare(PHP_VERSION, '5.2.0', '<')) { - deactivate_plugins($this->plugin_name); // Deactivate ourself - wp_die("Sorry, but you can't run this plugin, it requires PHP 5.2 or higher."); - return; - } - - // Clean up transients - self::remove_transients(); - - include_once (dirname (__FILE__) . '/admin/install.php'); - - if (is_multisite()) { - $network=isset($_SERVER['SCRIPT_NAME'])?$_SERVER['SCRIPT_NAME']:""; - $activate=isset($_GET['action'])?$_GET['action']:""; - $isNetwork=($network=='/wp-admin/network/plugins.php')?true:false; - $isActivation=($activate=='deactivate')?false:true; - - if ($isNetwork and $isActivation){ - $old_blog = $wpdb->blogid; - $blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs", NULL)); - foreach ($blogids as $blog_id) { - switch_to_blog($blog_id); - nggallery_install(); - } - switch_to_blog($old_blog); - return; - } - } - - // check for tables - nggallery_install(); - // remove the update message - delete_option( 'ngg_update_exists' ); - - } - - function deactivate() { - - // remove & reset the init check option - delete_option( 'ngg_init_check' ); - delete_option( 'ngg_update_exists' ); - - // Clean up transients - self::remove_transients(); - } - - function uninstall() { - // Clean up transients - self::remove_transients(); - - include_once (dirname (__FILE__) . '/admin/install.php'); - nggallery_uninstall(); - } - function disable_upgrade($option){ // PHP5.2 is required for NGG V1.4.0 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php index 0a548492dd313ba56f7693c393232acec34a7805..ef465b673538182c6c9f5bb002be64c38768c392 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/nggfunctions.php @@ -249,9 +249,9 @@ function nggShowGallery($galleryID, $template = '', $images_per_page = FALSE) ); if (apply_filters('ngg_show_imagebrowser_first', FALSE, $galleryID)) - $args['display_type'] = NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER; + $args['display_type'] = NGG_BASIC_IMAGEBROWSER; else - $args['display_type'] = NEXTGEN_GALLERY_BASIC_THUMBNAILS; + $args['display_type'] = NGG_BASIC_THUMBNAILS; if (!empty($template)) $args['template'] = $template; @@ -279,7 +279,7 @@ function nggShowSlideshow($galleryID, $width, $height) 'container_ids' => $galleryID, 'gallery_width' => $width, 'gallery_height' => $height, - 'display_type' => NEXTGEN_GALLERY_BASIC_SLIDESHOW + 'display_type' => NGG_BASIC_SLIDESHOW ); echo C_Component_Registry::get_instance() diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/default.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/default.css index ef2ec17826423d937a9b50d18aa73e8c0aa48842..3ea94c7812709ab354fec43e9cba1945e2754e0d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/default.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/default.css @@ -1,32 +1,32 @@ -/* -CSS Name: Default Styles -Description: NextGEN Default Gallery Stylesheet -Author: Photocrati Media -Version: 2.12 - -These are the default NextGEN rules and are loaded on each page. -*/ - -/* ----------- Related images -------------*/ - -.ngg-related-gallery { - background: #F9F9F9; - border: 1px solid #E0E0E0; - overflow: hidden; - margin-bottom: 1em; - margin-top: 1em; - padding: 5px; -} - -.ngg-related-gallery img { - border: 1px solid #DDDDDD; - float: left; - margin: 0pt 3px; - padding: 2px; - height: 50px; - width: 50px; -} - -.ngg-related-gallery img:hover { - border: 1px solid #000000; -} +/* +CSS Name: Default Styles +Description: NextGEN Default Gallery Stylesheet +Author: Photocrati Media +Version: 2.12 + +These are the default NextGEN rules and are loaded on each page. +*/ + +/* ----------- Related images -------------*/ + +.ngg-related-gallery { + background: #F9F9F9; + border: 1px solid #E0E0E0; + overflow: hidden; + margin-bottom: 1em; + margin-top: 1em; + padding: 5px; +} + +.ngg-related-gallery img { + border: 1px solid #DDDDDD; + float: left; + margin: 0pt 3px; + padding: 2px; + height: 50px; + width: 50px; +} + +.ngg-related-gallery img:hover { + border: 1px solid #000000; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/hovereffect.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/hovereffect.css index 5eb14bfc1d05da7f716ea8de463adffc14afd917..2fc54bba040a2db59a5e3e9bdebb70674db948dc 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/hovereffect.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/hovereffect.css @@ -1,142 +1,142 @@ -/* -CSS Name: Hovereffect Styles -Description: Hover Stylesheet based on the idea of Hoverbox from http://host.sonspring.com/hoverbox/ -Author: Alex Rabe - Orginal by Nathan Smith -Version: 1.60 - -This applies a styling effect similiar to the Hoverbox style -*/ - -/* ----------- Album Styles Extend -------------*/ - -.ngg-albumtitle { - border-bottom: 1px dashed #AAAAAA; - padding-bottom: 3px; -} - -.ngg-thumbnail { - background: #EEEEEE none repeat scroll 0% 50%; - border-color: #DDDDDD rgb(187, 187, 187) rgb(170, 170, 170) rgb(204, 204, 204); - border-style: solid; - border-width: 1px; - color: inherit; - margin-right: 5px; - padding: 5px; -} - -.ngg-thumbnail img { - filter: alpha(opacity = 100); - -moz-opacity: .99; - opacity: .99; - background: #FFFFFF none repeat scroll 0%; - border-color: #AAAAAA rgb(204, 204, 204) rgb(221, 221, 221) rgb(187, 187, 187); - border-style: solid; - border-width: 1px; - color: inherit; - padding: 2px; - vertical-align: top; -} - -.ngg-thumbnail img:hover { - filter: alpha(opacity = 90); - -moz-opacity: .9; - opacity: .9; - border-color: #000000; -} - -/* ----------- Gallery style -------------*/ - -.ngg-galleryoverview { - overflow: hidden; - margin-top: 10px; - width: 100%; - clear: both; - display: block !important; -} - -.ngg-gallery-thumbnail-box { - background: #EEEEEE none repeat scroll 0% 50%; - border-color: #DDDDDD rgb(187, 187, 187) rgb(170, 170, 170) rgb(204, 204, 204); - border-style: solid; - border-width: 1px; - color: inherit; - display: inline; - margin: 3px; - padding: 5px; - position: relative; -} - -.ngg-gallery-thumbnail img { - filter: alpha(opacity = 100); - -moz-opacity: .99; - opacity: .99; - background: #FFFFFF none repeat scroll 0%; - border-color: #AAAAAA rgb(204, 204, 204) rgb(221, 221, 221) rgb(187, 187, 187); - border-style: solid; - border-width: 1px; - color: inherit; - padding: 2px; - vertical-align: top; -} - -.ngg-gallery-thumbnail img:hover { - filter: alpha(opacity = 90); - -moz-opacity: .9; - opacity: .9; - border-color: #000000; -} - -/* ----------- Gallery navigation -------------*/ - -.ngg-navigation a.page-numbers, -.ngg-navigation a.next, -.ngg-navigation a.prev, -.ngg-navigation span.page-numbers, -.ngg-navigation span.next, -.ngg-navigation span.prev { - padding: 3px 7px; -} - -/* ----------- Image browser style -------------*/ - -.ngg-imagebrowser h3 { - text-align: center; - padding-bottom: 10px; -} - -.ngg-imagebrowser .pic { - background: #EEEEEE none repeat scroll 0% 50%; - border-color: #DDDDDD rgb(187, 187, 187) rgb(170, 170, 170) rgb(204, 204, 204); - border-style: solid; - border-width: 1px; - color: inherit; - display: block; - padding: 10px; -} - -.ngg-imagebrowser img { - margin: -3px; - background: #FFFFFF none repeat scroll 0%; - border-color: #AAAAAA rgb(204, 204, 204) rgb(221, 221, 221) rgb(187, 187, 187); - border-style: solid; - border-width: 1px; - color: inherit; - padding: 2px; - vertical-align: top; -} - -.ngg-imagebrowser-nav { - padding: 10px; - -} - -.ngg-imagebrowser-nav .back:hover, -.ngg-imagebrowser-nav .next:hover { - border: 1px solid #000000; -} - -.ngg-imagebrowser-nav .back a:hover, -.ngg-imagebrowser-nav .next a:hover { - text-decoration: none !important; -} - +/* +CSS Name: Hovereffect Styles +Description: Hover Stylesheet based on the idea of Hoverbox from http://host.sonspring.com/hoverbox/ +Author: Alex Rabe - Orginal by Nathan Smith +Version: 1.60 + +This applies a styling effect similiar to the Hoverbox style +*/ + +/* ----------- Album Styles Extend -------------*/ + +.ngg-albumtitle { + border-bottom: 1px dashed #AAAAAA; + padding-bottom: 3px; +} + +.ngg-thumbnail { + background: #EEEEEE none repeat scroll 0% 50%; + border-color: #DDDDDD rgb(187, 187, 187) rgb(170, 170, 170) rgb(204, 204, 204); + border-style: solid; + border-width: 1px; + color: inherit; + margin-right: 5px; + padding: 5px; +} + +.ngg-thumbnail img { + filter: alpha(opacity = 100); + -moz-opacity: .99; + opacity: .99; + background: #FFFFFF none repeat scroll 0%; + border-color: #AAAAAA rgb(204, 204, 204) rgb(221, 221, 221) rgb(187, 187, 187); + border-style: solid; + border-width: 1px; + color: inherit; + padding: 2px; + vertical-align: top; +} + +.ngg-thumbnail img:hover { + filter: alpha(opacity = 90); + -moz-opacity: .9; + opacity: .9; + border-color: #000000; +} + +/* ----------- Gallery style -------------*/ + +.ngg-galleryoverview { + overflow: hidden; + margin-top: 10px; + width: 100%; + clear: both; + display: block !important; +} + +.ngg-gallery-thumbnail-box { + background: #EEEEEE none repeat scroll 0% 50%; + border-color: #DDDDDD rgb(187, 187, 187) rgb(170, 170, 170) rgb(204, 204, 204); + border-style: solid; + border-width: 1px; + color: inherit; + display: inline; + margin: 3px; + padding: 5px; + position: relative; +} + +.ngg-gallery-thumbnail img { + filter: alpha(opacity = 100); + -moz-opacity: .99; + opacity: .99; + background: #FFFFFF none repeat scroll 0%; + border-color: #AAAAAA rgb(204, 204, 204) rgb(221, 221, 221) rgb(187, 187, 187); + border-style: solid; + border-width: 1px; + color: inherit; + padding: 2px; + vertical-align: top; +} + +.ngg-gallery-thumbnail img:hover { + filter: alpha(opacity = 90); + -moz-opacity: .9; + opacity: .9; + border-color: #000000; +} + +/* ----------- Gallery navigation -------------*/ + +.ngg-navigation a.page-numbers, +.ngg-navigation a.next, +.ngg-navigation a.prev, +.ngg-navigation span.page-numbers, +.ngg-navigation span.next, +.ngg-navigation span.prev { + padding: 3px 7px; +} + +/* ----------- Image browser style -------------*/ + +.ngg-imagebrowser h3 { + text-align: center; + padding-bottom: 10px; +} + +.ngg-imagebrowser .pic { + background: #EEEEEE none repeat scroll 0% 50%; + border-color: #DDDDDD rgb(187, 187, 187) rgb(170, 170, 170) rgb(204, 204, 204); + border-style: solid; + border-width: 1px; + color: inherit; + display: block; + padding: 10px; +} + +.ngg-imagebrowser img { + margin: -3px; + background: #FFFFFF none repeat scroll 0%; + border-color: #AAAAAA rgb(204, 204, 204) rgb(221, 221, 221) rgb(187, 187, 187); + border-style: solid; + border-width: 1px; + color: inherit; + padding: 2px; + vertical-align: top; +} + +.ngg-imagebrowser-nav { + padding: 10px; + +} + +.ngg-imagebrowser-nav .back:hover, +.ngg-imagebrowser-nav .next:hover { + border: 1px solid #000000; +} + +.ngg-imagebrowser-nav .back a:hover, +.ngg-imagebrowser-nav .next a:hover { + text-decoration: none !important; +} + diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_k2.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_k2.css index b6dac58b0f620056cf30a48d9cb85e0b9c510f85..36d6ddcc4bca75b5146306dea84f54cb6250eeb8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_k2.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_k2.css @@ -1,84 +1,84 @@ -/* -CSS Name: K2 Theme -Description: NextGEN Style for K2 Theme -Author: Alex Rabe -Version: 1.60 - -This stylesheet modifies the NextGEN defaults to be more compatible with the K2 theme -*/ - -/* ----------- Album Styles Extend -------------*/ - -.ngg-albumoverview { - margin: 10px 0px 0px 0px !important; -} - -.ngg-album { - margin: 0px 0px 5px !important; -} - -.ngg-albumtitle { - margin: 0px 0px 10px 0px !important; -} - -.ngg-albumcontent { - margin: 0px !important; -} - -.ngg-thumbnail { - float: left; - margin: 0px 12px 0px 0px !important; -} - -.ngg-thumbnail img { - margin: 4px 0px 4px 5px !important; -} - -/* ----------- Album Styles Compact -------------*/ - -.ngg-album-link { - margin: 0px !important; -} - -.ngg-album-compact h4 { - margin-bottom: 0px !important; - margin-top: 0px !important; - padding: 0px !important; -} - -/* ----------- Gallery style -------------*/ - -.ngg-gallery-thumbnail-box { - margin: 0px !important; -} - -.ngg-gallery-thumbnail { - background: url('shadowAlpha.png') no-repeat bottom right !important; - background: url('shadow.gif') no-repeat bottom right; - margin: 10px 0 0 10px !important; -} - -.ngg-gallery-thumbnail img { - margin: -6px 6px 6px -6px !important; -} - -/* ----------- Gallery navigation -------------*/ - -.ngg-navigation a.page-numbers, -.ngg-navigation a.next, -.ngg-navigation a.prev, -.ngg-navigation span.page-numbers, -.ngg-navigation span.next, -.ngg-navigation span.prev { - padding: 3px 7px; -} - -/* ----------- Related images -------------*/ - -.ngg-related-gallery img { - margin: 0pt 2px; -} - -.ngg-related-gallery img:hover { - border: 1px solid #000000; -} +/* +CSS Name: K2 Theme +Description: NextGEN Style for K2 Theme +Author: Alex Rabe +Version: 1.60 + +This stylesheet modifies the NextGEN defaults to be more compatible with the K2 theme +*/ + +/* ----------- Album Styles Extend -------------*/ + +.ngg-albumoverview { + margin: 10px 0px 0px 0px !important; +} + +.ngg-album { + margin: 0px 0px 5px !important; +} + +.ngg-albumtitle { + margin: 0px 0px 10px 0px !important; +} + +.ngg-albumcontent { + margin: 0px !important; +} + +.ngg-thumbnail { + float: left; + margin: 0px 12px 0px 0px !important; +} + +.ngg-thumbnail img { + margin: 4px 0px 4px 5px !important; +} + +/* ----------- Album Styles Compact -------------*/ + +.ngg-album-link { + margin: 0px !important; +} + +.ngg-album-compact h4 { + margin-bottom: 0px !important; + margin-top: 0px !important; + padding: 0px !important; +} + +/* ----------- Gallery style -------------*/ + +.ngg-gallery-thumbnail-box { + margin: 0px !important; +} + +.ngg-gallery-thumbnail { + background: url('shadowAlpha.png') no-repeat bottom right !important; + background: url('shadow.gif') no-repeat bottom right; + margin: 10px 0 0 10px !important; +} + +.ngg-gallery-thumbnail img { + margin: -6px 6px 6px -6px !important; +} + +/* ----------- Gallery navigation -------------*/ + +.ngg-navigation a.page-numbers, +.ngg-navigation a.next, +.ngg-navigation a.prev, +.ngg-navigation span.page-numbers, +.ngg-navigation span.next, +.ngg-navigation span.prev { + padding: 3px 7px; +} + +/* ----------- Related images -------------*/ + +.ngg-related-gallery img { + margin: 0pt 2px; +} + +.ngg-related-gallery img:hover { + border: 1px solid #000000; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow.css index ebab00b867d3bf7c5a514483eddde9a47570789c..a345fe18c9c87ced09d86fa9e856facd2b5660d8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow.css @@ -1,24 +1,24 @@ -/* -CSS Name: Shadow Effect -Description: NextGEN Default Style with a Shadow effect -Author: Alex Rabe -Version: 1.60 - -Applies a shadow effect to gallery thumbnails and enables display of their description text -*/ - -/* ----------- Gallery style -------------*/ - -.ngg-gallery-thumbnail { - background: url('shadowAlpha.png') no-repeat bottom right !important; - background: url('shadow.gif') no-repeat bottom right; - margin: 10px 0 0 10px !important; -} - -.ngg-gallery-thumbnail img { - margin: -6px 6px 6px -6px; -} - -.ngg-gallery-thumbnail span { - display: none; -} +/* +CSS Name: Shadow Effect +Description: NextGEN Default Style with a Shadow effect +Author: Alex Rabe +Version: 1.60 + +Applies a shadow effect to gallery thumbnails and enables display of their description text +*/ + +/* ----------- Gallery style -------------*/ + +.ngg-gallery-thumbnail { + background: url('shadowAlpha.png') no-repeat bottom right !important; + background: url('shadow.gif') no-repeat bottom right; + margin: 10px 0 0 10px !important; +} + +.ngg-gallery-thumbnail img { + margin: -6px 6px 6px -6px; +} + +.ngg-gallery-thumbnail span { + display: none; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow2.css b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow2.css index 290fa1c1133bced1cf1e22060a116bd163865ea9..3a5a3e555e7b9a321105f495580d2da8da3ba179 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow2.css +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/static/ngg_shadow2.css @@ -1,30 +1,30 @@ -/* -CSS Name: Shadow Effect with Description text -Description: NextGEN Default Style with a Shadow effect and description text below the thumbnail -Author: Alex Rabe -Version: 1.60 - -Applies a shadow effect to gallery thumbnails and enables display of their description text -*/ - -/* ----------- Gallery style -------------*/ - -.ngg-gallery-thumbnail { - background: url('shadowAlpha.png') no-repeat bottom right !important; - background: url('shadow.gif') no-repeat bottom right; - margin: 10px 0 0 10px !important; - padding: 10px 15px 10px 15px; - border-color: #EEEEEE; - border-style: solid none none solid; - border-width: 1px medium medium 1px; -} - -.ngg-gallery-thumbnail img { - margin: -6px 6px 6px -6px; -} - -.ngg-gallery-thumbnail span { - margin: -6px 6px 6px -6px; - text-align: center; - color: #808080; -} +/* +CSS Name: Shadow Effect with Description text +Description: NextGEN Default Style with a Shadow effect and description text below the thumbnail +Author: Alex Rabe +Version: 1.60 + +Applies a shadow effect to gallery thumbnails and enables display of their description text +*/ + +/* ----------- Gallery style -------------*/ + +.ngg-gallery-thumbnail { + background: url('shadowAlpha.png') no-repeat bottom right !important; + background: url('shadow.gif') no-repeat bottom right; + margin: 10px 0 0 10px !important; + padding: 10px 15px 10px 15px; + border-color: #EEEEEE; + border-style: solid none none solid; + border-width: 1px medium medium 1px; +} + +.ngg-gallery-thumbnail img { + margin: -6px 6px 6px -6px; +} + +.ngg-gallery-thumbnail span { + margin: -6px 6px 6px -6px; + text-align: center; + color: #808080; +} diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/album-compact.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/album-compact.php index 375e7c4bd3b86d1f902d0107872b4825b7ef6fb1..6df05b9159e02d85621519cc71e5ad028a15c544 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/album-compact.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/album-compact.php @@ -4,7 +4,8 @@ Template Page for the album overview Follow variables are useable : - $album : Contain information about the album + $album : Contain information about the first album + $albums : Contain information about all albums $galleries : Contain all galleries inside this album $pagination : Contain the pagination content @@ -22,12 +23,24 @@ Follow variables are useable : <div class="ngg-album-compact"> <div class="ngg-album-compactbox"> <div class="ngg-album-link"> - <a class="Link" href="<?php echo $gallery->pagelink ?>"> - <img class="Thumb" alt="<?php echo $gallery->title ?>" src="<?php echo $gallery->previewurl ?>"/> + <a class="Link" href="<?php echo nextgen_esc_url($gallery->pagelink) ?>"> + <img class="Thumb" alt="<?php echo esc_attr($gallery->title) ?>" src="<?php echo nextgen_esc_url($gallery->previewurl) ?>"/> </a> </div> </div> - <h4><a class="ngg-album-desc" title="<?php echo $gallery->title ?>" href="<?php echo $gallery->pagelink ?>" ><?php echo $gallery->title ?></a></h4> + <?php if (!empty($image_gen_params)) { + $max_width = 'style="max-width: ' . ($image_gen_params['width'] + 20) . 'px"'; + } else { + $max_width = ''; + } ?> + <h4> + <a class="ngg-album-desc" + title="<?php echo esc_attr($gallery->title) ?>" + href="<?php echo nextgen_esc_url($gallery->pagelink) ?>" + <?php echo $max_width; ?>> + <?php echo $gallery->title ?> + </a> + </h4> <?php if (@$gallery->counter > 0) : ?> <p><strong><?php echo $gallery->counter ?></strong> <?php _e('Photos', 'nggallery') ?></p> <?php endif; ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/album-extend.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/album-extend.php index 289095867b536644e38cf6c250f563e88311a9cd..83b01d9088b4200a24ba5fd8186ef4071106fb69 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/album-extend.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/album-extend.php @@ -4,7 +4,8 @@ Template Page for the album overview (extended) Follow variables are useable : - $album : Contain information about the album + $album : Contain information about the first album + $albums : Contain information about all albums $galleries : Contain all galleries inside this album $pagination : Contain the pagination content @@ -19,10 +20,10 @@ Follow variables are useable : <?php foreach ($galleries as $gallery) : ?> <div class="ngg-album"> - <div class="ngg-albumtitle"><a href="<?php echo $gallery->pagelink ?>"><?php echo $gallery->title ?></a></div> + <div class="ngg-albumtitle"><a href="<?php echo nextgen_esc_url($gallery->pagelink) ?>"><?php echo $gallery->title ?></a></div> <div class="ngg-albumcontent"> <div class="ngg-thumbnail"> - <a href="<?php echo $gallery->pagelink ?>"><img class="Thumb" alt="<?php echo $gallery->title ?>" src="<?php echo $gallery->previewurl ?>"/></a> + <a href="<?php echo nextgen_esc_url($gallery->pagelink) ?>"><img class="Thumb" alt="<?php echo esc_attr($gallery->title) ?>" src="<?php echo nextgen_esc_url($gallery->previewurl) ?>"/></a> </div> <div class="ngg-description"> <p><?php echo $gallery->galdesc ?></p> @@ -40,4 +41,4 @@ Follow variables are useable : </div> -<?php endif; ?> \ No newline at end of file +<?php endif; ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery-caption.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery-caption.php index f43d832600ad3815bb3c351829a485a12c66f3fe..956368b0e3551ba3f1da7130306575240770bec4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery-caption.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery-caption.php @@ -19,7 +19,7 @@ Follow variables are useable : <?php if ($gallery->show_slideshow) { ?> <!-- Slideshow link --> <div class="slideshowlink"> - <a class="slideshowlink" href="<?php echo $gallery->slideshow_link ?>"> + <a class="slideshowlink" href="<?php echo nextgen_esc_url($gallery->slideshow_link) ?>"> <?php echo $gallery->slideshow_link_text ?> </a> </div> @@ -28,7 +28,7 @@ Follow variables are useable : <?php if ($gallery->show_piclens) { ?> <!-- Piclense link --> <div class="piclenselink"> - <a class="piclenselink" href="<?php echo $gallery->piclens_link ?>"> + <a class="piclenselink" href="<?php echo nextgen_esc_url($gallery->piclens_link) ?>"> <?php _e('[View with PicLens]','nggallery'); ?> </a> </div> @@ -40,9 +40,16 @@ Follow variables are useable : <div id="ngg-image-<?php echo $image->pid ?>" class="ngg-gallery-thumbnail-box" <?php echo $image->style ?> > <div class="ngg-gallery-thumbnail" > - <a href="<?php echo $image->imageURL ?>" title="<?php echo $image->description ?>" <?php echo $image->thumbcode ?> > + <a href="<?php echo nextgen_esc_url($image->imageURL) ?>" + title="<?php echo esc_attr($image->description) ?>" + data-src="<?php echo nextgen_esc_url($image->imageURL) ?>" + data-thumbnail="<?php echo nextgen_esc_url($image->thumbnailURL); ?>" + data-image-id="<?php echo esc_attr($image->pid); ?>" + data-title="<?php echo esc_attr($image->alttext); ?>" + data-description="<?php echo esc_attr($image->description); ?>" + <?php echo $image->thumbcode ?> > <?php if ( !$image->hidden ) { ?> - <img title="<?php echo $image->alttext ?>" alt="<?php echo $image->alttext ?>" src="<?php echo $image->thumbnailURL ?>" <?php echo $image->size ?> /> + <img title="<?php echo esc_attr($image->alttext) ?>" alt="<?php echo esc_attr($image->alttext) ?>" src="<?php echo nextgen_esc_url($image->thumbnailURL) ?>" <?php echo $image->size ?> /> <?php } ?> </a> <span><?php echo $image->caption ?></span> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery-carousel.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery-carousel.php index de01c900894b94628e2d5dde82a757dd8e459e80..410750fafae97703ef754df11ca940b16ca15fd3 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery-carousel.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery-carousel.php @@ -19,14 +19,14 @@ Follow variables are useable : <div class="ngg-galleryoverview"> - <div class="pic"><img title="<?php echo $current->alttext ?>" alt="<?php echo $current->alttext ?>" src="<?php echo $current->url; ?>" /></div> + <div class="pic"><img title="<?php echo esc_attr($current->alttext) ?>" alt="<?php echo esc_attr($current->alttext) ?>" src="<?php echo nextgen_esc_url($current->url); ?>" /></div> <ul class="ngg-gallery-list"> <!-- PREV LINK --> <?php if ($prev) : ?> <li class="ngg-prev"> - <a class="prev" href="<?php echo $prev ?>">◄</a> + <a class="prev" href="<?php echo nextgen_esc_url($prev) ?>">◄</a> </li> <?php endif; ?> @@ -34,9 +34,9 @@ Follow variables are useable : <?php foreach ( $images as $image ) : ?> <?php if ( $image->hidden ) continue; ?> - <li id="ngg-image-<?php echo $image->pid ?>" class="ngg-thumbnail-list <?php if ($image->pid == $current->pid) echo 'selected' ?>" > - <a href="<?php echo $image->pidlink ?>" title="<?php echo $image->description ?>" > - <img title="<?php echo $image->alttext ?>" alt="<?php echo $image->alttext ?>" src="<?php echo $image->thumbnailURL ?>" <?php echo $image->size ?> /> + <li id="ngg-image-<?php echo esc_attr($image->pid) ?>" class="ngg-thumbnail-list <?php if ($image->pid == $current->pid) echo 'selected' ?>" > + <a href="<?php echo nextgen_esc_url($image->pidlink) ?>" title="<?php echo esc_attr($image->description) ?>" > + <img title="<?php echo esc_attr($image->alttext) ?>" alt="<?php echo esc_attr($image->alttext) ?>" src="<?php echo nextgen_esc_url($image->thumbnailURL) ?>" <?php echo $image->size ?> /> </a> </li> @@ -45,7 +45,7 @@ Follow variables are useable : <!-- NEXT LINK --> <?php if ($next) : ?> <li class="ngg-next"> - <a class="next" href="<?php echo $next ?>">►</a> + <a class="next" href="<?php echo nextgen_esc_url($next) ?>">►</a> </li> <?php endif; ?> @@ -53,4 +53,4 @@ Follow variables are useable : </div> -<?php endif; ?> \ No newline at end of file +<?php endif; ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery.php index c8332a2455f4de60ec733bbbc0ba89317ae55064..5d30662d183f9d5dc9fbd828c92d56f2e0807af8 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/gallery.php @@ -19,7 +19,7 @@ Follow variables are useable : <?php if ($gallery->show_slideshow) { ?> <!-- Slideshow link --> <div class="slideshowlink"> - <a class="slideshowlink" href="<?php echo $gallery->slideshow_link ?>"> + <a class="slideshowlink" href="<?php echo nextgen_esc_url($gallery->slideshow_link) ?>"> <?php echo $gallery->slideshow_link_text ?> </a> </div> @@ -28,7 +28,7 @@ Follow variables are useable : <?php if ($gallery->show_piclens) { ?> <!-- Piclense link --> <div class="piclenselink"> - <a class="piclenselink" href="<?php echo $gallery->piclens_link ?>"> + <a class="piclenselink" href="<?php echo nextgen_esc_url($gallery->piclens_link) ?>"> <?php _e('[View with PicLens]','nggallery'); ?> </a> </div> @@ -40,9 +40,16 @@ Follow variables are useable : <div id="ngg-image-<?php echo $image->pid ?>" class="ngg-gallery-thumbnail-box" <?php echo $image->style ?> > <div class="ngg-gallery-thumbnail" > - <a href="<?php echo $image->imageURL ?>" title="<?php echo $image->description ?>" <?php echo $image->thumbcode ?> > + <a href="<?php echo nextgen_esc_url($image->imageURL) ?>" + title="<?php echo esc_attr($image->description) ?>" + data-src="<?php echo nextgen_esc_url($image->imageURL); ?>" + data-thumbnail="<?php echo nextgen_esc_url($image->thumbnailURL); ?>" + data-image-id="<?php echo esc_attr($image->pid); ?>" + data-title="<?php echo esc_attr($image->alttext); ?>" + data-description="<?php echo esc_attr($image->description); ?>" + <?php echo $image->thumbcode ?> > <?php if ( !$image->hidden ) { ?> - <img title="<?php echo $image->alttext ?>" alt="<?php echo $image->alttext ?>" src="<?php echo $image->thumbnailURL ?>" <?php echo $image->size ?> /> + <img title="<?php echo esc_attr($image->alttext) ?>" alt="<?php echo esc_attr($image->alttext) ?>" src="<?php echo nextgen_esc_url($image->thumbnailURL) ?>" <?php echo $image->size ?> /> <?php } ?> </a> </div> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php index 8085de97e6961d8cb0f379d49572cd8e4b03366d..b13ba45249dc8d3343992a825c5a40e20c0dc9d0 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php @@ -23,10 +23,10 @@ Follow variables are useable : <div class="pic"><?php echo $image->href_link ?></div> <div class="ngg-imagebrowser-nav"> <div class="back"> - <a class="ngg-browser-prev" id="ngg-prev-<?php echo $image->previous_pid ?>" href="<?php echo $image->previous_image_link ?>">◄ <?php _e('Back', 'nggallery') ?></a> + <a class="ngg-browser-prev" id="ngg-prev-<?php echo $image->previous_pid ?>" href="<?php echo nextgen_esc_url($image->previous_image_link) ?>">◄ <?php _e('Back', 'nggallery') ?></a> </div> <div class="next"> - <a class="ngg-browser-next" id="ngg-next-<?php echo $image->next_pid ?>" href="<?php echo $image->next_image_link ?>"><?php _e('Next', 'nggallery') ?> ►</a> + <a class="ngg-browser-next" id="ngg-next-<?php echo $image->next_pid ?>" href="<?php echo nextgen_esc_url($image->next_image_link) ?>"><?php _e('Next', 'nggallery') ?> ►</a> </div> <div class="counter"><?php _e('Picture', 'nggallery') ?> <?php echo $image->number ?> <?php _e('of', 'nggallery')?> <?php echo $image->total ?></div> <div class="ngg-imagebrowser-desc"><p><?php echo $image->description ?></p></div> @@ -34,4 +34,4 @@ Follow variables are useable : </div> -<?php endif; ?> \ No newline at end of file +<?php endif; ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php index cdf7a61cb49412886ab955077c8b04a5b4fb7abe..216b3c3d1e9071c387dceecae054ed49496d1805 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php @@ -27,10 +27,10 @@ Please note : A Image resize or watermarking operation will remove all meta info <div class="pic"><?php echo $image->href_link ?></div> <div class="ngg-imagebrowser-nav"> <div class="back"> - <a class="ngg-browser-prev" id="ngg-prev-<?php echo $image->previous_pid ?>" href="<?php echo $image->previous_image_link ?>">◄ <?php _e('Back', 'nggallery') ?></a> + <a class="ngg-browser-prev" id="ngg-prev-<?php echo $image->previous_pid ?>" href="<?php echo nextgen_esc_url($image->previous_image_link) ?>">◄ <?php _e('Back', 'nggallery') ?></a> </div> <div class="next"> - <a class="ngg-browser-next" id="ngg-next-<?php echo $image->next_pid ?>" href="<?php echo $image->next_image_link ?>"><?php _e('Next', 'nggallery') ?> ►</a> + <a class="ngg-browser-next" id="ngg-next-<?php echo $image->next_pid ?>" href="<?php echo nextgen_esc_url($image->next_image_link) ?>"><?php _e('Next', 'nggallery') ?> ►</a> </div> <div class="counter"><?php _e('Picture', 'nggallery') ?> <?php echo $image->number ?> <?php _e('of', 'nggallery')?> <?php echo $image->total ?></div> <div class="ngg-imagebrowser-desc"><p><?php echo $image->description ?></p></div> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php index 8085de97e6961d8cb0f379d49572cd8e4b03366d..379b27a7da5a561a1d6d6f98c8c198431e792655 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php @@ -20,13 +20,13 @@ Follow variables are useable : <h3><?php echo $image->alttext ?></h3> - <div class="pic"><?php echo $image->href_link ?></div> + <div class="pic"><?php echo nextgen_esc_url($image->href_link) ?></div> <div class="ngg-imagebrowser-nav"> <div class="back"> - <a class="ngg-browser-prev" id="ngg-prev-<?php echo $image->previous_pid ?>" href="<?php echo $image->previous_image_link ?>">◄ <?php _e('Back', 'nggallery') ?></a> + <a class="ngg-browser-prev" id="ngg-prev-<?php echo $image->previous_pid ?>" href="<?php echo nextgen_esc_url($image->previous_image_link) ?>">◄ <?php _e('Back', 'nggallery') ?></a> </div> <div class="next"> - <a class="ngg-browser-next" id="ngg-next-<?php echo $image->next_pid ?>" href="<?php echo $image->next_image_link ?>"><?php _e('Next', 'nggallery') ?> ►</a> + <a class="ngg-browser-next" id="ngg-next-<?php echo $image->next_pid ?>" href="<?php echo nextgen_esc_url($image->next_image_link) ?>"><?php _e('Next', 'nggallery') ?> ►</a> </div> <div class="counter"><?php _e('Picture', 'nggallery') ?> <?php echo $image->number ?> <?php _e('of', 'nggallery')?> <?php echo $image->total ?></div> <div class="ngg-imagebrowser-desc"><p><?php echo $image->description ?></p></div> @@ -34,4 +34,4 @@ Follow variables are useable : </div> -<?php endif; ?> \ No newline at end of file +<?php endif; ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/singlepic.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/singlepic.php index 5f8d0ef670e6a4ed7711929b3eaa480ae240838b..81267a7cdced9a763219d0187c810571ac47d2de 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/singlepic.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/view/singlepic.php @@ -18,14 +18,19 @@ Please note : A Image resize or watermarking operation will remove all meta info **/ ?> <?php if (!defined ('ABSPATH')) die ('No direct access allowed'); ?><?php if (!empty ($image)) : ?> -<a href="<?php echo $image->imageURL; ?>" - title="<?php echo $image->linktitle; ?>" +<a href="<?php echo nextgen_esc_url($image->imageURL); ?>" + title="<?php echo esc_attr($image->linktitle); ?>" + data-src="<?php echo nextgen_esc_url($image->imageURL); ?>" + data-thumbnail="<?php echo nextgen_esc_url($image->thumbnailURL); ?>" + data-image-id="<?php echo esc_attr($image->pid); ?>" + data-title="<?php echo esc_attr($image->alttext); ?>" + data-description="<?php echo esc_attr($image->description); ?>" <?php if(!empty($target)) { ?>target="<?php echo esc_attr($target); ?>"<?php } ?> <?php echo $image->thumbcode; ?>> <img class="<?php echo $image->classname; ?>" - src="<?php echo $image->thumbnailURL; ?>" - alt="<?php echo $image->alttext; ?>" - title="<?php echo $image->alttext; ?>"/> + src="<?php echo nextgen_esc_url($image->thumbnailURL); ?>" + alt="<?php echo esc_attr($image->alttext); ?>" + title="<?php echo esc_attr($image->alttext); ?>"/> </a> <?php if (!empty ($image->caption)) : ?><span><?php echo $image->caption ?></span><?php endif; ?> -<?php endif; ?> \ No newline at end of file +<?php endif; ?> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/xml/json.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/xml/json.php index 781ffaabf1259b4c0272165855ff40fdab81f3dc..dc24492cc495cd3d9c29bc99287a98694a9c3a27 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/xml/json.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/ngglegacy/xml/json.php @@ -1,275 +1,275 @@ -<?php -/** -* REST Application Programming Interface PHP class for the WordPress plugin NextGEN Gallery -* Should emulate some kind of Flickr JSON callback : ?callback=json&format=json&api_key=1234567890&method=search&term=myterm -* -* @version 1.1.0 -* @author Alex Rabe -* -* @require PHP 5.2.0 or higher -* -*/ - -class nggAPI { - - /** - * $_GET Variables - * - * @since 1.5.0 - * @access private - * @var string - */ - var $format = false; // $_GET['format'] : Return a XML oder JSON output - var $api_key = false; // $_GET['api_key'] : Protect the access via a random key (required if user is not logged into backend) - var $method = false; // $_GET['method'] : search | gallery | image | album | tag | autocomplete - var $term = false; // $_GET['term'] : The search term (required for method search | tag) - var $id = false; // $_GET['id'] : object id (required for method gallery | image | album ) - var $limit = false; // $_GET['limit'] : maximum of images which we request - var $type = false; // $_GET['type'] : gallery | image | album (required for method autocomplete) - - /** - * Contain the final output - * - * @since 1.5.0 - * @access private - * @var string - */ - var $output = ''; - - /** - * Holds the requested information as array - * - * @since 1.5.0 - * @access private - * @var array - */ - var $result = ''; - - /** - * Init the variables - * - */ - function __construct() { - - if ( !defined('ABSPATH') ) - die('You are not allowed to call this page directly.'); - - if ( !function_exists('json_encode') ) - wp_die('Json_encode not available. You need to use PHP 5.2'); - - // Read the parameter on init - $this->format = isset($_GET['format']) ? strtolower( $_GET['format'] ) : false; - $this->api_key = isset($_GET['api_key'])? $_GET['api_key'] : false; - $this->method = isset($_GET['method']) ? strtolower( $_GET['method'] ) : false; - $this->term = isset($_GET['term']) ? urldecode( $_GET['term'] ) : false; - $this->id = isset($_GET['id']) ? (int) $_GET['id'] : 0; - $this->limit = isset($_GET['limit']) ? (int) $_GET['limit'] : 0; - $this->type = isset($_GET['type']) ? strtolower( $_GET['type'] ) : false; - $this->result = array(); - $this->list = false; - - $this->start_process(); - $this->render_output(); - } - - function start_process() { - - global $ngg; - - if ( !$this->valid_access() ) - return; - - switch ( $this->method ) { - case 'search' : - //search for some images - $this->result['images'] = array_merge( (array) nggdb::search_for_images( $this->term ), (array) nggTags::find_images_for_tags( $this->term , 'ASC' )); - break; - case 'album' : - //search for some album //TODO : Get images for each gallery, could end in a big db query - $this->result['album'] = nggdb::find_album( $this->id ); - break; - case 'gallery' : - //search for some gallery - $this->result['images'] = ($this->id == 0) ? nggdb::find_last_images( 0 , 100 ) : nggdb::get_gallery( $this->id, $ngg->options['galSort'], $ngg->options['galSortDir'], true, 0, 0, true ); - break; - case 'image' : - //search for some image - $this->result['images'] = nggdb::find_image( $this->id ); - break; - case 'tag' : - //search for images based on tags - $this->result['images'] = nggTags::find_images_for_tags( $this->term , 'ASC' ); - break; - case 'recent' : - //search for images based on tags - $this->result['images'] = nggdb::find_last_images( 0 , $this->limit ); - break; - case 'autocomplete' : - //return images, galleries or albums for autocomplete drop down list - return $this->autocomplete(); - break; - case 'version' : - $this->result = array ('stat' => 'ok', 'version' => $ngg->version); - return; - break; - default : - $this->result = array ('stat' => 'fail', 'code' => '98', 'message' => 'Method not known.'); - return false; - break; - } - - // result should be fine - $this->result['stat'] = 'ok'; - } - - function valid_access() { - - // if we are logged in, then we can go on - if ( is_user_logged_in() ) - return true; - - //TODO:Implement an API KEY check later - if ($this->api_key != false) - return true; - - $this->result = array ('stat' => 'fail', 'code' => '99', 'message' => 'Insufficient permissions. Method requires read privileges; none granted.'); - return false; - } - - /** - * return search result for autocomplete request from backend - * - * @since 1.7.0 - * @return void - */ - function autocomplete() { - global $nggdb; - - switch ( $this->type ) { - case 'image' : - - // return the last entries in case of an empty search string - if ( empty($this->term) ) - $list = $nggdb->find_last_images(0, $this->limit, false); - else - $list = $nggdb->search_for_images($this->term, $this->limit); - - if( is_array($list) ) { - foreach($list as $image) { - // reorder result to array-object - $obj = new stdClass(); - $obj->id = $image->pid; - $name = ( empty($image->alttext) ? $image->filename : $image->alttext ); - //TODO : need to rework save/load - $name = stripslashes( htmlspecialchars_decode($name, ENT_QUOTES)); - $obj->label = $image->pid . ' - ' . $name; - $obj->value = $name; - $this->result[] = $obj; - } - } - - return $this->result; - break; - case 'gallery' : - - if ( empty($this->term) ) - $list = $nggdb->find_all_galleries('gid', 'DESC', false, $this->limit ); - else - $list = $nggdb->search_for_galleries($this->term, $this->limit); - - if( is_array($list) ) { - foreach($list as $gallery) { - // reorder result to array-object - $obj = new stdClass(); - $obj->id = $gallery->gid; - $name = ( empty($gallery->title) ) ? $gallery->name : $gallery->title; - $name = stripslashes( htmlspecialchars_decode($name, ENT_QUOTES)); - $obj->label = $gallery->gid . ' - ' . $name; - $obj->value = $name; - $this->result[] = $obj; - } - } - return $this->result; - break; - case 'album' : - - if ( empty($this->term) ) - $list = $nggdb->find_all_album('id', 'DESC', $this->limit ); - else - $list = $nggdb->search_for_albums($this->term, $this->limit); - - if( is_array($list) ) { - foreach($list as $album) { - // reorder result to array-object - $obj = new stdClass(); - $obj->id = $album->id; - $album->name = stripslashes( htmlspecialchars_decode($album->name, ENT_QUOTES)); - $obj->label = $album->id . ' - ' . $album->name; - $obj->value = $album->name; - $this->result[] = $obj; - } - } - return $this->result; - break; - default : - $this->result = array ('stat' => 'fail', 'code' => '98', 'message' => 'Type not known.'); - return false; - break; - } - } - - /** - * Iterates through a multidimensional array - * - * @author Boris Glumpler - * @param array $arr - * @return void - */ - function create_xml_array( &$arr ) - { - $xml = ''; - - if( is_object( $arr ) ) - $arr = get_object_vars( $arr ); - - foreach( (array)$arr as $k => $v ) { - if( is_object( $v ) ) - $v = get_object_vars( $v ); - //nodes must contain letters - if( is_numeric( $k ) ) - $k = 'id-'.$k; - if( is_array( $v ) ) - $xml .= "<$k>\n". $this->create_xml_array( $v ). "</$k>\n"; - else - $xml .= "<$k>$v</$k>\n"; - } - - return $xml; - } - - function render_output() { - - if ($this->format == 'json') { - header('Content-Type: application/json; charset=' . get_option('blog_charset'), true); - $this->output = json_encode($this->result); - } else { - header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true); - $this->output = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n"; - $this->output .= "<nextgen-gallery>" . $this->create_xml_array( $this->result ) . "</nextgen-gallery>\n"; - } - - } - - /** - * PHP5 style destructor and will run when the class is finished. - * - * @return output - */ - function __destruct() { - echo $this->output; - } - -} - -// let's use it -$nggAPI = new nggAPI; +<?php +/** +* REST Application Programming Interface PHP class for the WordPress plugin NextGEN Gallery +* Should emulate some kind of Flickr JSON callback : ?callback=json&format=json&api_key=1234567890&method=search&term=myterm +* +* @version 1.1.0 +* @author Alex Rabe +* +* @require PHP 5.2.0 or higher +* +*/ + +class nggAPI { + + /** + * $_GET Variables + * + * @since 1.5.0 + * @access private + * @var string + */ + var $format = false; // $_GET['format'] : Return a XML oder JSON output + var $api_key = false; // $_GET['api_key'] : Protect the access via a random key (required if user is not logged into backend) + var $method = false; // $_GET['method'] : search | gallery | image | album | tag | autocomplete + var $term = false; // $_GET['term'] : The search term (required for method search | tag) + var $id = false; // $_GET['id'] : object id (required for method gallery | image | album ) + var $limit = false; // $_GET['limit'] : maximum of images which we request + var $type = false; // $_GET['type'] : gallery | image | album (required for method autocomplete) + + /** + * Contain the final output + * + * @since 1.5.0 + * @access private + * @var string + */ + var $output = ''; + + /** + * Holds the requested information as array + * + * @since 1.5.0 + * @access private + * @var array + */ + var $result = ''; + + /** + * Init the variables + * + */ + function __construct() { + + if ( !defined('ABSPATH') ) + die('You are not allowed to call this page directly.'); + + if ( !function_exists('json_encode') ) + wp_die('Json_encode not available. You need to use PHP 5.2'); + + // Read the parameter on init + $this->format = isset($_GET['format']) ? strtolower( $_GET['format'] ) : false; + $this->api_key = isset($_GET['api_key'])? $_GET['api_key'] : false; + $this->method = isset($_GET['method']) ? strtolower( $_GET['method'] ) : false; + $this->term = isset($_GET['term']) ? urldecode( $_GET['term'] ) : false; + $this->id = isset($_GET['id']) ? (int) $_GET['id'] : 0; + $this->limit = isset($_GET['limit']) ? (int) $_GET['limit'] : 0; + $this->type = isset($_GET['type']) ? strtolower( $_GET['type'] ) : false; + $this->result = array(); + $this->list = false; + + $this->start_process(); + $this->render_output(); + } + + function start_process() { + + global $ngg; + + if ( !$this->valid_access() ) + return; + + switch ( $this->method ) { + case 'search' : + //search for some images + $this->result['images'] = array_merge( (array) nggdb::search_for_images( $this->term ), (array) nggTags::find_images_for_tags( $this->term , 'ASC' )); + break; + case 'album' : + //search for some album //TODO : Get images for each gallery, could end in a big db query + $this->result['album'] = nggdb::find_album( $this->id ); + break; + case 'gallery' : + //search for some gallery + $this->result['images'] = ($this->id == 0) ? nggdb::find_last_images( 0 , 100 ) : nggdb::get_gallery( $this->id, $ngg->options['galSort'], $ngg->options['galSortDir'], true, 0, 0, true ); + break; + case 'image' : + //search for some image + $this->result['images'] = nggdb::find_image( $this->id ); + break; + case 'tag' : + //search for images based on tags + $this->result['images'] = nggTags::find_images_for_tags( $this->term , 'ASC' ); + break; + case 'recent' : + //search for images based on tags + $this->result['images'] = nggdb::find_last_images( 0 , $this->limit ); + break; + case 'autocomplete' : + //return images, galleries or albums for autocomplete drop down list + return $this->autocomplete(); + break; + case 'version' : + $this->result = array ('stat' => 'ok', 'version' => $ngg->version); + return; + break; + default : + $this->result = array ('stat' => 'fail', 'code' => '98', 'message' => 'Method not known.'); + return false; + break; + } + + // result should be fine + $this->result['stat'] = 'ok'; + } + + function valid_access() { + + // if we are logged in, then we can go on + if ( is_user_logged_in() ) + return true; + + //TODO:Implement an API KEY check later + if ($this->api_key != false) + return true; + + $this->result = array ('stat' => 'fail', 'code' => '99', 'message' => 'Insufficient permissions. Method requires read privileges; none granted.'); + return false; + } + + /** + * return search result for autocomplete request from backend + * + * @since 1.7.0 + * @return void + */ + function autocomplete() { + global $nggdb; + + switch ( $this->type ) { + case 'image' : + + // return the last entries in case of an empty search string + if ( empty($this->term) ) + $list = $nggdb->find_last_images(0, $this->limit, false); + else + $list = $nggdb->search_for_images($this->term, $this->limit); + + if( is_array($list) ) { + foreach($list as $image) { + // reorder result to array-object + $obj = new stdClass(); + $obj->id = $image->pid; + $name = ( empty($image->alttext) ? $image->filename : $image->alttext ); + //TODO : need to rework save/load + $name = stripslashes( htmlspecialchars_decode($name, ENT_QUOTES)); + $obj->label = $image->pid . ' - ' . $name; + $obj->value = $name; + $this->result[] = $obj; + } + } + + return $this->result; + break; + case 'gallery' : + + if ( empty($this->term) ) + $list = $nggdb->find_all_galleries('gid', 'DESC', false, $this->limit ); + else + $list = $nggdb->search_for_galleries($this->term, $this->limit); + + if( is_array($list) ) { + foreach($list as $gallery) { + // reorder result to array-object + $obj = new stdClass(); + $obj->id = $gallery->gid; + $name = ( empty($gallery->title) ) ? $gallery->name : $gallery->title; + $name = stripslashes( htmlspecialchars_decode($name, ENT_QUOTES)); + $obj->label = $gallery->gid . ' - ' . $name; + $obj->value = $name; + $this->result[] = $obj; + } + } + return $this->result; + break; + case 'album' : + + if ( empty($this->term) ) + $list = $nggdb->find_all_album('id', 'DESC', $this->limit ); + else + $list = $nggdb->search_for_albums($this->term, $this->limit); + + if( is_array($list) ) { + foreach($list as $album) { + // reorder result to array-object + $obj = new stdClass(); + $obj->id = $album->id; + $album->name = stripslashes( htmlspecialchars_decode($album->name, ENT_QUOTES)); + $obj->label = $album->id . ' - ' . $album->name; + $obj->value = $album->name; + $this->result[] = $obj; + } + } + return $this->result; + break; + default : + $this->result = array ('stat' => 'fail', 'code' => '98', 'message' => 'Type not known.'); + return false; + break; + } + } + + /** + * Iterates through a multidimensional array + * + * @author Boris Glumpler + * @param array $arr + * @return void + */ + function create_xml_array( &$arr ) + { + $xml = ''; + + if( is_object( $arr ) ) + $arr = get_object_vars( $arr ); + + foreach( (array)$arr as $k => $v ) { + if( is_object( $v ) ) + $v = get_object_vars( $v ); + //nodes must contain letters + if( is_numeric( $k ) ) + $k = 'id-'.$k; + if( is_array( $v ) ) + $xml .= "<$k>\n". $this->create_xml_array( $v ). "</$k>\n"; + else + $xml .= "<$k>$v</$k>\n"; + } + + return $xml; + } + + function render_output() { + + if ($this->format == 'json') { + header('Content-Type: application/json; charset=' . get_option('blog_charset'), true); + $this->output = json_encode($this->result); + } else { + header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true); + $this->output = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n"; + $this->output .= "<nextgen-gallery>" . $this->create_xml_array( $this->result ) . "</nextgen-gallery>\n"; + } + + } + + /** + * PHP5 style destructor and will run when the class is finished. + * + * @return output + */ + function __destruct() { + echo $this->output; + } + +} + +// let's use it +$nggAPI = new nggAPI; diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/class.router.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/class.router.php old mode 100644 new mode 100755 index f7a6d9aae278fc35228cc0a6ffa08347531f7dd2..4bfde4ff2482e5ffb38cefdf8b5d1c7890603cde --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/class.router.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/class.router.php @@ -73,7 +73,7 @@ class Mixin_Router extends Mixin $retval = $this->object->construct_url_from_parts($parts); } - return $retval; + return str_replace("\\", "/", $retval); } /** @@ -86,8 +86,7 @@ class Mixin_Router extends Mixin { $url = $this->object->get_url($uri, $with_qs=TRUE); $retval = str_replace($this->object->get_base_url(), '', $url); - if (strpos($retval, '/') !== 0) $retval = '/'.$retval; - return $retval; + return '/'.lrtim($retval, '/'); } @@ -112,8 +111,7 @@ class Mixin_Router extends Mixin ); // adjust for possible windows hosts - $path = str_replace('\\', '/', $path); - return $path; + return str_replace("\\", '/', $path); } @@ -142,7 +140,7 @@ class Mixin_Router extends Mixin { $protocol = $this->object->is_https()? 'https://' : 'http://'; $retval = "{$protocol}{$_SERVER['SERVER_NAME']}{$this->object->context}"; - return untrailingslashit($retval); + return str_replace("\\", "/", rtrim($retval, "/\\")); } /** diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/class.routing_app.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/class.routing_app.php index 36ad05b11de5520bd2cf8dd27097ea0c0b8ad850..43f59bc3c104605bd6a0a23b07007947271daaad 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/class.routing_app.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/class.routing_app.php @@ -168,6 +168,7 @@ class Mixin_Routing_App extends Mixin function do_rewrites($request_uri=FALSE) { $redirect = FALSE; + static $stop_processing = FALSE; // Get the request uri if not provided if (!$request_uri) $request_uri = $this->object->get_app_request_uri(); @@ -178,7 +179,7 @@ class Mixin_Routing_App extends Mixin // Process each rewrite rule // start rewriting urls - foreach ($this->object->_rewrite_patterns as $pattern => $details) { + if (!$stop_processing) foreach ($this->object->_rewrite_patterns as $pattern => $details) { // Remove this pattern from future processing for this request unset($this->object->_rewrite_patterns[$pattern]); @@ -189,9 +190,8 @@ class Mixin_Routing_App extends Mixin foreach ($matches as $index => $match) { if ($index == 0) { $request_uri = str_replace($match, $details['dst'], $request_uri); - continue; } - $request_uri = str_replace( + if ($index > 0) $request_uri = str_replace( "{{$index}}", $match, $request_uri ); } @@ -204,7 +204,10 @@ class Mixin_Routing_App extends Mixin } // Stop processing rewrite patterns? - if ($details['stop']) break; + if ($details['stop']) { + $stop_processing = TRUE; + + } } } @@ -233,6 +236,8 @@ class Mixin_Routing_App extends Mixin } } + + if ($stop_processing) break; } // Cache all known data about the application request @@ -492,8 +497,20 @@ class Mixin_Routing_App extends Mixin } // Lastly, check the $_REQUEST - if (!$found && !$url && isset($_REQUEST[$key])) - $retval = $this->object->recursive_stripslashes($_REQUEST[$key]); + if (!$found && !$url && isset($_REQUEST[$key])) { + $found = TRUE; + $retval = $this->object->recursive_stripslashes($_REQUEST[$key]); + } + + if (!$found && isset($_SERVER['REQUEST_URI'])) { + $params = array(); + parse_str(@parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY), $params); + + if (isset($params[$key])) { + $found = TRUE; + $retval = $this->object->recursive_stripslashes($params[$key]); + } + } return $retval; } @@ -522,6 +539,7 @@ class Mixin_Routing_App extends Mixin $param_slug && strpos($parts['path'], $param_slug) === FALSE ? $param_slug : '', $this->object->create_parameter_segment($key, $value, $id, $use_prefix) ); + $parts['path'] = str_replace('//', '/', $parts['path']); $retval = $this->object->construct_url_from_parts($parts); } @@ -534,7 +552,7 @@ class Mixin_Routing_App extends Mixin $retval = $this->object->get_routed_url(); } - return trailingslashit($retval); + return $retval; } /** @@ -564,7 +582,7 @@ class Mixin_Routing_App extends Mixin $param_slug = $settings->router_param_slug ? preg_quote($settings->router_param_slug, '#') : FALSE; // Is the parameter already part of the request? If so, modify that - // parmaeter + // parameter if (($segment = $this->object->get_parameter_segment($key, $id, $url))) { extract($segment); @@ -574,7 +592,7 @@ class Mixin_Routing_App extends Mixin $regex = implode('', array( '#', $id ? "{$preg_id}{$param_sep}" : '', - "(({$param_prefix})?[-_]?)?{$preg_key}({$param_sep}|=)[^\/&]+&?#i" + "(({$param_prefix}{$param_sep})?)?{$preg_key}({$param_sep}|=)[^\/&]+&?#i" )); $qs = preg_replace($regex, '', $this->get_router()->get_querystring()); $this->object->get_router()->set_querystring($qs); @@ -613,7 +631,7 @@ class Mixin_Routing_App extends Mixin { $settings = $this->object->_settings; $param_slug = $settings->router_param_slug; - + $uri = $this->object->get_app_request_uri(); $parts = array($uri); if ($param_slug && strpos($uri, $param_slug) === FALSE) $parts[] = $param_slug; @@ -697,7 +715,7 @@ class Mixin_Routing_App extends Mixin return array( 'querystring' => $this->object->get_formatted_querystring(), 'request_uri' => $this->object->get_app_request_uri(), - 'postdata' => $this->object->get_postdata() + //'postdata' => $this->object->get_postdata() ); } @@ -736,7 +754,7 @@ class Mixin_Routing_App extends Mixin $sep = preg_quote($settings->router_param_separator,'#'); // If we detect the MVC_PARAM_SLUG, then we assume that we have parameters - if ($settings->router_param_slug && strpos($request_uri, '/'.$settings->router_param_slug) !== FALSE) { + if ($settings->router_param_slug && strpos($request_uri, '/'.$settings->router_param_slug.'/') !== FALSE) { $retval = TRUE; } @@ -796,13 +814,13 @@ class C_Routing_App extends C_Component $this->add_mixin('Mixin_Routing_App'); $this->implement('I_Routing_App'); } - + function initialize() { parent::initialize(); $this->_settings = $this->object->get_routing_settings(); } - + function get_routing_settings() { $settings = C_NextGen_Settings::get_instance(); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/interface.router.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/interface.router.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/mixin.url_manipulation.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/mixin.url_manipulation.php index 97522f7fb88cc57695951253ebacce2d29f12c63..1cffeee87ff89044d3c8ff8562be9966f8da436a 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/mixin.url_manipulation.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/mixin.url_manipulation.php @@ -5,7 +5,11 @@ class Mixin_Url_Manipulation extends Mixin function join_paths() { $args = func_get_args(); - return $this->get_registry()->get_utility('I_Fs')->join_paths($args); + $parts = $this->_flatten_array($args); + foreach ($parts as &$part) { + $part = trim(str_replace("\\", '/', $part), "/"); + } + return implode('/', $parts); } /** @@ -20,7 +24,7 @@ class Mixin_Url_Manipulation extends Mixin $parts = parse_url($url); // If the url has a path, then we can remove a segment - if (isset($parts['path'])) { + if (isset($parts['path']) && $segment != '/') { if (substr($segment, -1) == '/') $segment = substr($segment, -1); $segment = preg_quote($segment, '#'); if (preg_match("#{$segment}#", $parts['path'], $matches)) { @@ -131,9 +135,10 @@ class Mixin_Url_Manipulation extends Mixin $retval = $this->object->join_paths( $prefix, - isset($parts['path']) ? $parts['path'] : '' + isset($parts['path']) ? str_replace('//', '/', trailingslashit($parts['path'])) : '' ); - if (isset($parts['query']) && $parts['query']) $retval .= "?{$parts['query']}"; + + if (isset($parts['query']) && $parts['query']) $retval .= untrailingslashit("?{$parts['query']}"); return $retval; } @@ -158,13 +163,13 @@ class Mixin_Url_Manipulation extends Mixin $slug_regex = '#'.$slug.'/?$#'; // Remove all parameters - while (preg_match($param_regex, $retval, $matches)) { + while (@preg_match($param_regex, $retval, $matches)) { $match_regex = '#'.preg_quote(array_shift($matches),'#').'$#'; $retval = preg_replace($match_regex, '', $retval); } // Remove the slug or trailing slash - if (preg_match($slug_regex, $retval, $matches)) { + if (@preg_match($slug_regex, $retval, $matches)) { $match_regex = '#'.preg_quote(array_shift($matches),'#').'$#'; $retval = preg_replace($match_regex, '', $retval); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/module.router.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/module.router.php index f35c2c48bcc8661a22eb82432309c3603c0416b9..dd324441ed86872dddea0e9575fc9a7a19455cb1 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/module.router.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/router/module.router.php @@ -13,7 +13,7 @@ class M_Router extends C_Base_Module 'photocrati-router', 'Router for Pope', 'Provides routing capabilities for Pope modules', - '0.4', + '0.6', 'http://www.photocrati.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/class.wordpress_security_manager.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/class.wordpress_security_manager.php index ce655d082d0014c4c6e353b4c2587a3e4ee65256..068549982d46adca8cdde461a2ebd602bb801dcc 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/class.wordpress_security_manager.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/class.wordpress_security_manager.php @@ -59,6 +59,21 @@ class Mixin_WordPress_Security_Manager extends Mixin function get_current_actor() { + // If the current_user has an id of 0, then perhaps something went wrong + // with trying to parse the cookie. In that case, we'll force WordPress to try + // again + global $current_user; + if ($current_user->ID == 0) { + if (isset($GLOBALS['HTTP_COOKIE_VARS']) && isset($GLOBALS['_COOKIE'])) { + $current_user = NULL; + foreach ($GLOBALS['HTTP_COOKIE_VARS'] as $key => $value) { + if (!isset($_COOKIE[$key])) { + $_COOKIE[$key] = $value; + } + } + } + } + return $this->object->get_actor(get_current_user_id(), 'user'); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/module.security.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/module.security.php index 65e6f71a395893285a4b2cd9f49667fe50c23463..c6652a881994d7ac96c40763366645fe82e4fe3f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/module.security.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/security/module.security.php @@ -14,11 +14,15 @@ class M_Security extends C_Base_Module 'photocrati-security', 'Security', 'Provides utilities to check for credentials and security', - '0.1', + '0.2', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' ); + + if (isset($GLOBALS['_COOKIE_NG_COPY'])) { + $_COOKIE = $GLOBALS['_COOKIE_NG_COPY']; + } } function _register_adapters() diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/simplehtmldom/module.simple_html_dom.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/simplehtmldom/module.simple_html_dom.php old mode 100644 new mode 100755 diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/simplehtmldom/simplehtmldom/simple_html_dom.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/simplehtmldom/simplehtmldom/simple_html_dom.php index a92a94a46783953fb1801a736d17d30260b22f58..ad492da891ab7bc93e26f2c71b4682170102b88d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/simplehtmldom/simplehtmldom/simple_html_dom.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/simplehtmldom/simplehtmldom/simple_html_dom.php @@ -1,1742 +1,1742 @@ -<?php -/** - * Website: http://sourceforge.net/projects/simplehtmldom/ - * Additional projects that may be used: http://sourceforge.net/projects/debugobject/ - * Acknowledge: Jose Solorzano (https://sourceforge.net/projects/php-html/) - * Contributions by: - * Yousuke Kumakura (Attribute filters) - * Vadim Voituk (Negative indexes supports of "find" method) - * Antcs (Constructor with automatically load contents either text or file/url) - * - * all affected sections have comments starting with "PaperG" - * - * Paperg - Added case insensitive testing of the value of the selector. - * Paperg - Added tag_start for the starting index of tags - NOTE: This works but not accurately. - * This tag_start gets counted AFTER \r\n have been crushed out, and after the remove_noice calls so it will not reflect the REAL position of the tag in the source, - * it will almost always be smaller by some amount. - * We use this to determine how far into the file the tag in question is. This "percentage will never be accurate as the $dom->size is the "real" number of bytes the dom was created from. - * but for most purposes, it's a really good estimation. - * Paperg - Added the forceTagsClosed to the dom constructor. Forcing tags closed is great for malformed html, but it CAN lead to parsing errors. - * Allow the user to tell us how much they trust the html. - * Paperg add the text and plaintext to the selectors for the find syntax. plaintext implies text in the innertext of a node. text implies that the tag is a text node. - * This allows for us to find tags based on the text they contain. - * Create find_ancestor_tag to see if a tag is - at any level - inside of another specific tag. - * Paperg: added parse_charset so that we know about the character set of the source document. - * NOTE: If the user's system has a routine called get_last_retrieve_url_contents_content_type availalbe, we will assume it's returning the content-type header from the - * last transfer or curl_exec, and we will parse that and use it in preference to any other method of charset detection. - * - * Found infinite loop in the case of broken html in restore_noise. Rewrote to protect from that. - * PaperG (John Schlick) Added get_display_size for "IMG" tags. - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @author S.C. Chen <me578022@gmail.com> - * @author John Schlick - * @author Rus Carroll - * @version 1.5 ($Rev: 208 $) - * @package PlaceLocalInclude - * @subpackage simple_html_dom - */ - -/** - * All of the Defines for the classes below. - * @author S.C. Chen <me578022@gmail.com> - */ -define('HDOM_TYPE_ELEMENT', 1); -define('HDOM_TYPE_COMMENT', 2); -define('HDOM_TYPE_TEXT', 3); -define('HDOM_TYPE_ENDTAG', 4); -define('HDOM_TYPE_ROOT', 5); -define('HDOM_TYPE_UNKNOWN', 6); -define('HDOM_QUOTE_DOUBLE', 0); -define('HDOM_QUOTE_SINGLE', 1); -define('HDOM_QUOTE_NO', 3); -define('HDOM_INFO_BEGIN', 0); -define('HDOM_INFO_END', 1); -define('HDOM_INFO_QUOTE', 2); -define('HDOM_INFO_SPACE', 3); -define('HDOM_INFO_TEXT', 4); -define('HDOM_INFO_INNER', 5); -define('HDOM_INFO_OUTER', 6); -define('HDOM_INFO_ENDSPACE',7); -define('DEFAULT_TARGET_CHARSET', 'UTF-8'); -define('DEFAULT_BR_TEXT', "\r\n"); -define('DEFAULT_SPAN_TEXT', " "); -define('MAX_FILE_SIZE', 600000); -// helper functions -// ----------------------------------------------------------------------------- -// get html dom from file -// $maxlen is defined in the code as PHP_STREAM_COPY_ALL which is defined as -1. -function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) -{ - // We DO force the tags to be terminated. - $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText); - // For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done. - $contents = file_get_contents($url, $use_include_path, $context, $offset); - // Paperg - use our own mechanism for getting the contents as we want to control the timeout. - //$contents = retrieve_url_contents($url); - if (empty($contents) || strlen($contents) > MAX_FILE_SIZE) - { - return false; - } - // The second parameter can force the selectors to all be lowercase. - $dom->load($contents, $lowercase, $stripRN); - return $dom; -} - -// get html dom from string -function str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) -{ - $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText); - if (empty($str) || strlen($str) > MAX_FILE_SIZE) - { - $dom->clear(); - return false; - } - $dom->load($str, $lowercase, $stripRN); - return $dom; -} - -// dump html dom tree -function dump_html_tree($node, $show_attr=true, $deep=0) -{ - $node->dump($node); -} - - -/** - * simple html dom node - * PaperG - added ability for "find" routine to lowercase the value of the selector. - * PaperG - added $tag_start to track the start position of the tag in the total byte index - * - * @package PlaceLocalInclude - */ -class simple_html_dom_node -{ - public $nodetype = HDOM_TYPE_TEXT; - public $tag = 'text'; - public $attr = array(); - public $children = array(); - public $nodes = array(); - public $parent = null; - // The "info" array - see HDOM_INFO_... for what each element contains. - public $_ = array(); - public $tag_start = 0; - private $dom = null; - - function __construct($dom) - { - $this->dom = $dom; - $dom->nodes[] = $this; - } - - function __destruct() - { - $this->clear(); - } - - function __toString() - { - return $this->outertext(); - } - - // clean up memory due to php5 circular references memory leak... - function clear() - { - $this->dom = null; - $this->nodes = null; - $this->parent = null; - $this->children = null; - } - - // dump node's tree - function dump($show_attr=true, $deep=0) - { - $lead = str_repeat(' ', $deep); - - echo $lead.$this->tag; - if ($show_attr && count($this->attr)>0) - { - echo '('; - foreach ($this->attr as $k=>$v) - echo "[$k]=>\"".$this->$k.'", '; - echo ')'; - } - echo "\n"; - - if ($this->nodes) - { - foreach ($this->nodes as $c) - { - $c->dump($show_attr, $deep+1); - } - } - } - - - // Debugging function to dump a single dom node with a bunch of information about it. - function dump_node($echo=true) - { - - $string = $this->tag; - if (count($this->attr)>0) - { - $string .= '('; - foreach ($this->attr as $k=>$v) - { - $string .= "[$k]=>\"".$this->$k.'", '; - } - $string .= ')'; - } - if (count($this->_)>0) - { - $string .= ' $_ ('; - foreach ($this->_ as $k=>$v) - { - if (is_array($v)) - { - $string .= "[$k]=>("; - foreach ($v as $k2=>$v2) - { - $string .= "[$k2]=>\"".$v2.'", '; - } - $string .= ")"; - } else { - $string .= "[$k]=>\"".$v.'", '; - } - } - $string .= ")"; - } - - if (isset($this->text)) - { - $string .= " text: (" . $this->text . ")"; - } - - $string .= " HDOM_INNER_INFO: '"; - if (isset($node->_[HDOM_INFO_INNER])) - { - $string .= $node->_[HDOM_INFO_INNER] . "'"; - } - else - { - $string .= ' NULL '; - } - - $string .= " children: " . count($this->children); - $string .= " nodes: " . count($this->nodes); - $string .= " tag_start: " . $this->tag_start; - $string .= "\n"; - - if ($echo) - { - echo $string; - return; - } - else - { - return $string; - } - } - - // returns the parent of node - // If a node is passed in, it will reset the parent of the current node to that one. - function parent($parent=null) - { - // I am SURE that this doesn't work properly. - // It fails to unset the current node from it's current parents nodes or children list first. - if ($parent !== null) - { - $this->parent = $parent; - $this->parent->nodes[] = $this; - $this->parent->children[] = $this; - } - - return $this->parent; - } - - // verify that node has children - function has_child() - { - return !empty($this->children); - } - - // returns children of node - function children($idx=-1) - { - if ($idx===-1) - { - return $this->children; - } - if (isset($this->children[$idx])) - { - return $this->children[$idx]; - } - return null; - } - - // returns the first child of node - function first_child() - { - if (count($this->children)>0) - { - return $this->children[0]; - } - return null; - } - - // returns the last child of node - function last_child() - { - if (($count=count($this->children))>0) - { - return $this->children[$count-1]; - } - return null; - } - - // returns the next sibling of node - function next_sibling() - { - if ($this->parent===null) - { - return null; - } - - $idx = 0; - $count = count($this->parent->children); - while ($idx<$count && $this!==$this->parent->children[$idx]) - { - ++$idx; - } - if (++$idx>=$count) - { - return null; - } - return $this->parent->children[$idx]; - } - - // returns the previous sibling of node - function prev_sibling() - { - if ($this->parent===null) return null; - $idx = 0; - $count = count($this->parent->children); - while ($idx<$count && $this!==$this->parent->children[$idx]) - ++$idx; - if (--$idx<0) return null; - return $this->parent->children[$idx]; - } - - // function to locate a specific ancestor tag in the path to the root. - function find_ancestor_tag($tag) - { - global $debug_object; - if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } - - // Start by including ourselves in the comparison. - $returnDom = $this; - - while (!is_null($returnDom)) - { - if (is_object($debug_object)) { $debug_object->debug_log(2, "Current tag is: " . $returnDom->tag); } - - if ($returnDom->tag == $tag) - { - break; - } - $returnDom = $returnDom->parent; - } - return $returnDom; - } - - // get dom node's inner html - function innertext() - { - if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; - if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - - $ret = ''; - foreach ($this->nodes as $n) - $ret .= $n->outertext(); - return $ret; - } - - // get dom node's outer text (with tag) - function outertext() - { - global $debug_object; - if (is_object($debug_object)) - { - $text = ''; - if ($this->tag == 'text') - { - if (!empty($this->text)) - { - $text = " with text: " . $this->text; - } - } - $debug_object->debug_log(1, 'Innertext of tag: ' . $this->tag . $text); - } - - if ($this->tag==='root') return $this->innertext(); - - // trigger callback - if ($this->dom && $this->dom->callback!==null) - { - call_user_func_array($this->dom->callback, array($this)); - } - - if (isset($this->_[HDOM_INFO_OUTER])) return $this->_[HDOM_INFO_OUTER]; - if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - - // render begin tag - if ($this->dom && $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]) - { - $ret = $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]->makeup(); - } else { - $ret = ""; - } - - // render inner text - if (isset($this->_[HDOM_INFO_INNER])) - { - // If it's a br tag... don't return the HDOM_INNER_INFO that we may or may not have added. - if ($this->tag != "br") - { - $ret .= $this->_[HDOM_INFO_INNER]; - } - } else { - if ($this->nodes) - { - foreach ($this->nodes as $n) - { - $ret .= $this->convert_text($n->outertext()); - } - } - } - - // render end tag - if (isset($this->_[HDOM_INFO_END]) && $this->_[HDOM_INFO_END]!=0) - $ret .= '</'.$this->tag.'>'; - return $ret; - } - - // get dom node's plain text - function text() - { - if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; - switch ($this->nodetype) - { - case HDOM_TYPE_TEXT: return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - case HDOM_TYPE_COMMENT: return ''; - case HDOM_TYPE_UNKNOWN: return ''; - } - if (strcasecmp($this->tag, 'script')===0) return ''; - if (strcasecmp($this->tag, 'style')===0) return ''; - - $ret = ''; - // In rare cases, (always node type 1 or HDOM_TYPE_ELEMENT - observed for some span tags, and some p tags) $this->nodes is set to NULL. - // NOTE: This indicates that there is a problem where it's set to NULL without a clear happening. - // WHY is this happening? - if (!is_null($this->nodes)) - { - foreach ($this->nodes as $n) - { - $ret .= $this->convert_text($n->text()); - } - - // If this node is a span... add a space at the end of it so multiple spans don't run into each other. This is plaintext after all. - if ($this->tag == "span") - { - $ret .= $this->dom->default_span_text; - } - - - } - return $ret; - } - - function xmltext() - { - $ret = $this->innertext(); - $ret = str_ireplace('<![CDATA[', '', $ret); - $ret = str_replace(']]>', '', $ret); - return $ret; - } - - // build node's text with tag - function makeup() - { - // text, comment, unknown - if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - - $ret = '<'.$this->tag; - $i = -1; - - foreach ($this->attr as $key=>$val) - { - ++$i; - - // skip removed attribute - if ($val===null || $val===false) - continue; - - $ret .= $this->_[HDOM_INFO_SPACE][$i][0]; - //no value attr: nowrap, checked selected... - if ($val===true) - $ret .= $key; - else { - switch ($this->_[HDOM_INFO_QUOTE][$i]) - { - case HDOM_QUOTE_DOUBLE: $quote = '"'; break; - case HDOM_QUOTE_SINGLE: $quote = '\''; break; - default: $quote = ''; - } - $ret .= $key.$this->_[HDOM_INFO_SPACE][$i][1].'='.$this->_[HDOM_INFO_SPACE][$i][2].$quote.$val.$quote; - } - } - $ret = $this->dom->restore_noise($ret); - return $ret . $this->_[HDOM_INFO_ENDSPACE] . '>'; - } - - // find elements by css selector - //PaperG - added ability for find to lowercase the value of the selector. - function find($selector, $idx=null, $lowercase=false) - { - $selectors = $this->parse_selector($selector); - if (($count=count($selectors))===0) return array(); - $found_keys = array(); - - // find each selector - for ($c=0; $c<$count; ++$c) - { - // The change on the below line was documented on the sourceforge code tracker id 2788009 - // used to be: if (($levle=count($selectors[0]))===0) return array(); - if (($levle=count($selectors[$c]))===0) return array(); - if (!isset($this->_[HDOM_INFO_BEGIN])) return array(); - - $head = array($this->_[HDOM_INFO_BEGIN]=>1); - - // handle descendant selectors, no recursive! - for ($l=0; $l<$levle; ++$l) - { - $ret = array(); - foreach ($head as $k=>$v) - { - $n = ($k===-1) ? $this->dom->root : $this->dom->nodes[$k]; - //PaperG - Pass this optional parameter on to the seek function. - $n->seek($selectors[$c][$l], $ret, $lowercase); - } - $head = $ret; - } - - foreach ($head as $k=>$v) - { - if (!isset($found_keys[$k])) - { - $found_keys[$k] = 1; - } - } - } - - // sort keys - ksort($found_keys); - - $found = array(); - foreach ($found_keys as $k=>$v) - $found[] = $this->dom->nodes[$k]; - - // return nth-element or array - if (is_null($idx)) return $found; - else if ($idx<0) $idx = count($found) + $idx; - return (isset($found[$idx])) ? $found[$idx] : null; - } - - // seek for given conditions - // PaperG - added parameter to allow for case insensitive testing of the value of a selector. - protected function seek($selector, &$ret, $lowercase=false) - { - global $debug_object; - if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } - - list($tag, $key, $val, $exp, $no_key) = $selector; - - // xpath index - if ($tag && $key && is_numeric($key)) - { - $count = 0; - foreach ($this->children as $c) - { - if ($tag==='*' || $tag===$c->tag) { - if (++$count==$key) { - $ret[$c->_[HDOM_INFO_BEGIN]] = 1; - return; - } - } - } - return; - } - - $end = (!empty($this->_[HDOM_INFO_END])) ? $this->_[HDOM_INFO_END] : 0; - if ($end==0) { - $parent = $this->parent; - while (!isset($parent->_[HDOM_INFO_END]) && $parent!==null) { - $end -= 1; - $parent = $parent->parent; - } - $end += $parent->_[HDOM_INFO_END]; - } - - for ($i=$this->_[HDOM_INFO_BEGIN]+1; $i<$end; ++$i) { - $node = $this->dom->nodes[$i]; - - $pass = true; - - if ($tag==='*' && !$key) { - if (in_array($node, $this->children, true)) - $ret[$i] = 1; - continue; - } - - // compare tag - if ($tag && $tag!=$node->tag && $tag!=='*') {$pass=false;} - // compare key - if ($pass && $key) { - if ($no_key) { - if (isset($node->attr[$key])) $pass=false; - } else { - if (($key != "plaintext") && !isset($node->attr[$key])) $pass=false; - } - } - // compare value - if ($pass && $key && $val && $val!=='*') { - // If they have told us that this is a "plaintext" search then we want the plaintext of the node - right? - if ($key == "plaintext") { - // $node->plaintext actually returns $node->text(); - $nodeKeyValue = $node->text(); - } else { - // this is a normal search, we want the value of that attribute of the tag. - $nodeKeyValue = $node->attr[$key]; - } - if (is_object($debug_object)) {$debug_object->debug_log(2, "testing node: " . $node->tag . " for attribute: " . $key . $exp . $val . " where nodes value is: " . $nodeKeyValue);} - - //PaperG - If lowercase is set, do a case insensitive test of the value of the selector. - if ($lowercase) { - $check = $this->match($exp, strtolower($val), strtolower($nodeKeyValue)); - } else { - $check = $this->match($exp, $val, $nodeKeyValue); - } - if (is_object($debug_object)) {$debug_object->debug_log(2, "after match: " . ($check ? "true" : "false"));} - - // handle multiple class - if (!$check && strcasecmp($key, 'class')===0) { - foreach (explode(' ',$node->attr[$key]) as $k) { - // Without this, there were cases where leading, trailing, or double spaces lead to our comparing blanks - bad form. - if (!empty($k)) { - if ($lowercase) { - $check = $this->match($exp, strtolower($val), strtolower($k)); - } else { - $check = $this->match($exp, $val, $k); - } - if ($check) break; - } - } - } - if (!$check) $pass = false; - } - if ($pass) $ret[$i] = 1; - unset($node); - } - // It's passed by reference so this is actually what this function returns. - if (is_object($debug_object)) {$debug_object->debug_log(1, "EXIT - ret: ", $ret);} - } - - protected function match($exp, $pattern, $value) { - global $debug_object; - if (is_object($debug_object)) {$debug_object->debug_log_entry(1);} - - switch ($exp) { - case '=': - return ($value===$pattern); - case '!=': - return ($value!==$pattern); - case '^=': - return preg_match("/^".preg_quote($pattern,'/')."/", $value); - case '$=': - return preg_match("/".preg_quote($pattern,'/')."$/", $value); - case '*=': - if ($pattern[0]=='/') { - return preg_match($pattern, $value); - } - return preg_match("/".$pattern."/i", $value); - } - return false; - } - - protected function parse_selector($selector_string) { - global $debug_object; - if (is_object($debug_object)) {$debug_object->debug_log_entry(1);} - - // pattern of CSS selectors, modified from mootools - // Paperg: Add the colon to the attrbute, so that it properly finds <tag attr:ibute="something" > like google does. - // Note: if you try to look at this attribute, yo MUST use getAttribute since $dom->x:y will fail the php syntax check. -// Notice the \[ starting the attbute? and the @? following? This implies that an attribute can begin with an @ sign that is not captured. -// This implies that an html attribute specifier may start with an @ sign that is NOT captured by the expression. -// farther study is required to determine of this should be documented or removed. -// $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; - $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-:]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; - preg_match_all($pattern, trim($selector_string).' ', $matches, PREG_SET_ORDER); - if (is_object($debug_object)) {$debug_object->debug_log(2, "Matches Array: ", $matches);} - - $selectors = array(); - $result = array(); - //print_r($matches); - - foreach ($matches as $m) { - $m[0] = trim($m[0]); - if ($m[0]==='' || $m[0]==='/' || $m[0]==='//') continue; - // for browser generated xpath - if ($m[1]==='tbody') continue; - - list($tag, $key, $val, $exp, $no_key) = array($m[1], null, null, '=', false); - if (!empty($m[2])) {$key='id'; $val=$m[2];} - if (!empty($m[3])) {$key='class'; $val=$m[3];} - if (!empty($m[4])) {$key=$m[4];} - if (!empty($m[5])) {$exp=$m[5];} - if (!empty($m[6])) {$val=$m[6];} - - // convert to lowercase - if ($this->dom->lowercase) {$tag=strtolower($tag); $key=strtolower($key);} - //elements that do NOT have the specified attribute - if (isset($key[0]) && $key[0]==='!') {$key=substr($key, 1); $no_key=true;} - - $result[] = array($tag, $key, $val, $exp, $no_key); - if (trim($m[7])===',') { - $selectors[] = $result; - $result = array(); - } - } - if (count($result)>0) - $selectors[] = $result; - return $selectors; - } - - function __get($name) - { - if (isset($this->attr[$name])) - { - return $this->convert_text($this->attr[$name]); - } - switch ($name) - { - case 'outertext': return $this->outertext(); - case 'innertext': return $this->innertext(); - case 'plaintext': return $this->text(); - case 'xmltext': return $this->xmltext(); - default: return array_key_exists($name, $this->attr); - } - } - - function __set($name, $value) - { - global $debug_object; - if (is_object($debug_object)) {$debug_object->debug_log_entry(1);} - - switch ($name) - { - case 'outertext': return $this->_[HDOM_INFO_OUTER] = $value; - case 'innertext': - if (isset($this->_[HDOM_INFO_TEXT])) return $this->_[HDOM_INFO_TEXT] = $value; - return $this->_[HDOM_INFO_INNER] = $value; - } - if (!isset($this->attr[$name])) - { - $this->_[HDOM_INFO_SPACE][] = array(' ', '', ''); - $this->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE; - } - $this->attr[$name] = $value; - } - - function __isset($name) - { - switch ($name) - { - case 'outertext': return true; - case 'innertext': return true; - case 'plaintext': return true; - } - //no value attr: nowrap, checked selected... - return (array_key_exists($name, $this->attr)) ? true : isset($this->attr[$name]); - } - - function __unset($name) { - if (isset($this->attr[$name])) - unset($this->attr[$name]); - } - - // PaperG - Function to convert the text from one character set to another if the two sets are not the same. - function convert_text($text) - { - global $debug_object; - if (is_object($debug_object)) {$debug_object->debug_log_entry(1);} - - $converted_text = $text; - - $sourceCharset = ""; - $targetCharset = ""; - - if ($this->dom) - { - $sourceCharset = strtoupper($this->dom->_charset); - $targetCharset = strtoupper($this->dom->_target_charset); - } - if (is_object($debug_object)) {$debug_object->debug_log(3, "source charset: " . $sourceCharset . " target charaset: " . $targetCharset);} - - if (!empty($sourceCharset) && !empty($targetCharset) && (strcasecmp($sourceCharset, $targetCharset) != 0)) - { - // Check if the reported encoding could have been incorrect and the text is actually already UTF-8 - if ((strcasecmp($targetCharset, 'UTF-8') == 0) && ($this->is_utf8($text))) - { - $converted_text = $text; - } - else - { - $converted_text = iconv($sourceCharset, $targetCharset, $text); - } - } - - // Lets make sure that we don't have that silly BOM issue with any of the utf-8 text we output. - if ($targetCharset == 'UTF-8') - { - if (substr($converted_text, 0, 3) == "\xef\xbb\xbf") - { - $converted_text = substr($converted_text, 3); - } - if (substr($converted_text, -3) == "\xef\xbb\xbf") - { - $converted_text = substr($converted_text, 0, -3); - } - } - - return $converted_text; - } - - /** - * Returns true if $string is valid UTF-8 and false otherwise. - * - * @param mixed $str String to be tested - * @return boolean - */ - static function is_utf8($str) - { - $c=0; $b=0; - $bits=0; - $len=strlen($str); - for($i=0; $i<$len; $i++) - { - $c=ord($str[$i]); - if($c > 128) - { - if(($c >= 254)) return false; - elseif($c >= 252) $bits=6; - elseif($c >= 248) $bits=5; - elseif($c >= 240) $bits=4; - elseif($c >= 224) $bits=3; - elseif($c >= 192) $bits=2; - else return false; - if(($i+$bits) > $len) return false; - while($bits > 1) - { - $i++; - $b=ord($str[$i]); - if($b < 128 || $b > 191) return false; - $bits--; - } - } - } - return true; - } - /* - function is_utf8($string) - { - //this is buggy - return (utf8_encode(utf8_decode($string)) == $string); - } - */ - - /** - * Function to try a few tricks to determine the displayed size of an img on the page. - * NOTE: This will ONLY work on an IMG tag. Returns FALSE on all other tag types. - * - * @author John Schlick - * @version April 19 2012 - * @return array an array containing the 'height' and 'width' of the image on the page or -1 if we can't figure it out. - */ - function get_display_size() - { - global $debug_object; - - $width = -1; - $height = -1; - - if ($this->tag !== 'img') - { - return false; - } - - // See if there is aheight or width attribute in the tag itself. - if (isset($this->attr['width'])) - { - $width = $this->attr['width']; - } - - if (isset($this->attr['height'])) - { - $height = $this->attr['height']; - } - - // Now look for an inline style. - if (isset($this->attr['style'])) - { - // Thanks to user gnarf from stackoverflow for this regular expression. - $attributes = array(); - preg_match_all("/([\w-]+)\s*:\s*([^;]+)\s*;?/", $this->attr['style'], $matches, PREG_SET_ORDER); - foreach ($matches as $match) { - $attributes[$match[1]] = $match[2]; - } - - // If there is a width in the style attributes: - if (isset($attributes['width']) && $width == -1) - { - // check that the last two characters are px (pixels) - if (strtolower(substr($attributes['width'], -2)) == 'px') - { - $proposed_width = substr($attributes['width'], 0, -2); - // Now make sure that it's an integer and not something stupid. - if (filter_var($proposed_width, FILTER_VALIDATE_INT)) - { - $width = $proposed_width; - } - } - } - - // If there is a width in the style attributes: - if (isset($attributes['height']) && $height == -1) - { - // check that the last two characters are px (pixels) - if (strtolower(substr($attributes['height'], -2)) == 'px') - { - $proposed_height = substr($attributes['height'], 0, -2); - // Now make sure that it's an integer and not something stupid. - if (filter_var($proposed_height, FILTER_VALIDATE_INT)) - { - $height = $proposed_height; - } - } - } - - } - - // Future enhancement: - // Look in the tag to see if there is a class or id specified that has a height or width attribute to it. - - // Far future enhancement - // Look at all the parent tags of this image to see if they specify a class or id that has an img selector that specifies a height or width - // Note that in this case, the class or id will have the img subselector for it to apply to the image. - - // ridiculously far future development - // If the class or id is specified in a SEPARATE css file thats not on the page, go get it and do what we were just doing for the ones on the page. - - $result = array('height' => $height, - 'width' => $width); - return $result; - } - - // camel naming conventions - function getAllAttributes() {return $this->attr;} - function getAttribute($name) {return $this->__get($name);} - function setAttribute($name, $value) {$this->__set($name, $value);} - function hasAttribute($name) {return $this->__isset($name);} - function removeAttribute($name) {$this->__set($name, null);} - function getElementById($id) {return $this->find("#$id", 0);} - function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);} - function getElementByTagName($name) {return $this->find($name, 0);} - function getElementsByTagName($name, $idx=null) {return $this->find($name, $idx);} - function parentNode() {return $this->parent();} - function childNodes($idx=-1) {return $this->children($idx);} - function firstChild() {return $this->first_child();} - function lastChild() {return $this->last_child();} - function nextSibling() {return $this->next_sibling();} - function previousSibling() {return $this->prev_sibling();} - function hasChildNodes() {return $this->has_child();} - function nodeName() {return $this->tag;} - function appendChild($node) {$node->parent($this); return $node;} - -} - -/** - * simple html dom parser - * Paperg - in the find routine: allow us to specify that we want case insensitive testing of the value of the selector. - * Paperg - change $size from protected to public so we can easily access it - * Paperg - added ForceTagsClosed in the constructor which tells us whether we trust the html or not. Default is to NOT trust it. - * - * @package PlaceLocalInclude - */ -class simple_html_dom -{ - public $root = null; - public $nodes = array(); - public $callback = null; - public $lowercase = false; - // Used to keep track of how large the text was when we started. - public $original_size; - public $size; - protected $pos; - protected $doc; - protected $char; - protected $cursor; - protected $parent; - protected $noise = array(); - protected $token_blank = " \t\r\n"; - protected $token_equal = ' =/>'; - protected $token_slash = " />\r\n\t"; - protected $token_attr = ' >'; - // Note that this is referenced by a child node, and so it needs to be public for that node to see this information. - public $_charset = ''; - public $_target_charset = ''; - protected $default_br_text = ""; - public $default_span_text = ""; - - // use isset instead of in_array, performance boost about 30%... - protected $self_closing_tags = array('img'=>1, 'br'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1); - protected $block_tags = array('root'=>1, 'body'=>1, 'form'=>1, 'div'=>1, 'span'=>1, 'table'=>1); - // Known sourceforge issue #2977341 - // B tags that are not closed cause us to return everything to the end of the document. - protected $optional_closing_tags = array( - 'tr'=>array('tr'=>1, 'td'=>1, 'th'=>1), - 'th'=>array('th'=>1), - 'td'=>array('td'=>1), - 'li'=>array('li'=>1), - 'dt'=>array('dt'=>1, 'dd'=>1), - 'dd'=>array('dd'=>1, 'dt'=>1), - 'dl'=>array('dd'=>1, 'dt'=>1), - 'p'=>array('p'=>1), - 'nobr'=>array('nobr'=>1), - 'b'=>array('b'=>1), - 'option'=>array('option'=>1), - ); - - function __construct($str=null, $lowercase=true, $forceTagsClosed=true, $target_charset=DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) - { - if ($str) - { - if (preg_match("/^http:\/\//i",$str) || is_file($str)) - { - $this->load_file($str); - } - else - { - $this->load($str, $lowercase, $stripRN, $defaultBRText, $defaultSpanText); - } - } - // Forcing tags to be closed implies that we don't trust the html, but it can lead to parsing errors if we SHOULD trust the html. - if (!$forceTagsClosed) { - $this->optional_closing_array=array(); - } - $this->_target_charset = $target_charset; - } - - function __destruct() - { - $this->clear(); - } - - // load html from string - function load($str, $lowercase=true, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) - { - global $debug_object; - - // prepare - $this->prepare($str, $lowercase, $stripRN, $defaultBRText, $defaultSpanText); - // strip out cdata - $this->remove_noise("'<!\[CDATA\[(.*?)\]\]>'is", true); - // strip out comments - $this->remove_noise("'<!--(.*?)-->'is"); - // Per sourceforge http://sourceforge.net/tracker/?func=detail&aid=2949097&group_id=218559&atid=1044037 - // Script tags removal now preceeds style tag removal. - // strip out <script> tags - $this->remove_noise("'<\s*script[^>]*[^/]>(.*?)<\s*/\s*script\s*>'is"); - $this->remove_noise("'<\s*script\s*>(.*?)<\s*/\s*script\s*>'is"); - // strip out <style> tags - $this->remove_noise("'<\s*style[^>]*[^/]>(.*?)<\s*/\s*style\s*>'is"); - $this->remove_noise("'<\s*style\s*>(.*?)<\s*/\s*style\s*>'is"); - // strip out preformatted tags - $this->remove_noise("'<\s*(?:code)[^>]*>(.*?)<\s*/\s*(?:code)\s*>'is"); - // strip out server side scripts - $this->remove_noise("'(<\?)(.*?)(\?>)'s", true); - // strip smarty scripts - $this->remove_noise("'(\{\w)(.*?)(\})'s", true); - - // parsing - while ($this->parse()); - // end - $this->root->_[HDOM_INFO_END] = $this->cursor; - $this->parse_charset(); - - // make load function chainable - return $this; - - } - - // load html from file - function load_file() - { - $args = func_get_args(); - $this->load(call_user_func_array('file_get_contents', $args), true); - // Throw an error if we can't properly load the dom. - if (($error=error_get_last())!==null) { - $this->clear(); - return false; - } - } - - // set callback function - function set_callback($function_name) - { - $this->callback = $function_name; - } - - // remove callback function - function remove_callback() - { - $this->callback = null; - } - - // save dom as string - function save($filepath='') - { - $ret = $this->root->innertext(); - if ($filepath!=='') file_put_contents($filepath, $ret, LOCK_EX); - return $ret; - } - - // find dom node by css selector - // Paperg - allow us to specify that we want case insensitive testing of the value of the selector. - function find($selector, $idx=null, $lowercase=false) - { - return $this->root->find($selector, $idx, $lowercase); - } - - // clean up memory due to php5 circular references memory leak... - function clear() - { - foreach ($this->nodes as $n) {$n->clear(); $n = null;} - // This add next line is documented in the sourceforge repository. 2977248 as a fix for ongoing memory leaks that occur even with the use of clear. - if (isset($this->children)) foreach ($this->children as $n) {$n->clear(); $n = null;} - if (isset($this->parent)) {$this->parent->clear(); unset($this->parent);} - if (isset($this->root)) {$this->root->clear(); unset($this->root);} - unset($this->doc); - unset($this->noise); - } - - function dump($show_attr=true) - { - $this->root->dump($show_attr); - } - - // prepare HTML data and init everything - protected function prepare($str, $lowercase=true, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) - { - $this->clear(); - - // set the length of content before we do anything to it. - $this->size = strlen($str); - // Save the original size of the html that we got in. It might be useful to someone. - $this->original_size = $this->size; - - //before we save the string as the doc... strip out the \r \n's if we are told to. - if ($stripRN) { - $str = str_replace("\r", " ", $str); - $str = str_replace("\n", " ", $str); - - // set the length of content since we have changed it. - $this->size = strlen($str); - } - - $this->doc = $str; - $this->pos = 0; - $this->cursor = 1; - $this->noise = array(); - $this->nodes = array(); - $this->lowercase = $lowercase; - $this->default_br_text = $defaultBRText; - $this->default_span_text = $defaultSpanText; - $this->root = new simple_html_dom_node($this); - $this->root->tag = 'root'; - $this->root->_[HDOM_INFO_BEGIN] = -1; - $this->root->nodetype = HDOM_TYPE_ROOT; - $this->parent = $this->root; - if ($this->size>0) $this->char = $this->doc[0]; - } - - // parse html content - protected function parse() - { - if (($s = $this->copy_until_char('<'))==='') - { - return $this->read_tag(); - } - - // text - $node = new simple_html_dom_node($this); - ++$this->cursor; - $node->_[HDOM_INFO_TEXT] = $s; - $this->link_nodes($node, false); - return true; - } - - // PAPERG - dkchou - added this to try to identify the character set of the page we have just parsed so we know better how to spit it out later. - // NOTE: IF you provide a routine called get_last_retrieve_url_contents_content_type which returns the CURLINFO_CONTENT_TYPE from the last curl_exec - // (or the content_type header from the last transfer), we will parse THAT, and if a charset is specified, we will use it over any other mechanism. - protected function parse_charset() - { - global $debug_object; - - $charset = null; - - if (function_exists('get_last_retrieve_url_contents_content_type')) - { - $contentTypeHeader = get_last_retrieve_url_contents_content_type(); - $success = preg_match('/charset=(.+)/', $contentTypeHeader, $matches); - if ($success) - { - $charset = $matches[1]; - if (is_object($debug_object)) {$debug_object->debug_log(2, 'header content-type found charset of: ' . $charset);} - } - - } - - if (empty($charset)) - { - $el = $this->root->find('meta[http-equiv=Content-Type]',0); - if (!empty($el)) - { - $fullvalue = $el->content; - if (is_object($debug_object)) {$debug_object->debug_log(2, 'meta content-type tag found' . $fullvalue);} - - if (!empty($fullvalue)) - { - $success = preg_match('/charset=(.+)/', $fullvalue, $matches); - if ($success) - { - $charset = $matches[1]; - } - else - { - // If there is a meta tag, and they don't specify the character set, research says that it's typically ISO-8859-1 - if (is_object($debug_object)) {$debug_object->debug_log(2, 'meta content-type tag couldn\'t be parsed. using iso-8859 default.');} - $charset = 'ISO-8859-1'; - } - } - } - } - - // If we couldn't find a charset above, then lets try to detect one based on the text we got... - if (empty($charset)) - { - // Use this in case mb_detect_charset isn't installed/loaded on this machine. - $charset = false; - if (function_exists('mb_detect_encoding')) - { - // Have php try to detect the encoding from the text given to us. - $charset = mb_detect_encoding($this->root->plaintext . "ascii", $encoding_list = array( "UTF-8", "CP1252" ) ); - if (is_object($debug_object)) {$debug_object->debug_log(2, 'mb_detect found: ' . $charset);} - } - - // and if this doesn't work... then we need to just wrongheadedly assume it's UTF-8 so that we can move on - cause this will usually give us most of what we need... - if ($charset === false) - { - if (is_object($debug_object)) {$debug_object->debug_log(2, 'since mb_detect failed - using default of utf-8');} - $charset = 'UTF-8'; - } - } - - // Since CP1252 is a superset, if we get one of it's subsets, we want it instead. - if ((strtolower($charset) == strtolower('ISO-8859-1')) || (strtolower($charset) == strtolower('Latin1')) || (strtolower($charset) == strtolower('Latin-1'))) - { - if (is_object($debug_object)) {$debug_object->debug_log(2, 'replacing ' . $charset . ' with CP1252 as its a superset');} - $charset = 'CP1252'; - } - - if (is_object($debug_object)) {$debug_object->debug_log(1, 'EXIT - ' . $charset);} - - return $this->_charset = $charset; - } - - // read tag info - protected function read_tag() - { - if ($this->char!=='<') - { - $this->root->_[HDOM_INFO_END] = $this->cursor; - return false; - } - $begin_tag_pos = $this->pos; - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - - // end tag - if ($this->char==='/') - { - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - // This represents the change in the simple_html_dom trunk from revision 180 to 181. - // $this->skip($this->token_blank_t); - $this->skip($this->token_blank); - $tag = $this->copy_until_char('>'); - - // skip attributes in end tag - if (($pos = strpos($tag, ' '))!==false) - $tag = substr($tag, 0, $pos); - - $parent_lower = strtolower($this->parent->tag); - $tag_lower = strtolower($tag); - - if ($parent_lower!==$tag_lower) - { - if (isset($this->optional_closing_tags[$parent_lower]) && isset($this->block_tags[$tag_lower])) - { - $this->parent->_[HDOM_INFO_END] = 0; - $org_parent = $this->parent; - - while (($this->parent->parent) && strtolower($this->parent->tag)!==$tag_lower) - $this->parent = $this->parent->parent; - - if (strtolower($this->parent->tag)!==$tag_lower) { - $this->parent = $org_parent; // restore origonal parent - if ($this->parent->parent) $this->parent = $this->parent->parent; - $this->parent->_[HDOM_INFO_END] = $this->cursor; - return $this->as_text_node($tag); - } - } - else if (($this->parent->parent) && isset($this->block_tags[$tag_lower])) - { - $this->parent->_[HDOM_INFO_END] = 0; - $org_parent = $this->parent; - - while (($this->parent->parent) && strtolower($this->parent->tag)!==$tag_lower) - $this->parent = $this->parent->parent; - - if (strtolower($this->parent->tag)!==$tag_lower) - { - $this->parent = $org_parent; // restore origonal parent - $this->parent->_[HDOM_INFO_END] = $this->cursor; - return $this->as_text_node($tag); - } - } - else if (($this->parent->parent) && strtolower($this->parent->parent->tag)===$tag_lower) - { - $this->parent->_[HDOM_INFO_END] = 0; - $this->parent = $this->parent->parent; - } - else - return $this->as_text_node($tag); - } - - $this->parent->_[HDOM_INFO_END] = $this->cursor; - if ($this->parent->parent) $this->parent = $this->parent->parent; - - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return true; - } - - $node = new simple_html_dom_node($this); - $node->_[HDOM_INFO_BEGIN] = $this->cursor; - ++$this->cursor; - $tag = $this->copy_until($this->token_slash); - $node->tag_start = $begin_tag_pos; - - // doctype, cdata & comments... - if (isset($tag[0]) && $tag[0]==='!') { - $node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until_char('>'); - - if (isset($tag[2]) && $tag[1]==='-' && $tag[2]==='-') { - $node->nodetype = HDOM_TYPE_COMMENT; - $node->tag = 'comment'; - } else { - $node->nodetype = HDOM_TYPE_UNKNOWN; - $node->tag = 'unknown'; - } - if ($this->char==='>') $node->_[HDOM_INFO_TEXT].='>'; - $this->link_nodes($node, true); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return true; - } - - // text - if ($pos=strpos($tag, '<')!==false) { - $tag = '<' . substr($tag, 0, -1); - $node->_[HDOM_INFO_TEXT] = $tag; - $this->link_nodes($node, false); - $this->char = $this->doc[--$this->pos]; // prev - return true; - } - - if (!preg_match("/^[\w-:]+$/", $tag)) { - $node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until('<>'); - if ($this->char==='<') { - $this->link_nodes($node, false); - return true; - } - - if ($this->char==='>') $node->_[HDOM_INFO_TEXT].='>'; - $this->link_nodes($node, false); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return true; - } - - // begin tag - $node->nodetype = HDOM_TYPE_ELEMENT; - $tag_lower = strtolower($tag); - $node->tag = ($this->lowercase) ? $tag_lower : $tag; - - // handle optional closing tags - if (isset($this->optional_closing_tags[$tag_lower]) ) - { - while (isset($this->optional_closing_tags[$tag_lower][strtolower($this->parent->tag)])) - { - $this->parent->_[HDOM_INFO_END] = 0; - $this->parent = $this->parent->parent; - } - $node->parent = $this->parent; - } - - $guard = 0; // prevent infinity loop - $space = array($this->copy_skip($this->token_blank), '', ''); - - // attributes - do - { - if ($this->char!==null && $space[0]==='') - { - break; - } - $name = $this->copy_until($this->token_equal); - if ($guard===$this->pos) - { - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - continue; - } - $guard = $this->pos; - - // handle endless '<' - if ($this->pos>=$this->size-1 && $this->char!=='>') { - $node->nodetype = HDOM_TYPE_TEXT; - $node->_[HDOM_INFO_END] = 0; - $node->_[HDOM_INFO_TEXT] = '<'.$tag . $space[0] . $name; - $node->tag = 'text'; - $this->link_nodes($node, false); - return true; - } - - // handle mismatch '<' - if ($this->doc[$this->pos-1]=='<') { - $node->nodetype = HDOM_TYPE_TEXT; - $node->tag = 'text'; - $node->attr = array(); - $node->_[HDOM_INFO_END] = 0; - $node->_[HDOM_INFO_TEXT] = substr($this->doc, $begin_tag_pos, $this->pos-$begin_tag_pos-1); - $this->pos -= 2; - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - $this->link_nodes($node, false); - return true; - } - - if ($name!=='/' && $name!=='') { - $space[1] = $this->copy_skip($this->token_blank); - $name = $this->restore_noise($name); - if ($this->lowercase) $name = strtolower($name); - if ($this->char==='=') { - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - $this->parse_attr($node, $name, $space); - } - else { - //no value attr: nowrap, checked selected... - $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_NO; - $node->attr[$name] = true; - if ($this->char!='>') $this->char = $this->doc[--$this->pos]; // prev - } - $node->_[HDOM_INFO_SPACE][] = $space; - $space = array($this->copy_skip($this->token_blank), '', ''); - } - else - break; - } while ($this->char!=='>' && $this->char!=='/'); - - $this->link_nodes($node, true); - $node->_[HDOM_INFO_ENDSPACE] = $space[0]; - - // check self closing - if ($this->copy_until_char_escape('>')==='/') - { - $node->_[HDOM_INFO_ENDSPACE] .= '/'; - $node->_[HDOM_INFO_END] = 0; - } - else - { - // reset parent - if (!isset($this->self_closing_tags[strtolower($node->tag)])) $this->parent = $node; - } - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - - // If it's a BR tag, we need to set it's text to the default text. - // This way when we see it in plaintext, we can generate formatting that the user wants. - // since a br tag never has sub nodes, this works well. - if ($node->tag == "br") - { - $node->_[HDOM_INFO_INNER] = $this->default_br_text; - } - - return true; - } - - // parse attributes - protected function parse_attr($node, $name, &$space) - { - // Per sourceforge: http://sourceforge.net/tracker/?func=detail&aid=3061408&group_id=218559&atid=1044037 - // If the attribute is already defined inside a tag, only pay atetntion to the first one as opposed to the last one. - if (isset($node->attr[$name])) - { - return; - } - - $space[2] = $this->copy_skip($this->token_blank); - switch ($this->char) { - case '"': - $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE; - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - $node->attr[$name] = $this->restore_noise($this->copy_until_char_escape('"')); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - break; - case '\'': - $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_SINGLE; - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - $node->attr[$name] = $this->restore_noise($this->copy_until_char_escape('\'')); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - break; - default: - $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_NO; - $node->attr[$name] = $this->restore_noise($this->copy_until($this->token_attr)); - } - // PaperG: Attributes should not have \r or \n in them, that counts as html whitespace. - $node->attr[$name] = str_replace("\r", "", $node->attr[$name]); - $node->attr[$name] = str_replace("\n", "", $node->attr[$name]); - // PaperG: If this is a "class" selector, lets get rid of the preceeding and trailing space since some people leave it in the multi class case. - if ($name == "class") { - $node->attr[$name] = trim($node->attr[$name]); - } - } - - // link node's parent - protected function link_nodes(&$node, $is_child) - { - $node->parent = $this->parent; - $this->parent->nodes[] = $node; - if ($is_child) - { - $this->parent->children[] = $node; - } - } - - // as a text node - protected function as_text_node($tag) - { - $node = new simple_html_dom_node($this); - ++$this->cursor; - $node->_[HDOM_INFO_TEXT] = '</' . $tag . '>'; - $this->link_nodes($node, false); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return true; - } - - protected function skip($chars) - { - $this->pos += strspn($this->doc, $chars, $this->pos); - $this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - } - - protected function copy_skip($chars) - { - $pos = $this->pos; - $len = strspn($this->doc, $chars, $pos); - $this->pos += $len; - $this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - if ($len===0) return ''; - return substr($this->doc, $pos, $len); - } - - protected function copy_until($chars) - { - $pos = $this->pos; - $len = strcspn($this->doc, $chars, $pos); - $this->pos += $len; - $this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return substr($this->doc, $pos, $len); - } - - protected function copy_until_char($char) - { - if ($this->char===null) return ''; - - if (($pos = strpos($this->doc, $char, $this->pos))===false) { - $ret = substr($this->doc, $this->pos, $this->size-$this->pos); - $this->char = null; - $this->pos = $this->size; - return $ret; - } - - if ($pos===$this->pos) return ''; - $pos_old = $this->pos; - $this->char = $this->doc[$pos]; - $this->pos = $pos; - return substr($this->doc, $pos_old, $pos-$pos_old); - } - - protected function copy_until_char_escape($char) - { - if ($this->char===null) return ''; - - $start = $this->pos; - while (1) - { - if (($pos = strpos($this->doc, $char, $start))===false) - { - $ret = substr($this->doc, $this->pos, $this->size-$this->pos); - $this->char = null; - $this->pos = $this->size; - return $ret; - } - - if ($pos===$this->pos) return ''; - - if ($this->doc[$pos-1]==='\\') { - $start = $pos+1; - continue; - } - - $pos_old = $this->pos; - $this->char = $this->doc[$pos]; - $this->pos = $pos; - return substr($this->doc, $pos_old, $pos-$pos_old); - } - } - - // remove noise from html content - // save the noise in the $this->noise array. - protected function remove_noise($pattern, $remove_tag=false) - { - global $debug_object; - if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } - - $count = preg_match_all($pattern, $this->doc, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE); - - for ($i=$count-1; $i>-1; --$i) - { - $key = '___noise___'.sprintf('% 5d', count($this->noise)+1000); - if (is_object($debug_object)) { $debug_object->debug_log(2, 'key is: ' . $key); } - $idx = ($remove_tag) ? 0 : 1; - $this->noise[$key] = $matches[$i][$idx][0]; - $this->doc = substr_replace($this->doc, $key, $matches[$i][$idx][1], strlen($matches[$i][$idx][0])); - } - - // reset the length of content - $this->size = strlen($this->doc); - if ($this->size>0) - { - $this->char = $this->doc[0]; - } - } - - // restore noise to html content - function restore_noise($text) - { - global $debug_object; - if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } - - while (($pos=strpos($text, '___noise___'))!==false) - { - // Sometimes there is a broken piece of markup, and we don't GET the pos+11 etc... token which indicates a problem outside of us... - if (strlen($text) > $pos+15) - { - $key = '___noise___'.$text[$pos+11].$text[$pos+12].$text[$pos+13].$text[$pos+14].$text[$pos+15]; - if (is_object($debug_object)) { $debug_object->debug_log(2, 'located key of: ' . $key); } - - if (isset($this->noise[$key])) - { - $text = substr($text, 0, $pos).$this->noise[$key].substr($text, $pos+16); - } - else - { - // do this to prevent an infinite loop. - $text = substr($text, 0, $pos).'UNDEFINED NOISE FOR KEY: '.$key . substr($text, $pos+16); - } - } - else - { - // There is no valid key being given back to us... We must get rid of the ___noise___ or we will have a problem. - $text = substr($text, 0, $pos).'NO NUMERIC NOISE KEY' . substr($text, $pos+11); - } - } - return $text; - } - - // Sometimes we NEED one of the noise elements. - function search_noise($text) - { - global $debug_object; - if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } - - foreach($this->noise as $noiseElement) - { - if (strpos($noiseElement, $text)!==false) - { - return $noiseElement; - } - } - } - function __toString() - { - return $this->root->innertext(); - } - - function __get($name) - { - switch ($name) - { - case 'outertext': - return $this->root->innertext(); - case 'innertext': - return $this->root->innertext(); - case 'plaintext': - return $this->root->text(); - case 'charset': - return $this->_charset; - case 'target_charset': - return $this->_target_charset; - } - } - - // camel naming conventions - function childNodes($idx=-1) {return $this->root->childNodes($idx);} - function firstChild() {return $this->root->first_child();} - function lastChild() {return $this->root->last_child();} - function createElement($name, $value=null) {return @str_get_html("<$name>$value</$name>")->first_child();} - function createTextNode($value) {return @end(str_get_html($value)->nodes);} - function getElementById($id) {return $this->find("#$id", 0);} - function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);} - function getElementByTagName($name) {return $this->find($name, 0);} - function getElementsByTagName($name, $idx=-1) {return $this->find($name, $idx);} - function loadFile() {$args = func_get_args();$this->load_file($args);} -} - +<?php +/** + * Website: http://sourceforge.net/projects/simplehtmldom/ + * Additional projects that may be used: http://sourceforge.net/projects/debugobject/ + * Acknowledge: Jose Solorzano (https://sourceforge.net/projects/php-html/) + * Contributions by: + * Yousuke Kumakura (Attribute filters) + * Vadim Voituk (Negative indexes supports of "find" method) + * Antcs (Constructor with automatically load contents either text or file/url) + * + * all affected sections have comments starting with "PaperG" + * + * Paperg - Added case insensitive testing of the value of the selector. + * Paperg - Added tag_start for the starting index of tags - NOTE: This works but not accurately. + * This tag_start gets counted AFTER \r\n have been crushed out, and after the remove_noice calls so it will not reflect the REAL position of the tag in the source, + * it will almost always be smaller by some amount. + * We use this to determine how far into the file the tag in question is. This "percentage will never be accurate as the $dom->size is the "real" number of bytes the dom was created from. + * but for most purposes, it's a really good estimation. + * Paperg - Added the forceTagsClosed to the dom constructor. Forcing tags closed is great for malformed html, but it CAN lead to parsing errors. + * Allow the user to tell us how much they trust the html. + * Paperg add the text and plaintext to the selectors for the find syntax. plaintext implies text in the innertext of a node. text implies that the tag is a text node. + * This allows for us to find tags based on the text they contain. + * Create find_ancestor_tag to see if a tag is - at any level - inside of another specific tag. + * Paperg: added parse_charset so that we know about the character set of the source document. + * NOTE: If the user's system has a routine called get_last_retrieve_url_contents_content_type availalbe, we will assume it's returning the content-type header from the + * last transfer or curl_exec, and we will parse that and use it in preference to any other method of charset detection. + * + * Found infinite loop in the case of broken html in restore_noise. Rewrote to protect from that. + * PaperG (John Schlick) Added get_display_size for "IMG" tags. + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @author S.C. Chen <me578022@gmail.com> + * @author John Schlick + * @author Rus Carroll + * @version 1.5 ($Rev: 208 $) + * @package PlaceLocalInclude + * @subpackage simple_html_dom + */ + +/** + * All of the Defines for the classes below. + * @author S.C. Chen <me578022@gmail.com> + */ +define('HDOM_TYPE_ELEMENT', 1); +define('HDOM_TYPE_COMMENT', 2); +define('HDOM_TYPE_TEXT', 3); +define('HDOM_TYPE_ENDTAG', 4); +define('HDOM_TYPE_ROOT', 5); +define('HDOM_TYPE_UNKNOWN', 6); +define('HDOM_QUOTE_DOUBLE', 0); +define('HDOM_QUOTE_SINGLE', 1); +define('HDOM_QUOTE_NO', 3); +define('HDOM_INFO_BEGIN', 0); +define('HDOM_INFO_END', 1); +define('HDOM_INFO_QUOTE', 2); +define('HDOM_INFO_SPACE', 3); +define('HDOM_INFO_TEXT', 4); +define('HDOM_INFO_INNER', 5); +define('HDOM_INFO_OUTER', 6); +define('HDOM_INFO_ENDSPACE',7); +define('DEFAULT_TARGET_CHARSET', 'UTF-8'); +define('DEFAULT_BR_TEXT', "\r\n"); +define('DEFAULT_SPAN_TEXT', " "); +define('MAX_FILE_SIZE', 600000); +// helper functions +// ----------------------------------------------------------------------------- +// get html dom from file +// $maxlen is defined in the code as PHP_STREAM_COPY_ALL which is defined as -1. +function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) +{ + // We DO force the tags to be terminated. + $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText); + // For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done. + $contents = file_get_contents($url, $use_include_path, $context, $offset); + // Paperg - use our own mechanism for getting the contents as we want to control the timeout. + //$contents = retrieve_url_contents($url); + if (empty($contents) || strlen($contents) > MAX_FILE_SIZE) + { + return false; + } + // The second parameter can force the selectors to all be lowercase. + $dom->load($contents, $lowercase, $stripRN); + return $dom; +} + +// get html dom from string +function str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) +{ + $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText); + if (empty($str) || strlen($str) > MAX_FILE_SIZE) + { + $dom->clear(); + return false; + } + $dom->load($str, $lowercase, $stripRN); + return $dom; +} + +// dump html dom tree +function dump_html_tree($node, $show_attr=true, $deep=0) +{ + $node->dump($node); +} + + +/** + * simple html dom node + * PaperG - added ability for "find" routine to lowercase the value of the selector. + * PaperG - added $tag_start to track the start position of the tag in the total byte index + * + * @package PlaceLocalInclude + */ +class simple_html_dom_node +{ + public $nodetype = HDOM_TYPE_TEXT; + public $tag = 'text'; + public $attr = array(); + public $children = array(); + public $nodes = array(); + public $parent = null; + // The "info" array - see HDOM_INFO_... for what each element contains. + public $_ = array(); + public $tag_start = 0; + private $dom = null; + + function __construct($dom) + { + $this->dom = $dom; + $dom->nodes[] = $this; + } + + function __destruct() + { + $this->clear(); + } + + function __toString() + { + return $this->outertext(); + } + + // clean up memory due to php5 circular references memory leak... + function clear() + { + $this->dom = null; + $this->nodes = null; + $this->parent = null; + $this->children = null; + } + + // dump node's tree + function dump($show_attr=true, $deep=0) + { + $lead = str_repeat(' ', $deep); + + echo $lead.$this->tag; + if ($show_attr && count($this->attr)>0) + { + echo '('; + foreach ($this->attr as $k=>$v) + echo "[$k]=>\"".$this->$k.'", '; + echo ')'; + } + echo "\n"; + + if ($this->nodes) + { + foreach ($this->nodes as $c) + { + $c->dump($show_attr, $deep+1); + } + } + } + + + // Debugging function to dump a single dom node with a bunch of information about it. + function dump_node($echo=true) + { + + $string = $this->tag; + if (count($this->attr)>0) + { + $string .= '('; + foreach ($this->attr as $k=>$v) + { + $string .= "[$k]=>\"".$this->$k.'", '; + } + $string .= ')'; + } + if (count($this->_)>0) + { + $string .= ' $_ ('; + foreach ($this->_ as $k=>$v) + { + if (is_array($v)) + { + $string .= "[$k]=>("; + foreach ($v as $k2=>$v2) + { + $string .= "[$k2]=>\"".$v2.'", '; + } + $string .= ")"; + } else { + $string .= "[$k]=>\"".$v.'", '; + } + } + $string .= ")"; + } + + if (isset($this->text)) + { + $string .= " text: (" . $this->text . ")"; + } + + $string .= " HDOM_INNER_INFO: '"; + if (isset($node->_[HDOM_INFO_INNER])) + { + $string .= $node->_[HDOM_INFO_INNER] . "'"; + } + else + { + $string .= ' NULL '; + } + + $string .= " children: " . count($this->children); + $string .= " nodes: " . count($this->nodes); + $string .= " tag_start: " . $this->tag_start; + $string .= "\n"; + + if ($echo) + { + echo $string; + return; + } + else + { + return $string; + } + } + + // returns the parent of node + // If a node is passed in, it will reset the parent of the current node to that one. + function parent($parent=null) + { + // I am SURE that this doesn't work properly. + // It fails to unset the current node from it's current parents nodes or children list first. + if ($parent !== null) + { + $this->parent = $parent; + $this->parent->nodes[] = $this; + $this->parent->children[] = $this; + } + + return $this->parent; + } + + // verify that node has children + function has_child() + { + return !empty($this->children); + } + + // returns children of node + function children($idx=-1) + { + if ($idx===-1) + { + return $this->children; + } + if (isset($this->children[$idx])) + { + return $this->children[$idx]; + } + return null; + } + + // returns the first child of node + function first_child() + { + if (count($this->children)>0) + { + return $this->children[0]; + } + return null; + } + + // returns the last child of node + function last_child() + { + if (($count=count($this->children))>0) + { + return $this->children[$count-1]; + } + return null; + } + + // returns the next sibling of node + function next_sibling() + { + if ($this->parent===null) + { + return null; + } + + $idx = 0; + $count = count($this->parent->children); + while ($idx<$count && $this!==$this->parent->children[$idx]) + { + ++$idx; + } + if (++$idx>=$count) + { + return null; + } + return $this->parent->children[$idx]; + } + + // returns the previous sibling of node + function prev_sibling() + { + if ($this->parent===null) return null; + $idx = 0; + $count = count($this->parent->children); + while ($idx<$count && $this!==$this->parent->children[$idx]) + ++$idx; + if (--$idx<0) return null; + return $this->parent->children[$idx]; + } + + // function to locate a specific ancestor tag in the path to the root. + function find_ancestor_tag($tag) + { + global $debug_object; + if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } + + // Start by including ourselves in the comparison. + $returnDom = $this; + + while (!is_null($returnDom)) + { + if (is_object($debug_object)) { $debug_object->debug_log(2, "Current tag is: " . $returnDom->tag); } + + if ($returnDom->tag == $tag) + { + break; + } + $returnDom = $returnDom->parent; + } + return $returnDom; + } + + // get dom node's inner html + function innertext() + { + if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; + if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); + + $ret = ''; + foreach ($this->nodes as $n) + $ret .= $n->outertext(); + return $ret; + } + + // get dom node's outer text (with tag) + function outertext() + { + global $debug_object; + if (is_object($debug_object)) + { + $text = ''; + if ($this->tag == 'text') + { + if (!empty($this->text)) + { + $text = " with text: " . $this->text; + } + } + $debug_object->debug_log(1, 'Innertext of tag: ' . $this->tag . $text); + } + + if ($this->tag==='root') return $this->innertext(); + + // trigger callback + if ($this->dom && $this->dom->callback!==null) + { + call_user_func_array($this->dom->callback, array($this)); + } + + if (isset($this->_[HDOM_INFO_OUTER])) return $this->_[HDOM_INFO_OUTER]; + if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); + + // render begin tag + if ($this->dom && $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]) + { + $ret = $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]->makeup(); + } else { + $ret = ""; + } + + // render inner text + if (isset($this->_[HDOM_INFO_INNER])) + { + // If it's a br tag... don't return the HDOM_INNER_INFO that we may or may not have added. + if ($this->tag != "br") + { + $ret .= $this->_[HDOM_INFO_INNER]; + } + } else { + if ($this->nodes) + { + foreach ($this->nodes as $n) + { + $ret .= $this->convert_text($n->outertext()); + } + } + } + + // render end tag + if (isset($this->_[HDOM_INFO_END]) && $this->_[HDOM_INFO_END]!=0) + $ret .= '</'.$this->tag.'>'; + return $ret; + } + + // get dom node's plain text + function text() + { + if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; + switch ($this->nodetype) + { + case HDOM_TYPE_TEXT: return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); + case HDOM_TYPE_COMMENT: return ''; + case HDOM_TYPE_UNKNOWN: return ''; + } + if (strcasecmp($this->tag, 'script')===0) return ''; + if (strcasecmp($this->tag, 'style')===0) return ''; + + $ret = ''; + // In rare cases, (always node type 1 or HDOM_TYPE_ELEMENT - observed for some span tags, and some p tags) $this->nodes is set to NULL. + // NOTE: This indicates that there is a problem where it's set to NULL without a clear happening. + // WHY is this happening? + if (!is_null($this->nodes)) + { + foreach ($this->nodes as $n) + { + $ret .= $this->convert_text($n->text()); + } + + // If this node is a span... add a space at the end of it so multiple spans don't run into each other. This is plaintext after all. + if ($this->tag == "span") + { + $ret .= $this->dom->default_span_text; + } + + + } + return $ret; + } + + function xmltext() + { + $ret = $this->innertext(); + $ret = str_ireplace('<![CDATA[', '', $ret); + $ret = str_replace(']]>', '', $ret); + return $ret; + } + + // build node's text with tag + function makeup() + { + // text, comment, unknown + if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); + + $ret = '<'.$this->tag; + $i = -1; + + foreach ($this->attr as $key=>$val) + { + ++$i; + + // skip removed attribute + if ($val===null || $val===false) + continue; + + $ret .= $this->_[HDOM_INFO_SPACE][$i][0]; + //no value attr: nowrap, checked selected... + if ($val===true) + $ret .= $key; + else { + switch ($this->_[HDOM_INFO_QUOTE][$i]) + { + case HDOM_QUOTE_DOUBLE: $quote = '"'; break; + case HDOM_QUOTE_SINGLE: $quote = '\''; break; + default: $quote = ''; + } + $ret .= $key.$this->_[HDOM_INFO_SPACE][$i][1].'='.$this->_[HDOM_INFO_SPACE][$i][2].$quote.$val.$quote; + } + } + $ret = $this->dom->restore_noise($ret); + return $ret . $this->_[HDOM_INFO_ENDSPACE] . '>'; + } + + // find elements by css selector + //PaperG - added ability for find to lowercase the value of the selector. + function find($selector, $idx=null, $lowercase=false) + { + $selectors = $this->parse_selector($selector); + if (($count=count($selectors))===0) return array(); + $found_keys = array(); + + // find each selector + for ($c=0; $c<$count; ++$c) + { + // The change on the below line was documented on the sourceforge code tracker id 2788009 + // used to be: if (($levle=count($selectors[0]))===0) return array(); + if (($levle=count($selectors[$c]))===0) return array(); + if (!isset($this->_[HDOM_INFO_BEGIN])) return array(); + + $head = array($this->_[HDOM_INFO_BEGIN]=>1); + + // handle descendant selectors, no recursive! + for ($l=0; $l<$levle; ++$l) + { + $ret = array(); + foreach ($head as $k=>$v) + { + $n = ($k===-1) ? $this->dom->root : $this->dom->nodes[$k]; + //PaperG - Pass this optional parameter on to the seek function. + $n->seek($selectors[$c][$l], $ret, $lowercase); + } + $head = $ret; + } + + foreach ($head as $k=>$v) + { + if (!isset($found_keys[$k])) + { + $found_keys[$k] = 1; + } + } + } + + // sort keys + ksort($found_keys); + + $found = array(); + foreach ($found_keys as $k=>$v) + $found[] = $this->dom->nodes[$k]; + + // return nth-element or array + if (is_null($idx)) return $found; + else if ($idx<0) $idx = count($found) + $idx; + return (isset($found[$idx])) ? $found[$idx] : null; + } + + // seek for given conditions + // PaperG - added parameter to allow for case insensitive testing of the value of a selector. + protected function seek($selector, &$ret, $lowercase=false) + { + global $debug_object; + if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } + + list($tag, $key, $val, $exp, $no_key) = $selector; + + // xpath index + if ($tag && $key && is_numeric($key)) + { + $count = 0; + foreach ($this->children as $c) + { + if ($tag==='*' || $tag===$c->tag) { + if (++$count==$key) { + $ret[$c->_[HDOM_INFO_BEGIN]] = 1; + return; + } + } + } + return; + } + + $end = (!empty($this->_[HDOM_INFO_END])) ? $this->_[HDOM_INFO_END] : 0; + if ($end==0) { + $parent = $this->parent; + while (!isset($parent->_[HDOM_INFO_END]) && $parent!==null) { + $end -= 1; + $parent = $parent->parent; + } + $end += $parent->_[HDOM_INFO_END]; + } + + for ($i=$this->_[HDOM_INFO_BEGIN]+1; $i<$end; ++$i) { + $node = $this->dom->nodes[$i]; + + $pass = true; + + if ($tag==='*' && !$key) { + if (in_array($node, $this->children, true)) + $ret[$i] = 1; + continue; + } + + // compare tag + if ($tag && $tag!=$node->tag && $tag!=='*') {$pass=false;} + // compare key + if ($pass && $key) { + if ($no_key) { + if (isset($node->attr[$key])) $pass=false; + } else { + if (($key != "plaintext") && !isset($node->attr[$key])) $pass=false; + } + } + // compare value + if ($pass && $key && $val && $val!=='*') { + // If they have told us that this is a "plaintext" search then we want the plaintext of the node - right? + if ($key == "plaintext") { + // $node->plaintext actually returns $node->text(); + $nodeKeyValue = $node->text(); + } else { + // this is a normal search, we want the value of that attribute of the tag. + $nodeKeyValue = $node->attr[$key]; + } + if (is_object($debug_object)) {$debug_object->debug_log(2, "testing node: " . $node->tag . " for attribute: " . $key . $exp . $val . " where nodes value is: " . $nodeKeyValue);} + + //PaperG - If lowercase is set, do a case insensitive test of the value of the selector. + if ($lowercase) { + $check = $this->match($exp, strtolower($val), strtolower($nodeKeyValue)); + } else { + $check = $this->match($exp, $val, $nodeKeyValue); + } + if (is_object($debug_object)) {$debug_object->debug_log(2, "after match: " . ($check ? "true" : "false"));} + + // handle multiple class + if (!$check && strcasecmp($key, 'class')===0) { + foreach (explode(' ',$node->attr[$key]) as $k) { + // Without this, there were cases where leading, trailing, or double spaces lead to our comparing blanks - bad form. + if (!empty($k)) { + if ($lowercase) { + $check = $this->match($exp, strtolower($val), strtolower($k)); + } else { + $check = $this->match($exp, $val, $k); + } + if ($check) break; + } + } + } + if (!$check) $pass = false; + } + if ($pass) $ret[$i] = 1; + unset($node); + } + // It's passed by reference so this is actually what this function returns. + if (is_object($debug_object)) {$debug_object->debug_log(1, "EXIT - ret: ", $ret);} + } + + protected function match($exp, $pattern, $value) { + global $debug_object; + if (is_object($debug_object)) {$debug_object->debug_log_entry(1);} + + switch ($exp) { + case '=': + return ($value===$pattern); + case '!=': + return ($value!==$pattern); + case '^=': + return preg_match("/^".preg_quote($pattern,'/')."/", $value); + case '$=': + return preg_match("/".preg_quote($pattern,'/')."$/", $value); + case '*=': + if ($pattern[0]=='/') { + return preg_match($pattern, $value); + } + return preg_match("/".$pattern."/i", $value); + } + return false; + } + + protected function parse_selector($selector_string) { + global $debug_object; + if (is_object($debug_object)) {$debug_object->debug_log_entry(1);} + + // pattern of CSS selectors, modified from mootools + // Paperg: Add the colon to the attrbute, so that it properly finds <tag attr:ibute="something" > like google does. + // Note: if you try to look at this attribute, yo MUST use getAttribute since $dom->x:y will fail the php syntax check. +// Notice the \[ starting the attbute? and the @? following? This implies that an attribute can begin with an @ sign that is not captured. +// This implies that an html attribute specifier may start with an @ sign that is NOT captured by the expression. +// farther study is required to determine of this should be documented or removed. +// $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; + $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-:]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; + preg_match_all($pattern, trim($selector_string).' ', $matches, PREG_SET_ORDER); + if (is_object($debug_object)) {$debug_object->debug_log(2, "Matches Array: ", $matches);} + + $selectors = array(); + $result = array(); + //print_r($matches); + + foreach ($matches as $m) { + $m[0] = trim($m[0]); + if ($m[0]==='' || $m[0]==='/' || $m[0]==='//') continue; + // for browser generated xpath + if ($m[1]==='tbody') continue; + + list($tag, $key, $val, $exp, $no_key) = array($m[1], null, null, '=', false); + if (!empty($m[2])) {$key='id'; $val=$m[2];} + if (!empty($m[3])) {$key='class'; $val=$m[3];} + if (!empty($m[4])) {$key=$m[4];} + if (!empty($m[5])) {$exp=$m[5];} + if (!empty($m[6])) {$val=$m[6];} + + // convert to lowercase + if ($this->dom->lowercase) {$tag=strtolower($tag); $key=strtolower($key);} + //elements that do NOT have the specified attribute + if (isset($key[0]) && $key[0]==='!') {$key=substr($key, 1); $no_key=true;} + + $result[] = array($tag, $key, $val, $exp, $no_key); + if (trim($m[7])===',') { + $selectors[] = $result; + $result = array(); + } + } + if (count($result)>0) + $selectors[] = $result; + return $selectors; + } + + function __get($name) + { + if (isset($this->attr[$name])) + { + return $this->convert_text($this->attr[$name]); + } + switch ($name) + { + case 'outertext': return $this->outertext(); + case 'innertext': return $this->innertext(); + case 'plaintext': return $this->text(); + case 'xmltext': return $this->xmltext(); + default: return array_key_exists($name, $this->attr); + } + } + + function __set($name, $value) + { + global $debug_object; + if (is_object($debug_object)) {$debug_object->debug_log_entry(1);} + + switch ($name) + { + case 'outertext': return $this->_[HDOM_INFO_OUTER] = $value; + case 'innertext': + if (isset($this->_[HDOM_INFO_TEXT])) return $this->_[HDOM_INFO_TEXT] = $value; + return $this->_[HDOM_INFO_INNER] = $value; + } + if (!isset($this->attr[$name])) + { + $this->_[HDOM_INFO_SPACE][] = array(' ', '', ''); + $this->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE; + } + $this->attr[$name] = $value; + } + + function __isset($name) + { + switch ($name) + { + case 'outertext': return true; + case 'innertext': return true; + case 'plaintext': return true; + } + //no value attr: nowrap, checked selected... + return (array_key_exists($name, $this->attr)) ? true : isset($this->attr[$name]); + } + + function __unset($name) { + if (isset($this->attr[$name])) + unset($this->attr[$name]); + } + + // PaperG - Function to convert the text from one character set to another if the two sets are not the same. + function convert_text($text) + { + global $debug_object; + if (is_object($debug_object)) {$debug_object->debug_log_entry(1);} + + $converted_text = $text; + + $sourceCharset = ""; + $targetCharset = ""; + + if ($this->dom) + { + $sourceCharset = strtoupper($this->dom->_charset); + $targetCharset = strtoupper($this->dom->_target_charset); + } + if (is_object($debug_object)) {$debug_object->debug_log(3, "source charset: " . $sourceCharset . " target charaset: " . $targetCharset);} + + if (!empty($sourceCharset) && !empty($targetCharset) && (strcasecmp($sourceCharset, $targetCharset) != 0)) + { + // Check if the reported encoding could have been incorrect and the text is actually already UTF-8 + if ((strcasecmp($targetCharset, 'UTF-8') == 0) && ($this->is_utf8($text))) + { + $converted_text = $text; + } + else + { + $converted_text = iconv($sourceCharset, $targetCharset, $text); + } + } + + // Lets make sure that we don't have that silly BOM issue with any of the utf-8 text we output. + if ($targetCharset == 'UTF-8') + { + if (substr($converted_text, 0, 3) == "\xef\xbb\xbf") + { + $converted_text = substr($converted_text, 3); + } + if (substr($converted_text, -3) == "\xef\xbb\xbf") + { + $converted_text = substr($converted_text, 0, -3); + } + } + + return $converted_text; + } + + /** + * Returns true if $string is valid UTF-8 and false otherwise. + * + * @param mixed $str String to be tested + * @return boolean + */ + static function is_utf8($str) + { + $c=0; $b=0; + $bits=0; + $len=strlen($str); + for($i=0; $i<$len; $i++) + { + $c=ord($str[$i]); + if($c > 128) + { + if(($c >= 254)) return false; + elseif($c >= 252) $bits=6; + elseif($c >= 248) $bits=5; + elseif($c >= 240) $bits=4; + elseif($c >= 224) $bits=3; + elseif($c >= 192) $bits=2; + else return false; + if(($i+$bits) > $len) return false; + while($bits > 1) + { + $i++; + $b=ord($str[$i]); + if($b < 128 || $b > 191) return false; + $bits--; + } + } + } + return true; + } + /* + function is_utf8($string) + { + //this is buggy + return (utf8_encode(utf8_decode($string)) == $string); + } + */ + + /** + * Function to try a few tricks to determine the displayed size of an img on the page. + * NOTE: This will ONLY work on an IMG tag. Returns FALSE on all other tag types. + * + * @author John Schlick + * @version April 19 2012 + * @return array an array containing the 'height' and 'width' of the image on the page or -1 if we can't figure it out. + */ + function get_display_size() + { + global $debug_object; + + $width = -1; + $height = -1; + + if ($this->tag !== 'img') + { + return false; + } + + // See if there is aheight or width attribute in the tag itself. + if (isset($this->attr['width'])) + { + $width = $this->attr['width']; + } + + if (isset($this->attr['height'])) + { + $height = $this->attr['height']; + } + + // Now look for an inline style. + if (isset($this->attr['style'])) + { + // Thanks to user gnarf from stackoverflow for this regular expression. + $attributes = array(); + preg_match_all("/([\w-]+)\s*:\s*([^;]+)\s*;?/", $this->attr['style'], $matches, PREG_SET_ORDER); + foreach ($matches as $match) { + $attributes[$match[1]] = $match[2]; + } + + // If there is a width in the style attributes: + if (isset($attributes['width']) && $width == -1) + { + // check that the last two characters are px (pixels) + if (strtolower(substr($attributes['width'], -2)) == 'px') + { + $proposed_width = substr($attributes['width'], 0, -2); + // Now make sure that it's an integer and not something stupid. + if (filter_var($proposed_width, FILTER_VALIDATE_INT)) + { + $width = $proposed_width; + } + } + } + + // If there is a width in the style attributes: + if (isset($attributes['height']) && $height == -1) + { + // check that the last two characters are px (pixels) + if (strtolower(substr($attributes['height'], -2)) == 'px') + { + $proposed_height = substr($attributes['height'], 0, -2); + // Now make sure that it's an integer and not something stupid. + if (filter_var($proposed_height, FILTER_VALIDATE_INT)) + { + $height = $proposed_height; + } + } + } + + } + + // Future enhancement: + // Look in the tag to see if there is a class or id specified that has a height or width attribute to it. + + // Far future enhancement + // Look at all the parent tags of this image to see if they specify a class or id that has an img selector that specifies a height or width + // Note that in this case, the class or id will have the img subselector for it to apply to the image. + + // ridiculously far future development + // If the class or id is specified in a SEPARATE css file thats not on the page, go get it and do what we were just doing for the ones on the page. + + $result = array('height' => $height, + 'width' => $width); + return $result; + } + + // camel naming conventions + function getAllAttributes() {return $this->attr;} + function getAttribute($name) {return $this->__get($name);} + function setAttribute($name, $value) {$this->__set($name, $value);} + function hasAttribute($name) {return $this->__isset($name);} + function removeAttribute($name) {$this->__set($name, null);} + function getElementById($id) {return $this->find("#$id", 0);} + function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);} + function getElementByTagName($name) {return $this->find($name, 0);} + function getElementsByTagName($name, $idx=null) {return $this->find($name, $idx);} + function parentNode() {return $this->parent();} + function childNodes($idx=-1) {return $this->children($idx);} + function firstChild() {return $this->first_child();} + function lastChild() {return $this->last_child();} + function nextSibling() {return $this->next_sibling();} + function previousSibling() {return $this->prev_sibling();} + function hasChildNodes() {return $this->has_child();} + function nodeName() {return $this->tag;} + function appendChild($node) {$node->parent($this); return $node;} + +} + +/** + * simple html dom parser + * Paperg - in the find routine: allow us to specify that we want case insensitive testing of the value of the selector. + * Paperg - change $size from protected to public so we can easily access it + * Paperg - added ForceTagsClosed in the constructor which tells us whether we trust the html or not. Default is to NOT trust it. + * + * @package PlaceLocalInclude + */ +class simple_html_dom +{ + public $root = null; + public $nodes = array(); + public $callback = null; + public $lowercase = false; + // Used to keep track of how large the text was when we started. + public $original_size; + public $size; + protected $pos; + protected $doc; + protected $char; + protected $cursor; + protected $parent; + protected $noise = array(); + protected $token_blank = " \t\r\n"; + protected $token_equal = ' =/>'; + protected $token_slash = " />\r\n\t"; + protected $token_attr = ' >'; + // Note that this is referenced by a child node, and so it needs to be public for that node to see this information. + public $_charset = ''; + public $_target_charset = ''; + protected $default_br_text = ""; + public $default_span_text = ""; + + // use isset instead of in_array, performance boost about 30%... + protected $self_closing_tags = array('img'=>1, 'br'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1); + protected $block_tags = array('root'=>1, 'body'=>1, 'form'=>1, 'div'=>1, 'span'=>1, 'table'=>1); + // Known sourceforge issue #2977341 + // B tags that are not closed cause us to return everything to the end of the document. + protected $optional_closing_tags = array( + 'tr'=>array('tr'=>1, 'td'=>1, 'th'=>1), + 'th'=>array('th'=>1), + 'td'=>array('td'=>1), + 'li'=>array('li'=>1), + 'dt'=>array('dt'=>1, 'dd'=>1), + 'dd'=>array('dd'=>1, 'dt'=>1), + 'dl'=>array('dd'=>1, 'dt'=>1), + 'p'=>array('p'=>1), + 'nobr'=>array('nobr'=>1), + 'b'=>array('b'=>1), + 'option'=>array('option'=>1), + ); + + function __construct($str=null, $lowercase=true, $forceTagsClosed=true, $target_charset=DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) + { + if ($str) + { + if (preg_match("/^http:\/\//i",$str) || is_file($str)) + { + $this->load_file($str); + } + else + { + $this->load($str, $lowercase, $stripRN, $defaultBRText, $defaultSpanText); + } + } + // Forcing tags to be closed implies that we don't trust the html, but it can lead to parsing errors if we SHOULD trust the html. + if (!$forceTagsClosed) { + $this->optional_closing_array=array(); + } + $this->_target_charset = $target_charset; + } + + function __destruct() + { + $this->clear(); + } + + // load html from string + function load($str, $lowercase=true, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) + { + global $debug_object; + + // prepare + $this->prepare($str, $lowercase, $stripRN, $defaultBRText, $defaultSpanText); + // strip out cdata + $this->remove_noise("'<!\[CDATA\[(.*?)\]\]>'is", true); + // strip out comments + $this->remove_noise("'<!--(.*?)-->'is"); + // Per sourceforge http://sourceforge.net/tracker/?func=detail&aid=2949097&group_id=218559&atid=1044037 + // Script tags removal now preceeds style tag removal. + // strip out <script> tags + $this->remove_noise("'<\s*script[^>]*[^/]>(.*?)<\s*/\s*script\s*>'is"); + $this->remove_noise("'<\s*script\s*>(.*?)<\s*/\s*script\s*>'is"); + // strip out <style> tags + $this->remove_noise("'<\s*style[^>]*[^/]>(.*?)<\s*/\s*style\s*>'is"); + $this->remove_noise("'<\s*style\s*>(.*?)<\s*/\s*style\s*>'is"); + // strip out preformatted tags + $this->remove_noise("'<\s*(?:code)[^>]*>(.*?)<\s*/\s*(?:code)\s*>'is"); + // strip out server side scripts + $this->remove_noise("'(<\?)(.*?)(\?>)'s", true); + // strip smarty scripts + $this->remove_noise("'(\{\w)(.*?)(\})'s", true); + + // parsing + while ($this->parse()); + // end + $this->root->_[HDOM_INFO_END] = $this->cursor; + $this->parse_charset(); + + // make load function chainable + return $this; + + } + + // load html from file + function load_file() + { + $args = func_get_args(); + $this->load(call_user_func_array('file_get_contents', $args), true); + // Throw an error if we can't properly load the dom. + if (($error=error_get_last())!==null) { + $this->clear(); + return false; + } + } + + // set callback function + function set_callback($function_name) + { + $this->callback = $function_name; + } + + // remove callback function + function remove_callback() + { + $this->callback = null; + } + + // save dom as string + function save($filepath='') + { + $ret = $this->root->innertext(); + if ($filepath!=='') file_put_contents($filepath, $ret, LOCK_EX); + return $ret; + } + + // find dom node by css selector + // Paperg - allow us to specify that we want case insensitive testing of the value of the selector. + function find($selector, $idx=null, $lowercase=false) + { + return $this->root->find($selector, $idx, $lowercase); + } + + // clean up memory due to php5 circular references memory leak... + function clear() + { + foreach ($this->nodes as $n) {$n->clear(); $n = null;} + // This add next line is documented in the sourceforge repository. 2977248 as a fix for ongoing memory leaks that occur even with the use of clear. + if (isset($this->children)) foreach ($this->children as $n) {$n->clear(); $n = null;} + if (isset($this->parent)) {$this->parent->clear(); unset($this->parent);} + if (isset($this->root)) {$this->root->clear(); unset($this->root);} + unset($this->doc); + unset($this->noise); + } + + function dump($show_attr=true) + { + $this->root->dump($show_attr); + } + + // prepare HTML data and init everything + protected function prepare($str, $lowercase=true, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT) + { + $this->clear(); + + // set the length of content before we do anything to it. + $this->size = strlen($str); + // Save the original size of the html that we got in. It might be useful to someone. + $this->original_size = $this->size; + + //before we save the string as the doc... strip out the \r \n's if we are told to. + if ($stripRN) { + $str = str_replace("\r", " ", $str); + $str = str_replace("\n", " ", $str); + + // set the length of content since we have changed it. + $this->size = strlen($str); + } + + $this->doc = $str; + $this->pos = 0; + $this->cursor = 1; + $this->noise = array(); + $this->nodes = array(); + $this->lowercase = $lowercase; + $this->default_br_text = $defaultBRText; + $this->default_span_text = $defaultSpanText; + $this->root = new simple_html_dom_node($this); + $this->root->tag = 'root'; + $this->root->_[HDOM_INFO_BEGIN] = -1; + $this->root->nodetype = HDOM_TYPE_ROOT; + $this->parent = $this->root; + if ($this->size>0) $this->char = $this->doc[0]; + } + + // parse html content + protected function parse() + { + if (($s = $this->copy_until_char('<'))==='') + { + return $this->read_tag(); + } + + // text + $node = new simple_html_dom_node($this); + ++$this->cursor; + $node->_[HDOM_INFO_TEXT] = $s; + $this->link_nodes($node, false); + return true; + } + + // PAPERG - dkchou - added this to try to identify the character set of the page we have just parsed so we know better how to spit it out later. + // NOTE: IF you provide a routine called get_last_retrieve_url_contents_content_type which returns the CURLINFO_CONTENT_TYPE from the last curl_exec + // (or the content_type header from the last transfer), we will parse THAT, and if a charset is specified, we will use it over any other mechanism. + protected function parse_charset() + { + global $debug_object; + + $charset = null; + + if (function_exists('get_last_retrieve_url_contents_content_type')) + { + $contentTypeHeader = get_last_retrieve_url_contents_content_type(); + $success = preg_match('/charset=(.+)/', $contentTypeHeader, $matches); + if ($success) + { + $charset = $matches[1]; + if (is_object($debug_object)) {$debug_object->debug_log(2, 'header content-type found charset of: ' . $charset);} + } + + } + + if (empty($charset)) + { + $el = $this->root->find('meta[http-equiv=Content-Type]',0); + if (!empty($el)) + { + $fullvalue = $el->content; + if (is_object($debug_object)) {$debug_object->debug_log(2, 'meta content-type tag found' . $fullvalue);} + + if (!empty($fullvalue)) + { + $success = preg_match('/charset=(.+)/', $fullvalue, $matches); + if ($success) + { + $charset = $matches[1]; + } + else + { + // If there is a meta tag, and they don't specify the character set, research says that it's typically ISO-8859-1 + if (is_object($debug_object)) {$debug_object->debug_log(2, 'meta content-type tag couldn\'t be parsed. using iso-8859 default.');} + $charset = 'ISO-8859-1'; + } + } + } + } + + // If we couldn't find a charset above, then lets try to detect one based on the text we got... + if (empty($charset)) + { + // Use this in case mb_detect_charset isn't installed/loaded on this machine. + $charset = false; + if (function_exists('mb_detect_encoding')) + { + // Have php try to detect the encoding from the text given to us. + $charset = mb_detect_encoding($this->root->plaintext . "ascii", $encoding_list = array( "UTF-8", "CP1252" ) ); + if (is_object($debug_object)) {$debug_object->debug_log(2, 'mb_detect found: ' . $charset);} + } + + // and if this doesn't work... then we need to just wrongheadedly assume it's UTF-8 so that we can move on - cause this will usually give us most of what we need... + if ($charset === false) + { + if (is_object($debug_object)) {$debug_object->debug_log(2, 'since mb_detect failed - using default of utf-8');} + $charset = 'UTF-8'; + } + } + + // Since CP1252 is a superset, if we get one of it's subsets, we want it instead. + if ((strtolower($charset) == strtolower('ISO-8859-1')) || (strtolower($charset) == strtolower('Latin1')) || (strtolower($charset) == strtolower('Latin-1'))) + { + if (is_object($debug_object)) {$debug_object->debug_log(2, 'replacing ' . $charset . ' with CP1252 as its a superset');} + $charset = 'CP1252'; + } + + if (is_object($debug_object)) {$debug_object->debug_log(1, 'EXIT - ' . $charset);} + + return $this->_charset = $charset; + } + + // read tag info + protected function read_tag() + { + if ($this->char!=='<') + { + $this->root->_[HDOM_INFO_END] = $this->cursor; + return false; + } + $begin_tag_pos = $this->pos; + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + + // end tag + if ($this->char==='/') + { + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + // This represents the change in the simple_html_dom trunk from revision 180 to 181. + // $this->skip($this->token_blank_t); + $this->skip($this->token_blank); + $tag = $this->copy_until_char('>'); + + // skip attributes in end tag + if (($pos = strpos($tag, ' '))!==false) + $tag = substr($tag, 0, $pos); + + $parent_lower = strtolower($this->parent->tag); + $tag_lower = strtolower($tag); + + if ($parent_lower!==$tag_lower) + { + if (isset($this->optional_closing_tags[$parent_lower]) && isset($this->block_tags[$tag_lower])) + { + $this->parent->_[HDOM_INFO_END] = 0; + $org_parent = $this->parent; + + while (($this->parent->parent) && strtolower($this->parent->tag)!==$tag_lower) + $this->parent = $this->parent->parent; + + if (strtolower($this->parent->tag)!==$tag_lower) { + $this->parent = $org_parent; // restore origonal parent + if ($this->parent->parent) $this->parent = $this->parent->parent; + $this->parent->_[HDOM_INFO_END] = $this->cursor; + return $this->as_text_node($tag); + } + } + else if (($this->parent->parent) && isset($this->block_tags[$tag_lower])) + { + $this->parent->_[HDOM_INFO_END] = 0; + $org_parent = $this->parent; + + while (($this->parent->parent) && strtolower($this->parent->tag)!==$tag_lower) + $this->parent = $this->parent->parent; + + if (strtolower($this->parent->tag)!==$tag_lower) + { + $this->parent = $org_parent; // restore origonal parent + $this->parent->_[HDOM_INFO_END] = $this->cursor; + return $this->as_text_node($tag); + } + } + else if (($this->parent->parent) && strtolower($this->parent->parent->tag)===$tag_lower) + { + $this->parent->_[HDOM_INFO_END] = 0; + $this->parent = $this->parent->parent; + } + else + return $this->as_text_node($tag); + } + + $this->parent->_[HDOM_INFO_END] = $this->cursor; + if ($this->parent->parent) $this->parent = $this->parent->parent; + + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + return true; + } + + $node = new simple_html_dom_node($this); + $node->_[HDOM_INFO_BEGIN] = $this->cursor; + ++$this->cursor; + $tag = $this->copy_until($this->token_slash); + $node->tag_start = $begin_tag_pos; + + // doctype, cdata & comments... + if (isset($tag[0]) && $tag[0]==='!') { + $node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until_char('>'); + + if (isset($tag[2]) && $tag[1]==='-' && $tag[2]==='-') { + $node->nodetype = HDOM_TYPE_COMMENT; + $node->tag = 'comment'; + } else { + $node->nodetype = HDOM_TYPE_UNKNOWN; + $node->tag = 'unknown'; + } + if ($this->char==='>') $node->_[HDOM_INFO_TEXT].='>'; + $this->link_nodes($node, true); + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + return true; + } + + // text + if ($pos=strpos($tag, '<')!==false) { + $tag = '<' . substr($tag, 0, -1); + $node->_[HDOM_INFO_TEXT] = $tag; + $this->link_nodes($node, false); + $this->char = $this->doc[--$this->pos]; // prev + return true; + } + + if (!preg_match("/^[\w-:]+$/", $tag)) { + $node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until('<>'); + if ($this->char==='<') { + $this->link_nodes($node, false); + return true; + } + + if ($this->char==='>') $node->_[HDOM_INFO_TEXT].='>'; + $this->link_nodes($node, false); + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + return true; + } + + // begin tag + $node->nodetype = HDOM_TYPE_ELEMENT; + $tag_lower = strtolower($tag); + $node->tag = ($this->lowercase) ? $tag_lower : $tag; + + // handle optional closing tags + if (isset($this->optional_closing_tags[$tag_lower]) ) + { + while (isset($this->optional_closing_tags[$tag_lower][strtolower($this->parent->tag)])) + { + $this->parent->_[HDOM_INFO_END] = 0; + $this->parent = $this->parent->parent; + } + $node->parent = $this->parent; + } + + $guard = 0; // prevent infinity loop + $space = array($this->copy_skip($this->token_blank), '', ''); + + // attributes + do + { + if ($this->char!==null && $space[0]==='') + { + break; + } + $name = $this->copy_until($this->token_equal); + if ($guard===$this->pos) + { + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + continue; + } + $guard = $this->pos; + + // handle endless '<' + if ($this->pos>=$this->size-1 && $this->char!=='>') { + $node->nodetype = HDOM_TYPE_TEXT; + $node->_[HDOM_INFO_END] = 0; + $node->_[HDOM_INFO_TEXT] = '<'.$tag . $space[0] . $name; + $node->tag = 'text'; + $this->link_nodes($node, false); + return true; + } + + // handle mismatch '<' + if ($this->doc[$this->pos-1]=='<') { + $node->nodetype = HDOM_TYPE_TEXT; + $node->tag = 'text'; + $node->attr = array(); + $node->_[HDOM_INFO_END] = 0; + $node->_[HDOM_INFO_TEXT] = substr($this->doc, $begin_tag_pos, $this->pos-$begin_tag_pos-1); + $this->pos -= 2; + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + $this->link_nodes($node, false); + return true; + } + + if ($name!=='/' && $name!=='') { + $space[1] = $this->copy_skip($this->token_blank); + $name = $this->restore_noise($name); + if ($this->lowercase) $name = strtolower($name); + if ($this->char==='=') { + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + $this->parse_attr($node, $name, $space); + } + else { + //no value attr: nowrap, checked selected... + $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_NO; + $node->attr[$name] = true; + if ($this->char!='>') $this->char = $this->doc[--$this->pos]; // prev + } + $node->_[HDOM_INFO_SPACE][] = $space; + $space = array($this->copy_skip($this->token_blank), '', ''); + } + else + break; + } while ($this->char!=='>' && $this->char!=='/'); + + $this->link_nodes($node, true); + $node->_[HDOM_INFO_ENDSPACE] = $space[0]; + + // check self closing + if ($this->copy_until_char_escape('>')==='/') + { + $node->_[HDOM_INFO_ENDSPACE] .= '/'; + $node->_[HDOM_INFO_END] = 0; + } + else + { + // reset parent + if (!isset($this->self_closing_tags[strtolower($node->tag)])) $this->parent = $node; + } + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + + // If it's a BR tag, we need to set it's text to the default text. + // This way when we see it in plaintext, we can generate formatting that the user wants. + // since a br tag never has sub nodes, this works well. + if ($node->tag == "br") + { + $node->_[HDOM_INFO_INNER] = $this->default_br_text; + } + + return true; + } + + // parse attributes + protected function parse_attr($node, $name, &$space) + { + // Per sourceforge: http://sourceforge.net/tracker/?func=detail&aid=3061408&group_id=218559&atid=1044037 + // If the attribute is already defined inside a tag, only pay atetntion to the first one as opposed to the last one. + if (isset($node->attr[$name])) + { + return; + } + + $space[2] = $this->copy_skip($this->token_blank); + switch ($this->char) { + case '"': + $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE; + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + $node->attr[$name] = $this->restore_noise($this->copy_until_char_escape('"')); + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + break; + case '\'': + $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_SINGLE; + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + $node->attr[$name] = $this->restore_noise($this->copy_until_char_escape('\'')); + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + break; + default: + $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_NO; + $node->attr[$name] = $this->restore_noise($this->copy_until($this->token_attr)); + } + // PaperG: Attributes should not have \r or \n in them, that counts as html whitespace. + $node->attr[$name] = str_replace("\r", "", $node->attr[$name]); + $node->attr[$name] = str_replace("\n", "", $node->attr[$name]); + // PaperG: If this is a "class" selector, lets get rid of the preceeding and trailing space since some people leave it in the multi class case. + if ($name == "class") { + $node->attr[$name] = trim($node->attr[$name]); + } + } + + // link node's parent + protected function link_nodes(&$node, $is_child) + { + $node->parent = $this->parent; + $this->parent->nodes[] = $node; + if ($is_child) + { + $this->parent->children[] = $node; + } + } + + // as a text node + protected function as_text_node($tag) + { + $node = new simple_html_dom_node($this); + ++$this->cursor; + $node->_[HDOM_INFO_TEXT] = '</' . $tag . '>'; + $this->link_nodes($node, false); + $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + return true; + } + + protected function skip($chars) + { + $this->pos += strspn($this->doc, $chars, $this->pos); + $this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + } + + protected function copy_skip($chars) + { + $pos = $this->pos; + $len = strspn($this->doc, $chars, $pos); + $this->pos += $len; + $this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + if ($len===0) return ''; + return substr($this->doc, $pos, $len); + } + + protected function copy_until($chars) + { + $pos = $this->pos; + $len = strcspn($this->doc, $chars, $pos); + $this->pos += $len; + $this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next + return substr($this->doc, $pos, $len); + } + + protected function copy_until_char($char) + { + if ($this->char===null) return ''; + + if (($pos = strpos($this->doc, $char, $this->pos))===false) { + $ret = substr($this->doc, $this->pos, $this->size-$this->pos); + $this->char = null; + $this->pos = $this->size; + return $ret; + } + + if ($pos===$this->pos) return ''; + $pos_old = $this->pos; + $this->char = $this->doc[$pos]; + $this->pos = $pos; + return substr($this->doc, $pos_old, $pos-$pos_old); + } + + protected function copy_until_char_escape($char) + { + if ($this->char===null) return ''; + + $start = $this->pos; + while (1) + { + if (($pos = strpos($this->doc, $char, $start))===false) + { + $ret = substr($this->doc, $this->pos, $this->size-$this->pos); + $this->char = null; + $this->pos = $this->size; + return $ret; + } + + if ($pos===$this->pos) return ''; + + if ($this->doc[$pos-1]==='\\') { + $start = $pos+1; + continue; + } + + $pos_old = $this->pos; + $this->char = $this->doc[$pos]; + $this->pos = $pos; + return substr($this->doc, $pos_old, $pos-$pos_old); + } + } + + // remove noise from html content + // save the noise in the $this->noise array. + protected function remove_noise($pattern, $remove_tag=false) + { + global $debug_object; + if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } + + $count = preg_match_all($pattern, $this->doc, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE); + + for ($i=$count-1; $i>-1; --$i) + { + $key = '___noise___'.sprintf('% 5d', count($this->noise)+1000); + if (is_object($debug_object)) { $debug_object->debug_log(2, 'key is: ' . $key); } + $idx = ($remove_tag) ? 0 : 1; + $this->noise[$key] = $matches[$i][$idx][0]; + $this->doc = substr_replace($this->doc, $key, $matches[$i][$idx][1], strlen($matches[$i][$idx][0])); + } + + // reset the length of content + $this->size = strlen($this->doc); + if ($this->size>0) + { + $this->char = $this->doc[0]; + } + } + + // restore noise to html content + function restore_noise($text) + { + global $debug_object; + if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } + + while (($pos=strpos($text, '___noise___'))!==false) + { + // Sometimes there is a broken piece of markup, and we don't GET the pos+11 etc... token which indicates a problem outside of us... + if (strlen($text) > $pos+15) + { + $key = '___noise___'.$text[$pos+11].$text[$pos+12].$text[$pos+13].$text[$pos+14].$text[$pos+15]; + if (is_object($debug_object)) { $debug_object->debug_log(2, 'located key of: ' . $key); } + + if (isset($this->noise[$key])) + { + $text = substr($text, 0, $pos).$this->noise[$key].substr($text, $pos+16); + } + else + { + // do this to prevent an infinite loop. + $text = substr($text, 0, $pos).'UNDEFINED NOISE FOR KEY: '.$key . substr($text, $pos+16); + } + } + else + { + // There is no valid key being given back to us... We must get rid of the ___noise___ or we will have a problem. + $text = substr($text, 0, $pos).'NO NUMERIC NOISE KEY' . substr($text, $pos+11); + } + } + return $text; + } + + // Sometimes we NEED one of the noise elements. + function search_noise($text) + { + global $debug_object; + if (is_object($debug_object)) { $debug_object->debug_log_entry(1); } + + foreach($this->noise as $noiseElement) + { + if (strpos($noiseElement, $text)!==false) + { + return $noiseElement; + } + } + } + function __toString() + { + return $this->root->innertext(); + } + + function __get($name) + { + switch ($name) + { + case 'outertext': + return $this->root->innertext(); + case 'innertext': + return $this->root->innertext(); + case 'plaintext': + return $this->root->text(); + case 'charset': + return $this->_charset; + case 'target_charset': + return $this->_target_charset; + } + } + + // camel naming conventions + function childNodes($idx=-1) {return $this->root->childNodes($idx);} + function firstChild() {return $this->root->first_child();} + function lastChild() {return $this->root->last_child();} + function createElement($name, $value=null) {return @str_get_html("<$name>$value</$name>")->first_child();} + function createTextNode($value) {return @end(str_get_html($value)->nodes);} + function getElementById($id) {return $this->find("#$id", 0);} + function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);} + function getElementByTagName($name) {return $this->find($name, 0);} + function getElementsByTagName($name, $idx=-1) {return $this->find($name, $idx);} + function loadFile() {$args = func_get_args();$this->load_file($args);} +} + ?> \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php index b8552dc77c901dbb508a4e55532d80f436ff9df0..135d0ebd5e662fd3b53254e2a7025c5321580021 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php @@ -14,11 +14,60 @@ class M_Third_Party_Compat extends C_Base_Module 'photocrati-third_party_compat', 'Third Party Compatibility', "Adds Third party compatibility hacks, adjustments, and modifications", - '0.1', + '0.3', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' ); + + // the following constants were renamed for 2.0.41; keep them declared for compatibility sake until + // other parties can update themselves. + $changed_constants = array( + 'NEXTGEN_ADD_GALLERY_SLUG' => 'NGG_ADD_GALLERY_SLUG', + 'NEXTGEN_BASIC_SINGLEPIC_MODULE_NAME' => 'NGG_BASIC_SINGLEPIC', + 'NEXTGEN_BASIC_TAG_CLOUD_MODULE_NAME' => 'NGG_BASIC_TAGCLOUD', + 'NEXTGEN_DISPLAY_PRIORITY_BASE' => 'NGG_DISPLAY_PRIORITY_BASE', + 'NEXTGEN_DISPLAY_PRIORITY_STEP' => 'NGG_DISPLAY_PRIORITY_STEP', + 'NEXTGEN_DISPLAY_SETTINGS_SLUG' => 'NGG_DISPLAY_SETTINGS_SLUG', + 'NEXTGEN_FS_ACCESS_SLUG' => 'NGG_FS_ACCESS_SLUG', + 'NEXTGEN_GALLERY_ATTACH_TO_POST_SLUG' => 'NGG_ATTACH_TO_POST_SLUG', + 'NEXTGEN_GALLERY_BASIC_SLIDESHOW' => 'NGG_BASIC_SLIDESHOW', + 'NEXTGEN_GALLERY_BASIC_THUMBNAILS' => 'NGG_BASIC_THUMBNAILS', + 'NEXTGEN_GALLERY_CHANGE_OPTIONS_CAP' => 'NGG_CHANGE_OPTIONS_CAP', + 'NEXTGEN_GALLERY_I18N_DOMAIN' => 'NGG_I18N_DOMAIN', + 'NEXTGEN_GALLERY_IMPORT_ROOT' => 'NGG_IMPORT_ROOT', + 'NEXTGEN_GALLERY_MODULE_DIR' => 'NGG_MODULE_DIR', + 'NEXTGEN_GALLERY_MODULE_URL' => 'NGG_MODULE_URL', + 'NEXTGEN_GALLERY_NEXTGEN_BASIC_COMPACT_ALBUM' => 'NGG_BASIC_COMPACT_ALBUM', + 'NEXTGEN_GALLERY_NEXTGEN_BASIC_EXTENDED_ALBUM' => 'NGG_BASIC_EXTENDED_ALBUM', + 'NEXTGEN_GALLERY_NEXTGEN_BASIC_IMAGEBROWSER' => 'NGG_BASIC_IMAGEBROWSER', + 'NEXTGEN_GALLERY_NGGLEGACY_MOD_DIR' => 'NGG_LEGACY_MOD_DIR', + 'NEXTGEN_GALLERY_NGGLEGACY_MOD_URL' => 'NGG_LEGACY_MOD_URL', + 'NEXTGEN_GALLERY_PLUGIN' => 'NGG_PLUGIN', + 'NEXTGEN_GALLERY_PLUGIN_BASENAME' => 'NGG_PLUGIN_BASENAME', + 'NEXTGEN_GALLERY_PLUGIN_DIR' => 'NGG_PLUGIN_DIR', + 'NEXTGEN_GALLERY_PLUGIN_STARTED_AT' => 'NGG_PLUGIN_STARTED_AT', + 'NEXTGEN_GALLERY_PLUGIN_URL' => 'NGG_PLUGIN_URL', + 'NEXTGEN_GALLERY_PLUGIN_VERSION' => 'NGG_PLUGIN_VERSION', + 'NEXTGEN_GALLERY_PRODUCT_DIR' => 'NGG_PRODUCT_DIR', + 'NEXTGEN_GALLERY_PRODUCT_URL' => 'NGG_PRODUCT_URL', + 'NEXTGEN_GALLERY_PROTECT_IMAGE_MOD_STATIC_URL' => 'NGG_PROTUCT_IMAGE_MOD_STATIC_URL', + 'NEXTGEN_GALLERY_PROTECT_IMAGE_MOD_URL' => 'NGG_PROTECT_IMAGE_MOD_URL', + 'NEXTGEN_GALLERY_TESTS_DIR' => 'NGG_TESTS_DIR', + 'NEXTGEN_LIGHTBOX_ADVANCED_OPTIONS_SLUG' => 'NGG_LIGHTBOX_ADVANCED_OPTIONS_SLUG', + 'NEXTGEN_LIGHTBOX_OPTIONS_SLUG' => 'NGG_LIGHTBOX_OPTIONS_SLUG', + 'NEXTGEN_OTHER_OPTIONS_SLUG' => 'NGG_OTHER_OPTIONS_SLUG' + ); + foreach ($changed_constants as $old => $new) { + if (defined($new) && !defined($old)) { + define($old, constant($new)); + } + } + + // Resolve problems with zlib compression: https://core.trac.wordpress.org/ticket/18525 + if (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION == 4) { + @ini_set('zlib.output_compression', 'Off'); + } } function _register_adapters() @@ -27,8 +76,165 @@ class M_Third_Party_Compat extends C_Base_Module function _register_hooks() { - add_action('init', array(&$this, 'colorbox'), PHP_INT_MAX); - add_action('wp', array(&$this, 'bjlazyload'), PHP_INT_MAX); + add_action('init', array(&$this, 'colorbox'), PHP_INT_MAX); + add_action('init', array(&$this, 'flattr'), PHP_INT_MAX); + add_action('wp', array(&$this, 'bjlazyload'), PHP_INT_MAX); + + add_action('plugins_loaded', array(&$this, 'wpml'), PHP_INT_MAX); + add_action('plugins_loaded', array(&$this, 'wpml_translation_management'), PHP_INT_MAX); + + add_filter('headway_gzip', array(&$this, 'headway_gzip'), (PHP_INT_MAX - 1)); + add_filter('ckeditor_external_plugins', array(&$this, 'ckeditor_plugins'), 11); + add_filter('the_content', array(&$this, 'check_weaverii'), -(PHP_INT_MAX-2)); + add_action('wp', array(&$this, 'check_for_jquery_lightbox')); + + // TODO: Only needed for NGG Pro 1.0.10 and lower + add_action('the_post', array(&$this, 'add_ngg_pro_page_parameter')); + } + + /** + * CKEditor features a custom NextGEN shortcode generator that unfortunately relies on parts of the NextGEN + * 1.9x API that has been deprecated in NextGEN 2.0 + * + * @param $plugins + * @return mixed + */ + function ckeditor_plugins($plugins) + { + if (!class_exists('add_ckeditor_button')) + return $plugins; + + if (!empty($plugins['nextgen'])) + unset($plugins['nextgen']); + + return $plugins; + } + + function check_for_jquery_lightbox() + { + // Fix for jQuery Lightbox: http://wordpress.org/plugins/wp-jquery-lightbox/ + // jQuery Lightbox tries to modify the content of a post, but it does so before we modify + // the content, and therefore it's modifications have no effect on our galleries + if (function_exists('jqlb_autoexpand_rel_wlightbox')) { + $settings = C_NextGen_Settings::get_instance(); + + // First, we make it appear that NGG has no lightbox effect enabled. That way + // we don't any lightbox resources + unset($settings->thumbEffect); + + // We would normally just let the third-party plugin do it's thing, but it's regex doesn't + // seem to work on our <a> tags (perhaps because they span multiple of lines or have data attributes) + // So instead, we just do what the third-party plugin wants - add the rel attribute + $settings->thumbCode="rel='lightbox[%POST_ID%]'"; + } + } + + /** + * Weaver II's 'weaver_show_posts' shortcode creates a new wp-query, causing a second round of 'the_content' + * filters to apply. This checks for WeaverII and enables all NextGEN shortcodes that would otherwise be left + * disabled by our shortcode manager. See https://core.trac.wordpress.org/ticket/17817 for more. + * + * @param $content + * @return $content + */ + function check_weaverii($content) + { + if (function_exists('weaverii_show_posts_shortcode')) + C_NextGen_Shortcode_Manager::get_instance()->activate_all(); + + return $content; + } + + /** + * WPML assigns an action to 'init' that *may* enqueue some admin-side JS. This JS relies on some inline JS + * to be injected that isn't present in ATP so for ATP requests ONLY we disable their action that enqueues + * their JS files. + */ + function wpml() + { + if (!class_exists('SitePress')) + return; + + if (FALSE === strpos(strtolower($_SERVER['REQUEST_URI']), '/nextgen-attach_to_post')) + return; + + global $wp_filter; + + if (empty($wp_filter['init'][2])) + return; + + foreach ($wp_filter['init'][2] as $id => $filter) { + if (!strpos($id, 'js_load')) + continue; + + $object = $filter['function'][0]; + + if (is_object($object) && get_class($object) != 'SitePress') + continue; + + remove_action('init', array($object, 'js_load'), 2); + } + } + + /** + * WPML Translation Management has a similar problem to plain ol' WPML + */ + function wpml_translation_management() + { + if (!class_exists('WPML_Translation_Management')) + return; + + if (FALSE === strpos(strtolower($_SERVER['REQUEST_URI']), '/nextgen-attach_to_post')) + return; + + global $wp_filter; + + if (empty($wp_filter['init'][10])) + return; + + foreach ($wp_filter['init'][10] as $id => $filter) { + if (!strpos($id, 'init')) + continue; + + $object = $filter['function'][0]; + + if (is_object($object) && get_class($object) != 'WPML_Translation_Management') + continue; + + remove_action('init', array($object, 'init'), 10); + } + } + + /** + * NGG Pro 1.0.10 relies on the 'page' parameter for pagination, but that conflicts with + * WordPress Post Pagination (<!-- nextpage -->). This was fixed in 1.0.11, so this code is + * for backwards compatibility + * TODO: This can be removed in a later release + */ + function add_ngg_pro_page_parameter() + { + global $post; + + if ($post AND (strpos($post->content, "<!--nextpage-->") === FALSE) AND (strpos($_SERVER['REQUEST_URI'], '/page/') !== FALSE)) { + if (preg_match("#/page/(\\d+)#", $_SERVER['REQUEST_URI'], $match)) { + $_REQUEST['page'] = $match[1]; + } + } + } + + /** + * Headway themes offer gzip compression, but it causes problems with NextGEN output. Disable that feature while + * NextGEN is active. + * + * @param $option + * @return bool + */ + function headway_gzip($option) + { + if (!class_exists('HeadwayOption')) + return $option; + + return FALSE; } /** @@ -52,7 +258,7 @@ class M_Third_Party_Compat extends C_Base_Module $object = $filter['function'][0]; - if (get_class($object) != 'JQueryColorboxFrontend') + if (is_object($object) && get_class($object) != 'JQueryColorboxFrontend') continue; remove_filter('the_content', array($object, 'addColorboxGroupIdToImages'), 100); @@ -63,6 +269,38 @@ class M_Third_Party_Compat extends C_Base_Module } } + /** + * Flattr fires a filter (pri=32767) on "the_content" that recurses. This causes problems, + * see https://core.trac.wordpress.org/ticket/17817 for more information. Moving their filter to PHP_INT_MAX + * is enough for us though + */ + function flattr() + { + if (!class_exists('Flattr')) + return; + + global $wp_filter; + + $level = 32767; + + if (empty($wp_filter['the_content'][$level])) + return; + + foreach ($wp_filter['the_content'][$level] as $id => $filter) { + if (!strpos($id, 'injectIntoTheContent')) + continue; + + $object = $filter['function'][0]; + + if (is_object($object) && get_class($object) != 'Flattr') + continue; + + remove_filter('the_content', array($object, 'injectIntoTheContent'), $level); + add_filter('the_content', array($object, 'injectIntoTheContent'), PHP_INT_MAX); + break; + } + } + /** * For the same reasons as Colorbox we move BJ-Lazy-load's filter() method to a later priority so it can access * our rendered galleries. @@ -83,7 +321,7 @@ class M_Third_Party_Compat extends C_Base_Module $object = $filter['function'][0]; - if (get_class($object) != 'BJLL') + if (is_object($object) && get_class($object) != 'BJLL') continue; remove_filter('the_content', array($object, 'filter'), 200); @@ -114,4 +352,4 @@ class M_Third_Party_Compat extends C_Base_Module } } -new M_Third_Party_Compat(); \ No newline at end of file +new M_Third_Party_Compat(); diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/mixin.validation.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/mixin.validation.php index a277c94627379e781b65581eb6d9225ce59e802b..3b4ff8807d744354266f01b28ff4d5594cdd1add 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/mixin.validation.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/validation/mixin.validation.php @@ -49,6 +49,10 @@ class Mixin_Validation extends Mixin */ function add_error($msg, $property='*') { + if (!isset($this->object->_errors)) { + $this->object->_errors = array(); + } + $errors = &$this->object->_errors; if (!isset($errors[$property])) { diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget.php index 819d9f1541f875d5dcc4e69978aae21f5f2f31c2..5ddb4f96dc7ace656449336e5965dc4ea0049b8f 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget.php @@ -30,8 +30,6 @@ class Mixin_Widget extends Mixin */ function echo_widget_random($number, $width = '75', $height = '50', $exclude = 'all', $list = '', $show = 'thumbnail') { - wp_enqueue_style('nextgen_widgets_style', $this->get_static_url('photocrati-widget#widgets.css')); - wp_enqueue_style('nextgen_basic_thumbnails_style', $this->get_static_url('nextgen_basic_thumbnails#nextgen_basic_thumbnails.css')); $options = array( 'title' => FALSE, 'items' => $number, @@ -54,8 +52,6 @@ class Mixin_Widget extends Mixin */ function echo_widget_recent($number, $width = '75', $height = '50', $exclude = 'all', $list = '', $show = 'thumbnail') { - wp_enqueue_style('nextgen_widgets_style', $this->get_static_url('photocrati-widget#widgets.css')); - wp_enqueue_style('nextgen_basic_thumbnails_style', $this->get_static_url('nextgen_basic_thumbnails#nextgen_basic_thumbnails.css')); $options = array( 'title' => FALSE, 'items' => $number, @@ -81,8 +77,6 @@ class Mixin_Widget extends Mixin */ function echo_widget_slideshow($galleryID, $width = '', $height = '') { - wp_enqueue_style('nextgen_widgets_style', $this->get_static_url('widget#widgets.css')); - wp_enqueue_style('nextgen_basic_slideshow_style', $this->get_static_url('nextgen_basic_slideshow#nextgen_basic_slideshow.css')); $widget = new C_Widget_Slideshow(); $widget->render_slideshow($galleryID, $width, $height); } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_gallery.php index bd82d4894f1695f72bd2080d2d22570ab1d7d766..0e95fb4dd0db75b563a1cb36044c3f516bc8a300 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_gallery.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_gallery.php @@ -85,90 +85,49 @@ class C_Widget_Gallery extends WP_Widget function widget($args, $instance) { + $router = C_Router::get_instance(); + wp_enqueue_style('nextgen_widgets_style', $router->get_static_url('photocrati-widget#widgets.css')); + wp_enqueue_style('nextgen_basic_thumbnails_style', $router->get_static_url('photocrati-nextgen_basic_gallery#thumbnails/nextgen_basic_thumbnails.css')); + // these are handled by extract() but I want to silence my IDE warnings that these vars don't exist $before_widget = NULL; - $before_title = NULL; - $after_widget = NULL; - $after_title = NULL; - $widget_id = NULL; - - global $wpdb; - + $before_title = NULL; + $after_widget = NULL; + $after_title = NULL; + $widget_id = NULL; extract($args); + $title = apply_filters('widget_title', empty($instance['title']) ? ' ' : $instance['title'], $instance, $this->id_base); - $renderer = C_Component_Registry::get_instance()->get_utility('I_Displayed_Gallery_Renderer'); - $factory = C_Component_Registry::get_instance()->get_utility('I_Component_Factory'); - $mapper = C_Component_Registry::get_instance()->get_utility('I_Image_Mapper'); + $renderer = C_Component_Registry::get_instance()->get_utility('I_Displayed_Gallery_Renderer'); + $factory = C_Component_Registry::get_instance()->get_utility('I_Component_Factory'); $view = $factory->create('mvc_view', ''); - // To prevent huge db scans and/or the loading of every image available: we first retrieve X image - // ids and then create a gallery using the results for the image_ids parameter - $image_ids = array(); - - $sql = "SELECT `pid` FROM `{$wpdb->nggpictures}` WHERE `exclude` = 0"; - - // possibly filter images not from certain galleries - if ($instance['exclude'] == 'allow') - $sql .= sprintf(" AND `galleryid` IN (%s)", $instance['list']); - - // possibly filter images from certain galleries - if ($instance['exclude'] == 'denied') - $sql .= sprintf(" AND `galleryid` NOT IN (%s)", $instance['list']); - - if ($instance['type'] == 'random') - $sql .= ' ORDER BY RAND()'; - else if ($instance['type'] == 'recent') - $sql .= ' ORDER BY `imagedate` DESC'; - - $sql .= " LIMIT {$instance['items']}"; - - foreach ($wpdb->get_results($sql, ARRAY_N) as $res) { - $image_ids[] = reset($res); - } - $image_ids = implode(',', $image_ids); - - if ($instance['type'] == 'random') - { - $order_by = 'rand()'; - $order_direction = 'DESC'; - } - else if ($instance['type'] == 'recent') - { - $order_by = $mapper->get_primary_key_column(); - $order_direction = 'DESC'; - } - // IE8 webslice support if needed - if ($instance['webslice']) + if (!empty($instance['webslice'])) { $before_widget .= '<div class="hslice" id="ngg-webslice">'; $before_title = str_replace('class="' , 'class="entry-title ', $before_title); $after_widget = '</div>' . $after_widget; } - // 'Original' was the value used in 1.9x; so alias original => 'full' - if ($instance['show'] == 'original') - $show = 'full'; - else - $show = 'thumb'; - - echo $renderer->display_images(array( - 'source' => 'galleries', - 'order_by' => $order_by, - 'order_direction' => $order_direction, - 'image_ids' => $image_ids, - 'display_type' => NEXTGEN_GALLERY_BASIC_THUMBNAILS, + $source = ($instance['type'] == 'random' ? 'random_images' : 'recent'); + + $params = array( + 'slug' => 'widget-' . $args['widget_id'], + 'source' => $source, + 'display_type' => NGG_BASIC_THUMBNAILS, 'images_per_page' => $instance['items'], 'maximum_entity_count' => $instance['items'], 'template' => $view->get_template_abspath('photocrati-widget#display_gallery'), - 'image_type' => $show, + 'image_type' => $instance['show'] == 'original' ? 'full' : 'thumb', 'show_all_in_lightbox' => FALSE, 'show_slideshow_link' => FALSE, 'disable_pagination' => TRUE, 'image_width' => $instance['width'], 'image_height' => $instance['height'], 'ngg_triggers_display' => 'never', + 'use_imagebrowser_effect' => FALSE, 'widget_setting_title' => $title, 'widget_setting_before_widget' => $before_widget, 'widget_setting_before_title' => $before_title, @@ -178,6 +137,26 @@ class C_Widget_Gallery extends WP_Widget 'widget_setting_height' => $instance['height'], 'widget_setting_show_setting' => $instance['show'], 'widget_setting_widget_id' => $widget_id - )); + ); + + switch ($instance['exclude']) { + case 'all': + break; + case 'denied': + $mapper = C_Component_Registry::get_instance()->get_utility('I_Gallery_Mapper'); + $gallery_ids = array(); + $list = explode(',', $instance['list']); + foreach ($mapper->find_all() as $gallery) { + if (!in_array($gallery->{$gallery->id_field}, $list)) + $gallery_ids[] = $gallery->{$gallery->id_field}; + } + $params['container_ids'] = implode(',', $gallery_ids); + break; + case 'allow': + $params['container_ids'] = $instance['list']; + break; + } + + echo $renderer->display_images($params); } } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_mediarss.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_mediarss.php index 13c0fc9df0675a342422cf8ef6e28b17a4ebf890..f9a08dcc5692025c7af2c9f00e0f592d4e1d99c3 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_mediarss.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_mediarss.php @@ -90,7 +90,7 @@ class C_Widget_MediaRSS extends WP_Widget { $icon_url = NGGALLERY_URLPATH . 'images/mrss-icon.gif'; $out .= "<a href='{$mrss_url}' title='{$title}' class='ngg-media-rss-link'" . ($use_piclens ? ' onclick="PicLensLite.start({feedUrl:\'' . $mrss_url . '\'}); return false;"' : "") . " >"; - $out .= "<img src='{$icon_url}' alt='MediaRSS Icon' title='" . (!$use_piclens ? $title : __('[View with PicLens]','nggallery')). "' class='ngg-media-rss-icon' />"; + $out .= "<img src='{$icon_url}' alt='MediaRSS Icon' title='" . (!$use_piclens ? $title : __('[View with PicLens]', 'nggallery')). "' class='ngg-media-rss-icon' />"; $out .= "</a> "; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_slideshow.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_slideshow.php index ac41cbd7d267b3e8ba3395da1cdcb7f05fb4f8b3..c3c28f61513021ba65bc853b1ebba7886d6002ca 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_slideshow.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/class.widget_slideshow.php @@ -58,6 +58,10 @@ class C_Widget_Slideshow extends WP_Widget function widget($args, $instance) { + $router = C_Router::get_instance(); + wp_enqueue_style('nextgen_widgets_style', $router->get_static_url('photocrati-widget#widgets.css')); + wp_enqueue_style('nextgen_basic_slideshow_style', $router->get_static_url('photocrati-nextgen_basic_gallery#slideshow/nextgen_basic_slideshow.css')); + // these are handled by extract() but I want to silence my IDE warnings that these vars don't exist $before_widget = NULL; $before_title = NULL; @@ -71,7 +75,7 @@ class C_Widget_Slideshow extends WP_Widget $title = apply_filters('widget_title', empty($instance['title']) ? __('Slideshow', 'nggallery') : $instance['title'], $instance, $this->id_base); - $out = $this->render_slideshow($instance['galleryid'], $instance['width'], $instance['height']); + $out = $this->render_slideshow($instance['galleryid'], $instance['width'], $instance['height'], $args); $parent->render_partial( 'photocrati-widget#display_slideshow', @@ -89,7 +93,7 @@ class C_Widget_Slideshow extends WP_Widget ); } - function render_slideshow($galleryID, $irWidth = '', $irHeight = '') + function render_slideshow($galleryID, $irWidth = '', $irHeight = '', $args) { $registry = C_Component_Registry::get_instance(); $renderer = $registry->get_utility('I_Displayed_Gallery_Renderer'); @@ -100,6 +104,7 @@ class C_Widget_Slideshow extends WP_Widget 'gallery_width' => $irWidth, 'gallery_height' => $irHeight, 'source' => 'galleries', + 'slug' => 'widget-' . $args['widget_id'], 'entity_types' => array('image'), 'show_thumbnail_link' => FALSE, 'ngg_triggers_display' => 'never' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/module.widget.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/module.widget.php index 7b2c4165dcca305378de7b7f35755179b1b307eb..c3c20a1b5ea742ab42c040f65b0f477fbf73201c 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/module.widget.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/module.widget.php @@ -15,7 +15,7 @@ class M_Widget extends C_Base_Module 'photocrati-widget', 'Widget', 'Handles clearing of NextGen Widgets', - '0.2', + '0.5', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/display_gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/display_gallery.php index 4374dcdf4cfc5c80c40d152ce322756c20d04041..0045e8ec55b43cc9c9c612042a367b299d94ab2d 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/display_gallery.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/display_gallery.php @@ -13,13 +13,13 @@ echo $settings['widget_setting_before_widget'] <?php // keep the following a/img on the same line ?> <div class="ngg-widget entry-content"> <?php foreach ($images as $image) { ?> - <a href="<?php echo esc_attr($storage->get_image_url($image))?>" + <a href="<?php echo esc_attr($storage->get_image_url($image, 'full', TRUE))?>" title="<?php echo esc_attr($image->description)?>" data-image-id='<?php echo esc_attr($image->pid); ?>' <?php echo $effect_code ?> ><img title="<?php echo esc_attr($image->alttext)?>" alt="<?php echo esc_attr($image->alttext)?>" - src="<?php echo esc_attr($storage->get_image_url($image, $settings['image_type'])); ?>" + src="<?php echo esc_attr($storage->get_image_url($image, $settings['image_type'], TRUE)); ?>" width="<?php echo esc_attr($settings['image_width']); ?>" height="<?php echo esc_attr($settings['image_height']); ?>" /></a> diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_gallery.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_gallery.php index 64e605e892f471ca1ec8c2958d8df6d24638788a..dcdd8ff51d25776156a503f6d3e1d8cf21b51a09 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_gallery.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_gallery.php @@ -1,7 +1,7 @@ <!-- title --> <p> <label for='<?php echo $self->get_field_id('title'); ?>'> - <?php _e('Title :', 'nggallery'); ?> + <?php _e('Title', 'nggallery'); ?>: <input id='<?php echo $self->get_field_id('title'); ?>' name='<?php echo $self->get_field_name('title');?>' type='text' @@ -12,7 +12,7 @@ <!-- count & source --> <p> - <?php _e('Show :', 'nggallery'); ?><br/> + <?php _e('Show', 'nggallery'); ?>:<br/> <label for='<?php echo $self->get_field_id('items'); ?>'> <input style='width: 50px;' id='<?php echo $self->get_field_id('items'); ?>' @@ -47,7 +47,7 @@ type='radio' value='recent' <?php checked('recent', $instance['type']); ?>/> - <?php _e('recent added ', 'nggallery'); ?> + <?php _e('recently added', 'nggallery'); ?> </label> </p> @@ -65,7 +65,7 @@ <!-- dimensions --> <p> - <?php _e('Width x Height :', 'nggallery'); ?><br/> + <?php _e('Width x Height', 'nggallery'); ?>:<br/> <?php $thumbnails_template_height_value = $height; $thumbnails_template_width_value = $width; @@ -73,14 +73,18 @@ $thumbnails_template_width_id = $self->get_field_id('width'); $thumbnails_template_height_name = $self->get_field_name('height'); $thumbnails_template_width_name = $self->get_field_name('width'); - include(path_join(NGGALLERY_ABSPATH, implode(DIRECTORY_SEPARATOR, array('admin', 'thumbnails-template.php')))); + include(implode(DIRECTORY_SEPARATOR, array( + rtrim(NGGALLERY_ABSPATH, "/\\"), + 'admin', + 'thumbnails-template.php' + ))); ?> </p> <!-- which galleries --> <p> <label for='<?php echo $self->get_field_id('exclude'); ?>'> - <?php _e('Select :', 'nggallery'); ?> + <?php _e('Select', 'nggallery'); ?>: <select id='<?php echo $self->get_field_id('exclude'); ?>' name='<?php echo $self->get_field_name('exclude'); ?>' class='widefat'> @@ -100,7 +104,7 @@ <!-- gallery ids --> <p> <label for='<?php echo $self->get_field_id('list'); ?>'> - <?php _e('Gallery ID :', 'nggallery'); ?> + <?php _e('Gallery ID', 'nggallery'); ?>: <input id='<?php echo $self->get_field_id('list'); ?>' name='<?php echo $self->get_field_name('list'); ?>' type='text' class='widefat' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_mediarss.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_mediarss.php index 8636f6bfb035176718413a4d1f4f73a0cd1f8638..d053317add97adf3ede86a7bed293b3dd1810501 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_mediarss.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_mediarss.php @@ -1,7 +1,6 @@ <p> <label for='<?php echo $self->get_field_id('title'); ?>'> - <?php _e('Title :', 'nggallery'); ?> - <br/> + <?php _e('Title', 'nggallery'); ?>:<br/> <input class='widefat' id='<?php echo $self->get_field_id('title'); ?>' name='<?php echo $self->get_field_name('title'); ?>' @@ -34,8 +33,7 @@ <p> <label for='<?php echo $self->get_field_id('mrss_text'); ?>'> - <?php _e('Text for Media RSS link:', 'nggallery'); ?> - <br/> + <?php _e('Text for Media RSS link', 'nggallery'); ?>:<br/> <input class='widefat' id='<?php echo $self->get_field_id('mrss_text'); ?>' name='<?php echo $self->get_field_name('mrss_text'); ?>' @@ -46,8 +44,7 @@ <p> <label for='<?php echo $self->get_field_id('mrss_title'); ?>'> - <?php _e('Tooltip text for Media RSS link:', 'nggallery'); ?> - <br/> + <?php _e('Tooltip text for Media RSS link', 'nggallery'); ?>:<br/> <input class='widefat' id='<?php echo $self->get_field_id('mrss_title'); ?>' name='<?php echo $self->get_field_name('mrss_title'); ?>' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_slideshow.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_slideshow.php index f03dac65eeb7cd886ec32658580ccb3ab1db159c..a6073b70b12a25874ac5fe17144f90015bf9d989 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_slideshow.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/widget/templates/form_slideshow.php @@ -1,6 +1,6 @@ <p> <label for='<?php echo $self->get_field_id('title'); ?>'> - <?php _e('Title:'); ?> + <?php _e('Title', 'nggallery'); ?>: </label> <input class='widefat' @@ -12,7 +12,7 @@ <p> <label for='<?php echo $self->get_field_id('galleryid'); ?>'> - <?php _e('Select Gallery:', 'nggallery'); ?> + <?php _e('Select Gallery', 'nggallery'); ?>: </label> <select size='1' @@ -37,7 +37,7 @@ <p> <label for='<?php echo $self->get_field_id('height'); ?>'> - <?php _e('Height:', 'nggallery'); ?> + <?php _e('Height', 'nggallery'); ?>: </label> <input id='<?php echo $self->get_field_id('height'); ?>' @@ -49,7 +49,7 @@ <p> <label for='<?php echo $self->get_field_id('width'); ?>'> - <?php _e('Width:', 'nggallery'); ?> + <?php _e('Width', 'nggallery'); ?>: </label> <input id='<?php echo $self->get_field_id('width'); ?>' diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/adapter.wordpress_router.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/adapter.wordpress_router.php index 76b181614ee0b3e7a8e3347b934eaebc3b9ffd3b..e8c993faaf4e39f9de501c8ef04c7005d89d623b 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/adapter.wordpress_router.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/adapter.wordpress_router.php @@ -2,14 +2,14 @@ class A_WordPress_Router extends Mixin { - var $_site_url = FALSE; - var $_home_url = FALSE; - function initialize() { // Set context to path if subdirectory install - $parts = parse_url($this->object->get_base_url()); - if (isset($parts['path'])) $this->object->context = $parts['path']; + $parts = parse_url($this->object->get_base_url(FALSE)); + if (isset($parts['path'])) { + $parts = explode('/index.php', $parts['path']); + $this->object->context = array_shift($parts); + } $this->object->add_post_hook( @@ -56,39 +56,29 @@ class A_WordPress_Router extends Mixin return $retval; } + function _add_index_dot_php_to_url($url) + { + if (strpos($url, '/index.php') === FALSE) { + $pattern = get_option('permalink_structure'); + if (!$pattern OR strpos($pattern, '/index.php') !== FALSE) { + $url = $this->object->join_paths($url, '/index.php'); + } + } + + return $url; + } + function get_base_url($site_url = FALSE) { $retval = NULL; if ($site_url) - { - if (!$this->_site_url) { - $this->_site_url = site_url(); - $pattern = get_option('permalink_structure'); - if (!$pattern OR strpos($pattern, '/index.php') !== FALSE) { - $this->_site_url = $this->object->join_paths( - $this->_site_url, '/index.php' - ); - } - } - $retval = $this->_site_url; - } - else { - if (!$this->_home_url) { - $this->_home_url = home_url(); - $pattern = get_option('permalink_structure'); - if (!$pattern OR strpos($pattern, '/index.php') !== FALSE) { - $this->_home_url = $this->object->join_paths( - $this->_home_url, '/index.php' - ); - } - } - $retval = $this->_home_url; - } - - if ($this->object->is_https()) { - $retval = preg_replace('/^http:\\/\\//i', 'https://', $retval, 1); - } + $retval = $this->_add_index_dot_php_to_url(site_url()); + else + $retval = $this->_add_index_dot_php_to_url(home_url()); + + if ($this->object->is_https()) + $retval = preg_replace('/^http:\\/\\//i', 'https://', $retval, 1); return $retval; } diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/adapter.wordpress_routing_app.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/adapter.wordpress_routing_app.php index 26f50c15c8b72a7959997315fccfaef2fa5c52b7..07d3546640b8223f8c23b99e337e8eae3cbede3e 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/adapter.wordpress_routing_app.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/adapter.wordpress_routing_app.php @@ -4,59 +4,96 @@ class A_WordPress_Routing_App extends Mixin { function remove_parameter($key, $id=NULL, $url=FALSE) { - $generated_url = $this->call_parent('remove_parameter', $key, $id, $url); - - if ($this->is_postname_required_in_url()) { - $generated_url = $this->object->add_post_permalink_to_url($generated_url); - } + $generated_url = $this->call_parent('remove_parameter', $key, $id, $url); + $generated_url = $this->object->add_post_permalink_to_url($generated_url); return $generated_url; } - function is_postname_required_in_url() - { - global $wp_query; - return !$wp_query->is_single() && in_the_loop(); - } - function parse_url($url) { $parts = parse_url($url); - if (!isset($parts['path'])) { - $base_parts = parse_url($this->object->get_router()->get_base_url()); - if (!isset($base_parts['path'])) $base_parts['path'] = '/'; - $parts['path'] = $base_parts['path']; - } + if (!isset($parts['path'])) $parts['path'] = '/'; if (!isset($parts['query'])) $parts['query'] = ''; return $parts; } - + /** + * Adds the post permalink to the url, if it isn't already present. + * + * The generated_url could look like: + * http://localhost/dir/nggallery/show/slideshow + * @param $generated_url + * @return mixed + */ function add_post_permalink_to_url($generated_url) { - $post_parts = $this->parse_url(get_permalink()); - $generated_parts = $this->parse_url($generated_url); + $base_url = $this->object->get_router()->get_base_url(); + $settings = C_NextGen_Settings::get_instance(); + if (strlen($generated_url) < 2) $generated_url = $base_url; + + $original_url = $generated_url; + $generated_parts = explode($settings->router_param_slug, $generated_url); + $generated_url = $generated_parts[0]; + $ngg_parameters = isset($generated_parts[1]) ? @array_shift(explode('?', $generated_parts[1])) : '/'; + $post_permalink = get_permalink(isset($_REQUEST['p']) ? $_REQUEST['p'] : 0); + if ($post_permalink == '/') $post_permalink = $base_url; + + // Trailing slash all of the urls + $original_url = trailingslashit($original_url); + $post_permalink = trailingslashit($post_permalink); + $generated_url = trailingslashit($generated_url); - // Combine querystrings - $generated_parts['query'] = $this->object->join_querystrings( - $post_parts['query'], $generated_parts['query'] - ); + // We need to determine if the generated url and the post permalink TRULY differ. If they + // differ, then we'll return post_permalink + nggallery parameters appended. Otherwise, we'll + // just return the generated url + $generated_url = str_replace($base_url, home_url(), $generated_url); + $generated_parts = $this->parse_url($generated_url); + $post_parts = $this->parse_url($post_permalink); + $generated_parts['path'] = trailingslashit($generated_parts['path']); + if (isset($generated_parts['query'])) + $generated_parts['query'] = untrailingslashit($generated_parts['query']); + $post_parts['path'] = trailingslashit($post_parts['path']); + if (isset($post_parts['query'])) + $post_parts['query'] = untrailingslashit($post_parts['query']); - // Combine paths - $generated_parts['path'] = $this->object->join_paths($post_parts['path'], $generated_parts['path']); + $generated_url = $this->object->construct_url_from_parts($generated_parts); + $post_permalink = $this->object->construct_url_from_parts($post_parts); - return $this->object->construct_url_from_parts($generated_parts); + // No change required... + if ($generated_url == $post_permalink) { + $generated_url = $original_url; + + // Ensure that the generated url has the real base url for default permalinks + if (strpos($generated_url, home_url()) !== FALSE && strpos($generated_url, $base_url) === FALSE) { + $generated_url = str_replace(home_url(), $base_url, $generated_url); + } + } + + // The post permalink differs from the generated url + else { + $post_permalink = str_replace(home_url(), $base_url, $post_permalink); + $post_parts = $this->parse_url($post_permalink); + $post_parts['path'] = $this->object->join_paths($post_parts['path'], $settings->router_param_slug, $ngg_parameters); + $generated_url = $this->object->construct_url_from_parts($post_parts); + } + + return $generated_url; } function passthru() { - $_SERVER['ORIG_REQUEST_URI'] = $this->object->get_router()->get_request_uri(); - $_SERVER['REQUEST_URI'] = trailingslashit( - $this->object->strip_param_segments( - $this->object->get_router()->get_request_uri() - ) - ); + $router = C_Router::get_instance(); + + $_SERVER['ORIG_REQUEST_URI'] = $_SERVER['REQUEST_URI']; + + // TODO: Verify that we only need to do this on Windows + $base_parts = parse_url($router->get_base_url()); + $_SERVER['UNENCODED_URL'] = $_SERVER['HTTP_X_ORIGINAL_URL'] = $_SERVER['REQUEST_URI'] = '/'.trailingslashit($router->join_paths( + (!empty($base_parts['path']) ? $base_parts['path'] : ''), + $this->object->strip_param_segments($router->get_request_uri()) + )); } } \ No newline at end of file diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php index 46361784da007206a4ce1004402f34b07bd2a847..a981f0da5770c86eba7a1e65f9b41e3d2fc56ae4 100644 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/modules/wordpress_routing/module.wordpress_routing.php @@ -14,7 +14,7 @@ class M_WordPress_Routing extends C_Base_Module 'photocrati-wordpress_routing', 'WordPress Routing', "Integrates the MVC module's routing implementation with WordPress", - '0.2', + '0.5', 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' @@ -29,14 +29,26 @@ class M_WordPress_Routing extends C_Base_Module function _register_hooks() { + remove_action( 'template_redirect', 'wp_old_slug_redirect'); + remove_action( 'template_redirect', 'redirect_canonical'); add_action('template_redirect', array(&$this, 'restore_request_uri'), 1); } - function restore_request_uri() + /** + * When WordPress sees a url like http://foobar.com/nggallery/page/2/, it thinks that it is an + * invalid url. Therefore, we modify the request uri before WordPress parses the request, and then + * restore the request uri afterwards + */ + function restore_request_uri() { if (isset($_SERVER['ORIG_REQUEST_URI'])) { - $_SERVER['REQUEST_URI'] = $_SERVER['ORIG_REQUEST_URI']; + $request_uri = $_SERVER['ORIG_REQUEST_URI']; + $_SERVER['UNENCODED_URL'] = $_SERVER['HTTP_X_ORIGINAL_URL'] = $_SERVER['REQUEST_URI'] = $request_uri; } + else { + wp_old_slug_redirect(); + redirect_canonical(); + } } function get_type_list() diff --git a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/product.photocrati_nextgen.php b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/product.photocrati_nextgen.php old mode 100644 new mode 100755 index 06c4f3688d07a291fa989fabcbd6c0e8b259159d..a3219743b923484f4a37259d4ea95bb6f23cbbe4 --- a/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/product.photocrati_nextgen.php +++ b/wp-content/plugins/nextgen-gallery/products/photocrati_nextgen/product.photocrati_nextgen.php @@ -1,23 +1,24 @@ <?php /*** - { - Product: photocrati-nextgen - } -***/ +{ +Product: photocrati-nextgen +} + ***/ -define('NEXTGEN_GALLERY_CHANGE_OPTIONS_CAP', 'NextGEN Manage gallery'); +define('NGG_CHANGE_OPTIONS_CAP', 'NextGEN Manage gallery'); class P_Photocrati_NextGen extends C_Base_Product { static $modules = array( 'photocrati-fs', + 'photocrati-i18n', 'photocrati-validation', 'photocrati-router', 'photocrati-wordpress_routing', 'photocrati-security', 'photocrati-lzw', - 'photocrati-nextgen_settings', + 'photocrati-nextgen_settings', 'photocrati-mvc', 'photocrati-ajax', 'photocrati-dynamic_stylesheet', @@ -33,7 +34,6 @@ class P_Photocrati_NextGen extends C_Base_Product 'photocrati-attach_to_post', 'photocrati-nextgen_other_options', 'photocrati-nextgen_pro_upgrade', - 'photocrati-jsconsole', 'photocrati-mediarss', 'photocrati-cache', 'photocrati-lightbox', @@ -44,7 +44,7 @@ class P_Photocrati_NextGen extends C_Base_Product 'photocrati-nextgen_basic_tagcloud', 'photocrati-nextgen_basic_album', 'photocrati-widget', - 'photocrati-third_party_compat', + 'photocrati-third_party_compat', 'photocrati-nextgen_xmlrpc' ); @@ -54,13 +54,13 @@ class P_Photocrati_NextGen extends C_Base_Product 'photocrati-nextgen', 'Photocrati NextGEN', 'Photocrati NextGEN', - '2.0.33', + NGG_PLUGIN_VERSION, 'http://www.nextgen-gallery.com', 'Photocrati Media', 'http://www.photocrati.com' ); - $module_path = path_join(dirname(__FILE__), 'modules'); + $module_path = implode(DIRECTORY_SEPARATOR, array(dirname(__FILE__), 'modules')); $this->get_registry()->set_product_module_path($this->module_id, $module_path); $this->get_registry()->add_module_path($module_path, TRUE, FALSE); diff --git a/wp-content/plugins/nextgen-gallery/readme.txt b/wp-content/plugins/nextgen-gallery/readme.txt index ef6c4812d70ba6f9ab262afdc15642540181f972..c3458c90ca64fee1d489a37915c0a291062b96ef 100644 --- a/wp-content/plugins/nextgen-gallery/readme.txt +++ b/wp-content/plugins/nextgen-gallery/readme.txt @@ -1,18 +1,18 @@ === NextGEN Gallery === Contributors: photocrati Tags:gallery,image,images,photo,photos,picture,pictures,slideshow,flash,media,thumbnails,photo-albums,nextgen-gallery,nextgen -Requires at least: 3.6 -Tested up to: 3.6 +Requires at least: 3.6.1 +Tested up to: 3.9.0 Stable tag: trunk License: GPLv2 -The most popular WordPress gallery plugin and one of the most popular plugins of all time with over 7.5 million downloads. +The most popular WordPress gallery plugin and one of the most popular plugins of all time with over 9 million downloads. == Description == = WordPress Gallery Plugin = -NextGEN Gallery is the most popular **WordPress gallery plugin**, and one of the most popular WordPress plugins of all time, with over 7.5 million downloads. +NextGEN Gallery is the most popular **WordPress gallery plugin**, and one of the most popular WordPress plugins of all time, with over 9 million downloads. It provides a powerful engine for uploading and managing galleries of images, with the ability to batch upload, import meta data, add/delete/rearrange/sort images, edit thumbnails, group galleries into albums, and more. It also provides two front-end display styles (slideshows and thumbnail galleries), both of which come with a wide array of options for controlling size, style, timing, transitions, controls, lightbox effects, and more. @@ -112,7 +112,7 @@ If you do want to work with shortcodes, we've also introduce a new, more powerfu **<a href="http://www.nextgen-gallery.com/nextgen-gallery-shortcodes">Learn About NextGEN Gallery 2.0 Shortcodes</a>** -Legacy shortcodes? For reference, we're also maintaining documentation on NextGEN Legacy shortcakes used in NextGEN 1.9.x and earlier. <a href="http://www.nextgen-gallery.com/shortcodes">See more on Legacy shortcakes</a>. +Legacy shortcodes? For reference, we're also maintaining documentation on NextGEN Legacy shortcodes used in NextGEN 1.9.x and earlier. <a href="http://www.nextgen-gallery.com/shortcodes">See more on Legacy shortcodes</a>. For more information, feel free to visit the official website for the NextGEN Gallery <a href="http://www.nextgen-gallery.com" target="_blank">WordPress Gallery Plugin</a>. @@ -199,6 +199,150 @@ For more information, feel free to visit the official website for the NextGEN Ga == Changelog == += V2.0.63 - 04.29.2014 = +* NEW: Translation ready +* NEW: Including German translation by Roland Stumpp +* NEW: Including Czech translation by Separatista +* NEW: Including Finnish translation by Vesa Tiirikainen +* NEW: WPML / qTranslate support +* NEW: Bundled Browser+ JavaScript library +* NEW: Added NGG_DISABLE_FILTER_THE_CONTENT constant to manage conflicts +* Changed: Moved jquery.nextgen_radio_toggle.js to NextGEN Admin Module +* Changed: Original display settings are passed to secondary display types +* Fixed: Thumbnail dimension calculations are inaccurate by 1px when maintaining aspect ratio +* Fixed: Copy IPTC data from original to new image when creating new sizes / thumbnails +* Fixed: Use correct absolute path when importing images in a multisite environment +* Fixed: Incorrect display of disk space quotas in multisite environments +* Fixed: Removed redundant roles form in multisite environments +* Fixed: Insert Gallery Window support for multisite environments +* Fixed: Incorrect handling of NextGEN Styles in multisite environments +* Fixed: Not honouring NGG_IMPORT_ROOT constant +* Fixed: Fixed inability to edit gallery properties using XMLRPC's edit_gallery method +* Fixed: Alignment issues in Basic Compact Albums caused by subalbums not displaying image 'counter' +* Fixed: Display setting forms compatibility issue with WordPress 3.9 +* Fixed; Compability with jQuery Dialogs in WordPress 3.9 +* Fixed: Maximum entity code should be a displayed gallery property for recent/random sources only +* Fixed: Problems with zlib compression: https://core.trac.wordpress.org/ticket/18525 +* Fixed: Support for web servers which use a document root of '//' +* Fixed: Compatibility with WPML Translation Management +* Fixed: use 'del' for function name in ngg_store.js, 'delete' is a reserved keyword +* Fixed: Enqueue fontawesome only when necessary +* Fixed: Suhosin compatibility issue when overriding PHP memory limit +* Fixed: Handle images of wrong image type correctly when trying to create cropped thumbnails +* Fixed: Datamapper entities not allowed to have properties with a value of 0 +* Fixed: Resource manager is manipulating feeds +* Fixed: Convert absolute urls to relative urls for lightboxes +* Fixed: Start the resource manager as early as we can within the init action +* Fixed: Routing problem for galleries with images named 1.jpg, 2.jpg, 3.jpg, etc. +* Fixed: Added tooltips to basic slideshow settings +* Fixed: Remove CKEditor's NextGEN button, which is incompatible with NextGEN Gallery 2.x + += V2.0.61 - 04.01.2014 = +* Fixed: Compatibility with WP 3.9 +* Fixed: Exception thrown when using Reset button + += V2.0.59 - 03.18.2014 = +* Changed: Separated pope_module_list from ngg_options record in options table +* Fixed: Removed code causing jQuery compatibility issues in WP Admin +* Fixed: Allow third-parties to override jQuery with Google's CDN +* Fixed: When resetting the 'jquery' handle, ensure that jquery-migrate is a dependency +* Fixed: Silenced many PHP warnings +* Fixed: Datamapper->count() not returning the correct count +* Fixed: Compatibility with Gravity Forms + += V2.0.58 - 03.09.2014 = +* Fixed: Reset jQuery to WP defaults when modified by a third-party +* Fixed: Compatibility with WP jQuery Lightbox plugin +* Fixed: Compatibility with Peekaboo theme + += V2.0.57 - 03.05.2014 = +* NEW: Re-introduced the Reset button +* NEW: Tooltip added for Page Link to functionality +* NEW: Displayed Gallery Triggers moved from NextGEN Pro to NextGEN Gallery (not in use) +* NEW: Added NGG_Store, a client-side persistence layer (not in use) +* NEW: Added NGG_CRON_SCHEDULE constant. Set to the number of seconds between the execution of NextGEN Gallery cron jobs +* NEW: Added NGG_RENDERING_CACHE_TTL constant. TTL measured in seconds. +* NEW: Added NGG_DISPLAYED_GALLERY_CACHE_TTL constant. TTL measured in seconds. +* NEW: Added NGG_DISABLE_LEGACY_SHORTCODES constant. When TRUE, [slideshow] becomes [nggslideshow]. +* NEW: Added Font Awesome, available for NextGEN Gallery extensions +* Changed: Transients are removed every 30 minutes instead of 60 minutes +* Changed: Admin Page & Form components refactored to allow custom POST processing +* Changed: Default path for NEW multisite installations to wp-content/uploads/sites/%BLOG_ID%/nggallery/ +* Fixed: Ability to upload ZIP files on Windows hosts +* Fixed: Support for filenames with non-ASCII characters +* Fixed: Dynamic updates in the Attach to Post interface (interframe communication) +* Fixed: Attach to Post interface freezing in IE11 +* Fixed: Path issues on Windows Servers +* Fixed: Module installer integrity +* Fixed: Database query performance. No more joins to the WP options table +* Fixed: Lightboxes storing absolute paths for static resources +* Fixed: Displayed gallery cache not regularly flushed +* Fixed: SQL query performance problems. Honor max_packet_allowed variable for MySQL +* Fixed: Multiple database queries generated for determining next available image slug +* Fixed: Corrupted MediaRSS feeds +* Fixed: Padding on Gallery Settings and Other Options pages +* Fixed: Routing issues on subdirectory installs +* Fixed: Importing galleries using the Attach to Post Interface +* Fixed: Gallery path calculations on Windows web servers +* Fixed: Sub-album urls not processed correctly +* Fixed: Apply maximum entity count to existing displayed galleries +* Fixed: NextGEN Gallery Thumbnail Widget shouldn't use ImageBrowser effect +* Fixed: Ability to set shuffle parameter for ImageRotator slideshows +* Fixed: PHP warning about HTMLDocument when displaying a SinglePic +* Fixed: Sanitization of gallery title +* Fixed: Home URL now used instead of Site URL in MediaRSS feed +* Fixed: Attach to Post interface broken when WPML is installed +* Fixed: Attach to Post interface instructing browser to cache the page +* Fixed: Watermarking not working in low-memory environments +* Fixed: Maximum images limit not being applied for galleries already created. +* Fixed: Double forward slashes in static urls +* Fixed: Don't sleep when checking if the installer is running +* Fixed: Don't enforce Pope interface contracts +* Fixed: Remove custom table extra records from wp_options table +* Fixed: Scan folder for new images not working +* Fixed: Incorrect page permalink used for "Page Link To" functionality +* Fixed: Pagination broken when Basic Thumbnail gallery on the same page as Basic Album +* Fixed: parse_url() warnings generated for PHP 5.3.3 and earlier +* Fixed: Compatibility with Headway Themes +* Fixed: Compatibility with web servers which don't provide PHP a document root +* Fixed: Third-party incompatibilities caused by the Photocrati Resource Manager +* Fixed: Compatibility with the Flattr plugin +* Fixed: Compatibility with the Weaver II theme +* Fixed: Interface tweaks for WordPress 3.8 + += V2.0.40 - 11.26.2013 = +* NEW: Added the ability to apply lightbox effects to non-NGG images +* NEW: Added NGG_HIDE_STRICT_ERRORS constant. Define and set to TRUE to hide strict errors +* NEW: Added NGG_IMPORT_ROOT constant. Define and set to TRUE to browse from a custom directory +* NEW: Added NGG_DEBUG constant. Define and set to TRUE to display helpful messages for debugging +* NEW: Each custom table record will have an associated custom post record for expansion +* NEW: Display helpful error messages when there's a problem uploading images +* NEW: Add data-(src|thumbnail|image-id|title|description) attribute to gallery image anchors +* NEW: Variant support for displayed gallery sources. Random images is limited to 5 variations +* Fixed: Excessive creation of transients for random galleries +* Fixed: Many issues prohibiting the ability to upload images +* Fixed: Compatibility with NextGEN Gallery Export Plugin for Adobe Lightroom (thanks Vladimir!) +* Fixed: Sorting in the Attach to Post interface +* Fixed: HTML allowed in gallery/album descriptions +* Fixed: Requests for galleries within albums that have numeric names are broken +* Fixed: Call to a non-member function get() on WP_Query +* Fixed: Ability to sort by Image ID in the Attach to Post interface +* Fixed: Isolate the Attach to Post from implicit third-party script inclusion +* Fixed: Check for the existance of thumbnails when generating urls, and if missing, generate new ones +* Fixed: Compatibility with NextGEN Facebook OpenGraph+ plugin +* Fixed: Various XML-RPC issues +* Fixed: Widgets stylesheet not included +* Fixed: Issue with color not being pre-selected when previewing Watermark +* Fixed: E_NOTICE emitted when cleaning up cached image files +* Fixed: E_NOTICE emitted when viewing display type settings +* Fixed: Typo adjusting pcre.backtrack_limit for shortcodes +* Fixed: Content within the tabs of the Attach to Post interface cut-off +* Fixed: Routing problem which would cause conflicts with different display types on the same page +* Fixed: Broken Dynamic CSS links on GoDaddy +* Fixed: Ability to use HTML in gallery/album descriptions +* Fixed: Sub-album requests conflicting with paginated galleries on the same page +* Merged: Pull request from andreasE (https://bitbucket.org/photocrati/nextgen-gallery/pull-request/6/) + = V2.0.33 - 10.21.2013 = * NEW: Requests /ngg_tag/[tagname] will create a displayed gallery * NEW: Option added to "Import Gallery" tab to use original images