PK!Llii readme.txtnu[=== My YouTube Channel === Contributors: urkekg, techwebux Donate link: https://urosevic.net/wordpress/donate/?donate_for=youtube-channel Tags: youtube, channel, playlist, widget, video Requires at least: 5.3 Tested up to: 6.7.1 Stable tag: 3.25.2 Requires PHP: 7.4 License: GPLv3 License URI: http://www.gnu.org/licenses/gpl-3.0.html Show video thumbnails or playable video block of recent YouTube Playlist, Channel (User Uploads) videos. == Description == Add **My YouTube Channel** widget to the widget area or shortcode to post/page content, set **Channel ID** or **Playlist ID**, chose resource to use and keep defaults for all other options. And voila! You will get the latest video from chosen YouTube channel or playlist. **IMPORTANT** My YouTube Channel does not support **Live Streams** and does not have Gutenberg Block. Use **Shortcode Block** or **Classic Block** to insert shortcode to page/post content. If you like our plugin and find it useful, please [write a review and rate it](https://wordpress.org/support/view/plugin-reviews/youtube-channel). For a manually picked set of videos from YouTube, check out [Easy YouTube Gallery](https://wordpress.org/plugins/easy-youtube-gallery/). = Features = * Show latest videos from My YouTube Channel (ordered in reverse chronological order related to the creation date), or from Playlist * Option to get a random video from any of two resources * Responsive (one full-width video per row) or non-responsive * Preferred aspect ratio relative to width (16:9 and 4:3) * Custom width for video embeded object (default is 306px) * Four modes to display video: **thumbnail** (`default`), **HTML5** (`iframe`), **HTML5 Asynchronous** (`iframe2`) abd **Playlist Embed** (`playlist`) * Thumbnail mode opens the video in lightbox * [NEW] Optionally store thumbnail images locally for improved speed performance and cache policy * Enhanced Privacy - please note that display mode **HTML5 (IFRAME) Asynchronous** (shortcode parameter `iframe2`) does not support Enhanced Privacy due to YouTube API limitations * Hide or show video title above/below/inside video wrapped to HTML tag by your choice (h3, h4, h5, span or div) * Custom feed caching timeout * Optional video autoplay with optional muted audio * (Optional) *TinyMCE button* on post/page edit (can be disabled on General plugin settings page), which open a shortcode GUI generator to help you build a shortcode * Show link to channel/handle below videos (vanity and legacy username are deprecated since v3.23.0) * Final look is highly customisable thanks to classes for each element of YTC block! = Requirements = For a fully functional plugin, PHP 7.4 or newer has required! If you use older PHP, we highly recommend you request from your developer, server support or hosting company to update PHP to a secure version. = Styling = Use Customizer, `style.css` from the child theme or [Head & Footer Code](https://wordpress.org/plugins/head-footer-code/) plugin to custom style and tweak the look and feel of the My YouTube Channel blocks. You can utilise the following classes: * `.widget_youtube-channel` – class of whole widget (parent for widget title and YTC block) * `.youtube_channel` – YTC block wrapper class. Additional classes are available: * `.default` – for non-responsive block * `.responsive` – when you have enabled responsive option * `.ytc_title` – class for video title container above thumbnail/video object * `.ytc_title_above` – additional class for video title above video/thumbnail * `.ytc_title_below` – additional class for video title below video/thumbnail * `.ytc_title_inside` – additional class for video title printed inside of the thumbnail * `.ytc_title_inside_bottom` – additional class for bottom aligned video title printed inside of the thumbnail * `.ytc_video_container` – class of container for single item, plus: * `.ytc_video_1`, `.ytc_video_2`, … – class of container for single item with ordering number of item in widget * `.ytc_video_first` – class of first container for single item * `.ytc_video_mid` – class of all other containers for single item * `.ytc_video_last` – class of last container for single item * `.ar16_9` – class for Aspect Ratio 16:9 * `.ar4_3` – class for Aspect Ration 4:3 * `.ytc_thumb` – class of anchor for Thumbnail mode * `.fluid-width-video-wrapper` – class for parent element of IFRAME for enabled responsive * `.ytc_description` – class for video description text below thumbnail/video object * `.ytc_link` – class of container for link to channel = Known Issues = * Video title and description for embedded playlist mode do not work. * Removing the YouTube logo from the playback control bar does not work for all videos. * Autoplay does not work always If WordFence or other malware scan tool detect My YouTube Channel file `youtube-channel.php` as a potential risk because `base64_encode()` and `base64_decode()` functions, remember that we use this two functions to store and restore JSON feeds to transient cache, so potential detection is false positive. = Credits = * For playing videos in lightbox we use [Bigger Picture](https://github.com/henrygd/bigger-picture). = Shortcode = Along with Widget, you can add My YouTube Channel block inline by using shortcode `[youtube_channel]`. Default plugin parameters will be used for shortcode, but you can customize all parameters per shortcode. **General Settings** * `class` (string) Set custom class if you wish to target special styling for specific YTC block * `channel` (string) ID of preferred YouTube channel. Do not set full URL to channel, but just last part from URL - ID (name) * `handle` (string) defined custom handle from [YouTube handle](https://www.youtube.com/handle) * `vanity` (string) **DEPRECATED** part after www.youtube.com/c/ from [Custom URL](https://support.google.com/youtube/answer/2657968?hl=en) * `username` (string) **DEPRECATED** Optional legacy YouTube username. * `playlist` (string) ID of preferred YouTube playlist. * `resource` (int) Resource to use for feed: * `0` Channel (User uploads) * `1` **DEPRECATED** Favorites (for defined channel) * `2` Playlist * `3` **DEPRECATED** Liked Videos * `cache` (int) Period in seconds for caching feed. You can disable caching by setting this option to 0, but if you have a lot of visits, consider at least short caching (couple minutes). * `fetch` (int) Number of videos that will be used as stack for random pick (min 2, max 50) * `num` (int) Number of videos to display per YTC block. * `random` (bool) Option to randomize videos on every page load. **Video Settings** * `ratio` (int) Set preferred aspect ratio for thumbnail and video. You can use: * `3` 16:9 (widescreen) * `1` 4:3 * `responsive` (bool) Distribute one full width video per row. * `width` (int) Width of thumbnail and video in pixels. * `display` (string) Object that will be used to represent video. We have couple predefined options: * `thumbnail` Thumbnail will be used and video will be loaded in lightbox. (default) * `iframe` HTML5 (iframe) * `iframe2` HTML5 (iframe) with asynchronous loading - recommended * `playlist` Embedded playlist (same behaviour as old function `only_pl`) * `thumb_quality` (string) Define image quality for thumbnail display mode. Default is `hqdefault`, available: * `default` Default Quality (120x90px) * `mqdefault` Medium Quality (320x180px) * `hqdefault` High Quality (480x360px) * `sddefault` Standard Definition (640x480px) * `maxresdefault` Maximum Resolution (1280x720px) * `no_thumb_title` (bool) By default YouTube thumbnail will have tooltip with info about video title and date of publishing. By setting this option to 1 or true you can hide tooltip * `themelight` (bool) By default YouTube have dark play controls theme. By setting this option to 1 or true you can get light theme in player (HTML5 and Flash) * `controls` (bool) Set this option to 1 or true to hide playback controls. * `autoplay` (bool) Enable autoplay of first video in YTC video stack by setting this option to 1 or true * `mute` (bool) Set this option to 1 or true to mute videos set to autoplay on load * `norel` (bool) Set this option to 1 or true to hide related videos after finished playbak * `nobrand` (bool) Set this option to 1 or true to hide YouTube logo from playback control bar * `nolightbox` (bool) Set this option to 1 or true to prevent YTC block with thumbnail to open in lightbox. If you have other plugin that trigger youtube links for lightbox, that one will steal links from this YTC block. * `target` (string) If you enable nolightbox for specific YTC block, you can force opening of thumbnail links in new tab/window if you set this shortcode option to `_blank` like `target="_blank"`. **Content Layout** * `showtitle` (string): * `none` - Hide title * `above` - Display title above video/thumbnail * `below` - Display title below video/thumbnail * `inside` - Display top aligned title inside thumbnail; if `display` is not `thumbnail` then treat as `above` * `inside_b` - Display bottom aligned title inside thumbnail; if `display` is not `thumbnail` then treat as `below` * `titletag` - Video title HTML tag to wrap title (H3, H4, H5, div, span, strong, etc) * `showdesc` (bool) Set to 1 or true to show video description. * `desclen` (int) Set number of characters to cut down length of video description. Set to 0 to use full length description. * `noinfo` (bool) Set to 1 or true to hide overlay video infos (from embedded player) * `noanno` (bool) Set to 1 or true to hide overlay video annotations (from embedded player) **Link to Channel** * `goto_txt` (string) * `popup` (int) Control where link to channel will be opened: * `0` open link in same window * `1` **DEPRECATED** open link in new window with JavaScript * `2` open link in new window with target="_blank" anchor attribute * `link_to` (string) URL to link: * `none` Hide link (defult) * `handle` YouTube handle URL * `channel` Channel page * `vanity` **DEPRECATED** Vanity custom URL * `legacy` **DEPRECATED** Legacy username page *Please note, to enhance plugin functionality, we can change or deprecate some shortcode parameters in future.* == Filter hooks == You can modify final output of video block by hooking to filter `ytc_print_video`. Four parameters are provided: * `video_content` – HTML of original video block * `item` – YouTube video object which contains: * `snippet->publishedAt` – date of publishing YouTube video * `shippet->title` – YouTube video title * `shippet->description` – YouTube video description * `snippet->resourceId->videoId` – YouTube video ID * `instance` – Current My YouTube Channel Block parameters, including global settings: * `handle` * `channel` * `vanity` **DEPRECATED** * `username` **DEPRECATED** * `playlist` * `resource` * `cache` * `fetch` * `num` * `skip` * `privacy` * `ratio` * `width` * `responsive` * `display` * `fullscreen` * `controls` * `autoplay` * `autoplay_mute` * `norel` * `playsinline` * `showtitle` * `titletag` * `showdesc` * `desclen` * `modestbranding` * `hideanno` * `goto_txt` * `popup_goto` * `link_to` * `tinymce` * `nolightbox` * `apikey` * `thumb_quality` * `timeout` * `random` * `no_thumb_title` * `class` * `target` * `y` – order number of video (`1` for first, `2` for second, etc) Example: `add_filter( 'ytc_print_video', 'customized_ytc_print_video', 10, 4 ); function customized_ytc_print_video( $video_block, $item, $instance, $y ) { // Do whatever you wish to do // ... return $video_block; }` == Installation == Use **Plugins / Add New** in WordPress or install the plugin manually: 1. With your FTP program (eg. FileZilla) upload content of unzipped `youtube-channel` directory to the `wp-content/plugins/` directory on the server. 1. Activate the plugin on the **Plugins / Installed Plugins** page in WordPress 1. Enter **YouTube Data API Key** on **Settings / My YouTube Channel** page. 1. Add **My YouTube Channel** widget to the sidebar 1. Set **Channel ID** in plugin settings, widget or shortcode If you have to upgrade manually, repeat the installation steps and re-enable the plugin. = YouTube Data API Key = To make My YouTube Channel work you have to generate [YouTube Data API Key v3](https://developers.google.com/youtube/v3/getting-started) and insert it to General plugin settings. Learn more about [Obtaining authorization credentials](https://developers.google.com/youtube/registering_an_application) and for detailed instructions on how to generate your own API Key follow instructions below. 1. Visit [Google Cloud Platform](https://console.cloud.google.com/cloud-resource-manager). 1. If you don't have any project, create a new one (click on **CREATE PROJECT**). Set the **Project name** so you can recognize it later (for example **My WordPress Website**). Then click the **CREATE** button and wait until Google create the project. 1. On the popup click **SELECT PROJECT** and from the left-hand side Navigation menu go to **APIs and Services** -> **Enabled APIs and services** 1. Search for **YouTube Data API v3** and click on it, then click the **ENABLE** button. 1. From the left-hand side Navigation menu go to **APIs and services** -> **Credentials**. 1. From the **+ CREATE CREDENTIALS** drop-down menu select **API key** 1. As soon as the API key gets created -> **CLOSE** popup. 1. Click on newly created key in the **API keys** table 1. On **Edit API key** screen define recognizable key **Name** (eg. YouTube API key for my website) 1. Within section **Set an application restrictio** select option **IP addresses** 1. Under section **IP address restrictions** click **ADD** -> enter your server IP (make sure you enter proper IP or you'll get **Oops, something went wrong.** error message) -> click **DONE**. 1. Under section **API restrictions** select option **Restrict key** -> click **Select APIs** dropdown -> chose option **YouTube Data API v3** -> OK 1. When you finish, **SAVE** changes 1. On **API keys** table click **SHOW KEY** and then **Copy to Clipboard** icon on the right hand side of the *Your API key* field 1. In WordPress go to **Settings** -> **My YouTube Channel** -> **General** and paste API key in to field **YouTube Data API Key**. Don't forget to check and update **Channel ID** in the plugin's General settings, Widgets and/or shortcodes. You can get **Channel ID** from the page [Account Advanced](https://www.youtube.com/account_advanced) while you're logged in to your YouTube account. [youtube http://www.youtube.com/watch?v=wOqkfkNhOUE] [youtube http://www.youtube.com/watch?v=qaLqWi4-9jI] [youtube http://www.youtube.com/watch?v=u5TnGBVoG9c] == Frequently Asked Questions == = How to get that YouTube Data API Key? = Please folllow [Installation](https://wordpress.org/plugins/youtube-channel/#installation) instructions. = The plugin does not work with a premium theme or clash with another premium plugin = We cannot afford licenses for various premium themes and plugins to keep the fee plugin My YouTube Channel working with each of them. If My YouTube Channel clash with a premium theme or plugin, we can help you only if you help us. Ask theme/plugin author for approval to provide a package to us for debugging on local development domain `youtube-channel.wp`. Upload the installation package to your cloud drive (Dropbox, One Drive, Google Drive, iCloud, WeTransfer or other) and provide a share link to us by [contact form](https://urosevic.net/wordpress/contact/?subject=YouTube%20Channel). = I set everything correct but receiving 'Oops, something went wrong' message = As a logged-in administrator, you will see an error explanation. Known issues: > **YTC ERROR:** Please check did you set the proper Channel ID. You choose to show videos from the channel, but YouTube does not recognize MyCoolLegacyName as an existing or public channel. Do what the message says - check and correct Channel ID in default settings/widget/shortcode. > **YTC ERROR** Check YouTube Data API Key restrictions, empty cache if enabled by appending in the browser address bar parameter ?ytc_force_recache=1 1. Try to remove restrictions by referer or IP in your **YouTube Data API Key** and refresh the page after a couple of minutes. 1. If that does not help, please try to create a new API Key for Server w/o restrictions (not to regenerate the existing one). = How to use Google APIs Explorer to verify YouTube feeds? = If there is no `YTC ERROR` code in HTML source, visit [Google API Explorer](https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.playlistItems.list?part=snippet&maxResults=5&playlistId=) and append to the end of URL one of resource ID’s based on your Channel ID: * for videos from channel replace **UC** with **UU** in Channel ID (so *UCRPqmcpGcJ_gFtTmN_a4aVA* becomes *UURPqmcpGcJ_gFtTmN_a4aVA*) * for videos from Playlist simply use Playlist ID (like *PLEC850BE962234400* or *RDMMjUe8uoKdHao*) Note that both resources are *playlists* (including uploads to channel), so append mentioned ID to field **playlistId** (not to **id**), and click **Execute** button at the bottom of that page. 1. If you receive some error in results, tune parameters in APIs Explorer. 1. If there is no error while the response is empty, and you are sure that there are public videos in selected resource – contact Google Support. 1. If there are video results but not displayed with My YouTube Channel plugin – check topic [Read before you post support question or report a bug](https://wordpress.org/support/topic/ytc3-read-before-you-post-support-question-or-report-bug) and then [start new support topic](https://wordpress.org/support/plugin/youtube-channel/#new-topic-0). = What this YTC ERROR/HTTP Error means? = You will be able to reproduce HTTP Error w/o WordPress if you have SSH access to the server hosting your website. Log in to shell and run the following command (or ask your developer to do so): `curl https://www.googleapis.com/youtube/v3/playlistItems` You will get an HTTP Error from the curl command or response like the one below. `{ "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Required parameter: part", "locationType": "parameter", "location": "part" } ], "code": 400, "message": "Required parameter: part" } }` Known HTTP Errors: **error:0D0890A1:asn1 encoding routines:ASN1_verify:unknown message digest algorithm** Server tool curl has built with an older version of OpenSSL that does not support certificates signed with sha256-With-RSA-Encryption. It requires at least OpenSSL 0.9.8o for the total management of SHA256. Please contact your server administrator or hosting provider to help you with this issue. **Problem with the SSL CA cert (path? access rights?)** Yet another server issue, not related to My YouTube Channel nor WordPress. Please restart Apache (or Nginx) server. If that does not fix the issue, restart the entire server. Or contact server support to help. = Getting message Sign in to confirm you're not a bot when video start play = The issue is not related to the My YouTube Channel plugin but YouTube itself. Although Google indirectly refers to the cause in the article to which the link '[Learn more](https://support.google.com/youtube/answer/3037019#zippy=%2Ccheck-that-youre-signed-into-youtube)' leads, you most likely use a VPN, proxy, or shared public IP address. The IP address has a lot of traffic, so Google wants to verify whether the client is a bot or not. To resolve this, use another VPN or proxy. = Where to find correct Channel ID and User ID? = Login to your YouTube account and visit page [Account Advanced](https://www.youtube.com/account_advanced). **Channel ID** is **YouTube Channel ID** value composed of mixed characters starting with **UC**. = What is Handle custom URL? = Check out [Customized URL overview](https://support.google.com/youtube/answer/2657968?ref_topic=3024172&hl=en-GB) article. = Where to find Playlist ID? = Manually extract Playlist ID from YouTube playlist URL. Find string after `&list=` parameter in URL. Playlist ID can contain lowercase and uppercase letters, dash and underscore characters. Regular playlists starts with uppercase letters **PL** (like *PLEC850BE962234400*), while Playlist ID for YouTube mixes start with uppercase **RD** (eg. *RDCfMMlT8Lyns*). = How to force embedding video with better audio quality? = YouTube provide better videos if the height of the embedded video is 320 or more. If you use a small YTC video size, 240p will be loaded instead. It's not possible to force 720p in tiny YTC. = I enabled option `Hide YT Logo` and YouTube logo is still visible = The modestbranding option does not work for all videos. A lot of videos still have the YouTube logo in the control bar. We recommend enabling the option `Hide player controls` instead. The logo appears in the upper right corner on hover or when the video pauses. [Read more here](https://developers.google.com/youtube/player_parameters#modestbranding) = How I can achieve a 'wall' layout with one featured thumbnail? = Start with following shortcode combination: `[youtube_channel num=7 responsive=1 class=ytc_wall_1-6 resource=2 random=1]` Then add custom CSS code to Customizer, or child theme **style.css** or to [Head & Footer Code](https://wordpress.org/plugins/head-footer-code/) plugin: `.youtube_channel.ytc_wall_1-6 .ytc_video_container { padding: 5px; box-sizing: border-box; max-width: 33.333%; } .youtube_channel.ytc_wall_1-6 .ytc_video_container.ytc_video_1 { max-width: 100%; } @media screen and (max-width: 768px) { .youtube_channel.ytc_wall_1-6 .ytc_video_container:not(.ytc_video_1) { max-width: 50%; } } @media screen and (max-width: 480px) { .youtube_channel.ytc_wall_1-6 .ytc_video_container:not(.ytc_video_1) { max-width: 100%; } }` That will show thumbnails for seven random videos from the default playlist defined in plugin settings: one full-width thumbnail and six remaining thumbnails distributed to 3 columns on wide screens, two columns under 768px and a single thumbnail per row under 480px. = How I can add pagination (to Dynamic Wall view)? = My YouTube Channel does not support pagination. = How to reduce the size thumbnail Play button or remove it? = Resize thumbnail play button by adding following custom CSS to Customizer, or child theme **style.css** or to [Head & Footer Code](https://wordpress.org/plugins/head-footer-code/) plugin: `.youtube_channel .ytc_thumb>span:before { transform: scale(.65); }` To remove (hide) thumbnail play button, use following custom CSS: `.youtube_channel .ytc_thumb>span:before { display: none !important; }` = Your plugin does not support *THIS* or *THAT* = Feel free to submit a feature request by creating a new topic on [Community forum](https://wordpress.org/support/plugin/youtube-channel/). Make sure to prefix *Topic Title* with **[Feature Request] ...** Please note, we cannot guarantee an ETA to implement the requested feature. If you are in a hurry, please find a developer to do it for you or [request a quote from us](https://urosevic.net/wordpress/contact/?subject=YouTube%20Channel). = How can I report security bugs? = You can report security bugs through the Patchstack Vulnerability Disclosure Program. The Patchstack team help validate, triage and handle any security vulnerabilities. [Report a security vulnerability.](https://patchstack.com/database/vdp/youtube-channel) == Changelog == = 3.25.2 (20250208) = * Fix: Function _load_textdomain_just_in_time was called incorrectly * Tested: WordPress 6.7.1 and themes Twenty Fifteen 3.9, Twenty Twenty-Five 1.0, Astra 4.8.1, GeneratePress 3.5.1 on PHP 8.3.13 = 3.24.7 (20240706) = * Change: Rename classes to match new plugin name `My YouTube Channel` * Improve: Introduce option to locally store thumbnail images for improved cache policy * Tested: WordPress 6.6 and theme Twenty Twenty Four 1.1 on PHP 8.3.7 = 3.23.4 (20230223) = * Security: Fix CSRF vulnerability, thanks to [Mika/Patchstack](https://patchstack.com/database/researcher/5ade6efe-f495-4836-906d-3de30c24edad) = 3.23.3 (20230212) = * Fix: double trailing slash in assets URLs * Fix: thumbnails lightbox does not work with enabled cache or auto optimize * Update: Bigger Picture library to 1.1.7 = 3.23.2 (20230112) = * Tested: WordPress 6.2 on PHP 8.1.14 * Improve: Remove deprecated options from Widget and Shortcode generator = 3.23.1 (20230111) = * Fix: allow multiple classes defined in Widget and Shortcode * Fix: over-escaped content break customized layouts and styling = 3.23.0 (20230111) = * Tested: WordPress 6.1.1 on PHP 8.1.7 * Security: Fix XSS and Authorization Bypass vulnerability (thanks to WPScan) * Security: Replace legacy library Magnific Popup with BiggerPicture * Change: Plugin name to `My YouTube Channel` to resolve Misusing trademarks - The Display Name * Change: Text Domain to `wpau-yt-channel` to resolve Misusing trademarks - The URL * Improve: Code improvements and simplification * Deprecated: Remove general settings export to JSON as now we have Site Health info * Add: Support for YouTube Handle * Add: General option to prevent YTC Widet Preview gets rendered in Block Editor = 3.0.12.1 (20210227) = * Tested: WordPress 5.6.2 on PHP 7.4.15 and 8.0.2 * Add: compatibility with PHP 8 * Add: conditionally hide not applicable options in widget settings form * Change: Lowest supported PHP version increased to 5.6 * Improve: Readme, Installation (Step-by-Step instructions for obtaining YouTube Data API Key v3), FAQ = 3.0.12 (20201107) = * Add: link video title to YouTube playback page opened in new tab/window * Cleanup: remove deprecated parameters `theme` (`themelight`), `showinfo` (`noinfo`, `hideinfo`) * Improve: code for widget * Add: widget parameter `skip` * (20201014) Add: shortcode parameter `skip` to skip requested number of items == Upgrade Notice == = 3.23.0 = An XSS vulnerability is fixed, update ASAP! == Screenshots == 1. My YouTube Channel default plugin settings (General tab) 2. My YouTube Channel customized widget settings 3. My YouTube Channel customized widget on website 4. TinyMCE form to easy configure My YouTube Channel shortcode for content 5. Shortcode in Classic block 6. Shortcode rendered on website PK!..iichangelog_legacy.txtnu[== ChangeLog for old releases == = 3.0.11.8 (20200810) = * Tested: WordPress 5.5-RC2-48768 and PHP 7.4.1 * (20190719) Fix: referrer is wrong for protected API keys (thanks to @hmmux) = 3.0.11.7 (20180906) = * Add: Global option `sslverify` to disable SSL Verification * Add: Global option `js_ev_listener` to enable Event Listener DOMContentLoaded * (20180826) Add: Override video block template by 3rd party theme or plugin with filter `ytc_print_video` * Add: Customizable timeout for wp_remote_get() * Improve: Disable LastPass altering settings fields = 3.0.11.6 (20180826) = * Add compatibility with async/defer optimization (thanks to @lordbass) = 3.0.11.5 (20180721) = * Add: Missing `titletag` parameter for shortcode, shortcode TinyMCE wizard and widget * Fix: Missing video title for `thubmbnail` display with `above` or `below` positioning (thanks @nimeldk) = 3.0.11.4 (20180622) = * Improvement: add `showtitle` options `inside` and `inside_b`. * (20180213) Update: section descriptions on plugin settings. = 3.0.11.3 (20171001) = * Fix: Default values in dropdown lists does not preselect in TinyMCE shortcode selector * Add: new option for thumbnail quality for TinyMCE shortcode selector = 3.0.11.2 (20171001) = * (20171001) Fix: Undefined index: option_page in youtube-channel/inc/settings.php on line 1006 * Add: Support for custom thumbnail quality * (20170716) Add: native error message from Google for cases not covered by common errors (like `accessNotConfigured`) = 3.0.11.1 (20170530) = * Fix: cut description in the middle of multy-byte characters (reported by @funfrog) * (20170509) Fix: undefined variable `nolightbox` * Fix: add `nolightbox` shortcode parameter and fix typos on Help section = 3.0.11 (20170424) = * Fix: added all 3 parameters to `widget_title` filter (reported by @squarestar) * (20170301) Add: New shortcode options `nolightbox` and `target`, to make available opening thumbnail anchors in new tab/window (requested by @bakercreative) = 3.0.10.5 (20170225) = * Remove: FMVD opt-in because of general plugin guideline violation rule #9 = 3.0.10.4 (20170123) = * Fix: once enabled FMVD notice has not auto dismissed. * Change: input type for YouTube Data API Key from password to text so key is visible by webmaster and prevent messing with autofill browser extensions = 3.0.10.3 (20170114) = * Add opt-in option Freemage Video Downloader * Code cleanup: delete unused admin.js file * UI cleanup: enhance checkbox control in settings * UI cleanup: update option names like 'What to show' is now 'Embed as', 'Hide related videos' to 'No related videos' , etc = 3.0.10.2 (20170110) = * Add option to select Title HTML tag (default to H3) = 3.0.10.1 (20170110) = * Fix Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting ')' in /plugins/youtube-channel/inc/settings.php on line 218 = 3.0.10 (20161231) = * (20161225) Optimize: Remove `extract()` from shortcode parser * Code cleanup and fixing to be compliant with WordPress Core coding standards * Test compatibility with WordPreee 4.7 and PHP 7.0.14 * (20161224) Change: Update notification for missing YouTube Data API Key * Change: Do not display shortcode options changes for fresh installation * (20160824) Change: HTTP to HTTPS links and open remote links on settings page in new tab/window * Change: Disable deprecated notification related to old v2.4 of plugin * (20160419) Fix: resource from globals used if in widget set to use User uploads as resource. * Enhance: Implemented Selective Refresh Support for Widget (WP 4.5) * (20160131) Fix: prevent PHP Notices for Settings page. * Fix: `Cache feed` option in widget can't be disabled (always revert to default). * Fix: `Open link in` option in widget always revert to default. * Security: prevent direct loading of settings and widget files. * (20160120) Optimize: replace yt_play.png with optimized image. = 3.0.9 = * Fix: broken autoplay when start to play all videos instead only first in YTC block set * Fix: remove $_SESSION variable and replace with class variable to avoid duplicate sets of JS code = 3.0.8.9 = * Fix: Set `Hide link` for `Link to` option for `Link to Channel` in global setting does not work (reported by drweby2). * Change: Set minumal required WordPress version 4.0 * Update: Supported WordPress Version to 4.4 = 3.0.8.8 = * Fix: Link to channel enabled in Widget not shown if related link ID has not set in Widget (ignored general settings). * Fix: Undefined notices = 3.0.8.7 = * Enhance: Merge two improvements for MagnificPopupAU fork from core library (commit 60d5aa4 and 1d0f697) * Fix: TinyMCE button does not have icon when new post/page is created * Fix: Strip non-number characters entered in shortcode TinyMCE creator for Fetch, Show, Initial Width and Description length attributes. * Fix: make sure that Initial Width is always in pixels (if user enter width in percentage, strip percent sign and threat value as pixel value) = 3.0.8.6 = * Fix: Broken Enhanced Privacy on small screens in forked MagnificPopupAU library * Enhanced: Finished making code compliant to WordPress Core coding standards = 3.0.8.5 = * Enhanced: Settings page made compliant to WordPress Core Coding Standard * Fix: Wrong links to external resources on Settings page * Fix: Opening external resources links on Settings page in new tab * Change: Replace PayPal donation links to prevent account limitations if plugin is used on website that violates PayPal's Acceptable Use Policy = 3.0.8.4 (2015-06-10/16/17/18/19-07/10) = * Fix: (6/19) Undefined notice for apikey * Fix: (6/18) Wrong name of widgets page on Help tab * Fix: (6/17) Do not load empty JS asset to prevent clash with VisualComposer and invisible rows wit enabled strtching * Fix: (6/16) Initiate .MagnificPopupAU() on window load event, not on DOM ready event * Fix: Lost some settings during igration from old to new options in settings and widgets * Add: (7/13) New global option **Disable TinyMCE** added to **General** tab. Enabled by default, disable to remove TinyMCE icon from post/page Visual Editor * Add: (7/10) New global option **Enable Full Screen** added to **Video** tab. Disabled by default, enable fullscreen option for embedded playlist * Add: (6/18) Support to initiate .MagnificPopupAU() on .ajaxComplete() and support dynamically loaded YTC within AJAX * Add: New global option **Play inline on iOS** added to **Video** tab. Disabled by default, provide support for playsinline parameter. * Add: Support for (playsinline)[https://developers.google.com/youtube/player_parameters#playsinline] player option in MagnificPopup library to play video on mobile devices in page instead in device player (disabled by default) * Add: Default option settings for nolightbox and * Cleanup: Removed unused modules from MagnificPopup library * Change: Help tab now have shortcode parameters distributed to subtabs * Change: Lightbox classes by prepending `ytc-` in front of all MagnificPopup classes * Change: Reduce minimal screen width from 700px to 320px when lightbox will not be used and will open video directly on YouTube website. * Improve: Updated strings for localization support * Improve: Updated FAQ with new question about play button on thumbnails * Updated Serbian localization = 3.0.8.3 (2015-06-09) = * Add: Support for enhanced privacy videos in lightbox (MagnificPopupAU tweak) = 3.0.8.2 (2015-06-08) = * Fix: Async HTML5 has broken when debug is disabled because single comments before JS code compression = 3.0.8.1 (2015-06-07) = * Fix: Migrate deprecated widget options * Add: Notice about changed shortcode parameters * Add: Message if access to resource is forbidden (private Liked or Favourited videos) = 3.0.8 (2015-06-07) = * Fix: Undefined and deprecated global options * Add: Global option to disable builtin Lightbox (Video tab) * Add: Link to Support forums on Plugins page * Add: Visible error in YTC block for Administrator, Oops for visitors and lower members * Add: Filename of debug JSON * Add: Video title classes `ytc_title_above`/`ytc_title_below` * Add: Button `Clear All YTC Cache` on `Tools` tab to quick purge all cached YTC feeds * Improve: Do not include YT `iframe_api` if already included by other plugin and make YTC iframe2 to work even if other plugin uses `iframe_api` * Improve: Remove `Playlist Only` checkbox (`only_pl=1` shortcode parameter) and integrate as new Display:Embedded Playlist option (`display=playlist` shortcode parameter) * Improve: Remove `Show title below` checkbox (titlebelow) and integrate to `Show video title` (showtitle) as dropdown * Improve: Remove `Show link to channel` checkbox (showgoto) and integrate option `None` to `What to link` (link_to) * Improve: Move JS code to initiate Magnific popup to inline print on wp_footer * Improve: LESS stylesheet for easier maintenance * Remove: `Et cetera` (descappend) option and always use `...` for shortened description * Remove: Macro templates for Link to channel title * Change: Values for `showtitle` and `link_to` are changed from integer to string (check Shortcodes section) * Change: Move `Hide annotations` and `Hide video info` from `Content` to `Video` tab on settings page * Change: Play icon to be like original YT play shape * Change: Make responsive enabled by default in new widgets * Optimize: DRY of visible errors for Administrator and visitors (Oops message) * Optimize: Faster empty defaults for channel, vanity, legacy and playlist in global settings * Optimize: Minify inline JS code * Optimize: Remove call to fitVids() function * Cleanup: Remove $yt_url and $yt_video variables * Cleanup: Remove unused function to clean playlist ID = 3.0.7.3 (2015-05-29) = * Add: TinyMCE button to easy configure and insert shortcode to post/page content * Add: Report about zero videos in resource * Add: Helper method to generate resource nice name (DRY) = 3.0.7.2 (2015-05-24) = * Add: Error report if we have broken feed on record * Add: Report about failed HTTP connections and other problems ocurred when we try to fetch feed * Add: DRY of visible errors for Administrator and visitors (Oops message) = 3.0.7.1 (2015-05-17/18) = * Fix: Plugin version number not updated in DB * Fix: Magnific Popup appear under header on Twenty Eleven theme * Fix: .clearfix break layout if used as class on content division = 3.0.7 (2015-05-17) = * Fix: Uncaught TypeError: e(...).fitVids is not a function * Change: Remove plugin default Channel ID, Vanity custom name, Legacy username and Playlist ID; leave them empty by default and allow them to be empty parameters; throw error if required value not provided. All this to prevent questions like *Why I see your videos on my website* or *Why my website link to your channel* * Cleanup: Deprecated widget toggler for Playlist Only depending on selected Resource * Cleanup: Deprecated 16:10 styles * Optimize: Minimize admin style for widget layout = 3.0.6.2 (2015-05-15) = * Fix: Fatal error: Cannot unset string offsets in update.php on line 229 (introduced in 3.0.6.1) * Add: Helpfull links to plugin settings page = 3.0.6.1 (2015-05-14) = * Fix: Undefined index: random * Fix: Unremoved only_pl from global settings * Add: Box sizing of .youtube_channel element for crappy themes = 3.0.6 (2015-05-13/14) = * Fix: Prevent Fatal error on PHP<5.3 because required __DIR__ for updater replaced with dirname(__FILE__) * Fix: No retrieved or missing videos from some channels so switch `search` to `playlistItems` API call (kudos to @[mmirus](https://wordpress.org/support/profile/mmirus)) * Add: Embed As Playlist for all resources * Add: Clearfix for crappy themes where clearfix does not exists * Add: Option to move video title below video (boolean shortcode parameter `titlebelow`) * Add: PayPal donate button to settings page * Improved: Move YouTube Data API Key to plugin settings and add notification to remove YOUTUBE_DATA_API_KEY from wp-config.php (optional) * Improved: Updated shortcode explanation in README and Help tab in plugin settings. * Improved: Better tips for 'Oops, something went wrong' message. * Change: Wording `Ups` to `Oops` * Remove: Options `Embed standard playlist` and `Show random video` from global settings as this should be off by default * Remove: Loading of fitVids JS library for test before final removing. = 3.0.5 (2015-05-11/12) = * Fix: Setting back dropdown options with `0` ID does not work on Settings page (Channel as resource to use, Cache timeout, Aspect ratio, What to show, Open link to, Link to) * Add: Option to export global settings to JSON and add to Tools tab in settings button to download global settings JSON * Change: Update plugin features * Improved: Retrieve only fields which will be used for output w/o unused items to reduce * Improved: More micro optimizations = 3.0.4 (2015-05-11) = * Add: Tip what to do if error ocurred with YouTube Data API Key printed inside YTC ERROR comment * Change: Where to ask for support links in widget * Change: Timeout for getting feed increased from 2 to 5 seconds * Change: Update FAQ sections in readme file * Remove: Check for Redux Framework in debug JSON generator = 3.0.3 (2015-05-10) = * Fix: "Oops, something went wrong." when Playlist selected as resource because wrong switch * Fix: Jumping thumbnails in responsive wall on hover in Twenty Fifteen theme because border-bottom for anchors * Fix: Another deprecated shortcode attribute backward compatibility (`use_res`) * Add: Example of dynamic responsive wall (1 large + 6 small thumbnails) (to [Description](https://wordpress.org/plugins/youtube-channel/)) = 3.0.2 (2015-05-10) = * Fix: (typo - experiencing on frontend when no API Key set) PHP Fatal error: Call to undefined function __sprintf() in youtube-channel.php on line 445 * Fix: shortcode deprecated params `res` and `show` not backward compatibile = 3.0.1 (2015-05-10) = * Fix: Fatal error: Using $this when not in object context in youtube-channel.php on line 89 * Fix: Link to channel not visible on Twenty Fifteen theme = 3.0.0 (2015-05-07/08/09/10) = * Fix: Migraton of global and widget settings to v3.0.0 * Add: New Global Settings page as replacement of Redux Framework solution * Add: Non-Dismissable Dashboard notice if YouTube Data API Key missing with link to explanation page * Change: Option key `ytc_version` to `youtube_channel_version` * Change: Shortcode parameters: `res` to `resource`, `show` to `display`; but leave old parameter names for backward compatibility * Enhance: Various plugin core micro optimizations * Enhance: Dashboard notices * Enhance: Proper options migration on plugin update * Remove: Redux Framework mentioning from core plugin * Remove: Redux Framework config.php * Remove: chromeless.swf asset * Remove: option `Fix height taken by controls` as now YouTube displays control bar only when video is hovered = 3.0.0alpha2 (2015-03-07/22/24) = * Add: Rewrite plugin to work with YouTube Data API v3 * Add: Vanity link as option to Link to channel (now supports Legacy username, Channel and Vanity URL) with cleanup Vanity ID routine * Add: Liked videos as resource (now support channel, playlists, favourites and liked videos) * Add: Admin notification in widget output on front-end if no YouTube Data API Key is defined to prevent errors * Add: Dismissable Dashboard notice if PHP version is lower than 5.3 as YTC maybe will not work with older versions. * Change: Global and widget option names: `use_res` to `resource`, `cache_time` to `cache`, `maxrnd` to `fetch`, `vidqty` to `num`, `getrnd` to `random`, `to_show` to `display`, `showvidesc` to `showdesc`, `enhprivacy` to `privacy`, `videsclen` to `desclen`, * Change: Widget settings functionality, two column options, better toggle for playlist and GoTo section * Enhance: Caching routine (reduce possibility of failed feed fetch) * Remove: Chromeless and Flash player - leave only Thumbnail and HTML5 * Remove: Aspect Ration 16:10 (so support only 16:9 and 4:3, same as modern YouTube) * Remove: "Fix No Item" option - not required for YouTube API 3.0 = 2.4.2.1 (2015-04-24) = * Fix: devicesupport workaround strip 1st video from playlist and favourites and apply only for channel = 2.4.2 (2015-04-22) = * Fix: Broken layout introduced by missing responsive for embedded playlist, iframe and iframe2 * Fix: Replace amp's with HTML entity in thumbnail link * Add: Option to disable thumbnail tooltips (shortcode parameter no_thumb_title) * Add: List of Shortcode attributes to README file * Add: Danis localisation by GSAdev v. Georg Adamsen * Micro optimizations = 2.4.1.7 (2015-04-20) = * Quick Fix: strip 1st video from feed that provides notice "YouTube is upgrading to a newer version, which is not supported by this device or app." (more on www.youtube.com/devicesupport) until we finish YouTube Channel 3.0.0 (on the way) = 2.4.1.6 (2015-04-15) = * Fix: missing responsive support for embedded playlist, iframe and iframe2 * Fix: missing support to hide playback controls, info and annotations for embedded playlist = 2.4.1.5 (2015-04-13) = * (2015-04-13) Change: Add dismiss link for Old PHP notice and lower suggested PHP version to 5.3.x * (2015-02-19) Fix: missing admin notices if ReduxFramework not active * (2015-02-10) Add: links to explanations for channel ID and vanity URL * (2015-02-10) Add: goto macro %vanity% to insert vanity ID * (2015-02-10) Add: field for vanity URL ID * (2015-02-10) Add: option to select link to user page, channel page or vanity URL for goto link * (2015-02-10) Remove: option to use channel instead user page for goto link = 2.4.1.4 (2015-04-09) = * (2015-04-09) Add: Notification about old PHP if lower than 5.3.29 * (2015-04-09) Change: Run admin functions only in dashboard * (2015-02-09) Fix: strip whitespace from the beginngine/end of channel and playlist ID * (2014-12-30) Fix: prevent Undefined Offset notice when on resource we get less items than user requested in shortcode/widget * (2014-12-30) Fix: prevent Undefined Offset notice when on resource we get less items than user requested in shortcode/widget * (2014-12-30) Add: make fallback cache for every feed and use it if no item occurs to avoid No items = 2.4.1.3 (2014-12-10) = * Fix: previous release broke opening lightbox for thumbnails and load YouTube website. = 2.4.1.2 (2014-12-07) = * Add: Add support for hidden controls and YouTube logo in Thumbnail mode. * Change: Rename Magnific Popup function to prevent clash with original Modest Branding that does not have support for disabling related videos, player controls and YouTube logo. = 2.4.1.1 (2014-12-07) = * Change: Remove parameter `&rel=1` from thumbnail link because that is a default value and can prevent some lightboxes to load video. = 2.4.1 (2014-11-15) = * Fix: Typo in widget `Do not chache` [2014-10-03] * Fix: do not show global settings notice with link to settings page if not Redux Framerowk is active [2014-11-15] * Fix: Plugin name on Support tab in global plugin settings. [2014-11-15] * Change: Remove protocol from links and leave browser to decide should get resource from HTTP or HTTPS (depends on website protocol) [2014-10-03] * Change: Add height addition for `Fix height taken by controls` for embedded playlist and count control above video [2014-10-03] * Change: Move debug log from widget to downloadable dynamic JSON [2014-11-15] * Add: ModestBranding (remove YouTube logo from player control bar) [2014-10-03] * Add: Responsive (make video optionally responsive) [2014-10-04] * Add: Support for WordPress 4.1 [2014-11-15] = 2.4.0.2 (2014-10-02) = * Fix: light theme not applicable to embedded playlist [2014-10-01] * Fix: add clearfix after YTC widget to prevent jumping out of widget block on bad styled themes [2014-10-02] * Add: explanation that `What to embed` have no effect for embedded playlist (HTML5 always used) [2014-10-01] = 2.4.0.1 (2014-10-01) = * Fix: fatal error - broken execution for embedded playlist with enhanced privacy * Add: button to discard warning notice for Redux Framework = 2.4.0 (2014-10-01) = * Fix: false options set in shortcode had no effect to output box and default settings always used [20140924] * Fix: enabled checkbox in global settings could not be unticked (disabled) [20140924] * Fix: prevent array_slice notice if channel have no uploaded videos [20141001] * Add: fitVids for responsive videos [20140924] * Add: option for additional YTC box class in widget and shortcode [20140924] * Change: global settings page re-implemented with Redux Framework and requires Redux Framework Plugin [20140924] * Change: rewrite plugin to be more OOP [20140924] * Change: removed obsolete methods [20140924] * Change: default box width changed from 220 to 306px [20140924] * Change: YTC block and video pieces now floated left to enable horizontal stack [20140924] * Change: update localization support [20140926] * Change: updated Serbian localization [20140926] * Change: removed PayPal donation button from widget and moved to plugin Settings page [20141001] = 2.2.3 (2014-09-14) = * Add: option to disable related videos (not supported by chromeless player) * Enhance: added support for YouTube `rel` parameter in Magnific PopUp IFRAME module * Minified assets * Add plugin icon for WordPress 4.x plugin installer * Update plugin banner = 2.2.2 (2014-07-25) = * Add: admin notices after upgrade to prevent errors and avare users to do ReCache and prevent mixed json_decode / base64_encode strings for cached feeds * Change: moved ReCache part to Tools tab on settings page = 2.2.1 (2014-07-13) = * Fix: to prevent broken JSON feed, transient caching changed from plain serialized string to base64_encode * Add: URL parameter `ytc_force_recache` to force recache, also included on Help tab in plugin settings = 2.2.0 = * Add: open thumbnails in lightbox and stay on site, instead opening YouTube page (Magnific Popup jQuery library) * Add: make thumbnail responsive * Add: play indicator for thumbnails * Add: shortcode [youtube_channel] * Add: tabbed settings page for default options for shortcodes * Add: Help tab for shortcode parameters * Change: moved parts of code to helper functions = 2.1.0.2 = * Fix: remove embed object below old IFRAME implementation = 2.1.0.1 = * Change: add back old iframe functionality, second iframe option is async loading = 2.1.0 = * Change: iframe/HTML5 player inject with IFrame Player API https://developers.google.com/youtube/player_parameters#IFrame_Player_API * Change: use native WP remote file download function wp_remote_get to fetch feeds (prevent some permission errors on some hosts) * Change: removed height parameter so height is calculated by aspect ratio selection - 16:9 as default * Add: mute audio on autoplay if iframe/HTML5 is selected * Add: converter that will port pre-2.0.0 YTC widgets to 2.0.0+ version * Fix: playlist parser (now allowed dash and underscore in playlist ID) = 2.0.0 = * Fix: undefined vars notices * Fix: embedding default plugin playlist instead custom set for "Embed standard playlist" * Add: caching system * Add: option to link to channel instead to user * Add: support for enhanced privacy by YouTube * Enhance: RSS feed replaced with JSON * Enhance: better formatted debug info with site URL * Enhance: re-group widget options * Enhance: updated wording * Enhance: added tooltips for options * Enhance: playlist ID detection from URL * Remove: modified error_reporting = 1.5.1 = * Fix issue in widget settings when no apache_get_version() support on server * Fix validation errors for widget settings * Fix broken sidebar issue introduced in 1.5.0 release = 1.5.0 = * Add inline debug tracker * Fix deprecated functions - changed rss.php by feed.php and split() by extract() * Fix video description parser for new YouTube feed format * Fix autoplay for single video bug * Fix autoplay for multiple videos to play only first video * Code cleanup * Update compatibility to WordPress 3.5.1 = 1.4.0 = * Added option to show preferred quantity of videos * Added option to embed classic playlist * Added class to video container: universal .ytc_video_container and selective (.ytc_video_first, .ytc_video_mid, .ytc_video_last) * Added class to video title .ytc_title * Added class to video description text .ytc_description * Added class to container for link to channel .ytc_link * Added routine to unique random video from channel if displayed more than one video * Added option to set `et cetera` string for shortened video description * Changed option for random video to use channel or playlist * Fields for width and height converted to number with spinner * Improved playlist ID handler = 1.3.3 = * Added Czech translation by Ladislav Drábek = 1.3.2 = * Add option to show video description below video * Add option to shorten video description to N characters * Add option to use light theme for controls instead of default dark theme (HTML5 iframe and flash object) * Add option to hide annotations from video = 1.3.1 = * Add support for playlist full URL * Fixed no random video for playlist = 1.3 = * Fixed z-index problem with flash and iframe object * Add option to try to fix 'No items' error * Add donate button in options dialog = 1.2 = * Fixed number of items for random video (min 1, max 50) * Fixed no-controls for HTML5 iframe = 1.1 = * Added option to use the playlist instead of channel (suggested by Stacy) = 1.0 = * Ported to WordPress 3.2.1 * Added option to set maximum number of items for random video * Version changed from major.minor.micro to to major.minor format * Adds Spanish translation = 0.1.3 = * Uses selected() instead of if [dimadin] * Uses sprintf for better i18n [dimadin] * Wraps some strings in gettext [dimadin] * Adds textdomain and loads it [dimadin] * Adds target="_blank" for channel link [dimadin] * Adds option to open channel link in popup * Uses plugin_dir_url() instead of guessing of location [dimadin] * Loads widget in its own function [dimadin] * Adds Serbian translation = 0.1.2 = * Option to display random video from channel = 0.1.1 = * Fixed option to toggle video title visibility * Added option to hide controls for iframe and object videos * Added option to hide video info * Enabled autostart for iframe and object videos = 0.1.0 = * Initial release == Upgrade Notice == = 3.0.8 = Bugfixes, optimizations and improvements. = 3.0.7.3 = User experience improved with Shortcode generator for TinyMCE = 3.0.7.2 = Added report for user if any HTTP error occured = 3.0.7,1 = Quick fix for clearfix class = 3.0.7 = Cleanup and optimization release PK!\syoutube-channel.phpnu[span{height:0;width:100%;display:block;-webkit-background-size:cover;background-size:cover;background-position:center center;background-repeat:no-repeat}.youtube_channel .ytc_thumb>span:before{content:" ";display:block;width:84px;height:59px;background-image:url(../img/yt_play.png);background-position:top center;background-repeat:no-repeat;background-color:rgba(0,0,0,0);opacity:.9;position:absolute;top:50%;left:50%;padding:0 !important;margin-left:-42px;margin-top:-30px;cursor:pointer;transform:scale(0.85)}.youtube_channel .ytc_thumb>span .ytc_title_inside{display:block;position:absolute;margin:0;padding:10px;width:100%;color:#fff;background:rgba(0,0,0,.6);font-weight:500;font-size:1.4rem}.youtube_channel .ytc_thumb>span .ytc_title_inside.ytc_title_inside_bottom{bottom:0}.youtube_channel .ytc_thumb:hover>span:before{background-position:bottom center}.youtube_channel .ytc_thumb.ar16_9,.youtube_channel .ytc_thumb.ar16_9>span{padding-bottom:56.26%}.youtube_channel .ytc_thumb.ar4_3,.youtube_channel .ytc_thumb.ar4_3>span{padding-bottom:75%}.youtube_channel .ytc_link{clear:both;float:left;position:relative;width:100%}.youtube_channel .ytc_link>p{padding:0;margin:0}.youtube_channel p.ytc_error{color:#d00}.clearfix:after,.widget_youtube-channel:after,.youtube_channel:after{clear:both;content:" ";display:block;height:0;visibility:hidden}/*# sourceMappingURL=youtube-channel.min.css.map */PK!+@  assets/css/admin.scssnu[i.mce-i-ytc { font: normal 20px/1 'dashicons'; padding: 0; vertical-align: top; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; margin-left: -2px; padding-right: 2px; &:before { content: '\f236'; } } div[id*='_youtube-channel-'] .widget-content, .widget-content:has([for*="widget-youtube-channel"]) { &, .halfs, .thirds { display: flex; gap: 0 1rem; } flex-direction: column; .halfs { p { width: 50%; } } .thirds { p { width: 33%; } } .checkboxes { flex-direction: column; p { display: flex; flex-direction: column; label { display: inline; } } } h4 { font-size: 1rem; margin: 1rem 0 0 0; } label { display: flex; flex-direction: column; .description { font-style: italic; /* &::before { content: "("; } &::after { content: ")"; } */ } } p { width: 100%; clear: both; &:has(label.hidden) { display: none; } &.half { width: 49%; &.left { float: left; clear: left; } &.right { float: right; clear: right; } } /* &.third { width: 33%; } */ &.mt-0 { margin-top: 0!important; } &.mb-0 { margin-bottom: 0!important; } &.hidden { display: none; } &.visible { display: block; } .hidden { display: none; } &.deprecated { opacity: 0.4; } } } @media screen and (max-width: 782px) { div[id*='_youtube-channel-'] .widget-content p.half.left, div[id*='_youtube-channel-'] .widget-content p.half.right { width: 100%; float: none; clear: none; } } #youtube_channel_settings { .ver { font-size: 0.8rem; line-height: 2rem; } tr.deprecated { text-decoration: line-through; opacity: 0.4; } input.blur-on-lose-focus:not(:focus) { color: transparent; text-shadow: 0 0 5px rgb(0 0 0 / 50%); } } /* Settings tabs */ .nav-tab.nav-tab-hidden { display: none; } .subnav-tab-wrapper { margin-bottom: 0; & .nav-tab { -webkit-user-select: none; /* Chrome all / Safari all */ -moz-user-select: none; /* Firefox all */ -ms-user-select: none; /* IE 10+ */ user-select: none; /* Likely future */ &:focus { -webkit-box-shadow: initial; box-shadow: initial; } } } .tab-content-ytc { display: none; &.tab-content-active { display: block; border-color: #ccc; border-width: 0 1px 1px 1px; border-style: solid; padding: 10px; } } PK!xb7))assets/css/admin.min.cssnu[i.mce-i-ytc{font:normal 20px/1 "dashicons";padding:0;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-left:-2px;padding-right:2px}i.mce-i-ytc:before{content:""}div[id*=_youtube-channel-] .widget-content,.widget-content:has([for*=widget-youtube-channel]){flex-direction:column}div[id*=_youtube-channel-] .widget-content,div[id*=_youtube-channel-] .widget-content .halfs,div[id*=_youtube-channel-] .widget-content .thirds,.widget-content:has([for*=widget-youtube-channel]),.widget-content:has([for*=widget-youtube-channel]) .halfs,.widget-content:has([for*=widget-youtube-channel]) .thirds{display:flex;gap:0 1rem}div[id*=_youtube-channel-] .widget-content .halfs p,.widget-content:has([for*=widget-youtube-channel]) .halfs p{width:50%}div[id*=_youtube-channel-] .widget-content .thirds p,.widget-content:has([for*=widget-youtube-channel]) .thirds p{width:33%}div[id*=_youtube-channel-] .widget-content .checkboxes,.widget-content:has([for*=widget-youtube-channel]) .checkboxes{flex-direction:column}div[id*=_youtube-channel-] .widget-content .checkboxes p,.widget-content:has([for*=widget-youtube-channel]) .checkboxes p{display:flex;flex-direction:column}div[id*=_youtube-channel-] .widget-content .checkboxes p label,.widget-content:has([for*=widget-youtube-channel]) .checkboxes p label{display:inline}div[id*=_youtube-channel-] .widget-content h4,.widget-content:has([for*=widget-youtube-channel]) h4{font-size:1rem;margin:1rem 0 0 0}div[id*=_youtube-channel-] .widget-content label,.widget-content:has([for*=widget-youtube-channel]) label{display:flex;flex-direction:column}div[id*=_youtube-channel-] .widget-content label .description,.widget-content:has([for*=widget-youtube-channel]) label .description{font-style:italic}div[id*=_youtube-channel-] .widget-content p,.widget-content:has([for*=widget-youtube-channel]) p{width:100%;clear:both}div[id*=_youtube-channel-] .widget-content p:has(label.hidden),.widget-content:has([for*=widget-youtube-channel]) p:has(label.hidden){display:none}div[id*=_youtube-channel-] .widget-content p.half,.widget-content:has([for*=widget-youtube-channel]) p.half{width:49%}div[id*=_youtube-channel-] .widget-content p.half.left,.widget-content:has([for*=widget-youtube-channel]) p.half.left{float:left;clear:left}div[id*=_youtube-channel-] .widget-content p.half.right,.widget-content:has([for*=widget-youtube-channel]) p.half.right{float:right;clear:right}div[id*=_youtube-channel-] .widget-content p.mt-0,.widget-content:has([for*=widget-youtube-channel]) p.mt-0{margin-top:0 !important}div[id*=_youtube-channel-] .widget-content p.mb-0,.widget-content:has([for*=widget-youtube-channel]) p.mb-0{margin-bottom:0 !important}div[id*=_youtube-channel-] .widget-content p.hidden,.widget-content:has([for*=widget-youtube-channel]) p.hidden{display:none}div[id*=_youtube-channel-] .widget-content p.visible,.widget-content:has([for*=widget-youtube-channel]) p.visible{display:block}div[id*=_youtube-channel-] .widget-content p .hidden,.widget-content:has([for*=widget-youtube-channel]) p .hidden{display:none}div[id*=_youtube-channel-] .widget-content p.deprecated,.widget-content:has([for*=widget-youtube-channel]) p.deprecated{opacity:.4}@media screen and (max-width: 782px){div[id*=_youtube-channel-] .widget-content p.half.left,div[id*=_youtube-channel-] .widget-content p.half.right{width:100%;float:none;clear:none}}#youtube_channel_settings .ver{font-size:.8rem;line-height:2rem}#youtube_channel_settings tr.deprecated{text-decoration:line-through;opacity:.4}#youtube_channel_settings input.blur-on-lose-focus:not(:focus){color:rgba(0,0,0,0);text-shadow:0 0 5px rgba(0,0,0,.5)}.nav-tab.nav-tab-hidden{display:none}.subnav-tab-wrapper{margin-bottom:0}.subnav-tab-wrapper .nav-tab{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.subnav-tab-wrapper .nav-tab:focus{-webkit-box-shadow:initial;box-shadow:initial}.tab-content-ytc{display:none}.tab-content-ytc.tab-content-active{display:block;border-color:#ccc;border-width:0 1px 1px 1px;border-style:solid;padding:10px}/*# sourceMappingURL=admin.min.css.map */PK!2Mttassets/css/admin.min.css.mapnu[{"version":3,"sourceRoot":"","sources":["admin.scss"],"names":[],"mappings":"CAAA,YACC,+BACA,UACA,mBACA,mCACA,kCACA,iBACA,kBAEA,mBACC,YAIF,8FAOC,sBALA,wTACC,aACA,WAMA,gHACC,UAID,kHACC,UAGF,sHACC,sBACA,0HACC,aACA,sBACA,sIACC,eAIH,oGACC,eACA,kBAED,0GACC,aACA,sBAEA,oIACC,kBAWF,kGACC,WACA,WACA,sIACC,aAGD,4GACC,UAEA,sHACC,WACA,WAED,wHACC,YACA,YASF,4GACC,wBAED,4GACC,2BAED,gHACC,aAED,kHACC,cAED,kHACC,aAED,wHACC,WAIH,qCACC,+GAEC,WACA,WACA,YAKD,+BACC,gBACA,iBAED,wCACC,6BACA,WAED,+DACC,oBACA,mCAKF,wBACC,aAED,oBACC,gBAEA,6BACC,yBACA,sBACA,qBACA,iBAEA,mCACC,2BACA,mBAIH,iBACC,aAEA,oCACC,cACA,kBACA,2BACA,mBACA","file":"admin.min.css"}PK!W assets/css/youtube-channel.scssnu[.youtube_channel { float: left; clear: both; position: relative; box-sizing: border-box; /* Fix for FSE */ &.wp-block-youtube-channel { float: initial; } & .ytc_video_container { float: left; position: relative; & iframe { margin-bottom: 0; border: 0; } /* Fix for Twenty Fifteen */ & a { border: none; } } &.responsive { width:100%; & .ytc_video_container { width:100%!important; /* responsive iframe */ &.ar16_9 .fluid-width-video-wrapper { position: relative; padding-bottom: 56.25%; /* 16:9 */ height: 0; } &.ar4_3 .fluid-width-video-wrapper { position: relative; padding-bottom: 75%; /* 4:3; */ height: 0; } & .fluid-width-video-wrapper iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } } } // .responsive & .ytc_thumb { display: block; overflow: hidden; position: relative; height: 0; width: 100%; top: 0; right: 0; bottom: 0; left: 0; cursor: pointer; &>span { height: 0; width: 100%; display: block; -webkit-background-size: cover; background-size: cover; background-position: center center; background-repeat: no-repeat; &:before { content: " "; display: block; // width: 48px; // height: 48px; width: 84px; height: 59px; background-image: url(../img/yt_play.png); background-position: top center; background-repeat: no-repeat; background-color: transparent; // opacity: .6; opacity: 0.9; // transition: .4s; position: absolute; top: 50%; left: 50%; padding: 0!important; // margin-left: -24px; // margin-top: -25px; margin-left: -42px; margin-top: -30px; cursor: pointer; transform: scale(0.85); } // Title inside thumbnail .ytc_title_inside { display: block; position: absolute; margin: 0; padding: 10px; width: 100%; color: #fff; background: rgba(0,0,0,0.6); font-weight: 500; font-size: 1.4rem; &.ytc_title_inside_bottom { bottom: 0; } } } &:hover>span:before { // opacity: 1; background-position: bottom center; } /* Aspect Ratio Thumbs */ &.ar16_9, &.ar16_9>span/*, &.ar16_9>span:before*/ { padding-bottom: 56.26%; } &.ar4_3, &.ar4_3>span/*, &.ar4_3>span:before*/ { padding-bottom: 75%; } } // .ytc_thumb /* link */ & .ytc_link { clear: both; float: left; position: relative; width: 100%; &>p { padding: 0; margin: 0; } } /* Debug Errors */ & p.ytc_error { color: #d00; } } // .youtube_channel .clearfix:after, .widget_youtube-channel:after, .youtube_channel:after { clear: both; content: " "; /* Older browser do not support empty content */ display: block; height: 0; visibility: hidden; } PK!/O&assets/css/youtube-channel.min.css.mapnu[{"version":3,"sourceRoot":"","sources":["youtube-channel.scss"],"names":[],"mappings":"AAAA,iBACC,WACA,WACA,kBACA,sBAGA,0CACC,cAGD,sCACC,WACA,kBAEA,6CACC,gBACA,SAGD,wCACC,YAIF,4BACC,WACA,iDACC,sBAGA,mFACC,kBACA,sBACA,SAED,kFACC,kBACA,mBACA,SAED,mFACC,kBACA,MACA,OACA,WACA,YAMH,4BACC,cACA,gBACA,kBACA,SACA,WACA,MACA,QACA,SACA,OACA,eAEA,iCACC,SACA,WACA,cACA,8BACA,sBACA,kCACA,4BAEA,wCACC,YACA,cAGA,WACA,YACA,yCACA,+BACA,4BACA,+BAEA,WAEA,kBACA,QACA,SACA,qBAGA,kBACA,iBACA,eACA,sBAID,mDACC,cACA,kBACA,SACA,aACA,WACA,WACA,0BACA,gBACA,iBAEA,2EACC,SAKH,8CAEC,kCAID,2EAGC,sBAED,yEAGC,mBAKF,2BACC,WACA,WACA,kBACA,WAEA,6BACC,UACA,SAKF,6BACC,WAKF,qEAGC,WACA,YACA,cACA,SACA","file":"youtube-channel.min.css"}PK!˥assets/img/yt_play.pngnu[PNG  IHDRTvVlIDATxkhW Їmmnn6RBT"*JT+((QCUOJ0 TMIH1hۘCM593ɺuʹw?fgwv;m(nY'r:,\Ű\ X!>e),5Fs@gE*wQq2Mˉ}AvԎeiee <YYY#``w ,%|r,pF%|P7EѰ gU%[̈́Ss&b5j'q Pc̜΁8 -rJ˽qkf=KD%T1GE^k9%4piYjA#Q 2M!3%Ip x<4|Ϧb"&9bf!NB| b? =J-$// 8 BXyy9ϧ6]9iﳺa26uTjcRKZn}}}lĉ& ECP 6TvA6n8r }B-$ztuu}1cPV4DJJJXNNqhGC{$kl˖-v60n4ZP գmذnj#uzmHP=YQQy9SGmm-+(( 5P=|>[pe ٶm,C,YBRS655qS}gff+dKlj-j{^j.DoS u;ڰD :~xj=&M6hHȲ\mS2 |yZzk䈁^lm2Bk̳Ƈdr x< GSӪ S>L8$4ᩁY Z Xeͤ3gY3 YgQ 04?D43^@-R 333?kh˘RfFVW*Hy1< Y3#c8&vN(gj o<9ΏR12nhCuH{|vw('U\ڥeߩQtߑG1?qt儮;KBera.m# 5gWVj|W+{π2+wcy}*J ;٨ E,Tm32Fey^8ʥ߿JUMjߚoK)p %sHզb^أRUCe~xA.L\^:Zˁ(;TmؒdD?8$:Tmj@){lti6PL}9OW桡+{酘Qj!摛a sPn}ρ)6>oTYeַSI eG==vՏ@mАQ|?mzzX/Y]Xr~G§zwu=X]Ԇ%gB:`l{;ky'UG;C-$YC}=gdRM7O-d^3G:]F8zȚ($/b C΂ŖFGw5]`jh-[-CХ:C5xx8w> ]%\&7RWȖR_[k旳 [|gg-ʡ6.B6hxԆ%UP8j=L6hT[_#b8z/o(k䈱[c E*FHh5>8BC}NZYq:%NUӪ Ӂ j|AB SjuԂD X3tLw-1y֗&Ϣ&*5ةNj$~6^HAP/jL7.TmXAjJ5\ C+q” a>4oWfY?KIENDB`PK!^P::assets/js/youtube-channel.jsnu[/* jshint esversion: 6 */ // initialize BiggerPicture let bp = BiggerPicture({ target: document.body }); document.addEventListener('click', function(event) { // If the clicked element doesn`t have the right selector, bail if (!event.target.parentElement || !event.target.parentElement.matches('.ytc-lightbox')) return; // Don`t follow the link event.preventDefault(); // Trigger BiggerPicture bp.open({ items: event.target.parentElement, el: event.target.parentElement, scale: 0.80 }); }, false);PK!q//assets/js/tinymce/plugin.jsnu[( function() { tinymce.PluginManager.add( 'youtube_channel', function( editor, url ) { // Add a button that opens a window editor.addButton( 'youtube_channel_shortcode', { tooltip: 'My YouTube Channel', icon: 'ytc', onclick: function() { // Open window editor.windowManager.open( { title: 'My YouTube Channel', // width: 600, // height: 400, // autoScroll: true, // resizable: true, // classes: 'ytc-shortcode-popup', bodyType: 'tabpanel', buttons: [ { text: 'Insert Shortcode', onclick: 'submit', classes: 'widget btn primary', minWidth: 130 }, { text: 'Cancel', onclick: 'close' } ], body: [ { title: 'General Settings', type: 'form', items: [ { type: 'textbox', name: 'class', label: 'Custom CSS Class', value: '', tooltip: 'Enter custom class for YTC block, if you wish to target block styling' }, { type: 'textbox', name: 'channel', label: 'YouTube Channel ID', value: '', // tooltip: '' }, { type: 'textbox', name: 'handle', label: 'Handle', value: '', // tooltip: '' }, { type: 'textbox', name: 'playlist', label: 'Playlist ID', value: '', // tooltip: '' }, { type: 'listbox', name: 'resource', label: 'Resource to use', tooltip: '', values : [ {text: 'Channel (User Uploads)', value: '0'}, {text: 'Playlist', value: '2'}, ], value : '0' }, { type: 'listbox', name: 'cache', label: 'Cache feed', tooltip: '', values : [ {text: 'Do not cache', value: '0'}, {text: '1 minute', value: '60'}, {text: '5 minutes', value: '300'}, {text: '15 minutes', value: '900'}, {text: '30 minutes', value: '1800'}, {text: '1 hour', value: '3600'}, {text: '2 hours', value: '7200'}, {text: '5 hours', value: '18000'}, {text: '10 hours', value: '36000'}, {text: '12 hours', value: '43200'}, {text: '18 hours', value: '64800'}, {text: '1 day', value: '86400'}, {text: '2 days', value: '172800'}, {text: '3 days', value: '259200'}, {text: '4 days', value: '345600'}, {text: '5 days', value: '432000'}, {text: '6 days', value: '518400'}, {text: '1 week', value: '604800'}, {text: '2 weeks', value: '1209600'}, {text: '3 weeks', value: '1814400'}, {text: '1 month', value: '2419200'}, ], value : '300' }, { type: 'textbox', name: 'fetch', label: 'Fetch', value: '10', tooltip: 'Number of videos that will be used for random pick (min 2, max 50, default 25)' }, { type: 'textbox', name: 'skip', label: 'Skip', value: '0', tooltip: 'Number of videos to skip (not applicable for embedded playlist and random pick (min 0, max 49, default 0)' }, { type: 'textbox', name: 'num', label: 'Show', value: '1', tooltip: 'Number of videos to display' }, { type: 'checkbox', name: 'privacy', label: 'Use Enhanced Privacy', tooltip: 'Enable this option to protect your visitors privacy', checked: false }, { type: 'checkbox', name: 'random', label: 'Random video', tooltip: 'Show random video from resource (Have no effect if \"Embed as\" has been set to \"Embedded Playlist\")', checked: false }, ] }, { title: 'Video Settings', type: 'form', items: [ { type: 'listbox', name: 'ratio', label: 'Aspect Ratio', // tooltip: '', values : [ {text: 'Widescreen (16:9)', value: '3'}, {text: 'Standard TV (4:3)', value: '1'}, ], value : '3' }, { type: 'checkbox', name: 'responsive', label: 'Responsive video', tooltip: 'Make video responsive (distribute one full width video per row)', checked: true }, { type: 'textbox', name: 'width', label: 'Initial width (px)', value: '306', tooltip: 'Set initial width for video or thumbnail (in pixels)' }, { type: 'listbox', name: 'display', label: 'Embed as', tooltip: '', values : [ {text: 'Thumbnail', value: 'thumbnail'}, {text: 'HTML5 (iframe)', value: 'iframe'}, {text: 'HTML5 (iframe) Asynchronous', value: 'iframe2'}, {text: 'Embedded Playlist', value: 'playlist'}, ], value : 'thumbnail' }, { type: 'listbox', name: 'thumb_quality', label: 'Thumbnail Quality', tooltip: '', values : [ {text: 'Default Quality (120x90px)', value: 'default'}, {text: 'Medium Quality (320x180px)', value: 'mqdefault'}, {text: 'High Quality (480x360px)', value: 'hqdefault'}, {text: 'Standard Definition (640x480px)', value: 'sddefault'}, {text: 'Maximum Resolution (1280x720px)', value: 'maxresdefault'}, ], value : 'hqdefault' }, { type: 'checkbox', name: 'nolightbox', label: 'Disable YTC lightbox', tooltip: 'This will work only for Thumbnail and will open linked video in new tab', checked: false }, { type: 'checkbox', name: 'no_thumb_title', label: 'Hide thumbnail tooltip', checked: false }, { type: 'checkbox', name: 'controls', label: 'Hide player controls', checked: false }, { type: 'checkbox', name: 'nobrand', label: 'Hide YT Logo', tooltip: 'Does not work for all videos', checked: true }, { type: 'checkbox', name: 'noanno', label: 'Hide annotations', checked: true }, { type: 'checkbox', name: 'norel', label: 'Hide related videos', checked: true }, { type: 'checkbox', name: 'autoplay', label: 'Autoplay video/playlist', checked: false }, { type: 'checkbox', name: 'mute', label: 'Mute video on autoplay', checked: false }, ] }, { title: 'Content Layout', type: 'form', items: [ { type: 'listbox', name: 'showtitle', label: 'Show video title', tooltip: '', values : [ {text: 'Hide title', value: 'none'}, {text: 'Above video/thumbnail', value: 'above'}, {text: 'Below video/thumbnail', value: 'below'}, {text: 'Inside thumbnail, top aligned', value: 'inside'}, {text: 'Inside thumbnail, bottom aligned', value: 'inside_b'}, ], value : 'none' }, { type: 'checkbox', name: 'linktitle', label: 'Link outside title to video', checked: false }, { type: 'listbox', name: 'titletag', label: 'Title HTML tag', tooltip: 'Select which HTML tag to use for title wrapper.', values : [ {text: 'h3', value: 'h3'}, {text: 'h4', value: 'h4'}, {text: 'h5', value: 'h5'}, {text: 'div', value: 'div'}, {text: 'span', value: 'span'}, {text: 'strong', value: 'strong'}, ], value : 'none' }, { type: 'checkbox', name: 'showdesc', label: 'Show video description', checked: false }, { type: 'textbox', name: 'desclen', label: 'Description length', value: '0', tooltip: 'Set number of characters to cut down video description to (0 means full length)' }, ] }, { title: 'Link to Channel', type: 'form', items: [ { type: 'listbox', name: 'link_to', label: 'Link to', // tooltip: '', values : [ {text: 'Hide link', value: 'none'}, {text: 'Channel page URL', value: 'channel'}, // ex 1 {text: 'Handle URL', value: 'handle'}, // new 2023 ], value : 'none' }, { type: 'textbox', name: 'goto_txt', label: 'Title for link', value: 'Visit our YouTube channel', }, ] } ], onsubmit: function( e ) { // Insert content when the window form is submitted // Open shortcode var shortcode = '[youtube_channel'; // General Settings if ( e.data.handle ) shortcode += ' handle=' + e.data.handle +''; if ( e.data.channel ) shortcode += ' channel=' + e.data.channel +''; if ( e.data.playlist ) shortcode += ' playlist=' + e.data.playlist +''; if ( e.data.resource ) shortcode += ' resource=' + e.data.resource +''; if ( e.data.cache ) shortcode += ' cache=' + e.data.cache +''; if ( e.data.privacy ) shortcode += ' privacy=1'; if ( e.data.random ) shortcode += ' random=1'; if ( e.data.fetch ) shortcode += ' fetch=' + e.data.fetch.replace(/[^0-9.]/g, '') +''; if ( e.data.skip ) shortcode += ' skip=' + e.data.skip.replace(/[^0-9.]/g, '') +''; if ( e.data.num ) shortcode += ' num=' + e.data.num.replace(/[^0-9.]/g, '') +''; // Video Settings if ( e.data.ratio ) shortcode += ' ratio=' + e.data.ratio + ''; if ( e.data.responsive ) shortcode += ' responsive=1'; if ( e.data.width ) shortcode += ' width=' + e.data.width.replace(/[^0-9.]/g, '') + ''; if ( e.data.display ) shortcode += ' display=' + e.data.display + ''; if ( e.data.thumb_quality ) shortcode += ' thumb_quality=' + e.data.thumb_quality + ''; if ( e.data.no_thumb_title ) shortcode += ' no_thumb_title=1'; if ( e.data.controls ) shortcode += ' controls=1'; if ( e.data.autoplay ) shortcode += ' autoplay=1'; if ( e.data.mute ) shortcode += ' mute=1'; if ( e.data.norel ) shortcode += ' norel=1'; if ( e.data.nobrand ) shortcode += ' nobrand=1'; if ( e.data.nolightbox ) shortcode += ' nolightbox=1'; // Content Layout if ( e.data.showtitle ) shortcode += ' showtitle=' + e.data.showtitle + ''; if ( e.data.linktitle ) shortcode += ' linktitle=1'; if ( e.data.titletag ) shortcode += ' titletag=' + e.data.titletag + ''; if ( e.data.showdesc ) shortcode += ' showdesc=1'; if ( e.data.desclen ) shortcode += ' desclen=' + e.data.desclen.replace(/[^0-9.]/g, '') + ''; if ( e.data.noanno ) shortcode += ' noanno=1'; // Link to Channel if ( e.data.link_to ) shortcode += ' link_to=' + e.data.link_to + ''; if ( e.data.goto_txt ) shortcode += ' goto_txt=\"' + e.data.goto_txt + '\"'; // Global if ( e.data.class ) shortcode += ' class=' + e.data.class + ''; // Close shortcode shortcode += ']'; editor.insertContent( shortcode ); } // onsubmit alert } ); } // onclick alert } ); } ); } )();PK!ƤVVassets/js/tinymce/plugin.min.jsnu[tinymce.PluginManager.add("youtube_channel",(function(editor,url){editor.addButton("youtube_channel_shortcode",{tooltip:"My YouTube Channel",icon:"ytc",onclick:function(){editor.windowManager.open({title:"My YouTube Channel",bodyType:"tabpanel",buttons:[{text:"Insert Shortcode",onclick:"submit",classes:"widget btn primary",minWidth:130},{text:"Cancel",onclick:"close"}],body:[{title:"General Settings",type:"form",items:[{type:"textbox",name:"class",label:"Custom CSS Class",value:"",tooltip:"Enter custom class for YTC block, if you wish to target block styling"},{type:"textbox",name:"channel",label:"YouTube Channel ID",value:""},{type:"textbox",name:"handle",label:"Handle",value:""},{type:"textbox",name:"playlist",label:"Playlist ID",value:""},{type:"listbox",name:"resource",label:"Resource to use",tooltip:"",values:[{text:"Channel (User Uploads)",value:"0"},{text:"Playlist",value:"2"}],value:"0"},{type:"listbox",name:"cache",label:"Cache feed",tooltip:"",values:[{text:"Do not cache",value:"0"},{text:"1 minute",value:"60"},{text:"5 minutes",value:"300"},{text:"15 minutes",value:"900"},{text:"30 minutes",value:"1800"},{text:"1 hour",value:"3600"},{text:"2 hours",value:"7200"},{text:"5 hours",value:"18000"},{text:"10 hours",value:"36000"},{text:"12 hours",value:"43200"},{text:"18 hours",value:"64800"},{text:"1 day",value:"86400"},{text:"2 days",value:"172800"},{text:"3 days",value:"259200"},{text:"4 days",value:"345600"},{text:"5 days",value:"432000"},{text:"6 days",value:"518400"},{text:"1 week",value:"604800"},{text:"2 weeks",value:"1209600"},{text:"3 weeks",value:"1814400"},{text:"1 month",value:"2419200"}],value:"300"},{type:"textbox",name:"fetch",label:"Fetch",value:"10",tooltip:"Number of videos that will be used for random pick (min 2, max 50, default 25)"},{type:"textbox",name:"skip",label:"Skip",value:"0",tooltip:"Number of videos to skip (not applicable for embedded playlist and random pick (min 0, max 49, default 0)"},{type:"textbox",name:"num",label:"Show",value:"1",tooltip:"Number of videos to display"},{type:"checkbox",name:"privacy",label:"Use Enhanced Privacy",tooltip:"Enable this option to protect your visitors privacy",checked:!1},{type:"checkbox",name:"random",label:"Random video",tooltip:'Show random video from resource (Have no effect if "Embed as" has been set to "Embedded Playlist")',checked:!1}]},{title:"Video Settings",type:"form",items:[{type:"listbox",name:"ratio",label:"Aspect Ratio",values:[{text:"Widescreen (16:9)",value:"3"},{text:"Standard TV (4:3)",value:"1"}],value:"3"},{type:"checkbox",name:"responsive",label:"Responsive video",tooltip:"Make video responsive (distribute one full width video per row)",checked:!0},{type:"textbox",name:"width",label:"Initial width (px)",value:"306",tooltip:"Set initial width for video or thumbnail (in pixels)"},{type:"listbox",name:"display",label:"Embed as",tooltip:"",values:[{text:"Thumbnail",value:"thumbnail"},{text:"HTML5 (iframe)",value:"iframe"},{text:"HTML5 (iframe) Asynchronous",value:"iframe2"},{text:"Embedded Playlist",value:"playlist"}],value:"thumbnail"},{type:"listbox",name:"thumb_quality",label:"Thumbnail Quality",tooltip:"",values:[{text:"Default Quality (120x90px)",value:"default"},{text:"Medium Quality (320x180px)",value:"mqdefault"},{text:"High Quality (480x360px)",value:"hqdefault"},{text:"Standard Definition (640x480px)",value:"sddefault"},{text:"Maximum Resolution (1280x720px)",value:"maxresdefault"}],value:"hqdefault"},{type:"checkbox",name:"nolightbox",label:"Disable YTC lightbox",tooltip:"This will work only for Thumbnail and will open linked video in new tab",checked:!1},{type:"checkbox",name:"no_thumb_title",label:"Hide thumbnail tooltip",checked:!1},{type:"checkbox",name:"controls",label:"Hide player controls",checked:!1},{type:"checkbox",name:"nobrand",label:"Hide YT Logo",tooltip:"Does not work for all videos",checked:!0},{type:"checkbox",name:"noanno",label:"Hide annotations",checked:!0},{type:"checkbox",name:"norel",label:"Hide related videos",checked:!0},{type:"checkbox",name:"autoplay",label:"Autoplay video/playlist",checked:!1},{type:"checkbox",name:"mute",label:"Mute video on autoplay",checked:!1}]},{title:"Content Layout",type:"form",items:[{type:"listbox",name:"showtitle",label:"Show video title",tooltip:"",values:[{text:"Hide title",value:"none"},{text:"Above video/thumbnail",value:"above"},{text:"Below video/thumbnail",value:"below"},{text:"Inside thumbnail, top aligned",value:"inside"},{text:"Inside thumbnail, bottom aligned",value:"inside_b"}],value:"none"},{type:"checkbox",name:"linktitle",label:"Link outside title to video",checked:!1},{type:"listbox",name:"titletag",label:"Title HTML tag",tooltip:"Select which HTML tag to use for title wrapper.",values:[{text:"h3",value:"h3"},{text:"h4",value:"h4"},{text:"h5",value:"h5"},{text:"div",value:"div"},{text:"span",value:"span"},{text:"strong",value:"strong"}],value:"none"},{type:"checkbox",name:"showdesc",label:"Show video description",checked:!1},{type:"textbox",name:"desclen",label:"Description length",value:"0",tooltip:"Set number of characters to cut down video description to (0 means full length)"}]},{title:"Link to Channel",type:"form",items:[{type:"listbox",name:"link_to",label:"Link to",values:[{text:"Hide link",value:"none"},{text:"Channel page URL",value:"channel"},{text:"Handle URL",value:"handle"}],value:"none"},{type:"textbox",name:"goto_txt",label:"Title for link",value:"Visit our YouTube channel"}]}],onsubmit:function(e){var shortcode="[youtube_channel";e.data.handle&&(shortcode+=" handle="+e.data.handle),e.data.channel&&(shortcode+=" channel="+e.data.channel),e.data.playlist&&(shortcode+=" playlist="+e.data.playlist),e.data.resource&&(shortcode+=" resource="+e.data.resource),e.data.cache&&(shortcode+=" cache="+e.data.cache),e.data.privacy&&(shortcode+=" privacy=1"),e.data.random&&(shortcode+=" random=1"),e.data.fetch&&(shortcode+=" fetch="+e.data.fetch.replace(/[^0-9.]/g,"")),e.data.skip&&(shortcode+=" skip="+e.data.skip.replace(/[^0-9.]/g,"")),e.data.num&&(shortcode+=" num="+e.data.num.replace(/[^0-9.]/g,"")),e.data.ratio&&(shortcode+=" ratio="+e.data.ratio),e.data.responsive&&(shortcode+=" responsive=1"),e.data.width&&(shortcode+=" width="+e.data.width.replace(/[^0-9.]/g,"")),e.data.display&&(shortcode+=" display="+e.data.display),e.data.thumb_quality&&(shortcode+=" thumb_quality="+e.data.thumb_quality),e.data.no_thumb_title&&(shortcode+=" no_thumb_title=1"),e.data.controls&&(shortcode+=" controls=1"),e.data.autoplay&&(shortcode+=" autoplay=1"),e.data.mute&&(shortcode+=" mute=1"),e.data.norel&&(shortcode+=" norel=1"),e.data.nobrand&&(shortcode+=" nobrand=1"),e.data.nolightbox&&(shortcode+=" nolightbox=1"),e.data.showtitle&&(shortcode+=" showtitle="+e.data.showtitle),e.data.linktitle&&(shortcode+=" linktitle=1"),e.data.titletag&&(shortcode+=" titletag="+e.data.titletag),e.data.showdesc&&(shortcode+=" showdesc=1"),e.data.desclen&&(shortcode+=" desclen="+e.data.desclen.replace(/[^0-9.]/g,"")),e.data.noanno&&(shortcode+=" noanno=1"),e.data.link_to&&(shortcode+=" link_to="+e.data.link_to),e.data.goto_txt&&(shortcode+=' goto_txt="'+e.data.goto_txt+'"'),e.data.class&&(shortcode+=" class="+e.data.class),shortcode+="]",editor.insertContent(shortcode)}})}})}));PK!K]]assets/js/admin.jsnu[function ytcFieldSwitch(fIds, fSelectors, newState) { fSelectors.forEach(function(fSelector, index){ ytcWidgetField = document.querySelector("label[for='" + fIds + fSelector + "']"); if ("hide" == newState) { ytcWidgetField.classList.add("hidden"); } else { ytcWidgetField.classList.remove("hidden"); } }); } function ytcToggle(fieldsGroup, fIds) { var fTrigger = document.getElementById(fIds + fieldsGroup); var fSelectors, fState; switch (fieldsGroup) { case "resource": fSelectors = ["random"]; fState = 2 == fTrigger.value ? "hide" : "show"; break; case "responsive": fSelectors = ["width"]; fState = fTrigger.checked ? "hide" : "show"; break; case "display": fSelectors = ["thumb_quality", "no_thumb_title"]; fState = "thumbnail" !== fTrigger.value ? "hide" : "show"; break; case "showtitle": fSelectors = ["linktitle", "titletag"]; fState = "none" == fTrigger.value ? "hide" : "show"; break; case "showdesc": fSelectors = ["desclen"]; fState = !fTrigger.checked ? "hide" : "show"; break; case "link_to": fSelectors = ["goto_txt", "popup_goto"]; fState = "none" == fTrigger.value ? "hide" : "show"; break; } if ("hide" == fState) { ytcFieldSwitch(fIds, fSelectors, "hide"); } else if ("show" == fState) { ytcFieldSwitch(fIds, fSelectors, "show"); } } PK!qfG## assets/js/youtube-channel.min.jsnu[let bp=BiggerPicture({target:document.body});document.addEventListener("click",(function(event){event.target.parentElement&&event.target.parentElement.matches(".ytc-lightbox")&&(event.preventDefault(),bp.open({items:event.target.parentElement,el:event.target.parentElement,scale:.8}))}),!1);PK!>assets/js/admin.min.jsnu[function ytcFieldSwitch(e,t,i){t.forEach(function(t,d){ytcWidgetField=document.querySelector("label[for='"+e+t+"']"),"hide"==i?ytcWidgetField.classList.add("hidden"):ytcWidgetField.classList.remove("hidden")})}function ytcToggle(e,t){var i,d,c=document.getElementById(t+e);switch(e){case"resource":i=["random"],d=2==c.value?"hide":"show";break;case"responsive":i=["width"],d=c.checked?"hide":"show";break;case"display":i=["thumb_quality","no_thumb_title"],d="thumbnail"!==c.value?"hide":"show";break;case"showtitle":i=["linktitle","titletag"],d="none"==c.value?"hide":"show";break;case"showdesc":i=["desclen"],d=c.checked?"show":"hide";break;case"link_to":i=["goto_txt","popup_goto"],d="none"==c.value?"hide":"show"}"hide"==d?ytcFieldSwitch(t,i,"hide"):"show"==d&&ytcFieldSwitch(t,i,"show")}PK!Ud8assets/lib/bigger-picture/css/bigger-picture.min.css.mapnu[{"version":3,"sourceRoot":"","sources":["../scss/bigger-picture.scss"],"names":[],"mappings":"AAOA,qBACC,KACC,YAED,GACC,WAGF,kBACC,KACC,4BAED,GACC,yBAGF,gBACC,KACC,uBAED,GACC,0BAIF,SA/BC,MACA,OACA,WACA,YA8BA,eACA,YAGA,eACA,kBACA,0CACA,yBACC,kBAzCD,MACA,OACA,WACA,YAwCC,2BACA,6DAKD,cACC,kBACA,UACA,wBACA,YACA,YAIF,UA1DC,MACA,OACA,WACA,YAyDA,kBACA,aAGD,SACC,iBACA,sBACC,YAIF,aAvEC,MACA,OACA,WACA,YAsEA,kBACA,eAEC,6BACC,gBAMH,UACC,oBAGD,QACC,kBACA,QACA,SACA,iBACA,eACA,0BACA,wBAEC,kBAhGD,MACA,OACA,WACA,YAgGA,cACC,aAID,mBACC,YAED,mBACC,UACA,0BAKF,iCACC,UACA,wCACC,oBAIF,aACC,kBA1HA,MACA,OACA,WACA,YAyHA,oBACA,gBACA,uBACA,wBACA,oBACC,oBACA,eACA,kBACA,SACA,2BACA,WACA,mBACA,gBACA,0BACC,gCACA,UAGF,iBACC,UAIF,UACC,kBACA,2BACA,cACA,YACA,YACA,YAGD,kBAEC,QACA,QACA,iBACA,YACA,WACA,0BAEC,4CACC,2BAGF,gCACC,2LACA,kBACA,SACA,QACA,WACA,mBAGF,SACC,WACA,OACA,qBAED,MACC,MACA,QACA,YACA,WACA,wBACA,aACC,+LACA,kBACA,WACA,QACA,WAIF,eAEC,kBACA,YACA,gBACA,0BACA,+EA5MA,MACA,OACA,WACA,YA6MC,kBACA,SAIF,SACC,aACA,0BACA,gBACA,UAED,QACC,kBACA,MACA,OACA,WACA,WACA,4BACA,gCACA,0BACA,yBAGD,kBAEC,kBACA,WACA,YAED,MACC,YACA,uCACA,uCACA,kCAGD,QACC,kBACA,UACA,0BACA,2BACA,kBACA,cACA,gBACA,mBACA,SACA,2BACA,kBACA,uBACA,cACA,uBACA,wBACA,UACC,cAIF,WACC,kBAGD,SACC,kBACA,cACC,gBAKD,kBACC,aAED,4BACC,mBACA,yCACC,eAKH,+BACC,WACC,kCAIF,yBACC,MACC,YACA,WACA,aACC,WACA,QACA,UAGF,kBAEC,iBACA,YACA,WACA,gCACC,QACA,SACA,WAGF,kBAEC,iBACA,WACA,YAED,UACC","file":"bigger-picture.min.css"}PK!lȕ4assets/lib/bigger-picture/css/bigger-picture.min.cssnu[@keyframes bp-fadein{from{opacity:.01}to{opacity:1}}@keyframes bp-bar{from{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes bp-o{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.bp-wrap{top:0;left:0;width:100%;height:100%;position:fixed;z-index:999;contain:strict;touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.bp-wrap>div:first-child{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);animation:bp-fadein .48s cubic-bezier(0.215, 0.61, 0.355, 1)}.bp-vid audio{position:absolute;left:14px;width:calc(100% - 28px);bottom:14px;height:50px}.bp-inner{top:0;left:0;width:100%;height:100%;position:absolute;display:flex}.bp-html{display:contents}.bp-html>:first-child{margin:auto}.bp-img-wrap{top:0;left:0;width:100%;height:100%;position:absolute;contain:strict}.bp-img-wrap.bp-drag .bp-img{cursor:grabbing}.bp-close{contain:layout size}.bp-img{position:absolute;top:50%;left:50%;user-select:none;cursor:zoom-in;background-size:100% 100%}.bp-img img,.bp-img div{position:absolute;top:0;left:0;width:100%;height:100%}.bp-img .bp-o{display:none}.bp-zoomed .bp-img{cursor:grab}.bp-zoomed .bp-cap{opacity:0;animation:none !important}.bp-zoomed.bp-small .bp-controls{opacity:0}.bp-zoomed.bp-small .bp-controls button{pointer-events:none}.bp-controls{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;text-align:left;transition:opacity .3s;animation:bp-fadein .3s}.bp-controls button{pointer-events:auto;cursor:pointer;position:absolute;border:0;background:rgba(0,0,0,.15);opacity:.9;transition:all .1s;contain:content}.bp-controls button:hover{background-color:rgba(0,0,0,.2);opacity:1}.bp-controls svg{fill:#fff}.bp-count{position:absolute;color:rgba(255,255,255,.9);line-height:1;margin:16px;height:50px;width:100px}.bp-prev,.bp-next{top:50%;right:0;margin-top:-32px;height:64px;width:58px;border-radius:3px 0 0 3px}.bp-prev:hover:before,.bp-next:hover:before{transform:translateX(-2px)}.bp-prev:before,.bp-next:before{content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z'/%3E%3C/svg%3E");position:absolute;left:7px;top:9px;width:46px;transition:all .2s}.bp-prev{right:auto;left:0;transform:scalex(-1)}.bp-x{top:0;right:0;height:55px;width:58px;border-radius:0 0 0 3px}.bp-x:before{content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32' fill='%23fff'%3E%3Cpath d='M24 10l-2-2-6 6-6-6-2 2 6 6-6 6 2 2 6-6 6 6 2-2-6-6z'/%3E%3C/svg%3E");position:absolute;width:37px;top:8px;right:10px}.bp-if,.bp-vid{position:relative;margin:auto;background:#000;background-size:100% 100%}.bp-if iframe,.bp-if video,.bp-if div,.bp-vid iframe,.bp-vid video,.bp-vid div{top:0;left:0;width:100%;height:100%;position:absolute;border:0}.bp-load{display:flex;background-size:100% 100%;overflow:hidden;z-index:1}.bp-bar{position:absolute;top:0;left:0;height:3px;width:100%;transform:translateX(-100%);background:rgba(255,255,255,.9);border-radius:0 3px 3px 0;animation:bp-bar 4s both}.bp-o,.bp-o:after{border-radius:50%;width:90px;height:90px}.bp-o{margin:auto;border:10px solid rgba(255,255,255,.2);border-left-color:rgba(255,255,255,.9);animation:bp-o 1s infinite linear}.bp-cap{position:absolute;bottom:2%;background:rgba(9,9,9,.8);color:rgba(255,255,255,.9);border-radius:4px;max-width:95%;line-height:1.3;padding:.6em 1.2em;left:50%;transform:translateX(-50%);width:fit-content;width:-moz-fit-content;display:table;transition:opacity .3s;animation:bp-fadein .2s}.bp-cap a{color:inherit}.bp-inline{position:absolute}.bp-lock{overflow-y:hidden}.bp-lock body{overflow:scroll}.bp-noclose .bp-x{display:none}.bp-noclose:not(.bp-zoomed){touch-action:pan-y}.bp-noclose:not(.bp-zoomed) .bp-img-wrap{cursor:zoom-in}@media(prefers-reduced-motion){.bp-wrap *{animation-duration:0s !important}}@media(max-width: 500px){.bp-x{height:47px;width:47px}.bp-x:before{width:34px;top:6px;right:6px}.bp-prev,.bp-next{margin-top:-27px;height:54px;width:45px}.bp-prev:before,.bp-next:before{top:7px;left:2px;width:43px}.bp-o,.bp-o:after{border-width:6px;width:60px;height:60px}.bp-count{margin:12px 10px}}/*# sourceMappingURL=bigger-picture.min.css.map */PK!RR!assets/lib/bigger-picture/LICENSEnu[The MIT License (MIT) Copyright (c) Henry Dollman (henrygd.me) 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. PK!9YkNN/assets/lib/bigger-picture/bigger-picture.min.jsnu[var BiggerPicture=function(){function t(){}const n=t=>t;function e(t,n){for(const e in n)t[e]=n[e];return t}function o(t){return t()}function r(t){t.forEach(o)}function i(t){return"function"==typeof t}function s(t,n){return t!=t?n==n:t!==n}function c(n,e,o){n.$$.on_destroy.push(((n,...e)=>{if(null==n)return t;const o=n.subscribe(...e);return o.unsubscribe?()=>o.unsubscribe():o})(e,o))}function u(n){return n&&i(n.destroy)?n.destroy:t}let l=()=>globalThis.performance.now(),a=t=>requestAnimationFrame(t);const p=new Set;function f(t){p.forEach((n=>{n.c(t)||(p.delete(n),n.f())})),0!==p.size&&a(f)}function d(t){let n;return 0===p.size&&a(f),{promise:new Promise((e=>{p.add(n={c:t,f:e})})),abort(){p.delete(n)}}}function m(t,n){t.appendChild(n)}function h(t,n,e){t.insertBefore(n,e||null)}function b(t){t.parentNode.removeChild(t)}function g(t){return document.createElement(t)}function x(){return document.createTextNode("")}function w(t,n,e,o){return t.addEventListener(n,e,o),()=>t.removeEventListener(n,e,o)}function v(t,n,e){null==e?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function y(t,n,e,o){null===e?t.style.removeProperty(n):t.style.setProperty(n,e)}function $(t,n,e){t.classList[e?"add":"remove"](n)}let k,_,M=0,S={};function P(t,n,e,o,r,i,s,c=0){const u=16.666/o;let l="{\n";for(let t=0;1>=t;t+=u){const o=n+(e-n)*i(t);l+=100*t+`%{${s(o,1-o)}}\n`}const a=l+`100% {${s(e,1-e)}}\n}`,p=`_bp_${Math.round(1e9*Math.random())}_${c}`;if(!S[p]){if(!k){const t=g("style");document.head.appendChild(t),k=t.sheet}S[p]=1,k.insertRule(`@keyframes ${p} ${a}`,k.cssRules.length)}const f=t.style.animation||"";return t.style.animation=`${f?f+", ":""}${p} ${o}ms linear ${r}ms 1 both`,M+=1,p}function z(t,n){t.style.animation=(t.style.animation||"").split(", ").filter(n?t=>0>t.indexOf(n):t=>-1===t.indexOf("_bp")).join(", "),n&&!--M&&a((()=>{if(M)return;let t=k.cssRules.length;for(;t--;)k.deleteRule(t);S={}}))}function A(t){_=t}const T=[],I=[],C=[],N=[],E=Promise.resolve();let O=0;function R(t){C.push(t)}const q=new Set;let F,j=0;function B(){const t=_;do{for(;T.length>j;){const t=T[j];j++,A(t),D(t.$$)}for(A(null),T.length=0,j=0;I.length;)I.pop()();for(let t=0;C.length>t;t+=1){const n=C[t];q.has(n)||(q.add(n),n())}C.length=0}while(T.length);for(;N.length;)N.pop()();O=0,q.clear(),A(t)}function D(t){if(null!==t.t){t.update(),r(t.before_update);const n=t.u;t.u=[-1],t.t&&t.t.p(t.ctx,n),t.after_update.forEach(R)}}function J(){return F||(F=Promise.resolve(),F.then((()=>{F=null}))),F}function K(t,n,e){t.dispatchEvent(((t,n,e=0)=>{const o=document.createEvent("CustomEvent");return o.initCustomEvent(t,e,0,n),o})(`${n?"intro":"outro"}${e}`))}const L=new Set;let W;function X(){W={r:0,c:[],p:W}}function Y(){W.r||r(W.c),W=W.p}function G(t,n){t&&t.i&&(L.delete(t),t.i(n))}function H(t,n,e,o){if(t&&t.o){if(L.has(t))return;L.add(t),W.c.push((()=>{L.delete(t),o&&(e&&t.d(1),o())})),t.o(n)}}const Q={duration:0};function U(e,o,r){let s,c,u=o(e,r),a=0,p=0;function f(){s&&z(e,s)}function m(){const{delay:o=0,duration:r=300,l:i=n,g:m=t,css:h}=u||Q;h&&(s=P(e,0,1,r,o,i,h,p++)),m(0,1);const b=l()+o,g=b+r;c&&c.abort(),a=1,R((()=>K(e,1,"start"))),c=d((t=>{if(a){if(t>=g)return m(1,0),K(e,1,"end"),f(),a=0;if(t>=b){const n=i((t-b)/r);m(n,1-n)}}return a}))}let h=0;return{start(){h||(h=1,z(e),i(u)?(u=u(),J().then(m)):m())},invalidate(){h=0},end(){a&&(f(),a=0)}}}function V(e,o,s){let c,u=o(e,s),a=1;const p=W;function f(){const{delay:o=0,duration:i=300,l:s=n,g:f=t,css:m}=u||Q;m&&(c=P(e,1,0,i,o,s,m));const h=l()+o,b=h+i;R((()=>K(e,0,"start"))),d((t=>{if(a){if(t>=b)return f(0,1),K(e,0,"end"),--p.r||r(p.c),0;if(t>=h){const n=s((t-h)/i);f(1-n,n)}}return a}))}return p.r+=1,i(u)?J().then((()=>{u=u(),f()})):f(),{end(t){t&&u.g&&u.g(1,0),a&&(c&&z(e,c),a=0)}}}function Z(t){t&&t.c()}function tt(t,n,e,s){const{t:c,on_mount:u,on_destroy:l,after_update:a}=t.$$;c&&c.m(n,e),s||R((()=>{const n=u.map(o).filter(i);l?l.push(...n):r(n),t.$$.on_mount=[]})),a.forEach(R)}function nt(t,n){const e=t.$$;null!==e.t&&(r(e.on_destroy),e.t&&e.t.d(n),e.on_destroy=e.t=null,e.ctx=[])}function et(n,e,o,i,s,c,u,l=[-1]){const a=_;A(n);const p=n.$$={t:null,ctx:null,v:c,update:t,not_equal:s,bound:{},on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(e.context||(a?a.$$.context:[])),callbacks:{},u:l,skip_bound:0,root:e.target||a.$$.root};u&&u(p.root);let f=0;p.ctx=o?o(n,e.v||{},((t,e,...o)=>{const r=o.length?o[0]:e;return p.ctx&&s(p.ctx[t],p.ctx[t]=r)&&(!p.skip_bound&&p.bound[t]&&p.bound[t](r),f&&((t,n)=>{-1===t.$$.u[0]&&(T.push(t),O||(O=1,E.then(B)),t.$$.u.fill(0)),t.$$.u[n/31|0]|=1<{const t=e.indexOf(n);-1!==t&&e.splice(t,1)}}$set(t){this.$$set&&0!==Object.keys(t).length&&(this.$$.skip_bound=1,this.$$set(t),this.$$.skip_bound=0)}}function rt(t){const n=t-1;return n*n*n+1}function it(t,{delay:n=0,duration:e=400,l:o=rt,x:r=0,y:i=0,opacity:s=0}={}){const c=getComputedStyle(t),u=+c.opacity,l="none"===c.transform?"":c.transform,a=u*(1-s);return{delay:n,duration:e,l:o,css(t,n){return`\n\t\t\ttransform: ${l} translate(${(1-t)*r}px, ${(1-t)*i}px);\n\t\t\topacity: ${u-a*n}`}}}const st=[];function ct(n,e=t){let o;const r=new Set;function i(t){if(s(n,t)&&(n=t,o)){const t=!st.length;for(const t of r)t[1](),st.push(t,n);if(t){for(let t=0;st.length>t;t+=2)st[t][0](st[t+1]);st.length=0}}}return{set:i,update(t){i(t(n))},subscribe(s,c=t){const u=[s,c];return r.add(u),1===r.size&&(o=e(i)||t),s(n),()=>{r.delete(u),0===r.size&&(o(),o=null)}}}}function ut(t,n){if(t===n||t!=t)return()=>t;const e=typeof t;if(Array.isArray(t)){const e=n.map(((n,e)=>ut(t[e],n)));return t=>e.map((n=>n(t)))}if("number"===e){const e=n-t;return n=>t+n*e}}function lt(t,o={}){const r=ct(t);let i,s=t;function c(c,u){if(null==t)return r.set(t=c),Promise.resolve();s=c;let a=i,p=0,{delay:f=0,duration:m=400,l:h=n,interpolate:b=ut}=e(e({},o),u);if(0===m)return a&&(a.abort(),a=null),r.set(t=s),Promise.resolve();const g=l()+f;let x;return i=d((n=>{if(g>n)return 1;p||(x=b(t,c),"function"==typeof m&&(m=m(t,c)),p=1),a&&(a.abort(),a=null);const e=n-g;return e>m?(r.set(t=c),0):(r.set(t=x(h(e/m))),1)})),i.promise}return{set:c,update(n,e){return c(n(s,t),e)},subscribe:r.subscribe}}const at=ct(0),pt=globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches,ft=t=>({l:rt,duration:pt?0:t});function dt(t){let n,e,o,r,i=!t[2]&&mt();return{c(){n=g("div"),i&&i.c(),v(n,"class","bp-load"),y(n,"background-image","url("+t[0]+")")},m(t,e){h(t,n,e),i&&i.m(n,null),r=1},p(e,o){(t=e)[2]?i&&(i.d(1),i=null):i||(i=mt(),i.c(),i.m(n,null)),(!r||1&o)&&y(n,"background-image","url("+t[0]+")")},i(i){r||(R((()=>{o&&o.end(1),e=U(n,it,{duration:t[1]?400:0}),e.start()})),r=1)},o(t){e&&e.invalidate(),t&&(o=V(n,it,{duration:480})),r=0},d(t){t&&b(n),i&&i.d(),t&&o&&o.end()}}}function mt(t){let n,e;return{c(){n=g("span"),e=g("span"),v(n,"class","bp-bar"),v(e,"class","bp-o")},m(t,o){h(t,n,o),h(t,e,o)},d(t){t&&b(n),t&&b(e)}}}function ht(t){let n,e=(!t[1]||t[2])&&dt(t);return{c(){e&&e.c(),n=x()},m(t,o){e&&e.m(t,o),h(t,n,o)},p(t,[o]){!t[1]||t[2]?e?(e.p(t,o),6&o&&G(e,1)):(e=dt(t),e.c(),G(e,1),e.m(n.parentNode,n)):e&&(X(),H(e,1,1,(()=>{e=null})),Y())},i(t){G(e)},o(t){H(e)},d(t){e&&e.d(t),t&&b(n)}}}function bt(t,n,e){let o;c(t,at,(t=>e(2,o=t)));let{thumb:r}=n,{loaded:i}=n;return t.$$set=t=>{"thumb"in t&&e(0,r=t.thumb),"loaded"in t&&e(1,i=t.loaded)},[r,i,o]}class gt extends ot{constructor(t){super(),et(this,t,bt,ht,s,{thumb:0,loaded:1})}}function xt(t){let n,e,o,r,i,s,c,u;return{c(){n=g("img"),v(n,"srcset",e=t[7].img),v(n,"sizes",o=t[8].sizes||t[1]+"px"),v(n,"alt",r=t[7].alt)},m(e,o){h(e,n,o),s=1,c||(u=w(n,"error",t[24]),c=1)},p(t,e){(!s||2&e[0]&&o!==(o=t[8].sizes||t[1]+"px"))&&v(n,"sizes",o)},i(t){s||(i&&i.end(1),s=1)},o(t){i=V(n,it,{}),s=0},d(t){t&&b(n),t&&i&&i.end(),c=0,u()}}}function wt(t){let n,e;return n=new gt({v:{thumb:t[7].thumb,loaded:t[2]}}),{c(){Z(n.$$.t)},m(t,o){tt(n,t,o),e=1},p(t,e){const o={};4&e[0]&&(o.loaded=t[2]),n.$set(o)},i(t){e||(G(n.$$.t,t),e=1)},o(t){H(n.$$.t,t),e=0},d(t){nt(n,t)}}}function vt(t){let n,e,o,i,s,c,l=t[2]&&xt(t),a=t[3]&&wt(t);return{c(){n=g("div"),e=g("div"),l&&l.c(),o=x(),a&&a.c(),v(e,"class","bp-img"),y(e,"background-image","url("+t[7].thumb+")"),y(e,"width",t[0][0]+"px"),y(e,"height",t[0][1]+"px"),y(e,"transform","translate3d("+(t[0][0]/-2+t[6][0])+"px, "+(t[0][1]/-2+t[6][1])+"px, 0)"),v(n,"class","bp-img-wrap"),$(n,"bp-drag",t[4]),$(n,"bp-close",t[5])},m(r,p){h(r,n,p),m(n,e),l&&l.m(e,null),m(e,o),a&&a.m(e,null),i=1,s||(c=[u(t[18].call(null,e)),w(n,"wheel",t[13]),w(n,"pointerdown",t[14]),w(n,"pointermove",t[15]),w(n,"pointerup",t[17]),w(n,"pointercancel",t[16])],s=1)},p(t,r){t[2]?l?(l.p(t,r),4&r[0]&&G(l,1)):(l=xt(t),l.c(),G(l,1),l.m(e,o)):l&&(X(),H(l,1,1,(()=>{l=null})),Y()),t[3]?a?(a.p(t,r),8&r[0]&&G(a,1)):(a=wt(t),a.c(),G(a,1),a.m(e,null)):a&&(X(),H(a,1,1,(()=>{a=null})),Y()),(!i||1&r[0])&&y(e,"width",t[0][0]+"px"),(!i||1&r[0])&&y(e,"height",t[0][1]+"px"),(!i||65&r[0])&&y(e,"transform","translate3d("+(t[0][0]/-2+t[6][0])+"px, "+(t[0][1]/-2+t[6][1])+"px, 0)"),16&r[0]&&$(n,"bp-drag",t[4]),32&r[0]&&$(n,"bp-close",t[5])},i(t){i||(G(l),G(a),i=1)},o(t){H(l),H(a),i=0},d(t){t&&b(n),l&&l.d(),a&&a.d(),s=0,r(c)}}}function yt(t,n,e){let o,r,i,s;c(t,at,(t=>e(23,i=t)));let{v:u}=n,{$:l}=n,{k:a,_:p,M:f,next:d,zoomed:m,container:h}=u;c(t,m,(t=>e(22,o=t)));let b,g,x,w,v,y,$,k,_,M,S,P=a.maxZoom||p.maxZoom||10,z=u.S(a),A=z[0],T=0;const I=+a.width,C=[],N=new Map,E=lt(z,ft(400));c(t,E,(t=>e(0,s=t)));const O=lt([0,0],ft(400));c(t,O,(t=>e(6,r=t)));const R=([t,n],o=s)=>{const r=(o[0]-h.w)/2,i=(o[1]-h.h)/2;return 0>r?t=0:t>r?l?(t=v?r+(t-r)/10:r)>r+20&&e(4,v=f()):t=r:-r>t&&(l?-r-20>(t=v?-r-(-r-t)/10:-r)&&e(4,v=d()):t=-r),0>i?n=0:n>i?n=i:-i>n&&(n=-i),[t,n]},q=(t,n=P)=>{if(i)return;const o=z[0]*P,[c,u]=s;let l=c+c*n,p=u+u*n;if(n>0)l>o&&(l=o,p=z[1]*P),l>I&&(l=I,p=+a.height);else if(z[0]>l)return E.set(z),O.set([0,0]);let{x:f,y:d,width:m,height:h}=w.getBoundingClientRect();const b=t.clientX-f-m/2,g=t.clientY-d-h/2;f=l/m*-b+b,d=p/h*-g+g;const x=[l,p];E.set(x).then((()=>{e(1,A=Math.round(Math.max(A,l)))})),O.set(R([r[0]+f,r[1]+d],x))},F=t=>N.delete(t.pointerId);return t.$$set=t=>{"$"in t&&e(20,l=t.$)},t.$$.update=()=>{if(2097153&t.$$.u[0]&&m.set(s[0]-10>z[0]),14680064&t.$$.u[0]&&i&&o&&!p.intro){const t=ft(480);O.set([0,0],t),E.set(z,t),e(5,S=1)}},[s,A,b,g,v,S,r,a,p,m,h,E,O,t=>{p.inline&&!o||(t.preventDefault(),q(t,t.deltaY/-300))},t=>{2!==t.button&&(t.preventDefault(),e(4,v=1),N.set(t.pointerId,t),$=t.clientX,k=t.clientY,_=r[0],M=r[1])},t=>{if(N.size>1)return e(4,v=0),p.noPinch?.(h.el)||(t=>{const[n,e]=N.set(t.pointerId,t).values(),o=Math.hypot(n.clientX-e.clientX,n.clientY-e.clientY);x=x||{clientX:(n.clientX+e.clientX)/2,clientY:(n.clientY+e.clientY)/2},q(x,((T||o)-o)/-35),T=o})(t);if(!v)return;let n=t.clientX,r=t.clientY;y=C.push({x:n,y:r})>2,n-=$,r-=k,o||(-90>r&&e(4,v=!p.noClose&&u.close()),30>Math.abs(r)&&(n>40&&e(4,v=f()),-40>n&&e(4,v=d()))),o&&y&&!i&&O.set(R([_+n,M+r]),{duration:0})},F,function(t){if(F(t),x&&(e(4,v=T=0),x=N.size?x:null),v){if(e(4,v=0),t.target===this&&!p.noClose)return u.close();if(y){const[t,n,e]=C.slice(-3);Math.hypot(n.x-e.x,n.y-e.y)>5&&O.set(R([r[0]-5*(t.x-e.x),r[1]-5*(t.y-e.y)]))}else p.onImageClick?.(h.el,a)||q(t,o?-P:P);y=0,C.length=0}},t=>{w=t,u.P((()=>{e(21,z=u.S(a)),!p.inline&&l||(E.set(z),O.set([0,0]))})),u.A(a).then((()=>{e(2,b=1),u.T()})),setTimeout((()=>{e(3,g=!b)}),250)},u,l,z,o,i,t=>p.onError?.(h,a,t)]}class $t extends ot{constructor(t){super(),et(this,t,yt,vt,s,{v:19,$:20},null,[-1,-1])}}function kt(t){let n,e,o,i,s,c;return o=new gt({v:{thumb:t[2].thumb,loaded:t[0]}}),{c(){n=g("div"),e=g("iframe"),Z(o.$$.t),v(e,"allow","autoplay; fullscreen"),v(e,"title",t[2].title),v(n,"class","bp-if"),y(n,"width",t[1][0]+"px"),y(n,"height",t[1][1]+"px")},m(r,l){h(r,n,l),m(n,e),tt(o,n,null),i=1,s||(c=[u(t[3].call(null,e)),w(e,"load",t[5])],s=1)},p(t,[e]){const r={};1&e&&(r.loaded=t[0]),o.$set(r),(!i||2&e)&&y(n,"width",t[1][0]+"px"),(!i||2&e)&&y(n,"height",t[1][1]+"px")},i(t){i||(G(o.$$.t,t),i=1)},o(t){H(o.$$.t,t),i=0},d(t){t&&b(n),nt(o),s=0,r(c)}}}function _t(t,n,e){let o,r,{v:i}=n;const{k:s}=i,c=()=>e(1,r=i.S(s));return c(),i.P(c),[o,r,s,t=>t.src=s.iframe,i,()=>e(0,o=1)]}class Mt extends ot{constructor(t){super(),et(this,t,_t,kt,s,{v:4})}}function St(t){let n,e,o,r,i;return e=new gt({v:{thumb:t[2].thumb,loaded:t[0]}}),{c(){n=g("div"),Z(e.$$.t),v(n,"class","bp-vid"),y(n,"width",t[1][0]+"px"),y(n,"height",t[1][1]+"px"),y(n,"background-image","url("+t[2].thumb+")")},m(s,c){h(s,n,c),tt(e,n,null),o=1,r||(i=u(t[3].call(null,n)),r=1)},p(t,[r]){const i={};1&r&&(i.loaded=t[0]),e.$set(i),(!o||2&r)&&y(n,"width",t[1][0]+"px"),(!o||2&r)&&y(n,"height",t[1][1]+"px")},i(t){o||(G(e.$$.t,t),o=1)},o(t){H(e.$$.t,t),o=0},d(t){t&&b(n),nt(e),r=0,i()}}}function Pt(t,n,e){let o,r,{v:i}=n;const{k:s,_:c,container:u}=i,l=()=>e(1,r=i.S(s));l(),i.P(l);const a=(t,n)=>{for(const e in n)v(t,e,n[e])};return[o,r,s,t=>{let n;const r=(t,e)=>{Array.isArray(e)||(e=JSON.parse(e));for(const o of e){n||(n=g(o.type?.includes("audio")?"audio":"video"),a(n,{controls:1,autoplay:1,playsinline:1,tabindex:"0"}));const e=g(t);a(e,o),"source"==t&&w(e,"error",(t=>c.onError?.(u,s,t))),m(n,e)}};r("source",s.sources),r("track",s.tracks||[]),w(n,"canplay",(()=>e(0,o=1))),m(t,n)},i]}class zt extends ot{constructor(t){super(),et(this,t,Pt,St,s,{v:4})}}function At(n){let e,o,i,c,l,a,p,f,d,x,y=n[6].i,k=Ot(n),_=n[0].length>1&&Rt(n);return{c(){e=g("div"),o=g("div"),k.c(),c=g("div"),l=g("button"),_&&_.c(),v(l,"class","bp-x"),v(l,"title","Close"),v(l,"aria-label","Close"),v(c,"class","bp-controls"),v(e,"class","bp-wrap"),$(e,"bp-zoomed",n[10]),$(e,"bp-inline",n[8]),$(e,"bp-small",n[7]),$(e,"bp-noclose",n[5].noClose)},m(t,r){h(t,e,r),m(e,o),k.m(e,null),m(e,c),m(c,l),_&&_.m(c,null),f=1,d||(x=[w(l,"click",n[1]),u(p=n[14].call(null,e))],d=1)},p(n,o){64&o[0]&&s(y,y=n[6].i)?(X(),H(k,1,1,t),Y(),k=Ot(n),k.c(),G(k),k.m(e,c)):k.p(n,o),n[0].length>1?_?_.p(n,o):(_=Rt(n),_.c(),_.m(c,null)):_&&(_.d(1),_=null),1024&o[0]&&$(e,"bp-zoomed",n[10]),256&o[0]&&$(e,"bp-inline",n[8]),128&o[0]&&$(e,"bp-small",n[7]),32&o[0]&&$(e,"bp-noclose",n[5].noClose)},i(t){f||(i&&i.end(1),G(k),a&&a.end(1),f=1)},o(t){i=V(o,it,{duration:480}),H(k),a=V(c,it,{}),f=0},d(t){t&&b(e),t&&i&&i.end(),k.d(t),_&&_.d(),t&&a&&a.end(),d=0,r(x)}}}function Tt(n){let e,o=n[6].html+"";return{c(){e=g("div"),v(e,"class","bp-html")},m(t,n){h(t,e,n),e.innerHTML=o},p(t,n){64&n[0]&&o!==(o=t[6].html+"")&&(e.innerHTML=o)},i:t,o:t,d(t){t&&b(e)}}}function It(n){let e,o;return e=new Mt({v:{v:n[13]()}}),{c(){Z(e.$$.t)},m(t,n){tt(e,t,n),o=1},p:t,i(t){o||(G(e.$$.t,t),o=1)},o(t){H(e.$$.t,t),o=0},d(t){nt(e,t)}}}function Ct(n){let e,o;return e=new zt({v:{v:n[13]()}}),{c(){Z(e.$$.t)},m(t,n){tt(e,t,n),o=1},p:t,i(t){o||(G(e.$$.t,t),o=1)},o(t){H(e.$$.t,t),o=0},d(t){nt(e,t)}}}function Nt(t){let n,e;return n=new $t({v:{v:t[13](),$:t[7]}}),{c(){Z(n.$$.t)},m(t,o){tt(n,t,o),e=1},p(t,e){const o={};128&e[0]&&(o.$=t[7]),n.$set(o)},i(t){e||(G(n.$$.t,t),e=1)},o(t){H(n.$$.t,t),e=0},d(t){nt(n,t)}}}function Et(t){let n,e,o,r=t[6].caption+"";return{c(){n=g("div"),v(n,"class","bp-cap")},m(t,e){h(t,n,e),n.innerHTML=r,o=1},p(t,e){(!o||64&e[0])&&r!==(r=t[6].caption+"")&&(n.innerHTML=r)},i(t){o||(e&&e.end(1),o=1)},o(t){e=V(n,it,{duration:200}),o=0},d(t){t&&b(n),t&&e&&e.end()}}}function Ot(t){let n,e,o,i,s,c,u,l,a;const p=[Nt,Ct,It,Tt],f=[];function d(t,n){return t[6].img?0:t[6].sources?1:t[6].iframe?2:3}e=d(t),o=f[e]=p[e](t);let m=t[6].caption&&Et(t);return{c(){n=g("div"),o.c(),m&&m.c(),c=x(),v(n,"class","bp-inner")},m(o,r){h(o,n,r),f[e].m(n,null),m&&m.m(o,r),h(o,c,r),u=1,l||(a=[w(n,"pointerdown",t[21]),w(n,"pointerup",t[22])],l=1)},p(t,r){let i=e;e=d(t),e===i?f[e].p(t,r):(X(),H(f[i],1,1,(()=>{f[i]=null})),Y(),o=f[e],o?o.p(t,r):(o=f[e]=p[e](t),o.c()),G(o,1),o.m(n,null)),t[6].caption?m?(m.p(t,r),64&r[0]&&G(m,1)):(m=Et(t),m.c(),G(m,1),m.m(c.parentNode,c)):m&&(X(),H(m,1,1,(()=>{m=null})),Y())},i(e){u||(G(o),R((()=>{s&&s.end(1),i=U(n,t[12],1),i.start()})),G(m),u=1)},o(e){H(o),i&&i.invalidate(),s=V(n,t[12],0),H(m),u=0},d(t){t&&b(n),f[e].d(),t&&s&&s.end(),m&&m.d(t),t&&b(c),l=0,r(a)}}}function Rt(t){let n,e,o,i,s,c=`${t[4]+1} / ${t[0].length}`;return{c(){n=g("div"),e=g("button"),o=g("button"),v(n,"class","bp-count"),v(e,"class","bp-prev"),v(e,"title","Previous"),v(e,"aria-label","Previous"),v(o,"class","bp-next"),v(o,"title","Next"),v(o,"aria-label","Next")},m(r,u){h(r,n,u),n.innerHTML=c,h(r,e,u),h(r,o,u),i||(s=[w(e,"click",t[2]),w(o,"click",t[3])],i=1)},p(t,e){17&e[0]&&c!==(c=`${t[4]+1} / ${t[0].length}`)&&(n.innerHTML=c)},d(t){t&&b(n),t&&b(e),t&&b(o),i=0,r(s)}}}function qt(t){let n,e,o=t[0]&&At(t);return{c(){o&&o.c(),n=x()},m(t,r){o&&o.m(t,r),h(t,n,r),e=1},p(t,e){t[0]?o?(o.p(t,e),1&e[0]&&G(o,1)):(o=At(t),o.c(),G(o,1),o.m(n.parentNode,n)):o&&(X(),H(o,1,1,(()=>{o=null})),Y())},i(t){e||(G(o),e=1)},o(t){H(o),e=0},d(t){o&&o.d(t),t&&b(n)}}}function Ft(t,n,e){let o,{items:r}=n,{target:i}=n;const s=document.documentElement;let u,l,a,p,f,d,m,h,b,x,v;const y=t=>v=t,$={},k=ct(0);c(t,k,(t=>e(10,o=t)));const _=()=>{l.onClose?.($.el,b),at.set(1),e(0,r=null),p?.focus({preventScroll:1})},M=()=>P(u-1),S=()=>P(u+1),P=t=>{m=t-u,e(4,u=z(t))},z=t=>(t+r.length)%r.length,A=t=>{const{key:n,shiftKey:e}=t;if("Escape"===n)!l.noClose&&_();else if("ArrowRight"===n)S();else if("ArrowLeft"===n)M();else if("Tab"===n){const{activeElement:n}=document;if(e||!n.controls){t.preventDefault();const{focusWrap:o=$.el}=l,r=[...o.querySelectorAll("*")].filter((t=>t.tabIndex>=0));let i=r.indexOf(n);i+=r.length+(e?-1:1),r[i%r.length].focus()}}},T=({width:t=1920,height:n=1080})=>{const{scale:e=.99}=l,o=Math.min(1,$.w/t*e,$.h/n*e);return[Math.round(t*o),Math.round(n*o)]},I=()=>{if(r){const t=r[z(u+1)],n=r[z(u-1)];!t.preload&&C(t),!n.preload&&C(n)}},C=t=>{if(t.img){const n=g("img");return n.sizes=l.sizes||T(t)[0]+"px",n.srcset=t.img,t.preload=1,n.decode().catch((t=>{}))}};return t.$$set=t=>{"items"in t&&e(0,r=t.items),"target"in t&&e(15,i=t.target)},t.$$.update=()=>{1835121&t.$$.u[0]&&r&&(e(6,b=r[u]),e(19,x=b.hasOwnProperty("html")),a&&(x&&y(null),l.onUpdate?.($.el,b)))},[r,_,M,S,u,l,b,f,d,h,o,k,(t,n)=>a&&r?it(t,{x:(m>0?20:-20)*(n?1:-1),duration:250}):(e(18,a=n),l.intro?it(t,{y:n?10:-10}):(t=>{let n;if(x){const e=t.firstChild.firstChild;n=[e.clientWidth,e.clientHeight]}else n=T(b);const e=(b.element||p).getBoundingClientRect(),o=e.left-($.w-e.width)/2,r=e.top-($.h-e.height)/2,i=e.width/n[0],s=e.height/n[1];return{duration:480,l:rt,css:(t,n)=>`transform:translate3d(${o*n}px, ${r*n}px, 0) scale3d(${i+t*(1-i)}, ${s+t*(1-s)}, 1)`}})(t)),()=>({k:b,S:T,A:C,T:I,_:l,M,next:S,close:_,P:y,zoomed:k,container:$}),t=>{let n,o;e(20,$.el=t,$),l.onOpen?.($.el,b),d||(n=w(globalThis,"keydown",A));const r=new ResizeObserver((t=>{o&&(e(20,$.w=t[0].contentRect.width,$),e(20,$.h=t[0].contentRect.height,$),e(7,f=769>$.w),v?.(),l.onResize?.($.el,b)),o=1}));return r.observe(t),{destroy(){r.disconnect(),n?.(),at.set(0),s.classList.remove("bp-lock"),l.onClosed?.()}}},i,t=>{e(5,l=t),e(8,d=l.inline);const n=l.items;!d&&s.scrollHeight>s.clientHeight&&s.classList.add("bp-lock"),p=document.activeElement,e(20,$.w=i.offsetWidth,$),e(20,$.h=i===document.body?globalThis.innerHeight:i.clientHeight,$),e(7,f=769>$.w),e(4,u=l.position||0),e(0,r=Array.isArray(n)?n.map(((t,n)=>(l.el&&l.el===t.element&&e(4,u=n),{i:n,...t}))):(n.length?[...n]:[n]).map(((t,n)=>(l.el===t&&e(4,u=n),{element:t,i:n,...t.dataset}))))},P,a,x,$,t=>e(9,h=t.target),function(t){2!==t.button&&t.target===this&&h===this&&!l.noClose&&_()}]}class jt extends ot{constructor(t){super(),et(this,t,Ft,qt,s,{items:0,target:15,open:16,close:1,M:2,next:3,setPosition:17},null,[-1,-1])}get items(){return this.$$.ctx[0]}get target(){return this.$$.ctx[15]}get open(){return this.$$.ctx[16]}get close(){return this.$$.ctx[1]}get M(){return this.$$.ctx[2]}get next(){return this.$$.ctx[3]}get setPosition(){return this.$$.ctx[17]}}return t=>new jt({...t,v:t})}(); PK! j2assets/lib/bigger-picture/scss/bigger-picture.scssnu[@mixin bpfillall() { top: 0; left: 0; width: 100%; height: 100%; } @keyframes bp-fadein { from { opacity: 0.01; } to { opacity: 1; } } @keyframes bp-bar { from { transform: translateX(-100%); } to { transform: translateX(0); } } @keyframes bp-o { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .bp-wrap { @include bpfillall; position: fixed; z-index: 999; /* If you're mounting on a portion of the screen and need visible overflow on .bp-wrap, change contain to "layout" on that instance */ contain: strict; touch-action: none; -webkit-tap-highlight-color: transparent; > div:first-child { position: absolute; @include bpfillall; background: rgba(0, 0, 0, 0.75); animation: bp-fadein 0.48s cubic-bezier(0.215, 0.61, 0.355, 1); } } .bp-vid { audio { position: absolute; left: 14px; width: calc(100% - 28px); bottom: 14px; height: 50px; } } .bp-inner { @include bpfillall; position: absolute; display: flex; } .bp-html { display: contents; > :first-child { margin: auto; } } .bp-img-wrap { @include bpfillall; position: absolute; contain: strict; &.bp-drag { .bp-img { cursor: grabbing; } } } // when closing a zoomed image contain: strict hides overflow .bp-close { contain: layout size; } .bp-img { position: absolute; top: 50%; left: 50%; user-select: none; cursor: zoom-in; background-size: 100% 100%; img, div { position: absolute; @include bpfillall; } .bp-o { display: none; } } .bp-zoomed { .bp-img { cursor: grab; } .bp-cap { opacity: 0; animation: none !important; } } // when zoomed on small screens, hide controls .bp-zoomed.bp-small .bp-controls { opacity: 0; button { pointer-events: none; } } .bp-controls { position: absolute; @include bpfillall; pointer-events: none; text-align: left; transition: opacity 0.3s; animation: bp-fadein 0.3s; button { pointer-events: auto; cursor: pointer; position: absolute; border: 0; background: rgba(0, 0, 0, 0.15); opacity: 0.9; transition: all 0.1s; contain: content; &:hover { background-color: rgba(0, 0, 0, 0.2); opacity: 1; } } svg { fill: #fff; } } .bp-count { position: absolute; color: rgba(255, 255, 255, 0.9); line-height: 1; margin: 16px; height: 50px; width: 100px; } .bp-prev, .bp-next { top: 50%; right: 0; margin-top: -32px; height: 64px; width: 58px; border-radius: 3px 0 0 3px; &:hover { &:before { transform: translateX(-2px); } } &:before { content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z'/%3E%3C/svg%3E"); position: absolute; left: 7px; top: 9px; width: 46px; transition: all 0.2s; } } .bp-prev { right: auto; left: 0; transform: scalex(-1); } .bp-x { top: 0; right: 0; height: 55px; width: 58px; border-radius: 0 0 0 3px; &:before { content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32' fill='%23fff'%3E%3Cpath d='M24 10l-2-2-6 6-6-6-2 2 6 6-6 6 2 2 6-6 6 6 2-2-6-6z'/%3E%3C/svg%3E"); position: absolute; width: 37px; top: 8px; right: 10px; } } .bp-if, .bp-vid { position: relative; margin: auto; background: #000; background-size: 100% 100%; iframe, video, div { @include bpfillall; position: absolute; border: 0; } } .bp-load { display: flex; background-size: 100% 100%; overflow: hidden; z-index: 1; } .bp-bar { position: absolute; top: 0; left: 0; height: 3px; width: 100%; transform: translateX(-100%); background: rgba(255, 255, 255, 0.9); border-radius: 0 3px 3px 0; animation: bp-bar 4s both; } .bp-o, .bp-o:after { border-radius: 50%; width: 90px; height: 90px; } .bp-o { margin: auto; border: 10px solid rgba(255, 255, 255, 0.2); border-left-color: rgba(255, 255, 255, 0.9); animation: bp-o 1s infinite linear; } .bp-cap { position: absolute; bottom: 2%; background: rgba(9, 9, 9, 0.8); color: rgba(255, 255, 255, 0.9); border-radius: 4px; max-width: 95%; line-height: 1.3; padding: 0.6em 1.2em; left: 50%; transform: translateX(-50%); width: fit-content; width: -moz-fit-content; display: table; transition: opacity 0.3s; animation: bp-fadein 0.2s; a { color: inherit; } } .bp-inline { position: absolute; } .bp-lock { overflow-y: hidden; body { overflow: scroll; } } .bp-noclose { .bp-x { display: none; } &:not(.bp-zoomed) { touch-action: pan-y; .bp-img-wrap { cursor: zoom-in; } } } @media (prefers-reduced-motion) { .bp-wrap * { animation-duration: 0s !important; } } @media (max-width: 500px) { .bp-x { height: 47px; width: 47px; &:before { width: 34px; top: 6px; right: 6px; } } .bp-prev, .bp-next { margin-top: -27px; height: 54px; width: 45px; &:before { top: 7px; left: 2px; width: 43px; } } .bp-o, .bp-o:after { border-width: 6px; width: 60px; height: 60px; } .bp-count { margin: 12px 10px; } } PK!|wfKKLICENSEnu[ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . PK!oW update.phpnu[ __( 'Serve YouTube videos from channel or playlist right to widget area', 'youtube-channel' ), 'customize_selective_refresh' => true, ) ); } // END function __construct() // Outputs the content of the widget public function widget( $args, $instance ) { global $wpau_my_youtube_channel; // Skip rendering attempt if no widget_id is available. if ( empty( $args['widget_id'] ) && true !== boolval( $wpau_my_youtube_channel->defaults['block_preview'] ) ) { return; } echo $args['before_widget']; if ( ! empty( $instance['title'] ) ) { echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'], $instance, YTC_PLUGIN_SLUG ) . $args['after_title']; } echo $wpau_my_youtube_channel->generate_ytc_block( $instance ); echo $args['after_widget']; } // END public function widget() public function form( $instance ) { global $wpau_my_youtube_channel; $defaults = get_option( 'youtube_channel_defaults' ); // Outputs the options form for widget settings // General Options $title = ! empty( $instance['title'] ) ? sanitize_text_field( $instance['title'] ) : ''; $class = ! empty( $instance['class'] ) ? sanitize_html_classes( $instance['class'] ) : ''; $handle = ! empty( $instance['handle'] ) ? sanitize_text_field( $instance['handle'] ) : $defaults['handle']; $vanity = ! empty( $instance['vanity'] ) ? sanitize_text_field( $instance['vanity'] ) : $defaults['vanity']; // deprecated $channel = ! empty( $instance['channel'] ) ? ytc_sanitize_api_key( $instance['channel'] ) : $defaults['channel']; $username = ! empty( $instance['username'] ) ? sanitize_key( $instance['username'] ) : $defaults['username']; // deprecated $playlist = ! empty( $instance['playlist'] ) ? ytc_sanitize_api_key( $instance['playlist'] ) : $defaults['playlist']; $resource = isset( $instance['resource'] ) ? intval( $instance['resource'] ) : intval( $defaults['resource'] ); // resource to use: channel, favorites, playlist $cache = isset( $instance['cache'] ) ? intval( $instance['cache'] ) : intval( $defaults['cache'] ); $fetch = ! empty( $instance['fetch'] ) ? intval( $instance['fetch'] ) : intval( $defaults['fetch'] ); // items to fetch $num = ! empty( $instance['num'] ) ? intval( $instance['num'] ) : intval( $defaults['num'] ); // number of items to show $skip = isset( $instance['skip'] ) ? intval( $instance['skip'] ) : 0; // number of items to skip $privacy = ! empty( $instance['privacy'] ) ? boolval( $instance['privacy'] ) : false; $random = ! empty( $instance['random'] ) ? boolval( $instance['random'] ) : false; // Video Settings $ratio = ! empty( $instance['ratio'] ) ? intval( $instance['ratio'] ) : intval( $defaults['ratio'] ); $width = ! empty( $instance['width'] ) ? intval( $instance['width'] ) : intval( $defaults['width'] ); $responsive = isset( $instance['responsive'] ) ? boolval( $instance['responsive'] ) : true; $display = ! empty( $instance['display'] ) ? sanitize_key( $instance['display'] ) : sanitize_key( $defaults['display'] ); $thumb_quality = ! empty( $instance['thumb_quality'] ) ? sanitize_key( $instance['thumb_quality'] ) : sanitize_key( $defaults['thumb_quality'] ); $no_thumb_title = ! empty( $instance['no_thumb_title'] ) ? boolval( $instance['no_thumb_title'] ) : false; $controls = ! empty( $instance['controls'] ) ? boolval( $instance['controls'] ) : false; $autoplay = ! empty( $instance['autoplay'] ) ? boolval( $instance['autoplay'] ) : false; $autoplay_mute = ! empty( $instance['autoplay_mute'] ) ? boolval( $instance['autoplay_mute'] ) : false; $norel = ! empty( $instance['norel'] ) ? boolval( $instance['norel'] ) : false; // Content Layout $showtitle = ! empty( $instance['showtitle'] ) ? sanitize_key( $instance['showtitle'] ) : 'none'; $linktitle = ! empty( $instance['linktitle'] ) ? boolval( $instance['linktitle'] ) : false; $titletag = ! empty( $instance['titletag'] ) ? strtolower( esc_attr( $instance['titletag'] ) ) : 'h3'; $showdesc = ! empty( $instance['showdesc'] ) ? boolval( $instance['showdesc'] ) : false; $modestbranding = ! empty( $instance['modestbranding'] ) ? boolval( $instance['modestbranding'] ) : false; $desclen = ! empty( $instance['desclen'] ) ? intval( $instance['desclen'] ) : 0; $hideanno = ! empty( $instance['hideanno'] ) ? boolval( $instance['hideanno'] ) : false; // Link to Channel $link_to = ! empty( $instance['link_to'] ) ? sanitize_key( $instance['link_to'] ) : 'none'; $goto_txt = ! empty( $instance['goto_txt'] ) ? sanitize_text_field( $instance['goto_txt'] ) : ''; $popup_goto = isset( $instance['popup_goto'] ) ? intval( $instance['popup_goto'] ) : intval( $defaults['popup_goto'] ); ?>

get_field_id( '' ) > 0 ) : ?> slug = YTC_PLUGIN_SLUG; $this->option_name = YTC_PLUGIN_OPTION_KEY; $this->defaults = get_option( $this->option_name ); // register actions add_action( 'admin_init', array( $this, 'register_settings' ) ); add_action( 'admin_menu', array( $this, 'add_menu' ) ); } // END public function __construct /** * hook into WP's register_settings action hook */ public function register_settings() { global $wpau_my_youtube_channel; // =========================== General =========================== // --- Add settings section General so we can add fields to it --- add_settings_section( 'ytc_general', // Section Name esc_html__( 'General', 'youtube-channel' ), // Section Title array( &$this, 'settings_general_section_description' ), // Section Callback Function esc_attr( $this->slug . '_general' ) // Page Name ); // --- Add Fields to General section --- // YouTube Data API Key add_settings_field( $this->option_name . 'apikey', // Setting Slug esc_html__( 'YouTube Data API Key', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_text' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // Section Name array( 'field' => $this->option_name . '[apikey]', 'desc_required' => true, 'desc_global' => true, 'description' => __( 'Your YouTube Data API Key', 'youtube-channel' ), 'desc_link_url' => 'https://console.developers.google.com/project', 'desc_link_txt' => __( 'Google Developers Console', 'youtube-channel' ), 'class' => 'regular-text password blur-on-lose-focus', 'value' => isset( $this->defaults['apikey'] ) ? esc_html( $this->defaults['apikey'] ) : '', ) // args ); // Channel ID add_settings_field( $this->option_name . 'channel', // Setting Slug esc_html__( 'YouTube Channel ID', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_text' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // Section Name array( 'field' => $this->option_name . '[channel]', 'label_for' => $this->option_name . '[channel]', 'desc_required' => true, 'desc_link_url' => 'https://www.youtube.com/account_advanced', 'desc_link_txt' => __( 'YouTube Advanced Settings', 'youtube-channel' ), 'description' => __( 'Your YouTube Channel ID you can get from', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['channel'] ) ? $this->defaults['channel'] : '', ) // args ); // Handle (new in 2022) add_settings_field( $this->option_name . 'handle', // id esc_html__( 'YouTube Handle', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_text' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[handle]', 'label_for' => $this->option_name . '[handle]', 'desc_link_url' => 'https://www.youtube.com/handle', 'desc_link_txt' => __( 'Your handle', 'youtube-channel' ), 'description' => __( 'Your YouTube Handle handle including @ from', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['handle'] ) ? $this->defaults['handle'] : '', ) // args ); // Vanity (deprecated in 2022) add_settings_field( $this->option_name . 'vanity', // id esc_html__( 'YouTube Vanity Name', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_text' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[vanity]', 'label_for' => $this->option_name . '[vanity]', 'desc_deprecated' => true, 'description' => sprintf( // translators: %s is replaced with www.youtube.com/c/ __( 'Your YouTube Custom Name used to be part of %s', 'youtube-channel' ), 'www.youtube.com/c/' ), 'class' => 'regular-text deprecated', 'value' => isset( $this->defaults['vanity'] ) ? $this->defaults['vanity'] : '', ) // args ); // Username add_settings_field( $this->option_name . 'username', // id esc_html__( 'YouTube Username', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_text' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[username]', 'label_for' => $this->option_name . '[username]', 'desc_deprecated' => true, 'description' => __( 'Your YouTube legacy username', 'youtube-channel' ), 'class' => 'regular-text deprecated', 'value' => isset( $this->defaults['username'] ) ? $this->defaults['username'] : '', ) // args ); // Default Playlist add_settings_field( $this->option_name . 'playlist', // id esc_html__( 'Default Playlist ID', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_text' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[playlist]', 'label_for' => $this->option_name . '[playlist]', 'desc_optional' => true, 'description' => __( 'Enter default playlist ID (not playlist name)', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['playlist'] ) ? $this->defaults['playlist'] : '', ) // args ); // Resource add_settings_field( $this->option_name . 'resource', // id esc_html__( 'Resource to use', 'youtube-channel' ), // Title array( &$this, 'settings_field_select' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[resource]', 'label_for' => $this->option_name . '[resource]', 'description' => __( 'What to use as resource for feeds', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['resource'] ) ? $this->defaults['resource'] : '0', 'items' => array( '0' => __( 'Channel', 'youtube-channel' ), // '1' => __( 'Favourites', 'youtube-channel' ), // deprecated since 3.23.0 // '3' => __( 'Liked Video', 'youtube-channel' ), // deprecated since 3.23.0 '2' => __( 'Playlist', 'youtube-channel' ), ), ) // args ); // Cache add_settings_field( $this->option_name . 'cache', // id esc_html__( 'Cache Timeout', 'youtube-channel' ), array( &$this, 'settings_field_select' ), esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', array( 'field' => $this->option_name . '[cache]', 'label_for' => $this->option_name . '[cache]', 'description' => __( 'Define caching timeout for YouTube feeds, in seconds', 'youtube-channel' ), 'class' => 'wide-text', 'value' => isset( $this->defaults['cache'] ) ? $this->defaults['cache'] : '300', 'items' => $wpau_my_youtube_channel->cache_timeouts, ) ); // Fetch add_settings_field( $this->option_name . 'fetch', // id esc_html__( 'Fetch', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_number' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[fetch]', 'label_for' => $this->option_name . '[fetch]', 'description' => __( 'Number of videos that will be fetched from YouTube and used for random pick (min 2, max 50, default 25)', 'youtube-channel' ), 'class' => 'num', 'value' => isset( $this->defaults['fetch'] ) ? $this->defaults['fetch'] : 25, 'min' => 1, 'max' => 50, 'std' => 25, ) // args ); // Show add_settings_field( $this->option_name . 'num', // id esc_html__( 'Show', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_number' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[num]', 'label_for' => $this->option_name . '[num]', 'description' => __( 'Number of videos to display', 'youtube-channel' ), 'class' => 'num', 'value' => isset( $this->defaults['num'] ) ? $this->defaults['num'] : 1, 'min' => 1, 'max' => 50, 'std' => 1, ) // args ); // Timeout add_settings_field( $this->option_name . 'timeout', // id esc_html__( 'Timeout', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_number' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[timeout]', 'label_for' => $this->option_name . '[timeout]', 'description' => __( 'Time in seconds, before the connection with YouTube DATA Api is dropped and an error is returned', 'youtube-channel' ), 'class' => 'timeout', 'value' => isset( $this->defaults['timeout'] ) ? $this->defaults['timeout'] : 5, 'min' => 5, 'max' => 360, 'std' => 5, ) // args ); // SSL Verify add_settings_field( $this->option_name . 'sslverify', // id esc_html__( 'Verify SSL', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[sslverify]', 'label_for' => $this->option_name . '[sslverify]', 'label' => __( 'Yes', 'youtube-channel' ), 'description' => __( 'If your website host fail to verify SSL Certificate for GoogleApis.com server (if you see in YTC Error keywords cURL and SSL), disable this option.', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['sslverify'] ) ? $this->defaults['sslverify'] : false, ) // args ); // Enhanced privacy add_settings_field( $this->option_name . 'privacy', // id esc_html__( 'Enhanced Privacy', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[privacy]', 'label_for' => $this->option_name . '[privacy]', 'label' => __( 'Yes', 'youtube-channel' ), 'desc_link_url' => 'https://support.google.com/youtube/answer/171780', 'desc_link_txt' => __( 'Learn more here', 'youtube-channel' ), 'description' => __( 'Enable this option to protect your visitors privacy.', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['privacy'] ) ? $this->defaults['privacy'] : false, ) // args ); // Local Images add_settings_field( $this->option_name . 'local_img', // id esc_html__( 'Local Images', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[local_img]', 'label_for' => $this->option_name . '[local_img]', 'label' => __( 'Yes', 'youtube-channel' ), 'desc_link_url' => 'https://developer.chrome.com/docs/lighthouse/performance/uses-long-cache-ttl/', 'desc_link_txt' => __( 'Learn more here', 'youtube-channel' ), 'description' => __( 'Store video thumbnails locally. Can help with Speed Performance (efficient cache policy).', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['local_img'] ) ? $this->defaults['local_img'] : false, ) // args ); // Event Listener add_settings_field( $this->option_name . 'js_ev_listener', // id esc_html__( 'Event Listener', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[js_ev_listener]', 'label_for' => $this->option_name . '[js_ev_listener]', 'label' => __( 'Yes', 'youtube-channel' ), 'description' => __( 'If YTC block fail to render on your website because of async/defer loading of JavaScript, try to enable this option to wrap YTC code within DOMContentLoaded event listener', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['js_ev_listener'] ) ? $this->defaults['js_ev_listener'] : false, ) // args ); // TinyMCE icon add_settings_field( $this->option_name . 'tinymce', // id esc_html__( 'TinyMCE button', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[tinymce]', 'label_for' => $this->option_name . '[tinymce]', 'label' => __( 'Yes', 'youtube-channel' ), 'description' => sprintf( // translators: %s is replaced with plugin name __( 'Disable this option to hide %s button from TinyMCE toolbar on post and page editor.', 'youtube-channel' ), YTC_PLUGIN_NAME ), 'class' => 'checkbox', 'value' => isset( $this->defaults['tinymce'] ) ? $this->defaults['tinymce'] : false, ) // args ); // Widget Preview add_settings_field( $this->option_name . 'block_preview', // id esc_html__( 'Preview Widget in Block Editor', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_general' ), // Page Name 'ytc_general', // section array( 'field' => $this->option_name . '[block_preview]', 'label_for' => $this->option_name . '[block_preview]', 'label' => __( 'Yes', 'youtube-channel' ), 'description' => sprintf( // translators: %s is replaced with plugin name __( 'Disable this option to prevent %s Widget Preview gets rendered on Block Editor.', 'youtube-channel' ), YTC_PLUGIN_NAME ), 'class' => 'checkbox', 'value' => isset( $this->defaults['block_preview'] ) ? $this->defaults['block_preview'] : true, ) // args ); // --- Register setting General so $_POST handling is done --- register_setting( 'ytc_general', // Setting group $this->option_name, // option name array( $this, 'sanitize_options' ) ); // =========================== VIDEO =========================== // --- Add settings section Video so we can add fields to it --- add_settings_section( 'ytc_video', // Section Name esc_html__( 'Video Tweaks', 'youtube-channel' ), // Section Title array( &$this, 'settings_video_section_description' ), // Section Callback Function esc_attr( $this->slug . '_video' ) // Page Name ); // --- Add Fields to video section --- // Width add_settings_field( $this->option_name . 'width', // id esc_html__( 'Initial Width', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_number' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[width]', 'label_for' => $this->option_name . '[width]', 'description' => __( 'Set default width for displayed video, in pixels. This value have effect only if Responsive Video option is disabled!', 'youtube-channel' ), 'class' => 'num', 'value' => isset( $this->defaults['width'] ) ? $this->defaults['width'] : '306', 'min' => 120, 'max' => 1980, 'std' => 306, ) // args ); // Aspect Ratio add_settings_field( $this->option_name . 'ratio', // id esc_html__( 'Aspect ratio', 'youtube-channel' ), // Title array( &$this, 'settings_field_select' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[ratio]', 'label_for' => $this->option_name . '[ratio]', 'description' => __( 'Select aspect ratio for displayed video', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['ratio'] ) ? $this->defaults['ratio'] : '3', 'items' => array( '3' => '16:9', '1' => '4:3', ), ) // args ); // Display add_settings_field( $this->option_name . 'display', // id esc_html__( 'Embed as', 'youtube-channel' ), // Title array( &$this, 'settings_field_select' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[display]', 'label_for' => $this->option_name . '[display]', 'description' => __( 'Choose how to embed video block', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['display'] ) ? $this->defaults['display'] : 'thumbnail', 'items' => array( 'thumbnail' => __( 'Thumbnail', 'youtube-channel' ), 'iframe' => __( 'HTML5 (iframe)', 'youtube-channel' ), 'iframe2' => __( 'HTML5 (iframe) Asynchronous', 'youtube-channel' ), 'playlist' => __( 'Embedded Playlist', 'youtube-channel' ), ), ) // args ); // Thumbnail Quality add_settings_field( $this->option_name . 'thumb_quality', // id esc_html__( 'Thumbnail Quality', 'youtube-channel' ), // Title array( &$this, 'settings_field_select' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[thumb_quality]', 'label_for' => $this->option_name . '[thumb_quality]', 'description' => __( 'Choose preferred thumbnail quality. Please be aware, if you select Maximum Resolution but video does not have that thumbnail, you will get broken thumbnail on page!', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['thumb_quality'] ) ? $this->defaults['thumb_quality'] : '0', 'items' => array( 'default' => __( 'Default Quality (120x90px)', 'youtube-channel' ), 'mqdefault' => __( 'Medium Quality (320x180px)', 'youtube-channel' ), 'hqdefault' => __( 'High Quality (480x360px)', 'youtube-channel' ), 'sddefault' => __( 'Standard Definition (640x480px)', 'youtube-channel' ), 'maxresdefault' => __( 'Maximum Resolution (1280x720px)', 'youtube-channel' ), ), ) // args ); // Responsive add_settings_field( $this->option_name . 'responsive', // id esc_html__( 'Responsive Video', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[responsive]', 'label_for' => $this->option_name . '[responsive]', 'label' => __( 'Yes', ' __( 'Enable this option to make YTC videos and thumbnails responsive by default. Please note, this option will set videos and thumbnail to full width relative to parent container, and disable more than one video per row.', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['responsive'] ) ? $this->defaults['responsive'] : false, ) // args ); // Plays Inline add_settings_field( $this->option_name . 'playsinline', // id esc_html__( 'Play inline on iOS', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[playsinline]', 'label_for' => $this->option_name . '[playsinline]', 'label' => __( 'Yes', 'youtube-channel' ), 'desc_link_url' => 'https://developers.google.com/youtube/player_parameters#playsinline', 'desc_link_txt' => __( 'Learn more here', 'youtube-channel' ), 'description' => __( 'Enable this option to override fullscreen playback on iOS, and force inline playback on page and in lightbox.', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['playsinline'] ) ? $this->defaults['playsinline'] : false, ) // args ); // No Lightbox add_settings_field( $this->option_name . 'nolightbox', // id esc_html__( 'Disable Lightbox', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[nolightbox]', 'label_for' => $this->option_name . '[nolightbox]', 'label' => __( 'Yes', 'youtube-channel' ), 'description' => __( 'Enable this option to disable built-in lightbox for thumbnails (in case that you have youtube links lightbox trigger in theme or other plugin).', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['nolightbox'] ) ? $this->defaults['nolightbox'] : false, ) // args ); // Full Screen add_settings_field( $this->option_name . 'fullscreen', // id esc_html__( 'Full Screen', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[fullscreen]', 'label_for' => $this->option_name . '[fullscreen]', 'label' => __( 'Yes', 'youtube-channel' ), 'description' => __( 'Enable this option to make available Full Screen button for embedded playlists.', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['fullscreen'] ) ? $this->defaults['fullscreen'] : false, ) // args ); // No Player Controls add_settings_field( $this->option_name . 'controls', // id esc_html__( 'Hide Player Controls', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[controls]', 'label_for' => $this->option_name . '[controls]', 'label' => __( 'Yes', ' __( 'Enable this option to hide playback controls', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['controls'] ) ? $this->defaults['controls'] : false, ) // args ); // Autoplay add_settings_field( $this->option_name . 'autoplay', // id esc_html__( 'Autoplay video or playlist', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[autoplay]', 'label_for' => $this->option_name . '[autoplay]', 'label' => __( 'Yes', ' __( 'Enable this option to start video playback right after block is rendered', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['autoplay'] ) ? $this->defaults['autoplay'] : false, ) // args ); // Mute on autoplay add_settings_field( $this->option_name . 'autoplay_mute', // id esc_html__( 'Mute video on autoplay', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[autoplay_mute]', 'label_for' => $this->option_name . '[autoplay_mute]', 'label' => __( 'Yes', ' __( 'Enable this option to mute video when start autoplay', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['autoplay_mute'] ) ? $this->defaults['autoplay_mute'] : false, ) // args ); // Only channel related videos add_settings_field( $this->option_name . 'norel', // id esc_html__( 'Only channel related videos', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[norel]', 'label_for' => $this->option_name . '[norel]', 'label' => __( 'Yes', ' __( 'Enable this option to show after finished playback only related videos that come from the same channel as the video that was just played', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['norel'] ) ? $this->defaults['norel'] : false, ) // args ); // Hide Annotations add_settings_field( $this->option_name . 'hideanno', // id esc_html__( 'Hide video annotations', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[hideanno]', 'label_for' => $this->option_name . '[hideanno]', 'label' => __( 'Yes', ' __( 'Enable this option to hide video annotations (custom text set by uploader over video during playback)', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['hideanno'] ) ? $this->defaults['hideanno'] : false, ) // args ); // Hide YT logo add_settings_field( $this->option_name . 'modestbranding', // id esc_html__( 'Hide YouTube logo', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_video' ), // Page Name 'ytc_video', // section array( 'field' => $this->option_name . '[modestbranding]', 'label_for' => $this->option_name . '[modestbranding]', 'label' => __( 'Yes', ' __( 'Enable this option to hide YouTube logo from playback control bar. Does not work for all videos.', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['modestbranding'] ) ? $this->defaults['modestbranding'] : false, ) // args ); // --- Register setting Video so $_POST handling is done --- register_setting( 'ytc_video', // Setting group $this->option_name, // option name array( $this, 'sanitize_options' ) ); // =========================== CONTENT =========================== // --- Add settings section Content so we can add fields to it --- add_settings_section( 'ytc_content', // Section Name esc_html__( 'Content Tweaks', 'youtube-channel' ), // Section Title array( &$this, 'settings_content_section_description' ), // Section Callback Function esc_attr( $this->slug . '_content' ) // Page Name ); // --- Add Fields to video section --- // Video Title add_settings_field( $this->option_name . 'showtitle', // id esc_html__( 'Video title', 'youtube-channel' ), // Title array( &$this, 'settings_field_select' ), // Callback esc_attr( $this->slug . '_content' ), // Page Name 'ytc_content', // section array( 'field' => $this->option_name . '[showtitle]', 'label_for' => $this->option_name . '[showtitle]', 'description' => __( 'Select should we and where to display title of video.', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['showtitle'] ) ? $this->defaults['showtitle'] : 'none', 'items' => array( 'none' => __( 'Hide title', 'youtube-channel' ), 'above' => __( 'Above video/thumbnail', 'youtube-channel' ), 'below' => __( 'Below video/thumbnail', 'youtube-channel' ), 'inside' => __( 'Inside thumbnail, top aligned', 'youtube-channel' ), 'inside_b' => __( 'Inside thumbnail, bottom aligned', 'youtube-channel' ), ), ) // args ); // Link Video Title add_settings_field( $this->option_name . 'linktitle', // id esc_html__( 'Link Title to Video', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_content' ), // Page Name 'ytc_content', // section array( 'field' => $this->option_name . '[linktitle]', 'label_for' => $this->option_name . '[linktitle]', 'label' => __( 'Yes', 'youtube-channel' ), 'description' => __( 'Enable this option to link outside title to video.', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['linktitle'] ) ? $this->defaults['linktitle'] : false, ) // args ); // Video Title HTML Tag add_settings_field( $this->option_name . 'titletag', // id esc_html__( 'Title HTML tag', 'youtube-channel' ), // Title array( &$this, 'settings_field_select' ), // Callback esc_attr( $this->slug . '_content' ), // Page Name 'ytc_content', // section array( 'field' => $this->option_name . '[titletag]', 'label_for' => $this->option_name . '[titletag]', 'description' => __( 'Select which HTML tag to use for title wrapper. Fallback if not set in shortcode.', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['titletag'] ) ? $this->defaults['titletag'] : 'h3', 'items' => array( 'h3' => 'h3', 'h4' => 'h4', 'h5' => 'h5', 'div' => 'div', 'span' => 'span', 'strong' => 'strong', ), ) // args ); // Video Description add_settings_field( $this->option_name . 'showdesc', // id esc_html__( 'Video description', 'youtube-channel' ), // Title array( &$this, 'settings_field_checkbox' ), // Callback esc_attr( $this->slug . '_content' ), // Page Name 'ytc_content', // section array( 'field' => $this->option_name . '[showdesc]', 'label_for' => $this->option_name . '[showdesc]', 'label' => __( 'Show', 'youtube-channel' ), 'description' => __( 'Enable this option to show video description.', 'youtube-channel' ), 'class' => 'checkbox', 'value' => isset( $this->defaults['showdesc'] ) ? $this->defaults['showdesc'] : false, ) // args ); // Description length add_settings_field( $this->option_name . 'desclen', // id esc_html__( 'Description length', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_number' ), // Callback esc_attr( $this->slug . '_content' ), // Page Name 'ytc_content', // section array( 'field' => $this->option_name . '[desclen]', 'label_for' => $this->option_name . '[desclen]', 'description' => __( 'Enter length for video description in characters (0 for full length).', 'youtube-channel' ), 'class' => 'num', 'value' => isset( $this->defaults['desclen'] ) ? $this->defaults['desclen'] : 0, 'min' => 0, 'max' => 2500, 'std' => 0, ) // args ); // --- Register setting Content so $_POST handling is done --- register_setting( 'ytc_content', // Setting group $this->option_name, // option name array( $this, 'sanitize_options' ) ); // =========================== LINK =========================== // --- Add settings section Link to Channel so we can add fields to it --- add_settings_section( 'ytc_link', // Section Name esc_html__( 'Link to Channel', 'youtube-channel' ), // Section Title array( &$this, 'settings_link_section_description' ), // Section Callback Function $this->slug . '_link' // Page Name ); // --- Add Fields to video section --- // Link to... add_settings_field( $this->option_name . 'link_to', // id esc_html__( 'Link to...', 'youtube-channel' ), // Title array( &$this, 'settings_field_select' ), // Callback $this->slug . '_link', // Page 'ytc_link', // section array( 'field' => $this->option_name . '[link_to]', 'label_for' => $this->option_name . '[link_to]', 'description' => __( 'Set where link will lead visitors', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['link_to'] ) ? $this->defaults['link_to'] : 'none', 'items' => array( 'none' => __( 'Hide link', 'youtube-channel' ), 'handle' => __( 'YouTube handle URL', 'youtube-channel' ), 'channel' => __( 'Channel page URL', 'youtube-channel' ), 'vanity' => __( 'Vanity custom URL (deprecated)', 'youtube-channel' ), 'legacy' => __( 'Legacy username page (deprecated)', 'youtube-channel' ), ), ) // args ); // Open in... add_settings_field( $this->option_name . 'popup_goto', // id esc_html__( 'Open link in...', 'youtube-channel' ), // Title array( &$this, 'settings_field_select' ), // Callback $this->slug . '_link', // Page 'ytc_link', // section array( 'field' => $this->option_name . '[popup_goto]', 'label_for' => $this->option_name . '[popup_goto]', 'description' => __( 'Set how link will be opened', 'youtube-channel' ), 'class' => 'regular-text', 'value' => isset( $this->defaults['popup_goto'] ) ? $this->defaults['popup_goto'] : '0', 'items' => array( '0' => __( 'same window', 'youtube-channel' ), // option 1 - new window (JavaScript) is deprecated since 3.23.2 '2' => __( 'new window (target="_blank")', 'youtube-channel' ), ), ) // args ); // Visit channel text add_settings_field( $this->option_name . 'goto_txt', // id esc_html__( 'Text for Visit channel link', 'youtube-channel' ), // Title array( &$this, 'settings_field_input_text' ), // Callback $this->slug . '_link', // Page 'ytc_link', // section array( 'field' => $this->option_name . '[goto_txt]', 'label_for' => $this->option_name . '[goto_txt]', 'class' => 'regular-text', 'description' => __( 'Set default title for link', 'youtube-channel' ), 'value' => isset( $this->defaults['goto_txt'] ) ? $this->defaults['goto_txt'] : '', ) // args ); // --- Register setting Content so $_POST handling is done --- register_setting( 'ytc_link', // Setting group $this->option_name, // option name array( $this, 'sanitize_options' ) ); } // END public function register_settings() /** * Add settings menu */ public function add_menu() { // Add a page to manage this plugin's settings add_options_page( YTC_PLUGIN_NAME, YTC_PLUGIN_NAME, 'manage_options', $this->slug, array( &$this, 'plugin_settings_page' ) ); } // END public function add_menu() // ===================== HELPERS ========================== public function settings_description_required() { return sprintf( '[%s]', esc_html__( 'Required', 'youtube-channel' ) ); } public function settings_description_global() { return sprintf( '[%2$s]', esc_html__( 'This option is global only and can`t be changed per widget/shortcode', 'youtube-channel' ), esc_html__( 'Global', 'youtube-channel' ) ); } public function settings_description_optional() { return sprintf( '[%2$s]', esc_html__( 'You can leave this option empty and set it per widget/shortcode.', 'youtube-channel' ), esc_html__( 'Optional', 'youtube-channel' ) ); } public function settings_description_deprecated() { return sprintf( '[%2$s]', esc_html__( 'YouTube deprecated this option. You can use it if you know it, but you cannot get it anymore from YouTube.', 'youtube-channel' ), esc_html__( 'Deprecated', 'youtube-channel' ) ); } // --- Section desciptions --- public function settings_general_section_description() { echo '

'; printf( // translators: %s is replaced with plugin name esc_html__( 'Configure general defaults for the %s used as fallback options for shortcodes and initial values for new widget(s).', 'youtube-channel' ), '' . esc_html( YTC_PLUGIN_NAME ) . '' ); echo '
'; echo esc_html__( 'Only some options are fallback for widget (Channel ID, Handle, Vanity Name, Legacy Username, Default Playlist), while other options are just initial set of settings for new widget.', 'youtube-channel' ); echo '

'; } // END public function settings_general_section_description() public function settings_video_section_description() { echo '

'; printf( // translators: %s is replaced with plugin name esc_html__( 'Configure video specific defaults for %s used as fallback options for shortcodes and initial set of options for new widget.', 'youtube-channel' ), '' . esc_html( YTC_PLUGIN_NAME ) . '' ); echo '

'; } // END public function settings_video_section_description() public function settings_content_section_description() { echo '

'; printf( // translators: %s is replaced with plugin name esc_html__( 'Configure defaults of content around and over videos for %s used as fallback options for shortcodes and initial set of options for new widget.', 'youtube-channel' ), '' . esc_html( YTC_PLUGIN_NAME ) . '' ); echo '

'; } // END public function settings_content_section_description() public function settings_link_section_description() { echo '

'; printf( // translators: %s is replaced with plugin name esc_html__( 'Configure defaults for link to channel below %s block used as fallback options for shortcodes and initial set of options for new widget.', 'youtube-channel' ), '' . esc_html( YTC_PLUGIN_NAME ) . '' ); echo '

'; } // END public function settings_link_section_description() /** * This function provides separator for settings fields */ public function settings_field_separator() { echo '
'; } // END public function settings_field_input_text() /** * Prepare prefix and sufix for field Description * * @param array $args Array of field options * * @return array Returns associated array of `prefix` and `sufix` */ public function settings_fields_description( $args ) { $desc_prefix = ''; $desc_sufix = ''; // desc_required if ( ! empty( $args['desc_required'] ) ) { $desc_prefix .= '[' . esc_html__( 'Required', 'youtube-channel' ) . ']'; } // desc_optional if ( ! empty( $args['desc_optional'] ) ) { $desc_prefix .= sprintf( '[%2$s]', esc_html__( 'You can leave this option empty and set it per widget/shortcode.', 'youtube-channel' ), esc_html__( 'Optional', 'youtube-channel' ) ); } // desc_deprecated if ( ! empty( $args['desc_deprecated'] ) ) { $desc_prefix .= sprintf( '[%2$s]', esc_html__( 'YouTube deprecated this option. You can use it if you know it, but you cannot get it anymore from YouTube.', 'youtube-channel' ), esc_html__( 'Deprecated', 'youtube-channel' ) ); } // desc_global if ( ! empty( $args['desc_global'] ) ) { $desc_prefix .= sprintf( '[%2$s]', esc_html__( 'This option is global only and can`t be changed per widget/shortcode', 'youtube-channel' ), esc_html__( 'Global', 'youtube-channel' ) ); } // desc_link if ( ! empty( $args['desc_link_url'] ) ) { if ( empty( $args['desc_link_txt'] ) ) { $args['desc_link_txt'] = $args['desc_link_url']; } $desc_sufix = sprintf( ' %2$s', esc_url( $args['desc_link_url'] ), esc_html( $args['desc_link_txt'] ) ); } return array( 'prefix' => $desc_prefix, 'sufix' => $desc_sufix, ); } /** * This function provides text inputs for settings fields */ public function settings_field_input_text( $args ) { $desc_ps = $this->settings_fields_description( $args ); printf( '

%4$s

', esc_attr( $args['field'] ), esc_attr( $args['value'] ), esc_attr( $args['class'] ), $desc_ps['prefix'] . ' ' . esc_html( $args['description'] ) . $desc_ps['sufix'] ); } // END public function settings_field_input_text() /** * This function provides number inputs for settings fields */ public function settings_field_input_number( $args ) { printf( '

%6$s

', esc_attr( $args['field'] ), esc_attr( $args['value'] ), intval( $args['min'] ), intval( $args['max'] ), esc_attr( $args['class'] ), esc_html( $args['description'] ) ); } // END public function settings_field_input_text() /** * This function provides select for settings fields */ public function settings_field_select( $args ) { $options = ''; foreach ( $args['items'] as $key => $val ) { $options .= sprintf( '', esc_attr( $key ), esc_html( $val ), $args['value'] === $key ? 'selected="selected"' : '' ); } printf( '

%3$s

', esc_attr( $args['field'] ), $options, esc_html( $args['description'] ) ); } // END public function settings_field_select() /** * This function provides checkbox for settings fields */ public function settings_field_checkbox( $args ) { $desc_ps = $this->settings_fields_description( $args ); printf( '

%5$s

', esc_attr( $args['field'] ), esc_attr( $args['class'] ), true === boolval( $args['value'] ) ? 'checked=checked' : '', isset( $args['label'] ) ? esc_html( $args['label'] ) : '', $desc_ps['prefix'] . esc_html( $args['description'] ) . $desc_ps['sufix'] ); } // END public function settings_field_checkbox() /** * Menu Callback */ public function plugin_settings_page() { if ( ! current_user_can( 'manage_options' ) ) { wp_die( esc_html__( 'You do not have sufficient permissions to access this page.' ), esc_html( YTC_PLUGIN_NAME ) ); } // Render the settings template require_once YTC_DIR_TEMPLATES . '/settings.php'; } // END public function plugin_settings_page() /** * process options before update * */ public function sanitize_options( $options ) { $sanitized = get_option( $this->option_name ); // If there is no POST option_page keyword, return initial plugin options if ( empty( $_POST['option_page'] ) ) { return $sanitized; } switch ( $_POST['option_page'] ) { // --- General --- case 'ytc_general': $sanitized['apikey'] = ! empty( $options['apikey'] ) ? ytc_sanitize_api_key( $options['apikey'] ) : ''; // string key $sanitized['channel'] = ! empty( $options['channel'] ) ? ytc_sanitize_api_key( $options['channel'] ) : ''; // string key $sanitized['handle'] = ! empty( $options['handle'] ) ? sanitize_user( $options['handle'], true ) : ''; // string $sanitized['vanity'] = ! empty( $options['vanity'] ) ? sanitize_user( $options['vanity'], true ) : ''; // string $sanitized['username'] = ! empty( $options['username'] ) ? sanitize_user( $options['username'], true ) : ''; // string $sanitized['playlist'] = ! empty( $options['playlist'] ) ? ytc_sanitize_api_key( $options['playlist'] ) : ''; // string key $sanitized['resource'] = isset( $options['resource'] ) ? intval( $options['resource'] ) : intval( $this->defaults['resource'] ); // int $sanitized['cache'] = isset( $options['cache'] ) ? intval( $options['cache'] ) : intval( $this->defaults['cache'] ); // int $sanitized['fetch'] = ! empty( $options['fetch'] ) ? intval( $options['fetch'] ) : intval( $this->defaults['fetch'] ); // int $sanitized['num'] = ! empty( $options['num'] ) ? intval( $options['num'] ) : intval( $this->defaults['num'] ); // int $sanitized['privacy'] = ! empty( $options['privacy'] ) && $options['privacy'] ? 1 : 0; // bool $sanitized['tinymce'] = ! empty( $options['tinymce'] ) && $options['tinymce'] ? 1 : 0; // bool $sanitized['sslverify'] = ! empty( $options['sslverify'] ) && $options['sslverify'] ? 1 : 0; // bool $sanitized['local_img'] = ! empty( $options['local_img'] ) && $options['local_img'] ? 1 : 0; // bool $sanitized['js_ev_listener'] = ! empty( $options['js_ev_listener'] ) && $options['js_ev_listener'] ? 1 : 0; // bool $sanitized['timeout'] = ! empty( $options['timeout'] ) ? intval( $options['timeout'] ) : intval( $this->defaults['timeout'] ); // int $sanitized['block_preview'] = ! empty( $options['block_preview'] ) && $options['block_preview'] ? 1 : 0; // bool break; // General // --- Video --- case 'ytc_video': $sanitized['width'] = ( ! empty( $options['width'] ) ) ? intval( $options['width'] ) : intval( $this->defaults['width'] ); // int $sanitized['ratio'] = ( isset( $options['ratio'] ) ) ? intval( $options['ratio'] ) : intval( $this->defaults['ratio'] ); // int $sanitized['display'] = ( ! empty( $options['display'] ) ) ? sanitize_key( $options['display'] ) : sanitize_key( $this->defaults['display'] ); // string $sanitized['thumb_quality'] = ( ! empty( $options['thumb_quality'] ) ) ? sanitize_key( $options['thumb_quality'] ) : sanitize_key( $this->defaults['thumb_quality'] ); // string $sanitized['responsive'] = ( ! empty( $options['responsive'] ) && $options['responsive'] ) ? 1 : 0; // bool $sanitized['playsinline'] = ( ! empty( $options['playsinline'] ) && $options['playsinline'] ) ? 1 : 0; // bool $sanitized['nolightbox'] = ( ! empty( $options['nolightbox'] ) && $options['nolightbox'] ) ? 1 : 0; // bool $sanitized['fullscreen'] = ( ! empty( $options['fullscreen'] ) && $options['fullscreen'] ) ? 1 : 0; // bool $sanitized['controls'] = ( ! empty( $options['controls'] ) && $options['controls'] ) ? 1 : 0; // bool $sanitized['autoplay'] = ( ! empty( $options['autoplay'] ) && $options['autoplay'] ) ? 1 : 0; // bool $sanitized['autoplay_mute'] = ( ! empty( $options['autoplay_mute'] ) && $options['autoplay_mute'] ) ? 1 : 0; // bool $sanitized['norel'] = ( ! empty( $options['norel'] ) && $options['norel'] ) ? 1 : 0; // bool $sanitized['modestbranding'] = ( ! empty( $options['modestbranding'] ) && $options['modestbranding'] ) ? 1 : 0; // bool $sanitized['hideanno'] = ( ! empty( $options['hideanno'] ) && $options['hideanno'] ) ? 1 : 0; // bool break; // Video // --- Content --- case 'ytc_content': $sanitized['showtitle'] = ! empty( $options['showtitle'] ) && in_array( $options['showtitle'], array( 'none', 'above', 'below', 'inside', 'inside_b' ), true ) ? sanitize_key( $options['showtitle'] ) : sanitize_key( $this->defaults['showtitle'] ); // string $sanitized['linktitle'] = ! empty( $options['linktitle'] ) && $options['linktitle'] ? 1 : 0; // bool $sanitized['titletag'] = ! empty( $options['titletag'] ) && in_array( strtolower( $options['titletag'] ), array( 'h3', 'h4', 'h5', 'div', 'span', 'strong' ), true ) ? sanitize_key( $options['titletag'] ) : sanitize_key( $this->defaults['titletag'] ); // string $sanitized['showdesc'] = ! empty( $options['showdesc'] ) && $options['showdesc'] ? 1 : 0; // bool $sanitized['desclen'] = ! empty( $options['desclen'] ) ? intval( $options['desclen'] ) : intval( $this->defaults['desclen'] ); // integer break; // Content // --- Link to Channel --- case 'ytc_link': $sanitized['link_to'] = isset( $options['link_to'] ) && in_array( $options['link_to'], array( 'none', 'handle', 'vanity', 'channel', 'legacy' ), true ) ? $options['link_to'] : $this->defaults['link_to']; // string $sanitized['goto_txt'] = ! empty( $options['goto_txt'] ) ? sanitize_text_field( $options['goto_txt'], true ) : sanitize_text_field( $this->defaults['goto_txt'] ); // text $sanitized['popup_goto'] = isset( $options['popup_goto'] ) && in_array( intval( $options['popup_goto'] ), array( 0, 1, 2 ), true ) ? intval( $options['popup_goto'] ) : intval( $this->defaults['popup_goto'] ); // integer 0 or 2 (1 is deprecated since 3.23.2) break; // Link to Channel } // switch // --- Update --- // now return sanitized options to be written to database return $sanitized; } // END public function sanitize_options() } // END class Wpau_My_Youtube_Channel_Settings PK!I)classes/class-wpau-my-youtube-channel.phpnu[defaults['tinymce'] ) ) { add_filter( 'mce_external_plugins', array( $this, 'mce_external_plugins' ), 998 ); add_filter( 'mce_buttons', array( $this, 'mce_buttons' ), 999 ); } if ( is_admin() ) { // Initialize Plugin Settings Magic add_action( 'init', array( $this, 'admin_init' ) ); // Add various Dashboard notices (if needed) add_action( 'admin_notices', array( $this, 'admin_notices' ) ); // Enqueue scripts and styles for Widgets page add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) ); } else { // ELSE if ( is_admin() ) // Enqueue frontend scripts add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); add_action( 'wp_footer', array( $this, 'footer_scripts' ), 900 ); } // END if ( is_admin() ) // Load widget require_once 'class-wpau-my-youtube-channel-widget.php'; require_once 'class-wpau-my-youtube-channel-image-handler.php'; // Create an instance of the child class $this->image_handler = new Wpau_My_Youtube_Channel_Image_Handler(); // Register shortcodes `youtube_channel` and `ytc` add_shortcode( 'youtube_channel', array( $this, 'shortcode' ) ); add_shortcode( 'ytc', array( $this, 'shortcode' ) ); } // END public function __construct() /** * Activate the plugin * Credits: http://solislab.com/blog/plugin-activation-checklist/#update-routines */ public static function activate() { global $wpau_my_youtube_channel; $wpau_my_youtube_channel->init_options(); $wpau_my_youtube_channel->maybe_update(); } // END public static function activate() /** * Return initial options * * @return array Global defaults for current plugin version */ public function init_options() { $init = array( 'handle' => '', // [NEW 2023] YouTube Handle https://www.youtube.com/handle 'vanity' => '', // $this->vanity_id, 'channel' => '', // YouTube Channel ID https://www.youtube.com/account_advanced 'username' => '', // YouTube Username ID https://www.youtube.com/account_advanced 'playlist' => '', // $this->playlist_id, 'resource' => 0, // ex use_res 'cache' => 300, // 5 minutes // ex cache_time 'fetch' => 25, // ex maxrnd 'num' => 1, // ex vidqty 'skip' => 0, 'privacy' => 0, 'ratio' => 3, // 3 - 16:9, 1 - 4:3 (deprecated: 2 - 16:10) 'width' => 306, 'responsive' => 1, 'display' => 'thumbnail', // thumbnail, iframe, iframe2, playlist (deprecated: chromeless, object) 'thumb_quality' => 'hqdefault', // default, mqdefault, hqdefault, sddefault, maxresdefault 'fullscreen' => 0, 'controls' => 0, 'autoplay' => 0, 'autoplay_mute' => 0, 'norel' => 0, 'playsinline' => 0, // play video on mobile devices inline instead in native device player 'showtitle' => 'none', // above, below, inside, inside_b 'linktitle' => 0, 'titletag' => 'h3', 'showdesc' => 0, 'desclen' => 0, 'modestbranding' => 0, 'hideanno' => 0, 'goto_txt' => 'Visit our channel', 'popup_goto' => 0, // 0 same window, 1 new window JS, 2 new window target 'link_to' => 'none', // 0 legacy username, 1 channel, 2 vanity 'tinymce' => 1, // show TinyMCE button by default 'nolightbox' => false, // do not use lightbox global setting 'timeout' => 5, // timeout for wp_remote_get() 'sslverify' => true, 'local_img' => false, // [NEW 2024] Store video thumbnails locally 'js_ev_listener' => false, 'block_preview' => true, // [NEW 2023] Enable YTC Widget preview in Block editor ); add_option( 'youtube_channel_version', YTC_VER, '', 'no' ); add_option( 'youtube_channel_db_ver', YTC_VER_DB, '', 'no' ); add_option( YTC_PLUGIN_OPTION_KEY, $init, '', 'no' ); return $init; } // END public function init_options() /** * Check do we need to migrate options */ public function maybe_update() { // bail if this plugin data doesn't need updating if ( get_option( 'youtube_channel_db_ver' ) >= YTC_VER_DB ) { return; } require_once YTC_DIR . '/update.php'; au_youtube_channel_update(); } // END public function maybe_update() /** * Initialize Settings link for Plugins page and create Settings page */ public function admin_init() { // Localize cache options $this->cache_timeouts = array( '0' => __( 'Do not cache', 'youtube-channel' ), '60' => __( '1 minute', 'youtube-channel' ), '300' => __( '5 minutes', 'youtube-channel' ), '900' => __( '15 minutes', 'youtube-channel' ), '1800' => __( '30 minutes', 'youtube-channel' ), '3600' => __( '1 hour', 'youtube-channel' ), '7200' => __( '2 hours', 'youtube-channel' ), '18000' => __( '5 hours', 'youtube-channel' ), '36000' => __( '10 hours', 'youtube-channel' ), '43200' => __( '12 hours', 'youtube-channel' ), '64800' => __( '18 hours', 'youtube-channel' ), '86400' => __( '1 day', 'youtube-channel' ), '172800' => __( '2 days', 'youtube-channel' ), '259200' => __( '3 days', 'youtube-channel' ), '345600' => __( '4 days', 'youtube-channel' ), '432000' => __( '5 days', 'youtube-channel' ), '518400' => __( '6 days', 'youtube-channel' ), '604800' => __( '1 week', 'youtube-channel' ), '1209600' => __( '2 weeks', 'youtube-channel' ), '1814400' => __( '3 weeks', 'youtube-channel' ), '2419200' => __( '1 month', 'youtube-channel' ), ); // Add plugin Setting slink on Plugins page add_filter( 'plugin_action_links_' . plugin_basename( YTC_PLUGIN_FILE ), array( $this, 'add_action_links' ) ); // Add row on Plugins page add_filter( 'plugin_row_meta', array( $this, 'add_plugin_meta_links' ), 10, 2 ); require_once 'class-wpau-my-youtube-channel-settings.php'; global $wpau_my_youtube_channel_settings; if ( empty( $wpau_my_youtube_channel_settings ) ) { $wpau_my_youtube_channel_settings = new Wpau_My_Youtube_Channel_Settings(); } } // END public function admin_init() /** * Append Settings link for Plugins page * * @param array $links Array of default plugin links * * @return array Array of plugin links with appended link for Settings page */ public function add_action_links( $links ) { $settings_link = '' . esc_html__( 'Settings' ) . ''; array_unshift( $links, $settings_link ); return $links; // Return updated array of links } // END public function add_action_links( $links ) /** * Add link to plugin community support * * @param array $links Array of default plugin meta links * @param string $file Current hook file path * * @return array Array of default plugin meta links with appended link for Support community forum */ public function add_plugin_meta_links( $links, $file ) { if ( plugin_basename( YTC_PLUGIN_FILE ) === $file ) { $links[] = '' . esc_html__( 'Support' ) . ''; } // Return updated array of links return $links; } // END public function add_plugin_meta_links( $links, $file ) /** * Enqueue admin scripts and styles for widget customization */ public function admin_scripts() { global $pagenow; // Enqueue only on widget or post pages if ( ! in_array( $pagenow, array( 'widgets.php', 'customize.php', 'options-general.php', 'post.php', 'post-new.php' ), true ) ) { return; } // Enqueue on post page only if tinymce is enabled if ( in_array( $pagenow, array( 'post.php', 'post-new.php' ), true ) && empty( $this->defaults['tinymce'] ) ) { return; } wp_enqueue_style( esc_attr( YTC_PLUGIN_SLUG . '-admin' ), esc_url( YTC_URL . 'assets/css/admin.min.css' ), array(), YTC_VER ); // Enqueue script for widget in admin if ( in_array( $pagenow, array( 'widgets.php', 'customize.php' ), true ) ) { wp_enqueue_script( esc_attr( YTC_PLUGIN_SLUG . '-admin' ), esc_url( YTC_URL . 'assets/js/admin.min.js' ), array( 'jquery' ), YTC_VER, true ); } } // END public function admin_scripts() /** * Print dashboard notice * * @return string Formatted notice with usefull explanation */ public function admin_notices() { // Prepare vars for notices $notice = array( 'error' => '' ); // Inform if PHP version is lower than 7.4 if ( version_compare( PHP_VERSION, '7.4', '<' ) ) { $notice['error'] .= '

' . sprintf( // translators: %1$s stand for PHP version on server, %2$s is plugin name esc_html__( 'Your website running on web server with PHP version %1$s. Please note that %2$s requires PHP 7.4 or newer to work properly.', 'youtube-channel' ), PHP_VERSION, // 1 '' . esc_html( YTC_PLUGIN_NAME ) . '' // 2 ) . '

'; } // No YouTube DATA Api Key? if ( empty( $this->defaults['apikey'] ) ) { $notice['error'] .= '

' . sprintf( /* translators: %1$s is replaced with plugin name, * %2$s with translated label YouTube Data API Key, * %3$s with link to plugin General Settings page * %4$s with link to Google Developers Console, * %5$s with link to Data API Key guide, */ __( '%1$s require %2$s to be set on plugin %3$s page. You can generate your own key on %4$s by following %5$s.', 'youtube-channel' ), '' . esc_html( YTC_PLUGIN_NAME ) . '', // 1 '' . esc_html__( 'YouTube Data API Key', 'youtube-channel' ) . '', // 2 '' . esc_html__( 'General Settings', 'youtube-channel' ) . '', // 3 '' . esc_html__( 'Google Developers Console', 'youtube-channel' ) . '', // 4 '' . esc_html__( 'this tutorial', 'youtube-channel' ) . '' // 5 ) . '

'; } // Now output all prepared notices foreach ( $notice as $type => $message ) { if ( ! empty( $message ) ) { echo '
' . wp_kses( $message, array( 'p' => array(), 'strong' => array(), 'br' => array(), 'a' => array( 'href' => array(), 'target' => array(), ), ) ) . '
'; } } } // END public function admin_notices() /** * Get default options from DB and store it to variable $this->defaults * * @return void */ public function defaults() { $defaults = get_option( YTC_PLUGIN_OPTION_KEY ); if ( empty( $defaults ) ) { $defaults = $this->init_options(); } $this->defaults = $defaults; } // END public function defaults() /** * Enqueue frontend scripts and styles * * @return void */ public function enqueue_scripts() { // Check do we need our own lightbox? if ( empty( $this->defaults['nolightbox'] ) ) { wp_enqueue_style( 'bigger-picture', esc_url( YTC_URL . 'assets/lib/bigger-picture/css/bigger-picture.min.css' ), array(), YTC_VER ); wp_register_script( 'bigger-picture', esc_url( YTC_URL . 'assets/lib/bigger-picture/bigger-picture.min.js' ), array(), YTC_VER, true ); wp_enqueue_script( 'bigger-picture' ); wp_register_script( 'youtube-channel', esc_url( YTC_URL . 'assets/js/youtube-channel.min.js' ), array( 'bigger-picture' ), YTC_VER, true ); wp_enqueue_script( 'youtube-channel' ); } wp_enqueue_style( 'youtube-channel', esc_url( YTC_URL . 'assets/css/youtube-channel.min.css' ), array(), YTC_VER ); } // END public function enqueue_scripts() /** * Generate complete inline JavaScript code that conains * Async video load and lightbox init for thumbnails * * @return void */ public function footer_scripts() { if ( ( ! empty( $this->ytc_html5 ) || empty( $this->defaults['nolightbox'] ) ) ) { echo ''; } } // END public function footer_scripts() /** * Method to render YTC shortcode * * @param array $atts * * @return string */ public function shortcode( $atts ) { // Get general default settings $instance = $this->defaults; // Extract shortcode parameters $atts = shortcode_atts( array( 'handle' => $instance['handle'], 'vanity' => $instance['vanity'], 'channel' => $instance['channel'], 'username' => $instance['username'], 'playlist' => $instance['playlist'], 'res' => '', // (deprecated, but leave for back compatibility) ex res 'use_res' => '', // (deprecated, but leave for back compatibility) ex use_res 'resource' => $instance['resource'], // ex use_res 'only_pl' => 0, // disabled by default (was: $instance['only_pl'],) 'cache' => $instance['cache'], // ex cache_time 'privacy' => $instance['privacy'], // ex showvidesc 'fetch' => $instance['fetch'], // ex maxrnd 'num' => $instance['num'], // ex vidqty 'random' => 0, // ex getrnd 'ratio' => $instance['ratio'], 'width' => $instance['width'], 'responsive' => ! empty( $instance['responsive'] ) ? $instance['responsive'] : '0', 'show' => $instance['display'], // (deprecated, but keep for back compatibility) ex to_show 'display' => $instance['display'], 'thumb_quality' => $instance['thumb_quality'], 'no_thumb_title' => 0, 'controls' => $instance['controls'], 'autoplay' => $instance['autoplay'], 'mute' => $instance['autoplay_mute'], 'norel' => $instance['norel'], 'playsinline' => $instance['playsinline'], // play video on mobile devices inline instead in native device player 'showtitle' => $instance['showtitle'], // none, above, below, inside, inside_b 'linktitle' => ! empty( $instance['linktitle'] ) ? $instance['linktitle'] : '0', 'titletag' => $instance['titletag'], // h3, h4, h5, div, span, strong 'showdesc' => $instance['showdesc'], // ex showvidesc 'nobrand' => ! empty( $instance['modestbranding'] ) ? $instance['modestbranding'] : '0', 'desclen' => $instance['desclen'], // ex videsclen 'noanno' => $instance['hideanno'], 'goto_txt' => $instance['goto_txt'], 'popup' => $instance['popup_goto'], 'link_to' => $instance['link_to'], // none, vanity, channel, legacy 'class' => ! empty( $instance['class'] ) ? $instance['class'] : '', 'target' => '', 'skip' => 0, // how many items to skip ), $atts ); // backward compatibility for show -> display shortcode parameter if ( ! empty( $atts['show'] ) && $atts['show'] !== $atts['display'] && $atts['show'] !== $instance['display'] ) { $atts['display'] = $atts['show']; } // backward compatibility for use_res -> resource shortcode parameter if ( ! empty( $atts['use_res'] ) ) { $atts['resource'] = $atts['use_res']; } elseif ( ! empty( $atts['res'] ) ) { $atts['resource'] = $atts['res']; } // prepare instance for output $instance['handle'] = sanitize_user( $atts['handle'], true ); $instance['vanity'] = sanitize_user( $atts['vanity'], true ); $instance['channel'] = $atts['channel']; $instance['username'] = sanitize_user( $atts['username'], true ); $instance['playlist'] = $atts['playlist']; $instance['resource'] = $atts['resource']; // resource: 0 channel, 2 playlist (1 favorites and 3 liked are deprecated in 2023) $instance['cache'] = $atts['cache']; // in seconds, def 5min - settings? $instance['privacy'] = $atts['privacy']; // enhanced privacy $instance['fetch'] = (int) $atts['fetch']; $instance['num'] = (int) $atts['num']; // num: 1 $instance['random'] = $atts['random']; // use embedded playlist - false by default // Video Settings $instance['ratio'] = $atts['ratio']; // aspect ratio: 3 - 16:9, 2 - 16:10, 1 - 4:3 $instance['width'] = (int) $atts['width']; // 306 $instance['responsive'] = $atts['responsive']; // enable responsivenes? $instance['display'] = $atts['display']; // thumbnail, iframe, iframe2, playlist $instance['thumb_quality'] = $atts['thumb_quality']; // default, mqdefault, hqdefault, sddefault, maxresdefault $instance['no_thumb_title'] = $atts['no_thumb_title']; // hide tooltip for thumbnails $instance['controls'] = $atts['controls']; // hide controls, false by default $instance['autoplay'] = $atts['autoplay']; // autoplay disabled by default $instance['autoplay_mute'] = $atts['mute']; // mute sound on autoplay - disabled by default $instance['norel'] = $atts['norel']; // hide related videos $instance['playsinline'] = $atts['playsinline']; // inline plaer for iOS // Content Layout $instance['showtitle'] = $atts['showtitle']; // show video title, disabled by default $instance['linktitle'] = $atts['linktitle']; // link title to video, disabled by default $instance['titletag'] = $atts['titletag']; // title HTML tag wrapper, h3 by default $instance['showdesc'] = $atts['showdesc']; // show video description, disabled by default $instance['modestbranding'] = $atts['nobrand']; // hide YT logo $instance['desclen'] = (int) $atts['desclen']; // cut video description, number of characters $instance['hideanno'] = $atts['noanno']; // hide annotations, false by default // Link to Channel $instance['goto_txt'] = $atts['goto_txt']; // text for goto link - use settings $instance['popup_goto'] = $atts['popup']; // open channel in: 0 same window, 1 javascript new, 2 target new $instance['link_to'] = $atts['link_to']; // link to: none, vanity, legacy, channel // Customization $instance['class'] = sanitize_html_classes( $atts['class'] ); // custom additional class for container $instance['target'] = $atts['target']; // should use target for thumbnails w/o lightbox (`0` || `1`|`2`) $instance['skip'] = (int) $atts['skip']; return $this->generate_ytc_block( $instance ); } // END public function shortcode() /** * Generate HTML of YTC block * * @param array $instance Widget or Shortcode settings * * @return string HTML content of the YTC block */ public function generate_ytc_block( $instance ) { // Error message if no YouTube Data API Key if ( empty( $this->defaults['apikey'] ) ) { $error_msg = sprintf( // translators: %1$s is replaced with plugin name, %2$s with link to DATA API Key instructions __( '%1$s v3 requires YouTube DATA API Key to work. Learn more here.', 'youtube-channel' ), YTC_PLUGIN_NAME, 'https://urosevic.net/wordpress/plugins/youtube-channel/#youtube_data_api_key' ); return $this->front_debug( $error_msg ); } // 1) Get resource from widget/shortcode // 2) If not set, get global default // 3) if no global, get plugin's default if ( ! isset( $instance['resource'] ) ) { $instance['resource'] = $this->defaults['resource']; } $resource = intval( $instance['resource'] ); if ( empty( $resource ) && 0 !== $resource ) { $resource = intval( $this->defaults['resource'] ); if ( empty( $resource ) ) { $resource = 0; } } // Get Channel or Playlist ID based on requested resource switch ( $resource ) { // Playlist case '2': // 1) Get Playlist from shortcode/widget // 2) If not set, use global default // 3) If no global, throw error if ( ! empty( $instance['playlist'] ) ) { $playlist = ytc_sanitize_api_key( $instance['playlist'] ); } else { $playlist = ytc_sanitize_api_key( $this->defaults['playlist'] ); } // Now check has Playlist ID set or throw error if ( '' === $playlist ) { return $this->front_debug( 'Playlist selected as resource but no Playlist ID provided!' ); } break; // Channel, Favourites, Liked default: /* Channel */ // 1) Get channel from shortcode/widget // 2) If not set, use global default // 3) If no global, throw error if ( ! empty( $instance['channel'] ) ) { $channel = ytc_sanitize_api_key( $instance['channel'] ); } else { $channel = ytc_sanitize_api_key( $this->defaults['channel'] ); } // Now check is Channel ID set or throw error if ( '' === $channel ) { if ( 1 === (int) $resource ) { $resource_name = 'deprecated Favourited videos'; } elseif ( 3 === (int) $resource ) { $resource_name = 'deprecated Liked videos'; } else { $resource_name = 'Channel (User uploads)'; } $error_msg = sprintf( '%s selected as resource but no Channel ID provided!', $resource_name ); return $this->front_debug( $error_msg ); } } // END switch ($resource) /* OK, we have required resource (Playlist or Channel ID), so we can proceed to real job */ // Set custom class and responsive if needed $class = ( ! empty( $instance['class'] ) ) ? sanitize_html_classes( $instance['class'] ) : 'default'; if ( ! empty( $instance['responsive'] ) ) { $class .= ' responsive'; } if ( ! empty( $instance['display'] ) ) { $class .= ' ytc_display_' . esc_attr( $instance['display'] ); } switch ( $resource ) { case 2: // Playlist $resource_name = 'playlist'; $resource_id = $playlist; break; default: // Channel (#1 Favourites (FL) and #3 Liked (LL) are deprecated) $resource_name = 'channel'; $resource_id = preg_replace( '/^UC/', 'UU', $channel ); } // Start output string $output = ''; $output .= '
'; if ( empty( $instance['display'] ) ) { $instance['display'] = $this->defaults['display']; } if ( 'playlist' === $instance['display'] ) { // Insert as Embedded playlist $output .= $this->generate_playlist_embed( $resource_id, $instance ); } else { // Individual videos from channel or playlist (favourites and liked are deprecated) // Get max items for random video $fetch = empty( $instance['fetch'] ) ? $this->defaults['fetch'] : $instance['fetch']; if ( $fetch < 1 ) { $fetch = 10; } elseif ( $fetch > 50 ) { $fetch = 50; } // How many items to skip? $skip = 0; if ( ! empty( $instance['skip'] ) ) { $skip = intval( $instance['skip'] ) > 49 ? 49 : intval( $instance['skip'] ); } // If we have to skip more items than we have in fetch, set skip to $fetch-1 if ( $skip >= $fetch ) { $skip = $fetch - 1; } $resource_key = $resource_id . '_' . $fetch; // Do we need cache? Let we define cache fallback key $cache_key_fallback = sanitize_key( 'ytc_' . md5( $resource_key ) . '_fallback' ); // Do cache magic if ( ! empty( $instance['cache'] ) && $instance['cache'] > 0 ) { // generate feed cache key for caching time $cache_key = sanitize_key( 'ytc_' . md5( $resource_key ) . '_' . $instance['cache'] ); if ( ! empty( $_GET['ytc_force_recache'] ) ) { delete_transient( $cache_key ); } // get/set transient cache $json = get_transient( $cache_key ); if ( false === $json || empty( $json ) ) { // no cached JSON, get new $json = $this->fetch_youtube_feed( $resource_id, $fetch ); // set decoded JSON to transient cache_key set_transient( $cache_key, base64_encode( $json ), $instance['cache'] ); } else { // we already have cached feed JSON, get it encoded $json = base64_decode( $json ); } } else { // just get fresh feed if cache disabled $json = $this->fetch_youtube_feed( $resource_id, $fetch ); } // free some memory unset( $response ); // decode JSON data $json_output = json_decode( $json ); // YTC 3.0.7: Do we need this, still? // if current feed is messed up, try to get it from fallback cache if ( is_wp_error( $json_output ) && ! is_object( $json_output ) && empty( $json_output->items ) ) { // do we have fallback cache?! $json_fallback = get_transient( $cache_key_fallback ); if ( true === $json_fallback && ! empty( $json_fallback ) ) { $json_output = json_decode( base64_decode( $json_fallback ) ); // and free memory unset( $json_fallback ); } } // Get resource nice name based on selected resource $resource_nice_name = $this->get_resource_nice_name( $resource ); // Prevent further checks if we have WP Error or empty record even after fallback if ( is_wp_error( $json_output ) ) { $output .= $this->front_debug( $json_output->get_error_message() ); return $output; } elseif ( isset( $json_output->items ) && 0 === sizeof( $json_output->items ) ) { // translators: %1$s is replaced with resource nice name, %2$s is replaced with Resource ID $output .= $this->front_debug( sprintf( __( 'You have set to display videos from %1$s [resource list ID: %2$s], but there have no public videos in that resouce.' ), $resource_nice_name, $resource_id ) ); return $output; } elseif ( empty( $json_output ) ) { // translators: %1$s is replaced with URL to plugin FAQ page, %2$s with link to official plugin page $output .= $this->front_debug( sprintf( __( 'We have empty record for this feed. Please read FAQ and if that does not help, contact support.' ), 'https://wordpress.org/plugins/youtube-channel#faq', 'https://wordpress.org/support/plugin/youtube-channel/' ) ); return $output; } // Predefine `max_items` to prevent undefined notices $max_items = 0; if ( is_object( $json_output ) && ! empty( $json_output->items ) ) { // Sort by date uploaded $json_entry = $json_output->items; $num = ( empty( $instance['num'] ) ) ? $this->defaults['num'] : $instance['num']; if ( $num > $fetch ) { $fetch = $num; } $max_items = ( $fetch > sizeof( $json_entry ) ) ? sizeof( $json_entry ) : $fetch; if ( ! empty( $instance['random'] ) ) { $items = array_slice( $json_entry, 0, $max_items ); } else { if ( ! $num ) { $num = 1; } $items = array_slice( $json_entry, $skip, $num ); } } if ( 0 === $max_items ) { // Set default error message $error_msg = 'Unrecognized error experienced.'; // Append YouTube DATA API error reason as comment if ( ! empty( $json_output ) && is_object( $json_output ) && ! empty( $json_output->error->errors ) ) { // Error went in fetch_youtube_feed() if ( 'wpError' === $json_output->error->errors[0]->reason ) { $error_msg = $json_output->error->errors[0]->message; } elseif ( 'playlistNotFound' === $json_output->error->errors[0]->reason ) { // Playlist error from Google API if ( 'playlist' === $resource_name ) { $error_msg = "Please check did you set existing Playlist ID. You set to show videos from {$resource_nice_name}, but YouTube does not recognize {$resource_id} as existing and public playlist."; } else { $error_msg = "Please check did you set the proper Channel ID. You set to show videos from {$resource_nice_name}, but YouTube does not recognize {$channel} as an existing or public channel."; } } elseif ( 'keyInvalid' === $json_output->error->errors[0]->reason ) { // Invalid YouTube Data API Key // translators: %s is replaced with link to official plugin Installation page $error_msg = sprintf( __( "Double check YouTube Data API Key on General plugin tab and make sure it's correct. Read Installation document." ), 'https://wordpress.org/plugins/youtube-channel/installation/' ); } elseif ( 'ipRefererBlocked' === $json_output->error->errors[0]->reason ) { // Restricted access YouTube Data API Key $error_msg = 'Check YouTube Data API Key restrictions, empty cache if enabled by appending in the browser address bar parameter ?ytc_force_recache=1'; } elseif ( 'invalidChannelId' === $json_output->error->errors[0]->reason ) { // (deprecated?) Non existing Channel ID set // translators: %s is replaced with link to official plugin FAQ page $error_msg = sprintf( __( 'You have set wrong Channel ID. Fix that in General plugin settings, Widget and/or shortcode. Read FAQ document.' ), 'https://wordpress.org/plugins/youtube-channel/faq/' ); } elseif ( 'playlistItemsNotAccessible' === $json_output->error->errors[0]->reason ) { // Forbidden access to resource // translators: %s is replaced with Resource ID $error_msg = sprintf( __( "You do not have permission to access ressource %s (it's maybe set to private or even does not exists!)" ), $resource_id ); } else { $error_msg = sprintf( 'Reason: %1$s; Domain: %2$s; Message: %3$s', $json_output->error->errors[0]->reason, $json_output->error->errors[0]->domain, $json_output->error->errors[0]->message ); } } // END ! empty($json_output->error->errors) $output .= $this->front_debug( $error_msg ); } else { // ELSE if ($max_items == 0) // looks that feed is OK, let we update fallback that never expire set_transient( $cache_key_fallback, base64_encode( $json ), 0 ); // and now free some memory unset( $json, $json_output, $json_entry ); // set array for unique random item if ( ! empty( $instance['random'] ) ) { $random_used = array(); } /* AU:20141230 reduce number of videos if requested > available */ if ( $num > sizeof( $items ) ) { $num = sizeof( $items ); } $rand_fn = function_exists( 'random_int' ) ? 'random_int' : 'mt_rand'; for ( $y = 1; $y <= $num; ++$y ) { if ( ! empty( $instance['random'] ) ) { $random_item = $rand_fn( 0, ( count( $items ) - 1 ) ); while ( $y > 1 && in_array( $random_item, $random_used, true ) ) { $random_item = $rand_fn( 0, ( count( $items ) - 1 ) ); } $random_used[] = $random_item; $item = $items[ $random_item ]; } else { $item = $items[ $y - 1 ]; } // Generate single video block $video_block = $this->generate_video_block( $item, $instance, $y ); // Allow plugins/themes to override the default video block template. $video_block = apply_filters( 'ytc_print_video', $video_block, $item, $instance, $y ); // Append video block to final output $output .= $video_block; } // Free some memory unset( $random_used, $random_item, $json ); } // END if ($max_items == 0) } // single playlist or ytc way // Append link to channel on bootom of the widget $output .= $this->get_footer( $instance ); $output .= '
'; // fix overflow on crappy themes $output .= '
'; return wp_kses( $output, array( 'p' => array( 'class' => array(), ), 'div' => array( 'id' => array(), 'class' => array(), 'style' => array(), ), 'a' => array( 'href' => array(), 'target' => array(), 'title' => array(), 'class' => array(), 'data-iframe' => array(), 'data-title' => array(), ), 'h3' => array( 'id' => array(), 'class' => array(), 'title' => array(), 'style' => array(), ), 'h4' => array( 'id' => array(), 'class' => array(), 'title' => array(), 'style' => array(), ), 'h5' => array( 'id' => array(), 'class' => array(), 'title' => array(), 'style' => array(), ), 'strong' => array( 'class' => array(), ), 'span' => array( 'id' => array(), 'class' => array(), 'title' => array(), 'style' => array(), ), 'iframe' => array( 'id' => array(), 'src' => array(), 'title' => array(), 'width' => array(), 'height' => array(), 'style' => array(), 'allowfullscreen' => array(), ), ), ); } // END public function generate_ytc_block( $instance ) // --- HELPER FUNCTIONS --- /** * Download YouTube video feed through API 3.0 * @param string $id ID of resource * @param integer $items Number of items to fetch (min 2, max 50) * @return string JSON with videos */ private function fetch_youtube_feed( $resource_id, $items ) { $feed_url = 'https://www.googleapis.com/youtube/v3/playlistItems?'; $feed_url .= 'part=snippet'; $feed_url .= '&playlistId=' . ytc_sanitize_api_key( $resource_id ); $feed_url .= '&fields=items(snippet(title%2Cdescription%2CpublishedAt%2CresourceId(videoId)))'; $feed_url .= '&maxResults=' . intval( $items ); $feed_url .= '&key=' . ytc_sanitize_api_key( $this->defaults['apikey'] ); $wparg = array( 'timeout' => intval( $this->defaults['timeout'] ), 'sslverify' => $this->defaults['sslverify'] ? true : false, 'headers' => array( 'referer' => site_url() ), ); $response = wp_remote_get( $feed_url, $wparg ); // If we have WP error, make JSON with error if ( is_wp_error( $response ) ) { $json = sprintf( '{"error":{"errors":[{"reason":"wpError","message":"%s","domain":"wpRemoteGet"}]}}', $response->get_error_message() ); } else { $json = wp_remote_retrieve_body( $response ); } // Free some memory unset( $response ); return $json; } // END private function fetch_youtube_feed($resource_id, $items) /** * Print explanation of error for administrators (users with capability manage_options) * and hidden message for lower users and visitors * @param string $message Error message * @return string Formatted message for error */ private function front_debug( $message ) { // Show visible error to admin, Oops message to visitors and lower members if ( is_user_logged_in() && current_user_can( 'manage_options' ) ) { $output = "

YTC ERROR: $message

"; } else { $output = __( 'Oops, something went wrong.', 'youtube-channel' ); } return wp_kses( $output, array( 'strong' => array(), 'em' => array(), 'p' => array( 'class' => array(), ), 'a' => array( 'href' => array(), 'target' => array(), ), ), ); } // END private function debug( $message ) /** * Calculate height by provided width and aspect ratio * * @param integer $width Width in pixels * @param integer $ratio Selected aspect ratio (1 for 4:3, other for 16:9) * * @return integer Calculated height in pixels */ private function calculate_height( $width = 306, $ratio = 2 ) { switch ( $ratio ) { case 1: $height = round( ( intval( $width ) / 4 ) * 3 ); break; default: $height = round( ( intval( $width ) / 16 ) * 9 ); } return intval( $height ); } // END function calculate_height( $width = 306, $ratio ) /** * Generate link to YouTube channel/user * * @param array $instance Widget or shortcode settings * * @return string Generated HTML for block footer */ private function get_footer( $instance ) { // Get link to channel $link_to_channel = $this->get_link_to_channel( $instance ); // Wrap content, if we have it if ( ! empty( $link_to_channel ) ) { return '
'; } return; } // END function get_footer( $instance ) /** * Generate link to YouTube channel/user * * @param array $instance Widget or shortcode settings * * @return string Prepared link to channel HTML code */ private function get_link_to_channel( $instance ) { // Do we need to show goto link? if ( empty( $instance['link_to'] ) || 'none' === $instance['link_to'] ) { return; } // Initialize output string $output = ''; $goto_url = 'https://www.youtube.com/'; $handle = ! empty( $instance['handle'] ) ? $instance['handle'] : $this->defaults['handle']; $vanity = ! empty( $instance['vanity'] ) ? $instance['vanity'] : $this->defaults['vanity']; $username = ! empty( $instance['username'] ) ? $instance['username'] : $this->defaults['username']; $channel = ! empty( $instance['channel'] ) ? $instance['channel'] : $this->defaults['channel']; switch ( $instance['link_to'] ) { case 'handle': if ( empty( $handle ) ) { return ''; } // sanity handle content (strip all in front of last slash to cleanup handle ID only) if ( false !== strpos( $handle, 'youtube.com' ) ) { $handle = preg_replace( '/^.*\//', '', $handle ); } $goto_url .= $handle; break; case 'channel': if ( empty( $channel ) ) { return ''; } $goto_url .= "channel/$channel"; break; case 'vanity': // deprecated if ( empty( $vanity ) ) { return ''; } // sanity vanity content (strip all in front of last slash to cleanup vanity ID only) if ( false !== strpos( $vanity, 'youtube.com' ) ) { $vanity = preg_replace( '/^.*\//', '', $vanity ); } $goto_url .= "c/$vanity"; break; case 'legacy': // deprecated if ( empty( $username ) ) { return ''; } $goto_url .= "user/$username"; break; } $goto_txt = trim( $instance['goto_txt'] ); if ( empty( $goto_txt ) ) { $goto_txt = __( 'Visit our YouTube channel', 'youtube-channel' ); } // replace placeholders $goto_txt = str_replace( '%handle%', $handle, $goto_txt ); $goto_txt = str_replace( '%channel%', $channel, $goto_txt ); $goto_txt = str_replace( '%vanity%', $vanity, $goto_txt ); // deprecated $goto_txt = str_replace( '%user%', $username, $goto_txt ); // deprecated $newtab = __( 'in new window/tab', 'youtube-channel' ); switch ( $instance['popup_goto'] ) { case 1: // JavaScript is deprecated in 3.24.0 case 2: $output .= '' . esc_html( $goto_txt ) . ''; break; default: $output .= '' . esc_html( $goto_txt ) . ''; } // switch popup_goto return $output; } // END private function get_link_to_channel( $instance ) /** * Generate HTML output for single video block * * @param object $item Video object from JSON * @param array $instance Settings from widget or shortcode * @param int $y Order number of video * * @return string Prepared single video block as HTML */ private function generate_video_block( $item, $instance, $y ) { // Start output string $output = ''; // Calculate width and height if ( empty( $instance['ratio'] ) ) { $instance['ratio'] = $this->defaults['ratio']; } /** * @var integer $width Sanitized width of YouTube video */ $width = ! empty( $instance['width'] ) ? intval( $instance['width'] ) : intval( $this->defaults['width'] ); /** * @var integer $height Sanitized calculated height of YouTube video */ $height = $this->calculate_height( $width, $instance['ratio'] ); // How to display videos? if ( empty( $instance['display'] ) ) { $instance['display'] = 'thumbnail'; } // Extract details about video from Resource /** * @var string $yt_id Sanitized YouTube Video ID */ $yt_id = ytc_sanitize_api_key( $item->snippet->resourceId->videoId ); /** * @var string $yt_title Sanitized Title of YouTube video */ $yt_title = sanitize_text_field( $item->snippet->title ); // $yt_date = $item->snippet->publishedAt; // Enhanced privacy? /** * @var string $youtube_domain YouTube domain without protocol and trailing slash */ $youtube_domain = $this->get_youtube_domain( $instance ); /** * @var string $vnumclass HTML class `first` | `mid` | `last` */ $vnumclass = 'mid'; switch ( $y ) { case 1: $vnumclass = 'first'; break; case intval( $instance['num'] ): // $autoplay = false; $vnumclass = 'last'; break; default: $vnumclass = 'mid'; // $autoplay = false; break; } /** * Aspect ratio class * * @todo deprecate and always use ar16_9 * * @var string $arclass HTML class for aspect ratio ar4_3 | ar16_9 */ $arclass = $this->get_ar_class( $instance ); /** * @var string $title_html_tag HTML tag for title (eg. `h3`, `div`, `span`, `strong`, etc) */ $title_html_tag = isset( $instance['titletag'] ) ? sanitize_key( $instance['titletag'] ) : sanitize_key( $this->defaults['titletag'] ); $output .= '
'; // Show video title above video? if ( ! empty( $instance['showtitle'] ) ) { if ( // for non-thumbnail for `above` and `inside` ( 'thumbnail' !== $instance['display'] && in_array( $instance['showtitle'], array( 'above', 'inside' ), true ) ) || // for thubmanil only if it's `below` ( 'thumbnail' === $instance['display'] && 'above' === $instance['showtitle'] ) ) { if ( ! empty( $instance['linktitle'] ) ) { $output .= sprintf( '<%1$s class="ytc_title ytc_title_above">%2$s', $title_html_tag, esc_html( $yt_title ), $yt_id ); } else { $output .= sprintf( '<%1$s class="ytc_title ytc_title_above">%2$s', $title_html_tag, esc_html( $yt_title ), ); } } } // Print out video if ( 'iframe' === $instance['display'] ) { // Start wrapper for responsive item if ( $instance['responsive'] ) { $output .= '
'; } $output .= ''; // Close wrapper for responsive item if ( $instance['responsive'] ) { $output .= '
'; } } elseif ( 'iframe2' === $instance['display'] ) { // Start wrapper for responsive item if ( $instance['responsive'] ) { $output .= '
'; } /** * @var string $js_player_id Unique YTC item ID */ $js_player_id = count( $this->ytc_html5 ) . '_' . str_replace( '-', '_', $yt_id ); // Inject YT.player placeholder $output .= '
'; // Close wrapper for responsive item if ( $instance['responsive'] ) { $output .= '
'; } /** * Prepare YT.player settings object for single video item */ $ytc_player = array( 'height' => $height, 'width' => $width, 'videoId' => $yt_id, ); if ( ! empty( $instance['norel'] ) ) { $ytc_player['playerVars']['rel'] = 0; } if ( ! empty( $instance['controls'] ) ) { $ytc_player['playerVars']['controls'] = 0; } if ( ! empty( $instance['modestbranding'] ) ) { $ytc_player['playerVars']['modestbranding'] = 1; } if ( ! empty( $instance['playsinline'] ) ) { $ytc_player['playerVars']['playsinline'] = 1; } $ytc_player['playerVars']['wmmode'] = 'opaque'; if ( ! empty( $instance['hideanno'] ) ) { $ytc_player['iv_load_policy'] = 3; } // Autoplay may not work https://developer.chrome.com/blog/autoplay/ if ( ! empty( $instance['autoplay'] ) && 1 === $y && empty( $this->ytc_html5 ) ) { $ytc_player['playerVars']['autoplay'] = 1; if ( ! empty( $instance['autoplay_mute'] ) ) { $ytc_player['events'] = array( 'onReady' => 'ytc_playmute', ); } else { $ytc_player['events'] = array( 'onReady' => 'ytc_play', ); } } $ytc_player['origin'] = sanitize_url( $_SERVER['HTTP_HOST'] ); // Append YT.player object to site-wide ytc_html5 players $this->ytc_html5[ $js_player_id ] = $ytc_player; } else { // default is thumbnail /** * Target atribute for thumbnail anchor * * @var string $target Empty if lightbox is used or `target="youtube"` tag attribute */ $target = ''; /** * URL query with YouTube Video parameters * * @var string $http_query Empty or safe URL parameters */ $http_query = ''; if ( empty( $this->defaults['nolightbox'] ) ) { $params = array(); if ( ! empty( $instance['norel'] ) ) { $params['rel'] = 0; } if ( ! empty( $instance['modestbranding'] ) ) { $params['modestbranding'] = 1; } if ( ! empty( $instance['controls'] ) ) { $params['controls'] = 0; } if ( ! empty( $instance['playsinline'] ) ) { $params['playsinline'] = 1; } if ( ! empty( $instance['privacy'] ) ) { $params['enhanceprivacy'] = 1; } if ( ! empty( $instance['autoplay'] ) ) { $params['autoplay'] = 1; } $http_query = http_build_query( $params ); $lightbox_class = 'ytc-lightbox'; } else { $lightbox_class = 'ytc-nolightbox'; if ( ! empty( $instance['popup_goto'] ) ) { $target = 'target="youtube"'; } } /** * Title parameter for anchor tag * * @var string $tag_title Empty or `title="YouTube Video Sanitized Title"` tag attribute */ $tag_title = empty( $instance['no_thumb_title'] ) ? 'title="' . esc_html( $yt_title ) . '"' : ''; // Define video thumbnail if ( empty( $instance['thumb_quality'] ) || ! in_array( $instance['thumb_quality'], array( 'default', 'mqdefault', 'hqdefault', 'sddefault', 'maxresdefault' ), true ) ) { $instance['thumb_quality'] = 'hqdefault'; } /** * @var string $yt_thumb Sanitized URL to video thumbnail */ $yt_thumb = $this->image_handler->get_youtube_image_url( $yt_id, esc_attr( $instance['thumb_quality'] ) ); // $yt_thumb = 'https://img.youtube.com/vi/' . $yt_id . '/' . esc_attr( $instance['thumb_quality'] ) . '.jpg'; // Show video title inside video? /** * HTML code of video title inside the thumbnail * * @var string $title_inside_html HTML element for video title inside thumbnail */ $title_inside_html = ''; if ( ! empty( $instance['showtitle'] ) && in_array( $instance['showtitle'], array( 'inside', 'inside_b' ), true ) ) { $title_inside_html = sprintf( '<%1$s class="ytc_title ytc_title_inside %3$s">%2$s', $title_html_tag, esc_html( $yt_title ), 'inside_b' === $instance['showtitle'] ? 'ytc_title_inside_bottom' : '' ); } $output .= sprintf( '%7$s', $yt_id, // 1 $http_query, //2 $tag_title, // 3 $lightbox_class . ' ' . $arclass, // 4 $target, // 5 $yt_thumb, // 6 $title_inside_html, // 7 $youtube_domain, // 8 esc_html( $yt_title ) ); } // what to show conditions // Show video title below video? if ( ! empty( $instance['showtitle'] ) ) { if ( // for non-thumbnail for `below` and `inside_b` ( 'thumbnail' !== $instance['display'] && in_array( $instance['showtitle'], array( 'below', 'inside_b' ), true ) ) || // for thubmanil only if it's `below` ( 'thumbnail' === $instance['display'] && 'below' === $instance['showtitle'] ) ) { if ( ! empty( $instance['linktitle'] ) ) { $output .= sprintf( '<%1$s class="ytc_title ytc_title_below">%2$s', $title_html_tag, esc_html( $yt_title ), $yt_id ); } else { $output .= sprintf( '<%1$s class="ytc_title ytc_title_below">%2$s', $title_html_tag, esc_html( $yt_title ) ); } } } // do we need to show video description? if ( ! empty( $instance['showdesc'] ) ) { /** * YouTube Video description * * @todo If description should not be shortened, print HTML formatted desc * * @var string $video_description Raw HTML of YouTube video description */ $video_description = $item->snippet->description; if ( $instance['desclen'] > 0 ) { if ( function_exists( 'mb_strlen' ) && function_exists( 'mb_substr' ) ) { if ( mb_strlen( $video_description ) > $instance['desclen'] ) { $video_description = mb_substr( $video_description, 0, $instance['desclen'] ) . '…'; } } else { if ( strlen( $video_description ) > $instance['desclen'] ) { $video_description = substr( $video_description, 0, $instance['desclen'] ) . '…'; } } } if ( ! empty( $video_description ) ) { $output .= '

' . esc_html( $video_description ) . '

'; } } $output .= '
'; return $output; } // END private function generate_video_block( $item, $instance, $y ) /** * Function to print standard playlist embed code * * @param string $resource_id YouTube Channel or Playlist ID * @param object $instance Settings from widget or shortcode * * @return string Prepared HTML embed code */ private function generate_playlist_embed( $resource_id, $instance ) { $width = empty( $instance['width'] ) ? 306 : intval( $instance['width'] ); $height = $this->calculate_height( $width, $instance['ratio'] ); $autoplay = empty( $instance['autoplay'] ) ? '' : '&autoplay=1'; $modestbranding = empty( $instance['modestbranding'] ) ? '' : '&modestbranding=1'; $rel = empty( $instance['norel'] ) ? '' : '&rel=0'; $playsinline = empty( $instance['playsinline'] ) ? '' : '&playsinline=1'; // enhanced privacy $youtube_domain = $this->get_youtube_domain( $instance ); $arclass = $this->get_ar_class( $instance ); // Start output string $output = ''; $output .= '
'; $output .= '
'; $output .= ''; $output .= '
'; $output .= '
'; return $output; } // END private function generate_playlist_embed( $resource_id, $instance ) /** * Method to delete all YTC transient caches * @return string Report message about success or failed purge cache */ public function clear_all_cache() { if ( ! current_user_can( 'activate_plugins' ) || ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'action-ytc_clear_all_cache' ) ) ) { echo 'Oops, insufficient permissions to clear My YouTube Channel cache.'; wp_die(); } global $wpdb; $ret = $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->options WHERE option_name LIKE %s OR option_name LIKE %s ", '_transient_timeout_ytc_%', '_transient_ytc_%' ) ); if ( false === $ret ) { echo 'Oops, we did not cleared any My YouTube Channel cache because some error occured'; } else { if ( 0 === $ret ) { echo 'Congratulations! You can chill, there is no My YouTube Channel caches.'; } else { echo "Success! We cleared $ret row/s with My YouTube Channel caches."; } } wp_die(); } // END public function clear_all_cache() /** * Return nice name for resource by provided resource ID * * @param integer $resource_id Resource ID * * @return string Resource nice name */ private function get_resource_nice_name( $resource_id ) { if ( 0 === (int) $resource_id ) { $resource_nice_name = 'Channel (User uploads)'; } elseif ( 1 === (int) $resource_id ) { $resource_nice_name = 'Favourited videos'; } elseif ( 2 === (int) $resource_id ) { $resource_nice_name = 'Liked videos'; } elseif ( 3 === (int) $resource_id ) { $resource_nice_name = 'Liked videos'; } else { $resource_nice_name = 'Unknown resource'; } return $resource_nice_name; } // END private function get_resource_nice_name( $resource_id ) /** * Define YouTube domain with or without nocookie sufix * * @param array $instance YTC object * * @return string YouTube domain without protocol and trailing slash */ private function get_youtube_domain( $instance ) { return empty( $instance['privacy'] ) ? 'www.youtube.com' : 'www.youtube-nocookie.com'; } // END private function get_youtube_domain /** * Define HTML class for video aspect ratio * * @param array $instance Settings from widget or shortcode * * @return string HTML class for aspect ratio ar4_3 | ar16_9 */ private function get_ar_class( $instance ) { return ! empty( $instance['ratio'] ) && 1 === (int) $instance['ratio'] ? 'ar4_3' : 'ar16_9'; } // END private function arclass() /** * Register TinyMCE button for YTC * * @param array $plugins Unmodified set of plugins * * @return array Set of TinyMCE plugins with YTC addition */ public function mce_external_plugins( $plugins ) { $plugins['youtube_channel'] = esc_url( YTC_URL . 'assets/js/tinymce/plugin.min.js' ); return $plugins; } // END public function mce_external_plugins() /** * Append TinyMCE button for YTC at the end of row 1 * * @param array $buttons Unmodified set of buttons * * @return array Set of TinyMCE buttons with YTC addition */ public function mce_buttons( $buttons ) { $buttons[] = 'youtube_channel_shortcode'; return $buttons; } // END public function mce_buttons() } // End class Wpau_My_Youtube_Channel PK!Ka7classes/class-wpau-my-youtube-channel-image-handler.phpnu[defaults = get_option( YTC_PLUGIN_OPTION_KEY ); $upload_dir_info = wp_upload_dir(); $this->upload_dir = $upload_dir_info['basedir'] . '/my-youtube-channel/'; // Ensure the directory exists if ( ! file_exists( $this->upload_dir ) ) { wp_mkdir_p( $this->upload_dir ); } } public function get_youtube_image_url( $video_id, $video_quality ) { // Build remote image URL $remote_url = 'https://img.youtube.com/vi/' . $video_id . '/' . $video_quality . '.jpg'; // If we don't need to use locally stored images, return remote URL if ( true !== (bool) $this->defaults['local_img'] ) { return $remote_url; } // Prepare parameters for local storage $video_file_name = "yt-$video_id-$video_quality.jpg"; $local_file_path = $this->upload_dir . $video_file_name; // Check if the file exists locally if ( ! file_exists( $local_file_path ) ) { // Download the image from YouTube $this->download_image( $remote_url, $local_file_path ); } // Return the URL of the locally stored image $upload_dir_info = wp_upload_dir(); return $upload_dir_info['baseurl'] . '/my-youtube-channel/' . $video_file_name; } private function download_image( $remote_url, $local_file_path ) { $image_data = file_get_contents( $remote_url ); if ( false === $image_data ) { throw new Exception( "Failed to download image from $remote_url" ); } file_put_contents( $local_file_path, $image_data ); } } // Usage example // $wpau_my_youtube_channel_image_handler = new Wpau_My_Youtube_Image_Handler(); // $image_url = $wpau_my_youtube_channel_image_handler->get_youtube_image_url( 'VIDEO_ID', 'maxresdefault'); PK!әs feature-request.txtnu[Fetch more than 50 videos (pagged list fetch) @mjortiz116 https://wordpress.org/support/topic/max-fetch-videos/ Custom video sorting (by views) @iqit https://wordpress.org/support/topic/sort-by-views-1 Display number of views below video @iqit https://wordpress.org/support/topic/show-views Different number of videos for Desktop/Mobile @fantasmo https://wordpress.org/support/topic/pagination-in-dynamic-wall/#post-8897785PK!cJ!!&templates/settings-usage-shortcode.phpnu[

[youtube_channel]' ); ?>

  • channel (string) ID of preferred YouTube channel. Do not set full URL to channel, but just last part from URL - ID (name)
  • vanity (string) Vanity name.
  • username (string) Legacy YouTube username.
  • playlist (string) ID of preferred YouTube playlist.
  • resource (int) Resource to use for feed:
    • 0 Channel (User Uploads)
    • 1 Favorites (for defined channel)
    • 2 Playlist
    • 3 Liked Videos (for defined channel)
  • cache (int) Period in seconds for caching feed. You can disable caching by setting this option to 0, but if you have a lot of visits, consider at least short caching (couple minutes).
  • fetch (int) Number of videos that will be used as stack for random pick (min 2, max 50)
  • skip (int) Number of videos to skip (not applicable for embedable playlist and random pick (min 0, max 49, default 0) [Individual option, does not exists in global plugin settings!]
  • num (int) Number of videos to display per YTC block.
  • random (bool) Option to randomize videos on every page load. [Individual option, does not exists in global plugin settings!]
  • ratio (int) Set preferred aspect ratio for thumbnail and video. You can use:
    • 3 16:9 widescreen (default)
    • 1 4:3
  • width (int) Width of thumbnail and video in pixels.
  • responsive (bool) Distribute one full width video per row.
  • display (string) Object that will be used to represent video. We have couple predefined options:
    • thumbnail Thumbnail will be used and video will be loaded in lightbox.
    • iframe HTML5 (iframe)
    • iframe2 HTML5 (iframe) with asynchronous loading - recommended
    • playlist Embedded playlist
  • thumb_quality (string) Define image quality for thumbnail display mode. Default is hqdefault, available:
    • default Default Quality (120x90px)
    • mqdefault Medium Quality (320x180px)
    • hqdefault High Quality (480x360px)
    • sddefault Standard Definition (640x480px)
    • maxresdefault Maximum Resolution (1280x720px)
  • no_thumb_title (bool) By default YouTube thumbnail will have tooltip with info about video title and date of publishing. By setting this option to 1 or true you can hide tooltip
  • controls (bool) Set this option to 1 or true to hide playback controls. To display controls set this option to 0 or false.
  • autoplay (bool) Enable autoplay of first video in YTC video stack by setting this option to 1 or true
  • mute (bool) Set this option to 1 or true to mute videos set to autoplay on load
  • norel (bool) Set this option to 1 or true to hide related videos after finished playbak
  • nobrand (bool) Set this option to 1 or true to hide YouTube logo from playback control bar
  • nolightbox (bool) Set this option to 1 or true to disable lightbox and open thumbnail link in new tab/windows instead in lightbox
  • showtitle (string) Set to:
    • none to hide title
    • above to show video title above video/thumbnail
    • below to show video title below video/thumbnail
    • inside to show top aligned video title inside thumbnail; if display is not thumbnail then treat as above
    • inside_b to show bottom aligned title inside thumbnail; if display is not thumbnail then treat as below
  • linktitle (bool) Set to 1 or true to link title to vlideo.
  • showdesc (bool) Set to 1 or true to show video description.
  • desclen (int) Set number of characters to cut down length of video description. Set to 0 to use full length description.
  • noanno (bool) Set to 1 or true to hide overlay video annotations (from embedded player)

PK!ltemplates/settings-tools.phpnu[

Clear YTC Cache

To avoid page load slowdown, we provide internal YouTube Channel caching functionality. You can enable caching per widget or shortcode, and set how long cached feed for particular widget or shortcode will live.

If you wish to force clear cache before it expires (for example, you have set cache timeout to 2 days, but wish to force loading of fresh channel or playlist feed), you can force Clear All YTC Cache to remove transients from database on demand.

PK!L_mtemplates/settings-usage.phpnu[

.

  1. %s', esc_html__( 'Widgets', 'youtube-channel' ) ) ); ?>
  2. [youtube_channel]' ); ?>
PK!SVDDtemplates/settings.phpnu[

v.

__( 'General', 'youtube-channel' ), 'video' => __( 'Video', 'youtube-channel' ), 'content' => __( 'Content', 'youtube-channel' ), 'link' => __( 'Link to Channel', 'youtube-channel' ), 'tools' => __( 'Tools', 'youtube-channel' ), 'help' => __( 'Help', 'youtube-channel' ), ); ?> '; settings_fields( sanitize_key( 'ytc_' . $active_tab ) ); do_settings_sections( sanitize_key( YTC_PLUGIN_SLUG . '_' . $active_tab ) ); submit_button(); echo ''; } elseif ( 'tools' === $active_tab ) { include_once YTC_DIR_TEMPLATES . '/settings-tools.php'; } elseif ( 'help' === $active_tab ) { include_once YTC_DIR_TEMPLATES . '/settings-usage.php'; include_once YTC_DIR_TEMPLATES . '/settings-usage-shortcode.php'; } // $active_tab != 'tools|help|support' } // ! empty ( $tabs[$active_tab] ) ?>
PK!Py`y`"languages/youtube-channel-cs_CZ.ponu[# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Youtube Channel 1.3.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-06-19 21:20+0100\n" "PO-Revision-Date: 2015-06-19 21:20+0100\n" "Last-Translator: Aleksandar Urošević \n" "Language-Team: zholesova.cz >\n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.8.1\n" #: inc/settings.php:38 inc/settings_template.php:14 #: inc/settings_usage_shortcode.php:104 msgid "General" msgstr "" #: inc/settings.php:46 youtube-channel.php:316 msgid "YouTube Data API Key" msgstr "" #: inc/settings.php:54 inc/settings.php:86 msgid "Required" msgstr "" #: inc/settings.php:58 #, php-format msgid "" "Your YouTube Data API Key (get it from %s)" msgstr "" #: inc/settings.php:68 youtube-channel.php:318 msgid "Google Developers Console" msgstr "" #: inc/settings.php:78 #, fuzzy msgid "YouTube Channel ID" msgstr "YouTube Channel" #: inc/settings.php:90 #, php-format msgid "" "Your YouTube Channel ID (get it from %s)" msgstr "" #: inc/settings.php:100 inc/settings.php:132 inc/settings.php:718 msgid "YouTube Account Overview" msgstr "" #: inc/settings.php:110 msgid "YouTube Vanity Name" msgstr "" #: inc/settings.php:118 inc/settings.php:150 inc/settings.php:168 msgid "Optional" msgstr "" #: inc/settings.php:122 #, php-format msgid "" "Your YouTube Custom Name (get only part after www.youtube.com/c/ instead " "whole URL from %s)" msgstr "" #: inc/settings.php:142 msgid "Legacy YouTube Username" msgstr "" #: inc/settings.php:151 msgid "Your YouTube legacy username" msgstr "" #: inc/settings.php:160 msgid "Default Playlist ID" msgstr "" #: inc/settings.php:169 msgid "Enter default playlist ID (not playlist name)" msgstr "" #: inc/settings.php:178 inc/widget.php:134 msgid "Resource to use" msgstr "" #: inc/settings.php:184 msgid "Resource:" msgstr "" #: inc/settings.php:185 msgid "What to use as resource for feeds" msgstr "" #: inc/settings.php:189 #, fuzzy msgid "Channel" msgstr "Kanál:" #: inc/settings.php:190 inc/widget.php:137 msgid "Favourites" msgstr "" #: inc/settings.php:191 msgid "Liked Video" msgstr "" #: inc/settings.php:192 inc/widget.php:139 #, fuzzy msgid "Playlist" msgstr "Playlist:" #: inc/settings.php:199 msgid "Cache Timeout" msgstr "" #: inc/settings.php:205 msgid "Define caching timeout for YouTube feeds, in seconds" msgstr "" #: inc/settings.php:209 msgid "Do not chache" msgstr "" #: inc/settings.php:210 youtube-channel.php:1273 msgid "1 minute" msgstr "" #: inc/settings.php:211 youtube-channel.php:1274 msgid "5 minutes" msgstr "" #: inc/settings.php:212 youtube-channel.php:1275 msgid "15 minutes" msgstr "" #: inc/settings.php:213 youtube-channel.php:1276 msgid "30 minutes" msgstr "" #: inc/settings.php:214 youtube-channel.php:1279 msgid "1 hour" msgstr "" #: inc/settings.php:215 youtube-channel.php:1280 msgid "2 hours" msgstr "" #: inc/settings.php:216 youtube-channel.php:1281 msgid "5 hours" msgstr "" #: inc/settings.php:217 youtube-channel.php:1282 msgid "10 hours" msgstr "" #: inc/settings.php:218 youtube-channel.php:1283 msgid "12 hours" msgstr "" #: inc/settings.php:219 youtube-channel.php:1284 msgid "18 hours" msgstr "" #: inc/settings.php:220 youtube-channel.php:1287 msgid "1 day" msgstr "" #: inc/settings.php:221 youtube-channel.php:1288 msgid "2 days" msgstr "" #: inc/settings.php:222 youtube-channel.php:1289 msgid "3 days" msgstr "" #: inc/settings.php:223 youtube-channel.php:1290 msgid "4 days" msgstr "" #: inc/settings.php:224 youtube-channel.php:1291 msgid "5 days" msgstr "" #: inc/settings.php:225 youtube-channel.php:1292 msgid "6 days" msgstr "" #: inc/settings.php:226 youtube-channel.php:1295 msgid "1 week" msgstr "" #: inc/settings.php:227 youtube-channel.php:1296 msgid "2 weeks" msgstr "" #: inc/settings.php:228 youtube-channel.php:1297 msgid "3 weeks" msgstr "" #: inc/settings.php:229 youtube-channel.php:1298 msgid "1 month" msgstr "" #: inc/settings.php:236 inc/widget.php:152 msgid "Fetch" msgstr "" #: inc/settings.php:242 inc/widget.php:152 msgid "" "Number of videos that will be used for random pick (min 2, max 50, default " "25)" msgstr "" #: inc/settings.php:253 inc/widget.php:155 msgid "Show" msgstr "" #: inc/settings.php:259 inc/widget.php:155 msgid "Number of videos to display" msgstr "" #: inc/settings.php:270 msgid "Use Enhanced privacy" msgstr "" #: inc/settings.php:279 #, php-format msgid "" "Enable this option to protect your visitors privacy. %s" msgstr "" #: inc/settings.php:289 msgid "Learn more here" msgstr "" #: inc/settings.php:306 msgid "Video Tweaks" msgstr "" #: inc/settings.php:314 msgid "Initial Width" msgstr "" #: inc/settings.php:320 msgid "Set default width for displayed video, in pixels" msgstr "" #: inc/settings.php:331 inc/widget.php:164 msgid "Aspect ratio" msgstr "" #: inc/settings.php:338 msgid "Select aspect ratio for displayed video" msgstr "" #: inc/settings.php:350 msgid "What to show?" msgstr "Jak zobrazit?" #: inc/settings.php:356 msgid "Choose how to embed video block" msgstr "" #: inc/settings.php:360 inc/widget.php:179 #, fuzzy msgid "Thumbnail" msgstr "náhled" #: inc/settings.php:361 inc/widget.php:180 msgid "HTML5 (iframe)" msgstr "" #: inc/settings.php:362 inc/widget.php:181 msgid "HTML5 (iframe) Asynchronous" msgstr "" #: inc/settings.php:363 inc/widget.php:182 msgid "Embedded Playlist" msgstr "" #: inc/settings.php:371 msgid "Enable Responsive" msgstr "" #: inc/settings.php:377 msgid "" "Enable this option to make YTC videos and thumbnails responsive by default. " "Please note, this option will set videos and thumbnail to full width " "relative to parent container, and disable more than one video per row." msgstr "" #: inc/settings.php:386 msgid "Play inline on iOS" msgstr "" #: inc/settings.php:394 #, php-format msgid "" "Enable this option to override fullscreen playback on iOS, and force inline " "playback on page and in lightbox. Learn more here." msgstr "" #: inc/settings.php:406 msgid "Disable Lightbox" msgstr "" #: inc/settings.php:412 msgid "" "Enable this option to disable built-in lightbox for thumbnails (in case that " "you have youtube links lightbox trigger in theme or other plugin)." msgstr "" #: inc/settings.php:421 msgid "Light Theme" msgstr "" #: inc/settings.php:427 msgid "" "Enable this option to use light theme for playback controls instead dark." msgstr "" #: inc/settings.php:435 msgid "Hide Player Controls" msgstr "" #: inc/settings.php:441 msgid "Enable this option to hide playback controls" msgstr "" #: inc/settings.php:450 inc/widget.php:187 #, fuzzy msgid "Autoplay video or playlist" msgstr "Automaticky přehrát video" #: inc/settings.php:456 msgid "" "Enable this option to start video playback right after block is rendered" msgstr "" #: inc/settings.php:464 inc/widget.php:188 msgid "Mute video on autoplay" msgstr "" #: inc/settings.php:470 msgid "Enable this option to mute video when start autoplay" msgstr "" #: inc/settings.php:478 inc/widget.php:189 msgid "Hide related videos" msgstr "" #: inc/settings.php:484 msgid "Enable this option to hide related videos after finished playback" msgstr "" #: inc/settings.php:492 msgid "Hide YT logo" msgstr "" #: inc/settings.php:498 msgid "" "Enable this option to hide YouTube logo from playback control bar. Does not " "work for all videos." msgstr "" #: inc/settings.php:506 msgid "Hide video annotations" msgstr "" #: inc/settings.php:512 msgid "" "Enable this option to hide video annotations (custom text set by uploader " "over video during playback)" msgstr "" #: inc/settings.php:520 inc/widget.php:213 msgid "Hide video info" msgstr "Skryj info o videu" #: inc/settings.php:526 msgid "" "Enable this option to hide informations about video before play start (video " "title and uploader in overlay)" msgstr "" #: inc/settings.php:542 msgid "Content Tweaks" msgstr "" #: inc/settings.php:550 inc/widget.php:196 msgid "Show video title" msgstr "Ukaž název videa" #: inc/settings.php:556 msgid "Select should we and where display title of video" msgstr "" #: inc/settings.php:560 inc/widget.php:199 msgid "Hide title" msgstr "" #: inc/settings.php:561 inc/widget.php:200 msgid "Above video/thumbnail" msgstr "" #: inc/settings.php:562 inc/widget.php:201 msgid "Below video/thumbnail" msgstr "" # @ youtube-channel #: inc/settings.php:569 inc/widget.php:204 msgid "Show video description" msgstr "Ukaž popisek videa" #: inc/settings.php:575 msgid "Enable this option to display description for video" msgstr "" # @ youtube-channel #: inc/settings.php:583 inc/widget.php:206 msgid "Description length" msgstr "Délka popisu videa" #: inc/settings.php:589 msgid "Enter length for video description in characters (0 for full length)" msgstr "" # @ youtube-channel #: inc/settings.php:609 inc/settings_template.php:17 #: inc/settings_usage_shortcode.php:15 inc/settings_usage_shortcode.php:107 #: inc/widget.php:217 #, fuzzy msgid "Link to Channel" msgstr "Odkaz na kanál" #: inc/settings.php:617 msgid "Link to..." msgstr "" #: inc/settings.php:624 msgid "Set where link will lead visitors" msgstr "" #: inc/settings.php:628 inc/widget.php:223 msgid "Hide link" msgstr "" #: inc/settings.php:629 msgid "Vanity custom URL" msgstr "" #: inc/settings.php:630 msgid "Channel page URL" msgstr "" #: inc/settings.php:631 msgid "Legacy username page" msgstr "" #: inc/settings.php:638 msgid "Open link in..." msgstr "" #: inc/settings.php:645 msgid "Set where link will be opened" msgstr "" #: inc/settings.php:649 msgid "same window" msgstr "" #: inc/settings.php:650 msgid "new window (JavaScript)" msgstr "" #: inc/settings.php:651 msgid "new window (target=\"_blank\")" msgstr "" #: inc/settings.php:658 msgid "Text for Visit channel link" msgstr "" #: inc/settings.php:665 msgid "Set default title for link" msgstr "" #. Plugin Name of the plugin/theme #: inc/settings.php:686 inc/settings.php:687 inc/settings.php:714 #: inc/settings.php:728 inc/settings.php:738 inc/settings.php:748 #: inc/settings_usage_shortcode.php:115 inc/widget.php:11 msgid "YouTube Channel" msgstr "" #: inc/settings.php:704 #, php-format msgid "" "Configure general defaults for %1$s used as fallback options in widget or " "shortcodes. To get %2$s and %3$s visit " "%5$s." msgstr "" #: inc/settings.php:715 inc/widget.php:108 inc/widget.php:119 #, fuzzy msgid "Channel ID" msgstr "Kanál:" #: inc/settings.php:716 msgid "Vanity URL" msgstr "" #: inc/settings.php:727 #, php-format msgid "" "Configure video specific defaults for %s used as fallback options in widget " "or shortcodes." msgstr "" #: inc/settings.php:737 #, php-format msgid "" "Configure defaults of content around and over videos for %s used as fallback " "options in widget or shortcodes." msgstr "" #: inc/settings.php:747 #, php-format msgid "" "Configure defaults for link to channel below %s block used as fallback " "options in widget or shortcodes." msgstr "" #: inc/settings.php:908 msgid "You do not have sufficient permissions to access this page." msgstr "" #: inc/settings_template.php:6 msgid " Settings" msgstr "" #: inc/settings_template.php:15 inc/settings_usage_shortcode.php:105 msgid "Video" msgstr "" #: inc/settings_template.php:16 inc/settings_usage_shortcode.php:106 msgid "Content" msgstr "" #: inc/settings_template.php:18 msgid "Tools" msgstr "" #: inc/settings_template.php:19 msgid "Help" msgstr "" #: inc/settings_template.php:20 youtube-channel.php:201 msgid "Support" msgstr "" #: inc/settings_usage.php:1 msgid "How to use YouTube Channel" msgstr "" #: inc/settings_usage.php:2 msgid "You can insert YouTube Channel in couple different ways." msgstr "" #: inc/settings_usage.php:7 #, php-format msgid "Add %s to preferred %s, and configure it there." msgstr "" #: inc/settings_usage.php:10 msgid "YouTube Channel Widget" msgstr "" #: inc/settings_usage.php:13 msgid "Widget Area" msgstr "" #: inc/settings_usage.php:19 #, php-format msgid "" "Insert shortcode %s to your page or text widget, and even modify default " "settings by shortcode parameters listed in section below." msgstr "" #: inc/settings_usage_shortcode.php:1 msgid "How to use shortcode" msgstr "" #: inc/settings_usage_shortcode.php:5 #, php-format msgid "" "You can use shortcode %s with options listed below (all options are optional " "if you have set defaults in global plugin settings)." msgstr "" #: inc/settings_usage_shortcode.php:12 youtube-channel.php:321 msgid "General Settings" msgstr "" #: inc/settings_usage_shortcode.php:13 inc/widget.php:163 msgid "Video Settings" msgstr "" #: inc/settings_usage_shortcode.php:14 inc/widget.php:193 msgid "Content Layout" msgstr "" #: inc/settings_usage_shortcode.php:101 #, php-format msgid "" "Please note, you can omit all options listed above, and then will be used " "plugin defaults customized on tabs %1$s, %2$s, %3$s and %4$s." msgstr "" #: inc/settings_usage_shortcode.php:112 #, php-format msgid "" "Important note: %s blocks inserted through widget have their own settings." msgstr "" #: inc/widget.php:14 msgid "Serve YouTube videos from channel or playlist right to widget area" msgstr "" #: inc/widget.php:90 #, fuzzy msgid "Widget Title" msgstr "Název Widgetu" #: inc/widget.php:91 msgid "Title for widget" msgstr "" #: inc/widget.php:95 msgid "Custom CSS Class" msgstr "" #: inc/widget.php:96 msgid "Enter custom class for YTC block, if you wish to target block styling" msgstr "" #: inc/widget.php:103 #, php-format msgid "" "Get your %1$s and %2$s from here." msgstr "" #: inc/widget.php:109 msgid "Custom ID" msgstr "" #: inc/widget.php:114 msgid "Vanity/Custom ID" msgstr "" #: inc/widget.php:115 msgid "YouTube Vanity/Custom ID from URL (part after /c/)" msgstr "" #: inc/widget.php:120 msgid "" "Find Channel ID behind My Channel menu item in YouTube (ID have UC at the " "beginning)" msgstr "" #: inc/widget.php:124 msgid "Legacy Username" msgstr "" #: inc/widget.php:125 msgid "" "Legacy YouTube username located behind /user/ part of channel URL (available " "only on old YouTube accounts)" msgstr "" #: inc/widget.php:129 #, fuzzy msgid "Playlist ID" msgstr "Playlist:" #: inc/widget.php:130 msgid "Find Playlist ID in your playlists (ID have PL at the beginning)" msgstr "" #: inc/widget.php:136 msgid "Channel (User Uploads)" msgstr "" #: inc/widget.php:138 msgid "Liked Videos" msgstr "" #: inc/widget.php:144 msgid "Cache feed" msgstr "" #: inc/widget.php:146 msgid "Do not cache" msgstr "" #: inc/widget.php:152 inc/widget.php:155 msgid "video(s)" msgstr "" #: inc/widget.php:158 msgid "Enable this option to protect your visitors privacy" msgstr "" #: inc/widget.php:158 #, php-format msgid "Enable privacy-enhanced mode" msgstr "" #: inc/widget.php:160 #, fuzzy msgid "Get random videos of all fetched from channel or playlist" msgstr "Získej náhodné video z kanálu" #: inc/widget.php:160 msgid "" "Show random video from resource (Have no effect if \"What to show?\" " "has been set to \"Embedded Playlist\")" msgstr "" #: inc/widget.php:169 msgid "" "Responsive video (distribute one full width item per row)" msgstr "" #: inc/widget.php:172 msgid "Initial width" msgstr "" #: inc/widget.php:172 msgid "Set video width in pixels" msgstr "" #: inc/widget.php:172 msgid "default" msgstr "standard" #: inc/widget.php:176 msgid "What to display?" msgstr "" #: inc/widget.php:184 msgid "Hide thumbnail tooltip" msgstr "" # @ youtube-channel #: inc/widget.php:185 msgid "Use light theme (default is dark)" msgstr "Použij světlé téma (stabdard je tmavé)" #: inc/widget.php:186 msgid "Hide player controls" msgstr "Skryj ovládání přehrávače" #: inc/widget.php:190 msgid "Hide YT Logo (does not work for all videos)" msgstr "" #: inc/widget.php:207 msgid "" "Set number of characters to cut down video description to (0 means full " "length)" msgstr "" # @ youtube-channel #: inc/widget.php:210 msgid "Hide annotations from video" msgstr "Skryj poznámky z videa" #: inc/widget.php:212 msgid "" "Enabling this option causes the player to not display information like the " "video title and uploader before the video starts playing." msgstr "" #: inc/widget.php:219 msgid "" "Default: Visit our YouTube channel. You can use placeholders %vanity%, " "%channel% and %username%." msgstr "" #: inc/widget.php:219 youtube-channel.php:1043 msgid "Visit our YouTube channel" msgstr "" #: inc/widget.php:224 msgid "Link to Vanity customized URL" msgstr "" #: inc/widget.php:225 msgid "Link to Channel page URL" msgstr "" #: inc/widget.php:226 msgid "Link to Legacy username page" msgstr "" #: inc/widget.php:231 msgid "Open link in same window" msgstr "" #: inc/widget.php:232 msgid "Open link in new window (JavaScript)" msgstr "" #: inc/widget.php:233 msgid "Open link in new window (target=\"blank\")" msgstr "" #: inc/widget.php:237 msgid "Does not work?" msgstr "" #: inc/widget.php:243 #, php-format msgid "" "Carefully read %2$s before you contact " "us. If that does not help, get JSON file and send it to support forum " "along with other details noted in this " "article." msgstr "" #: inc/widget.php:249 msgid "FAQ" msgstr "" #: youtube-channel.php:179 msgid "Settings" msgstr "" #: youtube-channel.php:280 #, php-format msgid "" "

Your website running on web server with PHP version %s. Please note that " "%s requires PHP at least 5.3 or newer to work properly. Dismiss

" msgstr "" #: youtube-channel.php:293 #, php-format msgid "" "

Since %s v3.0.6 we store YouTube Data API Key in plugin settings. So, you can safely remove %s define line from " "your wp-config.php file. Dismiss

" msgstr "" #: youtube-channel.php:305 #, php-format msgid "" "

Please note, to make %1$s plugin v3+ work, generate " "%2$s in %4$s, as " "explained here, then add it to %7$s.

If you have any issue with new version of " "plugin, please ask for help on official " "%9$s.
This notice will disappear when you add missing key as " "mentioned above!

" msgstr "" #: youtube-channel.php:323 msgid "support forum" msgstr "" #: youtube-channel.php:332 #, php-format msgid "" "

%s since version 2.4 supports linking to channel through " "Vanity/Custom URL. Please review global and widgets settings. Dismiss" msgstr "" #: youtube-channel.php:346 #, php-format msgid "" "

%s changed shortcode parameters by removing " "only_pl and showgoto, and combining with " "parameters display and link_to respectively. " "Please check out %s and update your shortcodes. " "Dismiss" msgstr "" #: youtube-channel.php:609 #, php-format msgid "" "%s version 3+ requires YouTube DATA API Key to work. Learn more here." msgstr "" #: youtube-channel.php:782 #, php-format msgid "" "You have set to display videos from %s [resource list ID: %s], but there " "have no public videos in that resouce." msgstr "" #: youtube-channel.php:786 #, php-format msgid "" "We have empty record for this feed. Please read FAQ and if that does not help, contact support." msgstr "" #: youtube-channel.php:828 #, php-format msgid "" "Double check YouTube Data API Key on General plugin tab " "and make sure it's correct. Read Installation document." msgstr "" #: youtube-channel.php:836 #, php-format msgid "" "You have set wrong Channel ID. Fix that in General plugin settings, Widget " "and/or shortcode. Read FAQ document." msgstr "" #: youtube-channel.php:840 #, php-format msgid "" "You do not have permission to access ressource %s (it's " "maybe set to private or even does not exists!)" msgstr "" #: youtube-channel.php:964 msgid "Oops, something went wrong." msgstr "" #: youtube-channel.php:1046 msgid "in new window/tab" msgstr "v novém okně / záložce" #: youtube-channel.php:1198 #, php-format msgid "Watch video %1$s published on %2$s" msgstr "Podívej se na video %1$s z %2$s" #. Plugin URI of the plugin/theme msgid "http://urosevic.net/wordpress/plugins/youtube-channel/" msgstr "http://urosevic.net/wordpress/plugins/youtube-channel/" #. Description of the plugin/theme msgid "" "Quick and easy embed latest or random videos from YouTube channel (user " "uploads, liked or favourited videos) or playlist. Use widget for sidebar or shortcode for content. Works with YouTube " "Data API v3." msgstr "" #. Author of the plugin/theme msgid "Aleksandar Urošević" msgstr "Aleksandar Urošević" #. Author URI of the plugin/theme msgid "http://urosevic.net/" msgstr "http://urosevic.net/" # @ youtube-channel #, fuzzy #~ msgid "Show random video" #~ msgstr "Ukaž náhodné video z kanálu" #, fuzzy #~ msgid "Video Width" #~ msgstr "Šířka" #, fuzzy #~ msgid "Chromeless" #~ msgstr "\"chromeless\" video" # @ youtube-channel #, fuzzy #~ msgid "Use light theme" #~ msgstr "Použij světlé téma (stabdard je tmavé)" #, fuzzy #~ msgid "Visit YouTube Channel text" #~ msgstr "Text pro odkaz na kanál:" #, fuzzy #~ msgid "Visit my channel %channel%" #~ msgstr "Navštiv kanál %1$s" #~ msgid "Show link to channel" #~ msgstr "Ukaž odkaz na kanál" #, fuzzy #~ msgid "Open YouTube channel page" #~ msgstr "YouTube Channel" #, fuzzy #~ msgid "in same window" #~ msgstr "v novém okně / záložce" #, fuzzy #~ msgid "in new window (JavaScript)" #~ msgstr "v novém okně / záložce" #, fuzzy #~ msgid "in new window (Target)" #~ msgstr "v novém okně / záložce" # @ youtube-channel #, fuzzy #~ msgid "Link to channel instead to user" #~ msgstr "Odkaz na kanál" #, fuzzy #~ msgid "Youtube Channel" #~ msgstr "YouTube Channel" #~ msgid "Width" #~ msgstr "Šířka" #~ msgid "Fix height taken by controls" #~ msgstr "Oprava výšky zabrané ovládáním" #~ msgid "No items" #~ msgstr "Žádné video" #~ msgid "Visit channel %1$s" #~ msgstr "Navštiv kanál %1$s" #~ msgid "Aspect ratio (relative to width):" #~ msgstr "Poměr stran (relativně k šířce):" #~ msgid "Height" #~ msgstr "Výška" #~ msgid "Items to fetch (min 1, max 50):" #~ msgstr "Videí k načtení (min 1, max 50):" #~ msgid "Open channel in new window/tab" #~ msgstr "Otevírej kanál v novém okně / záložce" #~ msgid "Use target=\"_blank\" (invalid XHTML)" #~ msgstr "" #~ "Použij target=\"_blank\" (nevalidní XHTML) - slouží pro otevírání v novém " #~ "okně" #~ msgid "Use the playlist instead of channel" #~ msgstr "Použij playlist místo kanálu" #~ msgid "custom" #~ msgstr "vlastní" #~ msgid "iframe (HTML5 player)" #~ msgstr "iframe (HTML5 přehrávač)" #~ msgid "object (flash player)" #~ msgstr "objekt (flash player)" # @ youtube-channel #~ msgid "Try to fix `No items` error" #~ msgstr "Pokus se opravit problém s „Žádné video“" # @ youtube-channel #~ msgid "" #~ "Get one random video of latest N videos from channel (min 1, max 50):" #~ msgstr "" #~ "Vyber náhodně jedno video z posledních N videí kanálu (min 1, max. 50):" # @ youtube-channel #~ msgid "Video property" #~ msgstr "Nastavení videa" # @ youtube-channel #~ msgid "Layout behaviour" #~ msgstr "Rozvržení" PK!++"languages/youtube-channel-da_DK.ponu[msgid "" msgstr "" "Project-Id-Version: YouTube Channel 2.4.1.7\n" "POT-Creation-Date: 2015-06-19 21:18+0100\n" "PO-Revision-Date: \n" "Last-Translator: Aleksandar Urošević \n" "Language-Team: GSAdev (aka TeamBlogos) \n" "Language: da_DK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.1\n" "X-Poedit-Basepath: d:\\wordpress\\plugins\\youtube-channel\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-KeywordsList: __;_e\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPath-1: d:\\wordpress\\plugins\\youtube-channel\n" #: inc/settings.php:38 inc/settings_template.php:14 #: inc/settings_usage_shortcode.php:104 msgid "General" msgstr "Generelt" #: inc/settings.php:46 youtube-channel.php:316 msgid "YouTube Data API Key" msgstr "" #: inc/settings.php:54 inc/settings.php:86 msgid "Required" msgstr "" #: inc/settings.php:58 #, php-format msgid "" "Your YouTube Data API Key (get it from %s)" msgstr "" #: inc/settings.php:68 youtube-channel.php:318 msgid "Google Developers Console" msgstr "" #: inc/settings.php:78 msgid "YouTube Channel ID" msgstr "ID for YouTube-kanal" #: inc/settings.php:90 #, php-format msgid "" "Your YouTube Channel ID (get it from %s)" msgstr "" #: inc/settings.php:100 inc/settings.php:132 inc/settings.php:718 msgid "YouTube Account Overview" msgstr "" #: inc/settings.php:110 msgid "YouTube Vanity Name" msgstr "" #: inc/settings.php:118 inc/settings.php:150 inc/settings.php:168 msgid "Optional" msgstr "" #: inc/settings.php:122 #, php-format msgid "" "Your YouTube Custom Name (get only part after www.youtube.com/c/ instead " "whole URL from %s)" msgstr "" #: inc/settings.php:142 msgid "Legacy YouTube Username" msgstr "" #: inc/settings.php:151 msgid "Your YouTube legacy username" msgstr "" #: inc/settings.php:160 msgid "Default Playlist ID" msgstr "Standard-ID for afspilningsliste" #: inc/settings.php:169 msgid "Enter default playlist ID (not playlist name)" msgstr "Angiv ID for standardafspilningsliste (ikke navn på afspilningsliste)" #: inc/settings.php:178 inc/widget.php:134 msgid "Resource to use" msgstr "Ressource, der skal bruges" #: inc/settings.php:184 msgid "Resource:" msgstr "" #: inc/settings.php:185 msgid "What to use as resource for feeds" msgstr "Hvad skal bruges som ressource for feeds" #: inc/settings.php:189 msgid "Channel" msgstr "Kanal" #: inc/settings.php:190 inc/widget.php:137 msgid "Favourites" msgstr "" #: inc/settings.php:191 msgid "Liked Video" msgstr "" #: inc/settings.php:192 inc/widget.php:139 msgid "Playlist" msgstr "Afspilningsliste" #: inc/settings.php:199 msgid "Cache Timeout" msgstr "Timeout for cache" #: inc/settings.php:205 msgid "Define caching timeout for YouTube feeds, in seconds" msgstr "Definere cachetimeout for YouTube-feeds, i sekunder" #: inc/settings.php:209 msgid "Do not chache" msgstr "Cache ikke" #: inc/settings.php:210 youtube-channel.php:1273 msgid "1 minute" msgstr "1 minut" #: inc/settings.php:211 youtube-channel.php:1274 msgid "5 minutes" msgstr "5 minutter" #: inc/settings.php:212 youtube-channel.php:1275 msgid "15 minutes" msgstr "15 minutter" #: inc/settings.php:213 youtube-channel.php:1276 msgid "30 minutes" msgstr "30 minutter" #: inc/settings.php:214 youtube-channel.php:1279 msgid "1 hour" msgstr "1 time" #: inc/settings.php:215 youtube-channel.php:1280 msgid "2 hours" msgstr "2 timer" #: inc/settings.php:216 youtube-channel.php:1281 msgid "5 hours" msgstr "5 timer" #: inc/settings.php:217 youtube-channel.php:1282 msgid "10 hours" msgstr "10 timer" #: inc/settings.php:218 youtube-channel.php:1283 msgid "12 hours" msgstr "12 timer" #: inc/settings.php:219 youtube-channel.php:1284 msgid "18 hours" msgstr "18 timer" #: inc/settings.php:220 youtube-channel.php:1287 msgid "1 day" msgstr "1 dag" #: inc/settings.php:221 youtube-channel.php:1288 msgid "2 days" msgstr "2 dage" #: inc/settings.php:222 youtube-channel.php:1289 msgid "3 days" msgstr "3 dage" #: inc/settings.php:223 youtube-channel.php:1290 msgid "4 days" msgstr "4 dage" #: inc/settings.php:224 youtube-channel.php:1291 msgid "5 days" msgstr "5 dage" #: inc/settings.php:225 youtube-channel.php:1292 msgid "6 days" msgstr "6 dage" #: inc/settings.php:226 youtube-channel.php:1295 msgid "1 week" msgstr "1 uge" #: inc/settings.php:227 youtube-channel.php:1296 msgid "2 weeks" msgstr "2 uger" #: inc/settings.php:228 youtube-channel.php:1297 msgid "3 weeks" msgstr "3 uger" #: inc/settings.php:229 youtube-channel.php:1298 msgid "1 month" msgstr "1 måned" #: inc/settings.php:236 inc/widget.php:152 msgid "Fetch" msgstr "Hent" #: inc/settings.php:242 inc/widget.php:152 msgid "" "Number of videos that will be used for random pick (min 2, max 50, default " "25)" msgstr "" "Antallet af videoer, der vælges tilfældigt fra (min. 2, maks. 50, standard " "25)" #: inc/settings.php:253 inc/widget.php:155 msgid "Show" msgstr "Vis" #: inc/settings.php:259 inc/widget.php:155 msgid "Number of videos to display" msgstr "Antal videoer at vise" #: inc/settings.php:270 msgid "Use Enhanced privacy" msgstr "Brug udvidet beskyttelse af personlige oplysninger" #: inc/settings.php:279 #, php-format msgid "" "Enable this option to protect your visitors privacy. %s" msgstr "" #: inc/settings.php:289 msgid "Learn more here" msgstr "" #: inc/settings.php:306 msgid "Video Tweaks" msgstr "" #: inc/settings.php:314 msgid "Initial Width" msgstr "" #: inc/settings.php:320 msgid "Set default width for displayed video, in pixels" msgstr "Indstille standardbredde for viste video, i pixels" #: inc/settings.php:331 inc/widget.php:164 msgid "Aspect ratio" msgstr "Billedformat" #: inc/settings.php:338 msgid "Select aspect ratio for displayed video" msgstr "Vælg skærmformat for viste video" #: inc/settings.php:350 msgid "What to show?" msgstr "Hvad skal vises?" #: inc/settings.php:356 msgid "Choose how to embed video block" msgstr "" #: inc/settings.php:360 inc/widget.php:179 msgid "Thumbnail" msgstr "Miniature" #: inc/settings.php:361 inc/widget.php:180 msgid "HTML5 (iframe)" msgstr "HTML5 (iframe)" #: inc/settings.php:362 inc/widget.php:181 msgid "HTML5 (iframe) Asynchronous" msgstr "" #: inc/settings.php:363 inc/widget.php:182 msgid "Embedded Playlist" msgstr "" #: inc/settings.php:371 msgid "Enable Responsive" msgstr "" #: inc/settings.php:377 msgid "" "Enable this option to make YTC videos and thumbnails responsive by default. " "Please note, this option will set videos and thumbnail to full width " "relative to parent container, and disable more than one video per row." msgstr "" #: inc/settings.php:386 msgid "Play inline on iOS" msgstr "" #: inc/settings.php:394 #, php-format msgid "" "Enable this option to override fullscreen playback on iOS, and force inline " "playback on page and in lightbox. Learn more here." msgstr "" #: inc/settings.php:406 msgid "Disable Lightbox" msgstr "" #: inc/settings.php:412 msgid "" "Enable this option to disable built-in lightbox for thumbnails (in case that " "you have youtube links lightbox trigger in theme or other plugin)." msgstr "" #: inc/settings.php:421 msgid "Light Theme" msgstr "" #: inc/settings.php:427 msgid "" "Enable this option to use light theme for playback controls instead dark." msgstr "" #: inc/settings.php:435 msgid "Hide Player Controls" msgstr "" #: inc/settings.php:441 msgid "Enable this option to hide playback controls" msgstr "Aktivér denne indstilling for at skjule afspilningskontroller" #: inc/settings.php:450 inc/widget.php:187 msgid "Autoplay video or playlist" msgstr "Auto-afspil video eller afspilningsliste" #: inc/settings.php:456 msgid "" "Enable this option to start video playback right after block is rendered" msgstr "" "Aktivér denne indstilling for at starte videoafspilning, så snart videoen er " "renderet" #: inc/settings.php:464 inc/widget.php:188 msgid "Mute video on autoplay" msgstr "Slå lyden fra ved autoplay" #: inc/settings.php:470 msgid "Enable this option to mute video when start autoplay" msgstr "Aktivér denne indstilling for at slå lyden fra, når autoplay starter" #: inc/settings.php:478 inc/widget.php:189 msgid "Hide related videos" msgstr "Skjul relaterede videoer" #: inc/settings.php:484 msgid "Enable this option to hide related videos after finished playback" msgstr "" "Aktivér denne indstilling for at skjule relaterede videoer efter afspilning " "af videoen" #: inc/settings.php:492 msgid "Hide YT logo" msgstr "" #: inc/settings.php:498 msgid "" "Enable this option to hide YouTube logo from playback control bar. Does not " "work for all videos." msgstr "" "Aktivér denne indstilling for at skjule YouTube-logo fra " "afspilningskontrolbjælken. Virker ikke for alle videoer." #: inc/settings.php:506 msgid "Hide video annotations" msgstr "" #: inc/settings.php:512 msgid "" "Enable this option to hide video annotations (custom text set by uploader " "over video during playback)" msgstr "" "Aktivér denne indstilling for at skjule videoanmærkninger (brugerdefineret " "tekst sat af uploader over videoen under afspilning)" #: inc/settings.php:520 inc/widget.php:213 msgid "Hide video info" msgstr "Skjul videoinfo" #: inc/settings.php:526 msgid "" "Enable this option to hide informations about video before play start (video " "title and uploader in overlay)" msgstr "" "Aktivér denne indstilling for at skjule informationer om video før start " "(videotitel og uploader i overlay)" #: inc/settings.php:542 msgid "Content Tweaks" msgstr "" #: inc/settings.php:550 inc/widget.php:196 msgid "Show video title" msgstr "Vis videotitel" #: inc/settings.php:556 msgid "Select should we and where display title of video" msgstr "" #: inc/settings.php:560 inc/widget.php:199 msgid "Hide title" msgstr "" #: inc/settings.php:561 inc/widget.php:200 msgid "Above video/thumbnail" msgstr "" #: inc/settings.php:562 inc/widget.php:201 msgid "Below video/thumbnail" msgstr "" #: inc/settings.php:569 inc/widget.php:204 msgid "Show video description" msgstr "Vis videobeskrivelse" #: inc/settings.php:575 msgid "Enable this option to display description for video" msgstr "Aktivér denne indstilling at vise beskrivelse af video" #: inc/settings.php:583 inc/widget.php:206 msgid "Description length" msgstr "Beskrivelse længde" #: inc/settings.php:589 msgid "Enter length for video description in characters (0 for full length)" msgstr "Indtast længde for videobeskrivelse i tegn (0 for fuld længde)" #: inc/settings.php:609 inc/settings_template.php:17 #: inc/settings_usage_shortcode.php:15 inc/settings_usage_shortcode.php:107 #: inc/widget.php:217 msgid "Link to Channel" msgstr "Link til kanal" #: inc/settings.php:617 msgid "Link to..." msgstr "" #: inc/settings.php:624 msgid "Set where link will lead visitors" msgstr "" #: inc/settings.php:628 inc/widget.php:223 msgid "Hide link" msgstr "" #: inc/settings.php:629 msgid "Vanity custom URL" msgstr "" #: inc/settings.php:630 msgid "Channel page URL" msgstr "" #: inc/settings.php:631 msgid "Legacy username page" msgstr "" #: inc/settings.php:638 msgid "Open link in..." msgstr "" #: inc/settings.php:645 msgid "Set where link will be opened" msgstr "" #: inc/settings.php:649 msgid "same window" msgstr "" #: inc/settings.php:650 msgid "new window (JavaScript)" msgstr "" #: inc/settings.php:651 msgid "new window (target=\"_blank\")" msgstr "" #: inc/settings.php:658 msgid "Text for Visit channel link" msgstr "" #: inc/settings.php:665 msgid "Set default title for link" msgstr "" #. Plugin Name of the plugin/theme #: inc/settings.php:686 inc/settings.php:687 inc/settings.php:714 #: inc/settings.php:728 inc/settings.php:738 inc/settings.php:748 #: inc/settings_usage_shortcode.php:115 inc/widget.php:11 msgid "YouTube Channel" msgstr "" #: inc/settings.php:704 #, php-format msgid "" "Configure general defaults for %1$s used as fallback options in widget or " "shortcodes. To get %2$s and %3$s visit " "%5$s." msgstr "" #: inc/settings.php:715 inc/widget.php:108 inc/widget.php:119 msgid "Channel ID" msgstr "Kanal-ID" #: inc/settings.php:716 msgid "Vanity URL" msgstr "" #: inc/settings.php:727 #, php-format msgid "" "Configure video specific defaults for %s used as fallback options in widget " "or shortcodes." msgstr "" #: inc/settings.php:737 #, php-format msgid "" "Configure defaults of content around and over videos for %s used as fallback " "options in widget or shortcodes." msgstr "" #: inc/settings.php:747 #, php-format msgid "" "Configure defaults for link to channel below %s block used as fallback " "options in widget or shortcodes." msgstr "" #: inc/settings.php:908 msgid "You do not have sufficient permissions to access this page." msgstr "" #: inc/settings_template.php:6 msgid " Settings" msgstr "" #: inc/settings_template.php:15 inc/settings_usage_shortcode.php:105 msgid "Video" msgstr "Video" #: inc/settings_template.php:16 inc/settings_usage_shortcode.php:106 msgid "Content" msgstr "Indhold" #: inc/settings_template.php:18 msgid "Tools" msgstr "Værktøjer" #: inc/settings_template.php:19 msgid "Help" msgstr "" #: inc/settings_template.php:20 youtube-channel.php:201 msgid "Support" msgstr "Support" #: inc/settings_usage.php:1 msgid "How to use YouTube Channel" msgstr "" #: inc/settings_usage.php:2 msgid "You can insert YouTube Channel in couple different ways." msgstr "" #: inc/settings_usage.php:7 #, php-format msgid "Add %s to preferred %s, and configure it there." msgstr "" #: inc/settings_usage.php:10 msgid "YouTube Channel Widget" msgstr "" #: inc/settings_usage.php:13 msgid "Widget Area" msgstr "" #: inc/settings_usage.php:19 #, php-format msgid "" "Insert shortcode %s to your page or text widget, and even modify default " "settings by shortcode parameters listed in section below." msgstr "" #: inc/settings_usage_shortcode.php:1 msgid "How to use shortcode" msgstr "" #: inc/settings_usage_shortcode.php:5 #, php-format msgid "" "You can use shortcode %s with options listed below (all options are optional " "if you have set defaults in global plugin settings)." msgstr "" #: inc/settings_usage_shortcode.php:12 youtube-channel.php:321 msgid "General Settings" msgstr "" #: inc/settings_usage_shortcode.php:13 inc/widget.php:163 msgid "Video Settings" msgstr "Videoindstillinger" #: inc/settings_usage_shortcode.php:14 inc/widget.php:193 msgid "Content Layout" msgstr "Indholdslayout" #: inc/settings_usage_shortcode.php:101 #, php-format msgid "" "Please note, you can omit all options listed above, and then will be used " "plugin defaults customized on tabs %1$s, %2$s, %3$s and %4$s." msgstr "" #: inc/settings_usage_shortcode.php:112 #, php-format msgid "" "Important note: %s blocks inserted through widget have their own settings." msgstr "" #: inc/widget.php:14 msgid "Serve YouTube videos from channel or playlist right to widget area" msgstr "" "Vis YouTube-videoer fra kanal eller afspilningsliste til højre for " "widgetområdet" #: inc/widget.php:90 msgid "Widget Title" msgstr "Widgettitel" #: inc/widget.php:91 msgid "Title for widget" msgstr "Titel for widget" #: inc/widget.php:95 msgid "Custom CSS Class" msgstr "Brugerdefineret CSS-klasse" #: inc/widget.php:96 msgid "Enter custom class for YTC block, if you wish to target block styling" msgstr "" "Angiv brugerdefineret klasse for YTC-blok, hvis du ønsker at målrette blok-" "styling" #: inc/widget.php:103 #, php-format msgid "" "Get your %1$s and %2$s from here." msgstr "" #: inc/widget.php:109 msgid "Custom ID" msgstr "" #: inc/widget.php:114 msgid "Vanity/Custom ID" msgstr "" #: inc/widget.php:115 msgid "YouTube Vanity/Custom ID from URL (part after /c/)" msgstr "" #: inc/widget.php:120 msgid "" "Find Channel ID behind My Channel menu item in YouTube (ID have UC at the " "beginning)" msgstr "" #: inc/widget.php:124 msgid "Legacy Username" msgstr "" #: inc/widget.php:125 msgid "" "Legacy YouTube username located behind /user/ part of channel URL (available " "only on old YouTube accounts)" msgstr "" #: inc/widget.php:129 msgid "Playlist ID" msgstr "ID for afspilningsliste" #: inc/widget.php:130 msgid "Find Playlist ID in your playlists (ID have PL at the beginning)" msgstr "" #: inc/widget.php:136 msgid "Channel (User Uploads)" msgstr "" #: inc/widget.php:138 msgid "Liked Videos" msgstr "" #: inc/widget.php:144 msgid "Cache feed" msgstr "Cache feed" #: inc/widget.php:146 msgid "Do not cache" msgstr "Cache ikke" #: inc/widget.php:152 inc/widget.php:155 msgid "video(s)" msgstr "video(er)" #: inc/widget.php:158 msgid "Enable this option to protect your visitors privacy" msgstr "Aktivér denne indstilling for at beskytte dine besøgendes privatliv" #: inc/widget.php:158 #, php-format msgid "Enable privacy-enhanced mode" msgstr "" #: inc/widget.php:160 msgid "Get random videos of all fetched from channel or playlist" msgstr "Udvælg tilfældige fra alle kanalens eller afspilningslistens videoer" #: inc/widget.php:160 msgid "" "Show random video from resource (Have no effect if \"What to show?\" " "has been set to \"Embedded Playlist\")" msgstr "" #: inc/widget.php:169 msgid "" "Responsive video (distribute one full width item per row)" msgstr "" #: inc/widget.php:172 msgid "Initial width" msgstr "" #: inc/widget.php:172 msgid "Set video width in pixels" msgstr "Indstille videobredde i pixels" #: inc/widget.php:172 msgid "default" msgstr "standard" #: inc/widget.php:176 msgid "What to display?" msgstr "" #: inc/widget.php:184 msgid "Hide thumbnail tooltip" msgstr "" #: inc/widget.php:185 msgid "Use light theme (default is dark)" msgstr "Brug lyst tema (standard er mørkt)" #: inc/widget.php:186 msgid "Hide player controls" msgstr "Skjul spillerkontroller" #: inc/widget.php:190 msgid "Hide YT Logo (does not work for all videos)" msgstr "Skjul YT-logo (virker ikke for alle videoer)" #: inc/widget.php:207 msgid "" "Set number of characters to cut down video description to (0 means full " "length)" msgstr "" "Angiv antallet af tegn, videobeskrivelsen skal begrænses til (0 betyder fuld " "længde)" #: inc/widget.php:210 msgid "Hide annotations from video" msgstr "Skjul anmærkninger på video" #: inc/widget.php:212 msgid "" "Enabling this option causes the player to not display information like the " "video title and uploader before the video starts playing." msgstr "" #: inc/widget.php:219 msgid "" "Default: Visit our YouTube channel. You can use placeholders %vanity%, " "%channel% and %username%." msgstr "" #: inc/widget.php:219 youtube-channel.php:1043 msgid "Visit our YouTube channel" msgstr "" #: inc/widget.php:224 msgid "Link to Vanity customized URL" msgstr "" #: inc/widget.php:225 msgid "Link to Channel page URL" msgstr "" #: inc/widget.php:226 msgid "Link to Legacy username page" msgstr "" #: inc/widget.php:231 msgid "Open link in same window" msgstr "" #: inc/widget.php:232 msgid "Open link in new window (JavaScript)" msgstr "" #: inc/widget.php:233 msgid "Open link in new window (target=\"blank\")" msgstr "" #: inc/widget.php:237 msgid "Does not work?" msgstr "" #: inc/widget.php:243 #, php-format msgid "" "Carefully read %2$s before you contact " "us. If that does not help, get JSON file and send it to support forum " "along with other details noted in this " "article." msgstr "" #: inc/widget.php:249 msgid "FAQ" msgstr "" #: youtube-channel.php:179 msgid "Settings" msgstr "Indstillinger" #: youtube-channel.php:280 #, php-format msgid "" "

Your website running on web server with PHP version %s. Please note that " "%s requires PHP at least 5.3 or newer to work properly. Dismiss

" msgstr "" #: youtube-channel.php:293 #, php-format msgid "" "

Since %s v3.0.6 we store YouTube Data API Key in plugin settings. So, you can safely remove %s define line from " "your wp-config.php file. Dismiss

" msgstr "" #: youtube-channel.php:305 #, php-format msgid "" "

Please note, to make %1$s plugin v3+ work, generate " "%2$s in %4$s, as " "explained here, then add it to %7$s.

If you have any issue with new version of " "plugin, please ask for help on official " "%9$s.
This notice will disappear when you add missing key as " "mentioned above!

" msgstr "" #: youtube-channel.php:323 msgid "support forum" msgstr "" #: youtube-channel.php:332 #, php-format msgid "" "

%s since version 2.4 supports linking to channel through " "Vanity/Custom URL. Please review global and widgets settings. Dismiss" msgstr "" #: youtube-channel.php:346 #, php-format msgid "" "

%s changed shortcode parameters by removing " "only_pl and showgoto, and combining with " "parameters display and link_to respectively. " "Please check out %s and update your shortcodes. " "Dismiss" msgstr "" #: youtube-channel.php:609 #, php-format msgid "" "%s version 3+ requires YouTube DATA API Key to work. Learn more here." msgstr "" #: youtube-channel.php:782 #, php-format msgid "" "You have set to display videos from %s [resource list ID: %s], but there " "have no public videos in that resouce." msgstr "" #: youtube-channel.php:786 #, php-format msgid "" "We have empty record for this feed. Please read FAQ and if that does not help, contact support." msgstr "" #: youtube-channel.php:828 #, php-format msgid "" "Double check YouTube Data API Key on General plugin tab " "and make sure it's correct. Read Installation document." msgstr "" #: youtube-channel.php:836 #, php-format msgid "" "You have set wrong Channel ID. Fix that in General plugin settings, Widget " "and/or shortcode. Read FAQ document." msgstr "" #: youtube-channel.php:840 #, php-format msgid "" "You do not have permission to access ressource %s (it's " "maybe set to private or even does not exists!)" msgstr "" #: youtube-channel.php:964 msgid "Oops, something went wrong." msgstr "" #: youtube-channel.php:1046 msgid "in new window/tab" msgstr "i nyt vindue/fane" #: youtube-channel.php:1198 #, php-format msgid "Watch video %1$s published on %2$s" msgstr "Se video %1$s offentliggjort den %2$s" #. Plugin URI of the plugin/theme msgid "http://urosevic.net/wordpress/plugins/youtube-channel/" msgstr "http://urosevic.net/wordpress/plugins/youtube-channel/" #. Description of the plugin/theme msgid "" "Quick and easy embed latest or random videos from YouTube channel (user " "uploads, liked or favourited videos) or playlist. Use widget for sidebar or shortcode for content. Works with YouTube " "Data API v3." msgstr "" #. Author of the plugin/theme msgid "Aleksandar Urošević" msgstr "Aleksandar Urošević" #. Author URI of the plugin/theme msgid "http://urosevic.net/" msgstr "http://urosevic.net/" #~ msgid "" #~ "Enter your YouTube channel ID (channel name, not full URL to channel)" #~ msgstr "" #~ "Angiv ID for din YouTube kanal (kanalnavn, ikke hele webadressen for " #~ "kanal)" #~ msgid "Favorites" #~ msgstr "Favoritter" #~ msgid "Embed standard playlist" #~ msgstr "Indlejr standardafspilningsliste" #~ msgid "" #~ "Enable this option to embed whole playlist instead single video from " #~ "playlist when you chose playlist as resource" #~ msgstr "" #~ "Aktivér denne indstilling for at indlejre hele afspilningslisten i stedet " #~ "for en enkelt video fra afspilningslisten, når du vælger afspilningsliste " #~ "som ressource" #~ msgid "" #~ "Enable this option to protect your visitors privacy." #~ msgstr "" #~ "Aktivér denne indstilling for at beskytte dine besøgendes privatliv." #~ msgid "Fix No items error/Respect playlist order" #~ msgstr "Fiks Intet at vise-fejl/Følg afspilningslistens rækkefølge" #~ msgid "Enable this option if you get error No Item" #~ msgstr "Aktivere denne indstilling, hvis du får fejlen Intet at se" #~ msgid "Show random video" #~ msgstr "Vis tilfældig video" #~ msgid "Aspect Ratio" #~ msgstr "billedformat" #~ msgid "16:9" #~ msgstr "16:9" #~ msgid "16:10" #~ msgstr "16:10" #~ msgid "4:3" #~ msgstr "4:3" #~ msgid "Make responsive" #~ msgstr "Gør responsiv" #~ msgid "" #~ "Enable this option to make all YTC videos responsive. Please note, this " #~ "option will set all videos full width relative to parent container, and " #~ "disable more than one video per row." #~ msgstr "" #~ "Aktivér denne indstilling for at gøre alle YTC-videoer responsive. Bemærk " #~ "venligst, denne indstilling vil sætte alle videoer til fuld bredde i " #~ "forhold til overordnede objektbeholder og deaktivere mere end én video " #~ "pr. række." #~ msgid "Video Width" #~ msgstr "Videobredde" #~ msgid "Set what will be shown by default" #~ msgstr "Angive, hvad der skal vises som standard" #~ msgid "Flash (object)" #~ msgstr "Flash (objekt)" #~ msgid "HTML5 (iframe) Async" #~ msgstr "HTML5 (iframe) Async" #~ msgid "Use light theme" #~ msgstr "Brug lyst tema" #~ msgid "" #~ "Enable this option to use light theme for playback controls instead dark" #~ msgstr "" #~ "Aktivér denne indstilling for at bruge lyst tema for " #~ "afspilningskontroller i stedet for mørkt" #~ msgid "Fix video height" #~ msgstr "Fiks videohøjde" #~ msgid "" #~ "Enable this option to fix video height when playback controls are not " #~ "hidden" #~ msgstr "" #~ "Aktivér denne indstilling for at fikse videohøjden, når " #~ "afspilningskontroller ikke er skjult" #~ msgid "Hide YT Logo" #~ msgstr "Skjul YT-logo" #~ msgid "Enable this option to display title of video" #~ msgstr "Aktivér denne indstilling for at vise videoens titel" #~ msgid "Et cetera string" #~ msgstr "Tegn for \"osv.\"" #~ msgid "Indicator for shortened video description (default: …)" #~ msgstr "Indikator for forkortet videobeskrivelse (standard: …)" #~ msgid "..." #~ msgstr "…" #~ msgid "Visit YouTube Channel text" #~ msgstr "Tekst for Besøg YouTube-kanal" #~ msgid "Use placeholder %channel% to insert channel name" #~ msgstr "Brug pladsholderen %channel% til at indsætte kanalnavn" #~ msgid "Visit my channel %channel%" #~ msgstr "Besøg min kanal %channel%" #~ msgid "Show link to channel" #~ msgstr "Vis link til kanal" #~ msgid "" #~ "Enable this option to show customized link to channel at the bottom of " #~ "YTC block" #~ msgstr "" #~ "Aktivér denne indstilling for at vise tilpassede link til kanal i bunden " #~ "af YTC-blok" #~ msgid "Open YouTube channel page" #~ msgstr "Åbn YouTube-kanalside" #~ msgid "in same window" #~ msgstr "i samme vindue" #~ msgid "in new window (JavaScript)" #~ msgstr "i nyt vindue (JavaScript)" #~ msgid "in new window (Target)" #~ msgstr "i nyt vindue (Target)" #~ msgid "Link to channel instead to user" #~ msgstr "Link til kanal i stedet for til bruger" #~ msgid "" #~ "Enable this option if link to your channel have /channel/ " #~ "instead /user/ part in URL" #~ msgstr "" #~ "Aktivér denne indstilling, hvis link til din kanal har /channel/ i stedet for /user/ som en del af URL" #~ msgid "Usage" #~ msgstr "Brug" #~ msgid " Options" #~ msgstr "Indstillinger" #~ msgid "" #~ "

Easy embed playable videos from YouTube.

Here you can set " #~ "default options that will be used as defaults for new widgets, and for " #~ "shortcode.

" #~ msgstr "" #~ "

Indlejr let afspillelige videoer fra YouTube.

Her kan du angive " #~ "standardindstillinger, som vil blive brugt som standard for nye widgets " #~ "og for kortkoder.

" #~ msgid "Youtube Channel" #~ msgstr "Youtube-kanal" #~ msgid "YouTube Channel name (not URL to channel)" #~ msgstr "Navn på YouTube-kanal (ikke URL til kanal)" #~ msgid "YouTube Playlist ID (not playlist name)" #~ msgstr "ID for YouTube-afspilningsliste (ikke navnet)" #~ msgid "" #~ "Enable this option to embed YouTube playlist instead single video from " #~ "playlist." #~ msgstr "" #~ "Aktivér denne indstilling for at indlejre YouTube-afspilningsliste i " #~ "stedet for en enkelt video fra afspilningslisten." #~ msgid "" #~ "Embed standard playlist
(Please note What to show? " #~ "have no effect for embedded playlist)" #~ msgstr "" #~ "Integrér standardafspilningsliste
(Bemærk Hvad de skal vise?" #~ " har ingen effekt for indlejrede afspilningslister)" #~ msgid "Use Enhanced Privacy" #~ msgstr "" #~ "Bruge udvidet beskyttelse af personlige " #~ "oplysninger" #~ msgid "Responsive video (distribute one full width video per row)" #~ msgstr "Responsiv video (der vises en video pr. række i fuld bredde)" #~ msgid "Width" #~ msgstr "Bredde" #~ msgid "Fix height taken by controls" #~ msgstr "Fiks højde brugt af kontroller" #~ msgid "Default: &hellip;" #~ msgstr "Standard: &hellip;" #~ msgid "" #~ "Default: Visit channel %channel%. Use placeholder %channel% to insert " #~ "channel name." #~ msgstr "" #~ "Standard: Besøg kanal %channel%. Brug pladsholderen %channel% til at " #~ "indsætte kanalnavn." #~ msgid "Does not work? Contact support!" #~ msgstr "Virker ikke? Kontakt support!" #~ msgid "Get JSON file" #~ msgstr "Hent JSON-fil" #~ msgid "" #~ "and send it to %s or to support forum." #~ msgstr "" #~ "og send det til %s eller til supportforummet." #~ msgid "" #~ "Please review global settings, YTC widgets and " #~ "shortcodes." #~ msgstr "" #~ "Tjek venligst globale indstillinger, YTC-widgets og -" #~ "kortkoder." #~ msgid "" #~ "If you use caching for any YTC widget or shortcode, please " #~ "ReCache feeds in Tools section of plugin settings page." #~ msgstr "" #~ "Hvis du bruger cache til YTC-widgets eller -kortkoder, bør du " #~ "ReCache feeds i Værktøjer-sektionen på " #~ "siden Indstillinger." #~ msgid "" #~ "We switched to Redux Framework so please review global plugin settings page." #~ msgstr "" #~ "Vi er skiftet til Redux Frameworket, så tjek venligst de globale indstillinger." #~ msgid "" #~ "We switched to Redux Framework so please install and activate " #~ "dependency and then review global YouTube Channel plugin settings." #~ msgstr "" #~ "Vi er skiftet til Redux Frameworket, så du skal installere og " #~ "aktivere dependens og gennemse derefter de globale indstillinger for " #~ "YouTube Channel-pluginnet." #~ msgid "updated to version" #~ msgstr "opdateret til version" #~ msgid "I did this already, dismiss notice!" #~ msgstr "Det har jeg allerede. Skjul besked!" #~ msgid "I got it! Dismiss this notice." #~ msgstr "OK! Skjul denne besked." #~ msgid "Dismiss this notice" #~ msgstr "Skjul denne besked" #~ msgid "" #~ "To configure global %s options, you need to install and " #~ "activate %s." #~ msgstr "" #~ "Hvis du vil bruge globale indstillinger for %s, skal du " #~ "installere og aktivere %s." #~ msgid "No items" #~ msgstr "Intet at vise" #~ msgid "Check here why" #~ msgstr "Tjek her hvorfor" #~ msgid "Visit channel %1$s" #~ msgstr "Besøg %1$s-kanalen" PK!VI"languages/youtube-channel-cs_CZ.monu[ hi!" @NV6kr+ : [ir6    Aleksandar UroševićDescription lengthHide annotations from videoHide player controlsHide video infoShow video descriptionShow video titleUse light theme (default is dark)Watch video %1$s published on %2$sWhat to show?defaulthttp://urosevic.net/http://urosevic.net/wordpress/plugins/youtube-channel/in new window/tabProject-Id-Version: Youtube Channel 1.3.2 Report-Msgid-Bugs-To: POT-Creation-Date: 2015-06-19 21:20+0100 PO-Revision-Date: 2015-06-19 21:20+0100 Last-Translator: Aleksandar Urošević Language-Team: zholesova.cz > Language: cs_CZ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-SourceCharset: utf-8 X-Generator: Poedit 1.8.1 Aleksandar UroševićDélka popisu videaSkryj poznámky z videaSkryj ovládání přehrávačeSkryj info o videuUkaž popisek videaUkaž název videaPoužij světlé téma (stabdard je tmavé)Podívej se na video %1$s z %2$sJak zobrazit?standardhttp://urosevic.net/http://urosevic.net/wordpress/plugins/youtube-channel/v novém okně / záložcePK!L"languages/youtube-channel-da_DK.monu[[  #+2 :ELS [el    4 G Z g 3u ` k ,v A e 4K 3 H E -C Dq   9  + 9 U j ~   N   )5'EBm0O1KTYp !" !' IViq6R+18@IOX amv}   ( ,7=FN] x3  7s/m>WPG*ErWTFe@FB,Q~PYo"R2)V\   +27#j%( (16F} K' JQ#:SU*,V Y.>P-;TW$/6&G!9 )[82(ZFNX< +E13R@?L4%B0O"75MIA=DCH1 day1 hour1 minute1 month1 week10 hours12 hours15 minutes18 hours2 days2 hours2 weeks3 days3 weeks30 minutes4 days5 days5 hours5 minutes6 daysAleksandar UroševićAspect ratioAutoplay video or playlistCache TimeoutCache feedChannelChannel IDContentContent LayoutCustom CSS ClassDefault Playlist IDDefine caching timeout for YouTube feeds, in secondsDescription lengthDo not cacheDo not chacheEnable this option to display description for videoEnable this option to hide YouTube logo from playback control bar. Does not work for all videos.Enable this option to hide informations about video before play start (video title and uploader in overlay)Enable this option to hide playback controlsEnable this option to hide related videos after finished playbackEnable this option to hide video annotations (custom text set by uploader over video during playback)Enable this option to mute video when start autoplayEnable this option to protect your visitors privacyEnable this option to start video playback right after block is renderedEnter custom class for YTC block, if you wish to target block stylingEnter default playlist ID (not playlist name)Enter length for video description in characters (0 for full length)FetchGeneralGet random videos of all fetched from channel or playlistHTML5 (iframe)Hide YT Logo (does not work for all videos)Hide annotations from videoHide player controlsHide related videosHide video infoLink to ChannelMute video on autoplayNumber of videos that will be used for random pick (min 2, max 50, default 25)Number of videos to displayPlaylistPlaylist IDResource to useSelect aspect ratio for displayed videoServe YouTube videos from channel or playlist right to widget areaSet default width for displayed video, in pixelsSet number of characters to cut down video description to (0 means full length)Set video width in pixelsSettingsShowShow video descriptionShow video titleSupportThumbnailTitle for widgetToolsUse Enhanced privacyUse light theme (default is dark)VideoVideo SettingsWatch video %1$s published on %2$sWhat to show?What to use as resource for feedsWidget TitleYouTube Channel IDdefaulthttp://urosevic.net/http://urosevic.net/wordpress/plugins/youtube-channel/in new window/tabvideo(s)Project-Id-Version: YouTube Channel 2.4.1.7 POT-Creation-Date: 2015-06-19 21:18+0100 PO-Revision-Date: Last-Translator: Aleksandar Urošević Language-Team: GSAdev (aka TeamBlogos) Language: da_DK MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 1.8.1 X-Poedit-Basepath: d:\wordpress\plugins\youtube-channel Plural-Forms: nplurals=2; plural=(n != 1); X-Poedit-KeywordsList: __;_e X-Poedit-SourceCharset: UTF-8 X-Poedit-SearchPath-0: . X-Poedit-SearchPath-1: d:\wordpress\plugins\youtube-channel 1 dag1 time1 minut1 måned1 uge10 timer12 timer15 minutter18 timer2 dage2 timer2 uger3 dage3 uger30 minutter4 dage5 dage5 timer5 minutter6 dageAleksandar UroševićBilledformatAuto-afspil video eller afspilningslisteTimeout for cacheCache feedKanalKanal-IDIndholdIndholdslayoutBrugerdefineret CSS-klasseStandard-ID for afspilningslisteDefinere cachetimeout for YouTube-feeds, i sekunderBeskrivelse længdeCache ikkeCache ikkeAktivér denne indstilling at vise beskrivelse af videoAktivér denne indstilling for at skjule YouTube-logo fra afspilningskontrolbjælken. Virker ikke for alle videoer.Aktivér denne indstilling for at skjule informationer om video før start (videotitel og uploader i overlay)Aktivér denne indstilling for at skjule afspilningskontrollerAktivér denne indstilling for at skjule relaterede videoer efter afspilning af videoenAktivér denne indstilling for at skjule videoanmærkninger (brugerdefineret tekst sat af uploader over videoen under afspilning)Aktivér denne indstilling for at slå lyden fra, når autoplay starterAktivér denne indstilling for at beskytte dine besøgendes privatlivAktivér denne indstilling for at starte videoafspilning, så snart videoen er renderetAngiv brugerdefineret klasse for YTC-blok, hvis du ønsker at målrette blok-stylingAngiv ID for standardafspilningsliste (ikke navn på afspilningsliste)Indtast længde for videobeskrivelse i tegn (0 for fuld længde)HentGenereltUdvælg tilfældige fra alle kanalens eller afspilningslistens videoerHTML5 (iframe)Skjul YT-logo (virker ikke for alle videoer)Skjul anmærkninger på videoSkjul spillerkontrollerSkjul relaterede videoerSkjul videoinfoLink til kanalSlå lyden fra ved autoplayAntallet af videoer, der vælges tilfældigt fra (min. 2, maks. 50, standard 25)Antal videoer at viseAfspilningslisteID for afspilningslisteRessource, der skal brugesVælg skærmformat for viste videoVis YouTube-videoer fra kanal eller afspilningsliste til højre for widgetområdetIndstille standardbredde for viste video, i pixelsAngiv antallet af tegn, videobeskrivelsen skal begrænses til (0 betyder fuld længde)Indstille videobredde i pixelsIndstillingerVisVis videobeskrivelseVis videotitelSupportMiniatureTitel for widgetVærktøjerBrug udvidet beskyttelse af personlige oplysningerBrug lyst tema (standard er mørkt)VideoVideoindstillingerSe video %1$s offentliggjort den %2$sHvad skal vises?Hvad skal bruges som ressource for feedsWidgettitelID for YouTube-kanalstandardhttp://urosevic.net/http://urosevic.net/wordpress/plugins/youtube-channel/i nyt vindue/fanevideo(er)PK!Ԛ_FUFU#languages/youtube-channel-xx_XX.potnu[#, fuzzy msgid "" msgstr "" "Project-Id-Version: YouTube Channel\n" "POT-Creation-Date: 2017-02-24 18:40+0100\n" "PO-Revision-Date: 2015-06-19 21:15+0100\n" "Last-Translator: Aleksandar Urošević \n" "Language-Team: Aleksandar Urošević \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.12\n" "X-Poedit-Basepath: ..\n" "X-Poedit-WPHeader: youtube-channel.php\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;" "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;" "_nx_noop:3c,1,2;__ngettext_noop:1,2\n" "X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPathExcluded-0: *.js\n" #: inc/settings-template.php:11 msgid " Settings" msgstr "" #: inc/settings-template.php:17 inc/settings-usage-shortcode.php:104 #: inc/settings.php:44 msgid "General" msgstr "" #: inc/settings-template.php:18 inc/settings-usage-shortcode.php:105 msgid "Video" msgstr "" #: inc/settings-template.php:19 inc/settings-usage-shortcode.php:106 msgid "Content" msgstr "" #: inc/settings-template.php:20 inc/settings-usage-shortcode.php:15 #: inc/settings-usage-shortcode.php:107 inc/settings.php:669 inc/widget.php:231 msgid "Link to Channel" msgstr "" #: inc/settings-template.php:21 msgid "Tools" msgstr "" #: inc/settings-template.php:22 msgid "Help" msgstr "" #: inc/settings-template.php:23 youtube-channel.php:209 msgid "Support" msgstr "" #: inc/settings-usage-shortcode.php:1 msgid "How to use shortcode" msgstr "" #: inc/settings-usage-shortcode.php:5 #, php-format msgid "" "You can use shortcode %s with options listed below (all options are optional " "if you have set defaults in global plugin settings)." msgstr "" #: inc/settings-usage-shortcode.php:12 youtube-channel.php:329 msgid "General Settings" msgstr "" #: inc/settings-usage-shortcode.php:13 inc/widget.php:177 msgid "Video Settings" msgstr "" #: inc/settings-usage-shortcode.php:14 inc/widget.php:207 msgid "Content Layout" msgstr "" #: inc/settings-usage-shortcode.php:101 #, php-format msgid "" "Please note, you can omit all options listed above, and then will be used " "plugin defaults customized on tabs %1$s, %2$s, %3$s and %4$s." msgstr "" #: inc/settings-usage-shortcode.php:112 #, php-format msgid "" "Important note: %s blocks inserted through widget have their own settings." msgstr "" #. Plugin Name of the plugin/theme #: inc/settings-usage-shortcode.php:115 inc/settings.php:298 #: inc/settings.php:744 inc/settings.php:745 inc/settings.php:793 #: inc/settings.php:807 inc/settings.php:816 inc/settings.php:825 #: inc/widget.php:17 msgid "YouTube Channel" msgstr "" #: inc/settings-usage.php:1 msgid "How to use YouTube Channel" msgstr "" #: inc/settings-usage.php:2 msgid "You can insert YouTube Channel in couple different ways." msgstr "" #: inc/settings-usage.php:7 #, php-format msgid "Add %1$s to preferred %2$s, and configure it there." msgstr "" #: inc/settings-usage.php:10 msgid "YouTube Channel Widget" msgstr "" #: inc/settings-usage.php:13 msgid "Widget Area" msgstr "" #: inc/settings-usage.php:19 #, php-format msgid "" "Insert shortcode %s to your page or text widget, and even modify default " "settings by shortcode parameters listed in section below." msgstr "" #: inc/settings.php:52 youtube-channel.php:324 msgid "YouTube Data API Key" msgstr "" #: inc/settings.php:65 #, php-format msgid "" "Your YouTube Data API Key (get it from " "%2$s)" msgstr "" #: inc/settings.php:76 youtube-channel.php:326 msgid "Google Developers Console" msgstr "" #: inc/settings.php:86 msgid "YouTube Channel ID" msgstr "" #: inc/settings.php:98 #, php-format msgid "" "Your YouTube Channel ID (get it from " "%2$s)" msgstr "" #: inc/settings.php:109 inc/settings.php:143 inc/settings.php:797 msgid "YouTube Account Overview" msgstr "" #: inc/settings.php:119 msgid "YouTube Vanity Name" msgstr "" #: inc/settings.php:131 #, php-format msgid "" "Your YouTube Custom Name (get only part after %1$s instead whole URL from %3$s)" msgstr "" #: inc/settings.php:153 msgid "Legacy YouTube Username" msgstr "" #: inc/settings.php:162 msgid "Your YouTube legacy username" msgstr "" #: inc/settings.php:171 msgid "Default Playlist ID" msgstr "" #: inc/settings.php:180 msgid "Enter default playlist ID (not playlist name)" msgstr "" #: inc/settings.php:189 inc/widget.php:148 msgid "Resource to use" msgstr "" #: inc/settings.php:195 msgid "Resource:" msgstr "" #: inc/settings.php:196 msgid "What to use as resource for feeds" msgstr "" #: inc/settings.php:200 msgid "Channel" msgstr "" #: inc/settings.php:201 inc/widget.php:151 msgid "Favourites" msgstr "" #: inc/settings.php:202 msgid "Liked Video" msgstr "" #: inc/settings.php:203 inc/widget.php:153 msgid "Playlist" msgstr "" #: inc/settings.php:210 msgid "Cache Timeout" msgstr "" #: inc/settings.php:216 msgid "Define caching timeout for YouTube feeds, in seconds" msgstr "" #: inc/settings.php:225 inc/widget.php:166 msgid "Fetch" msgstr "" #: inc/settings.php:231 msgid "" "Number of videos that will be fetched from YouTube and used for random pick " "(min 2, max 50, default 25)" msgstr "" #: inc/settings.php:242 inc/widget.php:169 msgid "Show" msgstr "" #: inc/settings.php:248 inc/widget.php:169 msgid "Number of videos to display" msgstr "" #: inc/settings.php:259 msgid "Enhanced Privacy" msgstr "" #: inc/settings.php:265 inc/settings.php:295 inc/settings.php:386 #: inc/settings.php:445 msgid "Enable" msgstr "" #: inc/settings.php:269 #, php-format msgid "" "Enable this option to protect your visitors privacy. %2$s" msgstr "" #: inc/settings.php:280 inc/settings.php:416 msgid "Learn more here" msgstr "" #: inc/settings.php:289 msgid "TinyMCE button" msgstr "" #: inc/settings.php:297 #, php-format msgid "" "Disable this option to hide %s button from TinyMCE toolbar on post and page " "editor." msgstr "" #: inc/settings.php:316 msgid "Video Tweaks" msgstr "" #: inc/settings.php:324 msgid "Initial Width" msgstr "" #: inc/settings.php:330 msgid "" "Set default width for displayed video, in pixels. This value have effect " "only if Responsive Video option is disabled!" msgstr "" #: inc/settings.php:341 inc/widget.php:178 msgid "Aspect ratio" msgstr "" #: inc/settings.php:347 msgid "Select aspect ratio for displayed video" msgstr "" #: inc/settings.php:359 msgid "Embed as" msgstr "" #: inc/settings.php:365 msgid "Choose how to embed video block" msgstr "" #: inc/settings.php:369 inc/widget.php:193 msgid "Thumbnail" msgstr "" #: inc/settings.php:370 inc/widget.php:194 msgid "HTML5 (iframe)" msgstr "" #: inc/settings.php:371 inc/widget.php:195 msgid "HTML5 (iframe) Asynchronous" msgstr "" #: inc/settings.php:372 inc/widget.php:196 msgid "Embedded Playlist" msgstr "" #: inc/settings.php:380 msgid "Responsive Video" msgstr "" #: inc/settings.php:387 msgid "" "Enable this option to make YTC videos and thumbnails responsive by default. " "Please note, this option will set videos and thumbnail to full width " "relative to parent container, and disable more than one video per row." msgstr "" #: inc/settings.php:396 msgid "Play inline on iOS" msgstr "" #: inc/settings.php:405 #, php-format msgid "" "Enable this option to override fullscreen playback on iOS, and force inline " "playback on page and in lightbox. %2$s" msgstr "" #: inc/settings.php:425 msgid "Disable Lightbox" msgstr "" #: inc/settings.php:431 msgid "" "Enable this option to disable built-in lightbox for thumbnails (in case that " "you have youtube links lightbox trigger in theme or other plugin)." msgstr "" #: inc/settings.php:439 msgid "Full Screen" msgstr "" #: inc/settings.php:446 msgid "" "Enable this option to make available Full Screen button for embedded " "playlists." msgstr "" #: inc/settings.php:455 msgid "Light Theme" msgstr "" #: inc/settings.php:461 msgid "" "Enable this option to use light theme for playback controls instead dark." msgstr "" #: inc/settings.php:469 msgid "Hide Player Controls" msgstr "" #: inc/settings.php:475 msgid "Enable this option to hide playback controls" msgstr "" #: inc/settings.php:484 inc/widget.php:201 msgid "Autoplay video or playlist" msgstr "" #: inc/settings.php:490 msgid "" "Enable this option to start video playback right after block is rendered" msgstr "" #: inc/settings.php:498 inc/widget.php:202 msgid "Mute video on autoplay" msgstr "" #: inc/settings.php:504 msgid "Enable this option to mute video when start autoplay" msgstr "" #: inc/settings.php:512 msgid "No related videos" msgstr "" #: inc/settings.php:518 msgid "Enable this option to hide related videos after finished playback" msgstr "" #: inc/settings.php:526 msgid "No video annotations" msgstr "" #: inc/settings.php:532 msgid "" "Enable this option to hide video annotations (custom text set by uploader " "over video during playback)" msgstr "" #: inc/settings.php:540 msgid "No video info" msgstr "" #: inc/settings.php:546 msgid "" "Enable this option to hide informations about video before play start (video " "title and uploader in overlay)" msgstr "" #: inc/settings.php:554 msgid "No YouTube logo" msgstr "" #: inc/settings.php:560 msgid "" "Enable this option to hide YouTube logo from playback control bar. Does not " "work for all videos." msgstr "" #: inc/settings.php:577 msgid "Content Tweaks" msgstr "" #: inc/settings.php:585 msgid "Video title" msgstr "" #: inc/settings.php:591 msgid "Select should we and where to display title of video." msgstr "" #: inc/settings.php:595 inc/widget.php:213 msgid "Hide title" msgstr "" #: inc/settings.php:596 inc/widget.php:214 msgid "Above video/thumbnail" msgstr "" #: inc/settings.php:597 inc/widget.php:215 msgid "Below video/thumbnail" msgstr "" #: inc/settings.php:604 msgid "Title HTML tag" msgstr "" #: inc/settings.php:613 msgid "Select which HTML tag to use for title wrapper." msgstr "" #: inc/settings.php:629 msgid "Video description" msgstr "" #: inc/settings.php:635 msgid "Enable this option to show video description." msgstr "" #: inc/settings.php:643 inc/widget.php:220 msgid "Description length" msgstr "" #: inc/settings.php:649 msgid "Enter length for video description in characters (0 for full length)." msgstr "" #: inc/settings.php:677 msgid "Link to..." msgstr "" #: inc/settings.php:683 msgid "Set where link will lead visitors" msgstr "" #: inc/settings.php:687 inc/widget.php:237 msgid "Hide link" msgstr "" #: inc/settings.php:688 msgid "Vanity custom URL" msgstr "" #: inc/settings.php:689 msgid "Channel page URL" msgstr "" #: inc/settings.php:690 msgid "Legacy username page" msgstr "" #: inc/settings.php:697 msgid "Open link in..." msgstr "" #: inc/settings.php:703 msgid "Set how link will be opened" msgstr "" #: inc/settings.php:707 msgid "same window" msgstr "" #: inc/settings.php:708 msgid "new window (JavaScript)" msgstr "" #: inc/settings.php:709 msgid "new window (target=\"_blank\")" msgstr "" #: inc/settings.php:716 msgid "Text for Visit channel link" msgstr "" #: inc/settings.php:723 msgid "Set default title for link" msgstr "" #: inc/settings.php:758 msgid "Required" msgstr "" #: inc/settings.php:764 msgid "This option is global only and can`t be changed per widget/shortcode" msgstr "" #: inc/settings.php:765 msgid "Global" msgstr "" #: inc/settings.php:771 msgid "You can leave this option empty and set it per widget/shortcode." msgstr "" #: inc/settings.php:772 msgid "Optional" msgstr "" #: inc/settings.php:783 #, php-format msgid "" "Configure general defaults for %1$s used as fallback options in widget or " "shortcodes. To get %2$s and %3$s visit " "%5$s." msgstr "" #: inc/settings.php:794 inc/widget.php:121 inc/widget.php:133 msgid "Channel ID" msgstr "" #: inc/settings.php:795 msgid "Vanity URL" msgstr "" #: inc/settings.php:806 #, php-format msgid "" "Configure video specific defaults for %s used as fallback options in widget " "or shortcodes." msgstr "" #: inc/settings.php:815 #, php-format msgid "" "Configure defaults of content around and over videos for %s used as fallback " "options in widget or shortcodes." msgstr "" #: inc/settings.php:824 #, php-format msgid "" "Configure defaults for link to channel below %s block used as fallback " "options in widget or shortcodes." msgstr "" #: inc/settings.php:990 msgid "You do not have sufficient permissions to access this page." msgstr "" #: inc/widget.php:20 msgid "Serve YouTube videos from channel or playlist right to widget area" msgstr "" #: inc/widget.php:102 msgid "Widget Title" msgstr "" #: inc/widget.php:103 msgid "Title for widget" msgstr "" #: inc/widget.php:107 msgid "Custom CSS Class" msgstr "" #: inc/widget.php:108 msgid "Enter custom class for YTC block, if you wish to target block styling" msgstr "" #: inc/widget.php:116 #, php-format msgid "" "Get your %1$s and %2$s from here." msgstr "" #: inc/widget.php:122 msgid "Custom ID" msgstr "" #: inc/widget.php:128 msgid "Vanity/Custom ID" msgstr "" #: inc/widget.php:129 msgid "YouTube Vanity/Custom ID from URL (part after /c/)" msgstr "" #: inc/widget.php:134 msgid "" "Find Channel ID behind My Channel menu item in YouTube (ID have UC at the " "beginning)" msgstr "" #: inc/widget.php:138 msgid "Legacy Username" msgstr "" #: inc/widget.php:139 msgid "" "Legacy YouTube username located behind /user/ part of channel URL (available " "only on old YouTube accounts)" msgstr "" #: inc/widget.php:143 msgid "Playlist ID" msgstr "" #: inc/widget.php:144 msgid "Find Playlist ID in your playlists (ID have PL at the beginning)" msgstr "" #: inc/widget.php:150 msgid "Channel (User Uploads)" msgstr "" #: inc/widget.php:152 msgid "Liked Videos" msgstr "" #: inc/widget.php:158 msgid "Cache feed" msgstr "" #: inc/widget.php:160 youtube-channel.php:1309 msgid "Do not cache" msgstr "" #: inc/widget.php:166 msgid "" "Number of videos that will be used for random pick (min 2, max 50, default " "25)" msgstr "" #: inc/widget.php:166 inc/widget.php:169 msgid "video(s)" msgstr "" #: inc/widget.php:172 msgid "Enable this option to protect your visitors privacy" msgstr "" #: inc/widget.php:172 #, php-format msgid "Enable privacy-enhanced mode" msgstr "" #: inc/widget.php:174 msgid "Get random videos of all fetched from channel or playlist" msgstr "" #: inc/widget.php:174 msgid "" "Show random video from resource (Have no effect if \"What to show?\" " "has been set to \"Embedded Playlist\")" msgstr "" #: inc/widget.php:183 msgid "" "Responsive video (distribute one full width item per row)" msgstr "" #: inc/widget.php:186 msgid "Initial width" msgstr "" #: inc/widget.php:186 msgid "Set video width in pixels" msgstr "" #: inc/widget.php:186 msgid "default" msgstr "" #: inc/widget.php:190 msgid "What to display?" msgstr "" #: inc/widget.php:198 msgid "Hide thumbnail tooltip" msgstr "" #: inc/widget.php:199 msgid "Use light theme (default is dark)" msgstr "" #: inc/widget.php:200 msgid "Hide player controls" msgstr "" #: inc/widget.php:203 msgid "Hide related videos" msgstr "" #: inc/widget.php:204 msgid "Hide YT Logo (does not work for all videos)" msgstr "" #: inc/widget.php:210 msgid "Show video title" msgstr "" #: inc/widget.php:218 msgid "Show video description" msgstr "" #: inc/widget.php:221 msgid "" "Set number of characters to cut down video description to (0 means full " "length)" msgstr "" #: inc/widget.php:224 msgid "Hide annotations from video" msgstr "" #: inc/widget.php:226 msgid "" "Enabling this option causes the player to not display information like the " "video title and uploader before the video starts playing." msgstr "" #: inc/widget.php:227 msgid "Hide video info" msgstr "" #: inc/widget.php:233 #, php-format msgid "" "Default: Visit our YouTube channel. You can use placeholders %1$s, %2$s and " "%3$s." msgstr "" #: inc/widget.php:233 youtube-channel.php:1058 msgid "Visit our YouTube channel" msgstr "" #: inc/widget.php:238 msgid "Link to Vanity customized URL" msgstr "" #: inc/widget.php:239 msgid "Link to Channel page URL" msgstr "" #: inc/widget.php:240 msgid "Link to Legacy username page" msgstr "" #: inc/widget.php:245 msgid "Open link in same window" msgstr "" #: inc/widget.php:246 msgid "Open link in new window (JavaScript)" msgstr "" #: inc/widget.php:247 msgid "Open link in new window (target=\"blank\")" msgstr "" #: inc/widget.php:251 msgid "Does not work?" msgstr "" #: inc/widget.php:258 #, php-format msgid "" "Carefully read %2$s before you contact " "us. If that does not help, get JSON file and send it to support forum " "along with other details noted in this " "article." msgstr "" #: inc/widget.php:264 msgid "FAQ" msgstr "" #: youtube-channel.php:186 msgid "Settings" msgstr "" #: youtube-channel.php:288 #, php-format msgid "" "

Your website running on web server with PHP version %1$s. Please note " "that %2$s requires PHP at least 5.3 or newer to work " "properly. Dismiss

" msgstr "" #: youtube-channel.php:301 #, php-format msgid "" "

Since %1$s v3.0.6 we store YouTube Data API Key in plugin settings. So, you can safely remove %2$s define line from " "your wp-config.php file. Dismiss

" msgstr "" #: youtube-channel.php:313 #, php-format msgid "" "

%1$s v3 require %2$s set on plugin %7$s. You can generate your own key on %4$s by following this tutorial.

" msgstr "" #: youtube-channel.php:336 #, php-format msgid "" "

%1$s changed shortcode parameters by removing " "only_pl and showgoto, and combining with " "parameters display and link_to respectively. " "Please check out %3$s and update your " "shortcodes. Dismiss" msgstr "" #: youtube-channel.php:596 #, php-format msgid "" "%1$s v3 requires YouTube DATA API Key to " "work. Learn more here." msgstr "" #: youtube-channel.php:773 #, php-format msgid "" "You have set to display videos from %1$s [resource list ID: %2$s], but there " "have no public videos in that resouce." msgstr "" #: youtube-channel.php:776 #, php-format msgid "" "We have empty record for this feed. Please read FAQ and if that does not help, contact support." msgstr "" #: youtube-channel.php:818 #, php-format msgid "" "Double check YouTube Data API Key on General plugin tab " "and make sure it's correct. Read Installation document." msgstr "" #: youtube-channel.php:824 #, php-format msgid "" "You have set wrong Channel ID. Fix that in General plugin settings, Widget " "and/or shortcode. Read FAQ document." msgstr "" #: youtube-channel.php:827 #, php-format msgid "" "You do not have permission to access ressource %s (it's " "maybe set to private or even does not exists!)" msgstr "" #: youtube-channel.php:946 msgid "Oops, something went wrong." msgstr "" #: youtube-channel.php:1061 msgid "in new window/tab" msgstr "" #: youtube-channel.php:1213 #, php-format msgid "Watch video %1$s published on %2$s" msgstr "" #: youtube-channel.php:1310 msgid "1 minute" msgstr "" #: youtube-channel.php:1311 msgid "5 minutes" msgstr "" #: youtube-channel.php:1312 msgid "15 minutes" msgstr "" #: youtube-channel.php:1313 msgid "30 minutes" msgstr "" #: youtube-channel.php:1314 msgid "1 hour" msgstr "" #: youtube-channel.php:1315 msgid "2 hours" msgstr "" #: youtube-channel.php:1316 msgid "5 hours" msgstr "" #: youtube-channel.php:1317 msgid "10 hours" msgstr "" #: youtube-channel.php:1318 msgid "12 hours" msgstr "" #: youtube-channel.php:1319 msgid "18 hours" msgstr "" #: youtube-channel.php:1320 msgid "1 day" msgstr "" #: youtube-channel.php:1321 msgid "2 days" msgstr "" #: youtube-channel.php:1322 msgid "3 days" msgstr "" #: youtube-channel.php:1323 msgid "4 days" msgstr "" #: youtube-channel.php:1324 msgid "5 days" msgstr "" #: youtube-channel.php:1325 msgid "6 days" msgstr "" #: youtube-channel.php:1326 msgid "1 week" msgstr "" #: youtube-channel.php:1327 msgid "2 weeks" msgstr "" #: youtube-channel.php:1328 msgid "3 weeks" msgstr "" #: youtube-channel.php:1329 msgid "1 month" msgstr "" #. Plugin URI of the plugin/theme msgid "https://urosevic.net/wordpress/plugins/youtube-channel/" msgstr "" #. Description of the plugin/theme msgid "" "Quick and easy embed latest or random videos from YouTube channel (user " "uploads, liked or favourited videos) or playlist. Use widget for sidebar or shortcode for content. Works with YouTube " "Data API v3." msgstr "" #. Author of the plugin/theme msgid "Aleksandar Urošević" msgstr "" #. Author URI of the plugin/theme msgid "https://urosevic.net/" msgstr "" PK!2"languages/youtube-channel-es_ES.ponu[msgid "" msgstr "" "Project-Id-Version: YouTube Channel v2.2.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-06-19 21:20+0100\n" "PO-Revision-Date: 2015-06-19 21:20+0100\n" "Last-Translator: Aleksandar Urošević \n" "Language-Team: Digital03.net \n" "Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 1.8.1\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;" "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n" "X-Poedit-Basepath: .\n" "X-Textdomain-Support: yes\n" "X-Poedit-SearchPath-0: .\n" # @ youtube-channel #: inc/settings.php:38 inc/settings_template.php:14 #: inc/settings_usage_shortcode.php:104 msgid "General" msgstr "General" #: inc/settings.php:46 youtube-channel.php:316 msgid "YouTube Data API Key" msgstr "" #: inc/settings.php:54 inc/settings.php:86 msgid "Required" msgstr "" #: inc/settings.php:58 #, php-format msgid "" "Your YouTube Data API Key (get it from %s)" msgstr "" #: inc/settings.php:68 youtube-channel.php:318 msgid "Google Developers Console" msgstr "" # @ youtube-channel #: inc/settings.php:78 msgid "YouTube Channel ID" msgstr "ID Canal Youtube" #: inc/settings.php:90 #, php-format msgid "" "Your YouTube Channel ID (get it from %s)" msgstr "" #: inc/settings.php:100 inc/settings.php:132 inc/settings.php:718 msgid "YouTube Account Overview" msgstr "" #: inc/settings.php:110 msgid "YouTube Vanity Name" msgstr "" #: inc/settings.php:118 inc/settings.php:150 inc/settings.php:168 msgid "Optional" msgstr "" #: inc/settings.php:122 #, php-format msgid "" "Your YouTube Custom Name (get only part after www.youtube.com/c/ instead " "whole URL from %s)" msgstr "" #: inc/settings.php:142 msgid "Legacy YouTube Username" msgstr "" #: inc/settings.php:151 msgid "Your YouTube legacy username" msgstr "" # @ youtube-channel #: inc/settings.php:160 msgid "Default Playlist ID" msgstr "Lista de reproducción por defecto" # @ youtube-channel #: inc/settings.php:169 msgid "Enter default playlist ID (not playlist name)" msgstr "" "Introduce la ID de la lista de reproducción por defecto (no el nombre de la " "lista)" # @ youtube-channel #: inc/settings.php:178 inc/widget.php:134 msgid "Resource to use" msgstr "Recurso a usar" #: inc/settings.php:184 msgid "Resource:" msgstr "" # @ youtube-channel #: inc/settings.php:185 msgid "What to use as resource for feeds" msgstr "Qué usar como recursos de los feeds" # @ youtube-channel #: inc/settings.php:189 msgid "Channel" msgstr "Canal" #: inc/settings.php:190 inc/widget.php:137 msgid "Favourites" msgstr "" #: inc/settings.php:191 msgid "Liked Video" msgstr "" # @ youtube-channel #: inc/settings.php:192 inc/widget.php:139 msgid "Playlist" msgstr "Lista de reproducción" # @ youtube-channel #: inc/settings.php:199 msgid "Cache Timeout" msgstr "Timeout caché" # @ youtube-channel #: inc/settings.php:205 msgid "Define caching timeout for YouTube feeds, in seconds" msgstr "" "Define el tiempo para descartar la caché de los feeds de Youtube, en segundos" # @ youtube-channel #: inc/settings.php:209 msgid "Do not chache" msgstr "No chachear" #: inc/settings.php:210 youtube-channel.php:1273 msgid "1 minute" msgstr "1 minuto" #: inc/settings.php:211 youtube-channel.php:1274 msgid "5 minutes" msgstr "5 minutos" #: inc/settings.php:212 youtube-channel.php:1275 msgid "15 minutes" msgstr "15 minutos" #: inc/settings.php:213 youtube-channel.php:1276 msgid "30 minutes" msgstr "30 minutos" #: inc/settings.php:214 youtube-channel.php:1279 msgid "1 hour" msgstr "1 hora" #: inc/settings.php:215 youtube-channel.php:1280 msgid "2 hours" msgstr "2 horas" #: inc/settings.php:216 youtube-channel.php:1281 msgid "5 hours" msgstr "5 horas" #: inc/settings.php:217 youtube-channel.php:1282 msgid "10 hours" msgstr "10 horas" #: inc/settings.php:218 youtube-channel.php:1283 msgid "12 hours" msgstr "12 horas" #: inc/settings.php:219 youtube-channel.php:1284 msgid "18 hours" msgstr "18 horas" #: inc/settings.php:220 youtube-channel.php:1287 msgid "1 day" msgstr "1 día" #: inc/settings.php:221 youtube-channel.php:1288 msgid "2 days" msgstr "2 días" #: inc/settings.php:222 youtube-channel.php:1289 msgid "3 days" msgstr "3 días" #: inc/settings.php:223 youtube-channel.php:1290 msgid "4 days" msgstr "4 días" #: inc/settings.php:224 youtube-channel.php:1291 msgid "5 days" msgstr "5 días" #: inc/settings.php:225 youtube-channel.php:1292 msgid "6 days" msgstr "6 días" #: inc/settings.php:226 youtube-channel.php:1295 msgid "1 week" msgstr "1 semana" #: inc/settings.php:227 youtube-channel.php:1296 msgid "2 weeks" msgstr "2 semanas" #: inc/settings.php:228 youtube-channel.php:1297 msgid "3 weeks" msgstr "3 semanas" #: inc/settings.php:229 youtube-channel.php:1298 msgid "1 month" msgstr "1 mes" # @ youtube-channel #: inc/settings.php:236 inc/widget.php:152 msgid "Fetch" msgstr "Obtener" # @ youtube-channel #: inc/settings.php:242 inc/widget.php:152 msgid "" "Number of videos that will be used for random pick (min 2, max 50, default " "25)" msgstr "" "Número de vídeos que se usarán para coger aleatoriamente (mínimo 2, máximo " "50, por defecto 25)" # @ youtube-channel #: inc/settings.php:253 inc/widget.php:155 msgid "Show" msgstr "Mostrar" # @ youtube-channel #: inc/settings.php:259 inc/widget.php:155 msgid "Number of videos to display" msgstr "Número de vídeos a mostrar" # @ youtube-channel #: inc/settings.php:270 msgid "Use Enhanced privacy" msgstr "Usar Privacidad Extendida" #: inc/settings.php:279 #, php-format msgid "" "Enable this option to protect your visitors privacy. %s" msgstr "" #: inc/settings.php:289 msgid "Learn more here" msgstr "" #: inc/settings.php:306 msgid "Video Tweaks" msgstr "" #: inc/settings.php:314 msgid "Initial Width" msgstr "" # @ youtube-channel #: inc/settings.php:320 msgid "Set default width for displayed video, in pixels" msgstr "Fijar anchura por defecto para mostrar vídeos, en pixeles" # @ youtube-channel #: inc/settings.php:331 inc/widget.php:164 msgid "Aspect ratio" msgstr "Ratio de aspecto" # @ youtube-channel #: inc/settings.php:338 msgid "Select aspect ratio for displayed video" msgstr "Selecciona relación de aspecto para mostrar los vídeos" # @ youtube-channel #: inc/settings.php:350 msgid "What to show?" msgstr "¿Qué mostrar?" #: inc/settings.php:356 msgid "Choose how to embed video block" msgstr "" # @ youtube-channel #: inc/settings.php:360 inc/widget.php:179 msgid "Thumbnail" msgstr "Miniatura" # @ youtube-channel #: inc/settings.php:361 inc/widget.php:180 msgid "HTML5 (iframe)" msgstr "HTML5 (iframe)" #: inc/settings.php:362 inc/widget.php:181 msgid "HTML5 (iframe) Asynchronous" msgstr "" #: inc/settings.php:363 inc/widget.php:182 msgid "Embedded Playlist" msgstr "" #: inc/settings.php:371 msgid "Enable Responsive" msgstr "" #: inc/settings.php:377 msgid "" "Enable this option to make YTC videos and thumbnails responsive by default. " "Please note, this option will set videos and thumbnail to full width " "relative to parent container, and disable more than one video per row." msgstr "" #: inc/settings.php:386 msgid "Play inline on iOS" msgstr "" #: inc/settings.php:394 #, php-format msgid "" "Enable this option to override fullscreen playback on iOS, and force inline " "playback on page and in lightbox. Learn more here." msgstr "" #: inc/settings.php:406 msgid "Disable Lightbox" msgstr "" #: inc/settings.php:412 msgid "" "Enable this option to disable built-in lightbox for thumbnails (in case that " "you have youtube links lightbox trigger in theme or other plugin)." msgstr "" #: inc/settings.php:421 msgid "Light Theme" msgstr "" #: inc/settings.php:427 msgid "" "Enable this option to use light theme for playback controls instead dark." msgstr "" #: inc/settings.php:435 msgid "Hide Player Controls" msgstr "" # @ youtube-channel #: inc/settings.php:441 msgid "Enable this option to hide playback controls" msgstr "Activa esta opción para ocultar los controles de reproducción" # @ youtube-channel #: inc/settings.php:450 inc/widget.php:187 msgid "Autoplay video or playlist" msgstr "Auto reproducir vídeo o lista de reproducción" # @ youtube-channel #: inc/settings.php:456 msgid "" "Enable this option to start video playback right after block is rendered" msgstr "" "Activa esta opción para auto iniciar la reproducción tras renderizar el " "bloque" # @ youtube-channel #: inc/settings.php:464 inc/widget.php:188 msgid "Mute video on autoplay" msgstr "Desactivar sonido en autoplay" # @ youtube-channel #: inc/settings.php:470 msgid "Enable this option to mute video when start autoplay" msgstr "" "Activa esta opción para desactivar el sonido al comenzar el vídeo con " "autoplay" # @ youtube-channel #: inc/settings.php:478 inc/widget.php:189 msgid "Hide related videos" msgstr "Ocultar vídeos relacionados" # @ youtube-channel #: inc/settings.php:484 msgid "Enable this option to hide related videos after finished playback" msgstr "" "Activa esta opción para ocultar los vídeos relacionados tras la reproducción" #: inc/settings.php:492 msgid "Hide YT logo" msgstr "" #: inc/settings.php:498 msgid "" "Enable this option to hide YouTube logo from playback control bar. Does not " "work for all videos." msgstr "" #: inc/settings.php:506 msgid "Hide video annotations" msgstr "" # @ youtube-channel #: inc/settings.php:512 msgid "" "Enable this option to hide video annotations (custom text set by uploader " "over video during playback)" msgstr "" "Activa esta opción para ocultar las anotaciones del vídeo (texto " "personalizado creado por el uploader)" # @ youtube-channel #: inc/settings.php:520 inc/widget.php:213 msgid "Hide video info" msgstr "Esconder info del vídeo" # @ youtube-channel #: inc/settings.php:526 msgid "" "Enable this option to hide informations about video before play start (video " "title and uploader in overlay)" msgstr "" "Activa esta opción para ocultar la información sobre el vídeo antes de " "reproducirlo (título del vídeo y uploader)" #: inc/settings.php:542 msgid "Content Tweaks" msgstr "" # @ youtube-channel #: inc/settings.php:550 inc/widget.php:196 msgid "Show video title" msgstr "Mostrar título del vídeo" #: inc/settings.php:556 msgid "Select should we and where display title of video" msgstr "" #: inc/settings.php:560 inc/widget.php:199 msgid "Hide title" msgstr "" #: inc/settings.php:561 inc/widget.php:200 msgid "Above video/thumbnail" msgstr "" #: inc/settings.php:562 inc/widget.php:201 msgid "Below video/thumbnail" msgstr "" # @ youtube-channel #: inc/settings.php:569 inc/widget.php:204 msgid "Show video description" msgstr "Mostrar descripción del vídeo" # @ youtube-channel #: inc/settings.php:575 msgid "Enable this option to display description for video" msgstr "Activa esta opción para mostrar la descripción del vídeo" # @ youtube-channel #: inc/settings.php:583 inc/widget.php:206 msgid "Description length" msgstr "Tamaño descripción" # @ youtube-channel #: inc/settings.php:589 msgid "Enter length for video description in characters (0 for full length)" msgstr "" "Introduce el tamaño de la descripción del vídeo en caracteres (0 para " "mostrarlo completo)" # @ youtube-channel #: inc/settings.php:609 inc/settings_template.php:17 #: inc/settings_usage_shortcode.php:15 inc/settings_usage_shortcode.php:107 #: inc/widget.php:217 msgid "Link to Channel" msgstr "Enlace al canal" #: inc/settings.php:617 msgid "Link to..." msgstr "" #: inc/settings.php:624 msgid "Set where link will lead visitors" msgstr "" #: inc/settings.php:628 inc/widget.php:223 msgid "Hide link" msgstr "" #: inc/settings.php:629 msgid "Vanity custom URL" msgstr "" #: inc/settings.php:630 msgid "Channel page URL" msgstr "" #: inc/settings.php:631 msgid "Legacy username page" msgstr "" #: inc/settings.php:638 msgid "Open link in..." msgstr "" #: inc/settings.php:645 msgid "Set where link will be opened" msgstr "" #: inc/settings.php:649 msgid "same window" msgstr "" #: inc/settings.php:650 msgid "new window (JavaScript)" msgstr "" #: inc/settings.php:651 msgid "new window (target=\"_blank\")" msgstr "" #: inc/settings.php:658 msgid "Text for Visit channel link" msgstr "" #: inc/settings.php:665 msgid "Set default title for link" msgstr "" #. Plugin Name of the plugin/theme #: inc/settings.php:686 inc/settings.php:687 inc/settings.php:714 #: inc/settings.php:728 inc/settings.php:738 inc/settings.php:748 #: inc/settings_usage_shortcode.php:115 inc/widget.php:11 msgid "YouTube Channel" msgstr "" #: inc/settings.php:704 #, php-format msgid "" "Configure general defaults for %1$s used as fallback options in widget or " "shortcodes. To get %2$s and %3$s visit " "%5$s." msgstr "" # @ youtube-channel #: inc/settings.php:715 inc/widget.php:108 inc/widget.php:119 msgid "Channel ID" msgstr "ID del canal" #: inc/settings.php:716 msgid "Vanity URL" msgstr "" #: inc/settings.php:727 #, php-format msgid "" "Configure video specific defaults for %s used as fallback options in widget " "or shortcodes." msgstr "" #: inc/settings.php:737 #, php-format msgid "" "Configure defaults of content around and over videos for %s used as fallback " "options in widget or shortcodes." msgstr "" #: inc/settings.php:747 #, php-format msgid "" "Configure defaults for link to channel below %s block used as fallback " "options in widget or shortcodes." msgstr "" # @ default #: inc/settings.php:908 msgid "You do not have sufficient permissions to access this page." msgstr "No tienes suficientes permisos para acceder a esta página." #: inc/settings_template.php:6 msgid " Settings" msgstr "" # @ wpaust #: inc/settings_template.php:15 inc/settings_usage_shortcode.php:105 msgid "Video" msgstr "Vídeo" # @ youtube-channel #: inc/settings_template.php:16 inc/settings_usage_shortcode.php:106 msgid "Content" msgstr "Contenido" # @ youtube-channel #: inc/settings_template.php:18 msgid "Tools" msgstr "Herramientas" # @ youtube-channel #: inc/settings_template.php:19 msgid "Help" msgstr "Ayuda" #: inc/settings_template.php:20 youtube-channel.php:201 msgid "Support" msgstr "Soporte" #: inc/settings_usage.php:1 msgid "How to use YouTube Channel" msgstr "" #: inc/settings_usage.php:2 msgid "You can insert YouTube Channel in couple different ways." msgstr "" #: inc/settings_usage.php:7 #, php-format msgid "Add %s to preferred %s, and configure it there." msgstr "" #: inc/settings_usage.php:10 msgid "YouTube Channel Widget" msgstr "" #: inc/settings_usage.php:13 msgid "Widget Area" msgstr "" #: inc/settings_usage.php:19 #, php-format msgid "" "Insert shortcode %s to your page or text widget, and even modify default " "settings by shortcode parameters listed in section below." msgstr "" #: inc/settings_usage_shortcode.php:1 msgid "How to use shortcode" msgstr "" #: inc/settings_usage_shortcode.php:5 #, php-format msgid "" "You can use shortcode %s with options listed below (all options are optional " "if you have set defaults in global plugin settings)." msgstr "" #: inc/settings_usage_shortcode.php:12 youtube-channel.php:321 msgid "General Settings" msgstr "" # @ youtube-channel #: inc/settings_usage_shortcode.php:13 inc/widget.php:163 msgid "Video Settings" msgstr "Configuración del vídeo" # @ youtube-channel #: inc/settings_usage_shortcode.php:14 inc/widget.php:193 msgid "Content Layout" msgstr "Diseño de contenido" #: inc/settings_usage_shortcode.php:101 #, php-format msgid "" "Please note, you can omit all options listed above, and then will be used " "plugin defaults customized on tabs %1$s, %2$s, %3$s and %4$s." msgstr "" #: inc/settings_usage_shortcode.php:112 #, php-format msgid "" "Important note: %s blocks inserted through widget have their own settings." msgstr "" # @ youtube-channel #: inc/widget.php:14 msgid "Serve YouTube videos from channel or playlist right to widget area" msgstr "" "Muestra vídeos de Youtube de un canal o lista de reproducción en un área de " "widgets" # @ youtube-channel #: inc/widget.php:90 msgid "Widget Title" msgstr "Título del widget" # @ youtube-channel #: inc/widget.php:91 msgid "Title for widget" msgstr "Título del widget" #: inc/widget.php:95 msgid "Custom CSS Class" msgstr "Clases CSS personalizadas" #: inc/widget.php:96 msgid "Enter custom class for YTC block, if you wish to target block styling" msgstr "" "Introduce las clases personalizadas para el bloque YTC si quieres " "personalizarlo" #: inc/widget.php:103 #, php-format msgid "" "Get your %1$s and %2$s from here." msgstr "" #: inc/widget.php:109 msgid "Custom ID" msgstr "" #: inc/widget.php:114 msgid "Vanity/Custom ID" msgstr "" #: inc/widget.php:115 msgid "YouTube Vanity/Custom ID from URL (part after /c/)" msgstr "" #: inc/widget.php:120 msgid "" "Find Channel ID behind My Channel menu item in YouTube (ID have UC at the " "beginning)" msgstr "" #: inc/widget.php:124 msgid "Legacy Username" msgstr "" #: inc/widget.php:125 msgid "" "Legacy YouTube username located behind /user/ part of channel URL (available " "only on old YouTube accounts)" msgstr "" # @ youtube-channel #: inc/widget.php:129 msgid "Playlist ID" msgstr "ID lista de reproducción" #: inc/widget.php:130 msgid "Find Playlist ID in your playlists (ID have PL at the beginning)" msgstr "" #: inc/widget.php:136 msgid "Channel (User Uploads)" msgstr "" #: inc/widget.php:138 msgid "Liked Videos" msgstr "" # @ youtube-channel #: inc/widget.php:144 msgid "Cache feed" msgstr "Caché feed" #: inc/widget.php:146 msgid "Do not cache" msgstr "" #: inc/widget.php:152 inc/widget.php:155 msgid "video(s)" msgstr "vídeo(s)" # @ youtube-channel #: inc/widget.php:158 msgid "Enable this option to protect your visitors privacy" msgstr "Activa esta opción para proteger la privacidad de tus visitantes" #: inc/widget.php:158 #, php-format msgid "Enable privacy-enhanced mode" msgstr "" # @ youtube-channel #: inc/widget.php:160 msgid "Get random videos of all fetched from channel or playlist" msgstr "" "Elige vídeos aleatoriamente de todos los obtenidos del canal o la lista de " "reproducción" #: inc/widget.php:160 msgid "" "Show random video from resource (Have no effect if \"What to show?\" " "has been set to \"Embedded Playlist\")" msgstr "" #: inc/widget.php:169 msgid "" "Responsive video (distribute one full width item per row)" msgstr "" #: inc/widget.php:172 msgid "Initial width" msgstr "" # @ youtube-channel #: inc/widget.php:172 msgid "Set video width in pixels" msgstr "Anchura del vídeo en pixeles" # @ youtube-channel #: inc/widget.php:172 msgid "default" msgstr "por defecto" #: inc/widget.php:176 msgid "What to display?" msgstr "" #: inc/widget.php:184 msgid "Hide thumbnail tooltip" msgstr "" # @ youtube-channel #: inc/widget.php:185 msgid "Use light theme (default is dark)" msgstr "Usa plantilla clara (por defecto es oscura)" # @ youtube-channel #: inc/widget.php:186 msgid "Hide player controls" msgstr "Esconder controles de reproducción" #: inc/widget.php:190 msgid "Hide YT Logo (does not work for all videos)" msgstr "" # @ youtube-channel #: inc/widget.php:207 msgid "" "Set number of characters to cut down video description to (0 means full " "length)" msgstr "" "Número de caracteres para cortar la descripción del vídeo (0 para mostrarla " "completa)" # @ youtube-channel #: inc/widget.php:210 msgid "Hide annotations from video" msgstr "Ocultar anotaciones del vídeo" #: inc/widget.php:212 msgid "" "Enabling this option causes the player to not display information like the " "video title and uploader before the video starts playing." msgstr "" #: inc/widget.php:219 msgid "" "Default: Visit our YouTube channel. You can use placeholders %vanity%, " "%channel% and %username%." msgstr "" #: inc/widget.php:219 youtube-channel.php:1043 msgid "Visit our YouTube channel" msgstr "" #: inc/widget.php:224 msgid "Link to Vanity customized URL" msgstr "" #: inc/widget.php:225 msgid "Link to Channel page URL" msgstr "" #: inc/widget.php:226 msgid "Link to Legacy username page" msgstr "" #: inc/widget.php:231 msgid "Open link in same window" msgstr "" #: inc/widget.php:232 msgid "Open link in new window (JavaScript)" msgstr "" #: inc/widget.php:233 msgid "Open link in new window (target=\"blank\")" msgstr "" #: inc/widget.php:237 msgid "Does not work?" msgstr "" #: inc/widget.php:243 #, php-format msgid "" "Carefully read %2$s before you contact " "us. If that does not help, get JSON file and send it to support forum " "along with other details noted in this " "article." msgstr "" #: inc/widget.php:249 msgid "FAQ" msgstr "" # @ youtube-channel #: youtube-channel.php:179 msgid "Settings" msgstr "Configuración" #: youtube-channel.php:280 #, php-format msgid "" "

Your website running on web server with PHP version %s. Please note that " "%s requires PHP at least 5.3 or newer to work properly. Dismiss

" msgstr "" #: youtube-channel.php:293 #, php-format msgid "" "

Since %s v3.0.6 we store YouTube Data API Key in plugin settings. So, you can safely remove %s define line from " "your wp-config.php file. Dismiss

" msgstr "" #: youtube-channel.php:305 #, php-format msgid "" "

Please note, to make %1$s plugin v3+ work, generate " "%2$s in %4$s, as " "explained here, then add it to %7$s.

If you have any issue with new version of " "plugin, please ask for help on official " "%9$s.
This notice will disappear when you add missing key as " "mentioned above!

" msgstr "" #: youtube-channel.php:323 msgid "support forum" msgstr "" #: youtube-channel.php:332 #, php-format msgid "" "

%s since version 2.4 supports linking to channel through " "Vanity/Custom URL. Please review global and widgets settings. Dismiss" msgstr "" #: youtube-channel.php:346 #, php-format msgid "" "

%s changed shortcode parameters by removing " "only_pl and showgoto, and combining with " "parameters display and link_to respectively. " "Please check out %s and update your shortcodes. " "Dismiss" msgstr "" #: youtube-channel.php:609 #, php-format msgid "" "%s version 3+ requires YouTube DATA API Key to work. Learn more here." msgstr "" #: youtube-channel.php:782 #, php-format msgid "" "You have set to display videos from %s [resource list ID: %s], but there " "have no public videos in that resouce." msgstr "" #: youtube-channel.php:786 #, php-format msgid "" "We have empty record for this feed. Please read FAQ and if that does not help, contact support." msgstr "" #: youtube-channel.php:828 #, php-format msgid "" "Double check YouTube Data API Key on General plugin tab " "and make sure it's correct. Read Installation document." msgstr "" #: youtube-channel.php:836 #, php-format msgid "" "You have set wrong Channel ID. Fix that in General plugin settings, Widget " "and/or shortcode. Read FAQ document." msgstr "" #: youtube-channel.php:840 #, php-format msgid "" "You do not have permission to access ressource %s (it's " "maybe set to private or even does not exists!)" msgstr "" #: youtube-channel.php:964 msgid "Oops, something went wrong." msgstr "" # @ youtube-channel #: youtube-channel.php:1046 msgid "in new window/tab" msgstr "en nueva ventana/pestaña" # @ youtube-channel #: youtube-channel.php:1198 #, php-format msgid "Watch video %1$s published on %2$s" msgstr "Ver vídeo %1$s publicado en %2$s" #. Plugin URI of the plugin/theme msgid "http://urosevic.net/wordpress/plugins/youtube-channel/" msgstr "http://urosevic.net/wordpress/plugins/youtube-channel/" #. Description of the plugin/theme msgid "" "Quick and easy embed latest or random videos from YouTube channel (user " "uploads, liked or favourited videos) or playlist. Use widget for sidebar or shortcode for content. Works with YouTube " "Data API v3." msgstr "" #. Author of the plugin/theme msgid "Aleksandar Urošević" msgstr "Aleksandar Urošević" #. Author URI of the plugin/theme msgid "http://urosevic.net/" msgstr "http://urosevic.net/" # @ youtube-channel #~ msgid "" #~ "Enter your YouTube channel ID (channel name, not full URL to channel)" #~ msgstr "" #~ "Introduce la ID del canal de Youtube (nombre del canal, no la URL " #~ "completa del canal)" # @ youtube-channel #~ msgid "Favorites" #~ msgstr "Favoritos" # @ youtube-channel #~ msgid "Embed standard playlist" #~ msgstr "Embeder lista estándar" # @ youtube-channel #~ msgid "" #~ "Enable this option to embed whole playlist instead single video from " #~ "playlist when you chose playlist as resource" #~ msgstr "" #~ "Activa esta opción para embeder la lista de reproducción entera en vez de " #~ "un vídeo individual cuando elijas lista de reproducción como recurso" # @ youtube-channel #~ msgid "Fix No items error/Respect playlist order" #~ msgstr "Corregir No hay vídeos error / Respetar orden de lista" # @ youtube-channel #~ msgid "Enable this option if you get error No Item" #~ msgstr "Activa esta opción si obtienes un error No hay vídeo" # @ youtube-channel #~ msgid "Show random video" #~ msgstr "Mostrar vídeo aleatorio" # @ youtube-channel #~ msgid "Aspect Ratio" #~ msgstr "Ratio de aspecto" # @ youtube-channel #~ msgid "16:9" #~ msgstr "16:9" # @ youtube-channel #~ msgid "16:10" #~ msgstr "16:10" # @ youtube-channel #~ msgid "4:3" #~ msgstr "4:3" # @ wpaust #~ msgid "Video Width" #~ msgstr "Anchura del vídeo" # @ youtube-channel #~ msgid "Set what will be shown by default" #~ msgstr "Fijar qué se mostrará por defecto" # @ youtube-channel #~ msgid "Flash (object)" #~ msgstr "Objeto Flash" # @ youtube-channel #~ msgid "HTML5 (iframe) Async" #~ msgstr "HTML5 (iframe) asíncrono" # @ youtube-channel #~ msgid "Chromeless" #~ msgstr "Sin marco" # @ youtube-channel #~ msgid "Use light theme" #~ msgstr "Usar plantilla clara" # @ youtube-channel #~ msgid "" #~ "Enable this option to use light theme for playback controls instead dark" #~ msgstr "" #~ "Activa esta opción para usar la plantilla clara para los controles de " #~ "reproducción en lugar de la oscura" # @ youtube-channel #~ msgid "Fix video height" #~ msgstr "Ajustar altura de vídeo" # @ youtube-channel #~ msgid "" #~ "Enable this option to fix video height when playback controls are not " #~ "hidden" #~ msgstr "" #~ "Activa esta opción para ajustar la altura del vídeo cuando los controles " #~ "de reproducción no están ocultos" # @ youtube-channel #~ msgid "Enable this option to display title of video" #~ msgstr "Activa esta opción para mostrar el título del vídeo" # @ youtube-channel #~ msgid "Et cetera string" #~ msgstr "Cadena para etcétera" #~ msgid "Indicator for shortened video description (default: …)" #~ msgstr "" #~ "Indicador para acortar las descripciones del vídeo (por defecto: ...)" #~ msgid "..." #~ msgstr "..." # @ youtube-channel #~ msgid "Visit YouTube Channel text" #~ msgstr "Texto para Visitar canal de YouTube" # @ youtube-channel #~ msgid "Use placeholder %channel% to insert channel name" #~ msgstr "Usa el código %channel% para insertar el nombre del canal" # @ youtube-channel #~ msgid "Visit my channel %channel%" #~ msgstr "Visita mi canal %channel%" # @ youtube-channel #~ msgid "Show link to channel" #~ msgstr "Mostrar enlace a canal" # @ youtube-channel #~ msgid "" #~ "Enable this option to show customized link to channel at the bottom of " #~ "YTC block" #~ msgstr "" #~ "Activa esta opción para mostrar un enlace personalizado al canal al final " #~ "del bloque YTC" # @ youtube-channel #~ msgid "Open YouTube channel page" #~ msgstr "Abrir página del canal de YouTube" # @ youtube-channel #~ msgid "in same window" #~ msgstr "en la misma ventana" # @ youtube-channel #~ msgid "in new window (JavaScript)" #~ msgstr "en nueva ventana (JavaScript)" # @ youtube-channel #~ msgid "in new window (Target)" #~ msgstr "en nueva ventana (Target)" # @ youtube-channel #~ msgid "Link to channel instead to user" #~ msgstr "Enlaza al canal en vez del al usuario" # @ youtube-channel #~ msgid "" #~ "Enable this option if link to your channel have /channel/ " #~ "instead /user/ part in URL" #~ msgstr "" #~ "Activa esta opción si la URL de enlace a tu canal tiene /channel/ en vez de /user/" #~ msgid "Usage" #~ msgstr "Usar" #~ msgid " Options" #~ msgstr " Opciones" # @ youtube-channel #~ msgid "" #~ "

Easy embed playable videos from YouTube.

Here you can set " #~ "default options that will be used as defaults for new widgets, and for " #~ "shortcode.

" #~ msgstr "" #~ "

Incrusta fácilmente vídeos de Youtube

Aquí puedes cambiar las " #~ "configuraciones por defecto que serán usadas en widgets y shortcodes.

" # @ youtube-channel #~ msgid "" #~ "Enable this option to protect your visitors privacy." #~ msgstr "" #~ "Activa esta opción para proteger la privacidad de tus visitantes" # @ youtube-channel #~ msgid "Youtube Channel" #~ msgstr "Canal de YouTube" # @ youtube-channel #~ msgid "YouTube Channel name (not URL to channel)" #~ msgstr "Nombre del Canal de Youtube (no la URL del canal)" # @ youtube-channel #~ msgid "YouTube Playlist ID (not playlist name)" #~ msgstr "ID Playlist Youtube (no el nombre de la lista)" # @ youtube-channel #~ msgid "" #~ "Enable this option to embed YouTube playlist widget instead single video " #~ "from playlist" #~ msgstr "" #~ "Activa esta opción para embeder una lista de reproducción de Youtube en " #~ "vez de un vídeo individual de la lista" # @ youtube-channel #~ msgid "Use Enhanced Privacy" #~ msgstr "Usar Privacidad extendida" # @ youtube-channel #~ msgid "Width" #~ msgstr "Ancho" # @ youtube-channel #~ msgid "Fix height taken by controls" #~ msgstr "Fijar la altura tomada por los controles" # @ youtube-channel #~ msgid "Default: &hellip;" #~ msgstr "Defecto &hellip;" # @ youtube-channel #~ msgid "" #~ "Default: Visit channel %channel%. Use placeholder %channel% to insert " #~ "channel name." #~ msgstr "" #~ "Defecto: Visitar el canal %channel%. Usa el código %channel% para " #~ "insertar el nombre del canal." # @ youtube-channel #~ msgid "Debug YTC" #~ msgstr "YTC modo Debug" #~ msgid "Enable debugging" #~ msgstr "Activar modo debug" #~ msgid "" #~ "Insert debug data to support forum." #~ "
Please do not remove channel and playlist ID`s. If you are " #~ "concerned about privacy, send this debug log to email %s" #~ msgstr "" #~ "Envía los datos de debug a través del foro de soporte.
Por favor, no borres el canal y los ID de " #~ "lista de reproducción. Si tienes algún problema con la privacidad, envía " #~ "esta info de debug al email %s" #~ msgid "" #~ "Please review global settings, YTC widgets and " #~ "shortcodes." #~ msgstr "" #~ "Por favor, revisa las opciones generales, widgets YTC " #~ "y shortcodes" #~ msgid "" #~ "If you use caching for any YTC widget or shortcode, please " #~ "ReCache feeds in Tools section of plugin settings page." #~ msgstr "" #~ "Si estás usando el cacheo para cualquier widget o shortcode de YTC, por " #~ "favor actualiza el caché de los feeds en la sección " #~ "Herramientas, en la página de las opciones del plugin. " #~ msgid "" #~ "We switched to Redux Framework so please review global plugin settings page." #~ msgstr "" #~ "Hemos actualizado al Framework Redux asi que por favor revisa la " #~ "configuración global del plugin en la página de opciones." #~ msgid "updated to version" #~ msgstr "actualizar a la versión" #~ msgid "I did this already, dismiss notice!" #~ msgstr "Ya lo he hecho, desactiva la notificación!" #~ msgid "" #~ "To configure global %s options, you need to install and " #~ "activate %s." #~ msgstr "" #~ "Para configurar la opción global %s, necesitas instalar " #~ "y activar %s." # @ youtube-channel #~ msgid "No items" #~ msgstr "No hay elementos" # @ youtube-channel #~ msgid "Check here why" #~ msgstr "Informate aquí del porqué" # @ youtube-channel #~ msgid "Visit channel %1$s" #~ msgstr "Visitar canal %1$s" # @ youtube-channel #~ msgid "Visit YouTube Channel text:" #~ msgstr "Texto Visitar canal de YouTube:" # @ youtube-channel #~ msgid "" #~ "

Default settings for video section. This will be used as default " #~ "values for shortcode.

" #~ msgstr "" #~ "

Opciones por defecto para la sección vídeos. Serán usados como valores " #~ "por defecto para los shortcode.

" # @ youtube-channel #~ msgid "" #~ "

Default settings for content layout section. This will be used as " #~ "default values for shortcode.

" #~ msgstr "" #~ "

Opciones por defecto para la sección diseño de contenidos. Serán " #~ "usados como valores por defecto para los shortcode.

" # @ youtube-channel #~ msgid "" #~ "

Default settings for channel link at the bottom of video block. This " #~ "will be used as default values for shortcode.

" #~ msgstr "" #~ "

Opciones por defecto para el enlace al canal en el pie del bloque de " #~ "vídeo. Serán usados como valores por defecto para los shortcode.

" # @ youtube-channel #~ msgid "Resource to use:" #~ msgstr "Recurso a usar:" # @ youtube-channel #~ msgid "Fetch:" #~ msgstr "Obtener:" # @ youtube-channel #~ msgid "Show:" #~ msgstr "Mostrar:" PK!HH"languages/youtube-channel-sr_RS.monu[L|  !(1 :ENU]el t /  * 8'Cks gm.Z6 4. ? LZi{3k,-AZe437Ek-D$ (39A9RD+0 \i   1 ?M  ) 5BRk N3$O(t  '1B?0ZO!5>CZks !  *7"Qt ! 8;7Pcz2 % B N \ ve """ # ## )# 5#A# Q# ]# h#s# ### # # ## ##W#U$Od$$$$$ &A&')';G'B'I(r*+,,!,%,,2-X6--6---.$/.)T.d~..n/;001m722T13m3,3!4 04 Q4\4x4S5;Y555 5;5O6(W6>66,657$87]7,w7>7,7/8@8\8x89&9&9&9!:7:'R:z:+:<:+:*;N?;;%'<MM<?<C<2=R=n=7====?? .?A:?^|?^?F:@Y@v@MRAAAJA-B>B/MB3}BB2BBC C',CQTCC#CC D(D7D/SD7DDD8D*ELDEvE0F9FKF0fFF:FAF2GMG,jG'GGGGf:Eo0 j>~Tg%GR$4*_Fvx5h#sDeq[ w Pd]W<` /"Q{ic8Vla1'L(.@y 9ukr,zN}pXtJMn)+7B=6I^- H;2U3\mS&?ZYbKA|!OC Settings1 day1 hour1 minute1 month1 week10 hours12 hours15 minutes18 hours2 days2 hours2 weeks3 days3 weeks30 minutes4 days5 days5 hours5 minutes6 daysAbove video/thumbnailAdd %s to preferred %s, and configure it there.Aspect ratioAutoplay video or playlistBelow video/thumbnailCache TimeoutCache feedCarefully read
%2$s before you contact us. If that does not help, get JSON file and send it to support forum along with other details noted in this article.ChannelChannel (User Uploads)Channel IDChannel page URLChoose how to embed video blockConfigure defaults for link to channel below %s block used as fallback options in widget or shortcodes.Configure defaults of content around and over videos for %s used as fallback options in widget or shortcodes.Configure general defaults for %1$s used as fallback options in widget or shortcodes. To get %2$s and %3$s visit %5$s.Configure video specific defaults for %s used as fallback options in widget or shortcodes.ContentContent LayoutContent TweaksCustom CSS ClassCustom IDDefault Playlist IDDefine caching timeout for YouTube feeds, in secondsDescription lengthDisable LightboxDo not cacheDo not chacheDoes not work?Embedded PlaylistEnable ResponsiveEnable this option to display description for videoEnable this option to hide informations about video before play start (video title and uploader in overlay)Enable this option to hide playback controlsEnable this option to hide related videos after finished playbackEnable this option to hide video annotations (custom text set by uploader over video during playback)Enable this option to mute video when start autoplayEnable this option to protect your visitors privacyEnter custom class for YTC block, if you wish to target block stylingEnter default playlist ID (not playlist name)Enter length for video description in characters (0 for full length)FAQFavouritesFetchGeneralGeneral SettingsGet random videos of all fetched from channel or playlistGet your %1$s and %2$s from here.Google Developers ConsoleHTML5 (iframe)HTML5 (iframe) AsynchronousHelpHide Player ControlsHide YT Logo (does not work for all videos)Hide YT logoHide annotations from videoHide linkHide player controlsHide related videosHide thumbnail tooltipHide titleHide video annotationsHide video infoHow to use YouTube ChannelHow to use shortcodeInitial WidthInitial widthInsert shortcode %s to your page or text widget, and even modify default settings by shortcode parameters listed in section below.Learn more hereLegacy UsernameLegacy YouTube UsernameLegacy username pageLight ThemeLiked VideoLiked VideosLink to ChannelLink to Channel page URLLink to Legacy username pageLink to Vanity customized URLLink to...Mute video on autoplayNumber of videos that will be used for random pick (min 2, max 50, default 25)Number of videos to displayOops, something went wrong.Open link in new window (JavaScript)Open link in new window (target="blank")Open link in same windowOpen link in...OptionalPlay inline on iOSPlaylistPlaylist IDPlease note, you can omit all options listed above, and then will be used plugin defaults customized on tabs %1$s, %2$s, %3$s and %4$s.RequiredResource to useResource:Select aspect ratio for displayed videoSelect should we and where display title of videoServe YouTube videos from channel or playlist right to widget areaSet default title for linkSet default width for displayed video, in pixelsSet number of characters to cut down video description to (0 means full length)Set video width in pixelsSet where link will be openedSet where link will lead visitorsSettingsShowShow video descriptionShow video titleSupportText for Visit channel linkThumbnailTitle for widgetToolsUse Enhanced privacyUse light theme (default is dark)Vanity URLVanity custom URLVanity/Custom IDVideoVideo SettingsVideo TweaksVisit our YouTube channelWatch video %1$s published on %2$sWhat to display?What to show?What to use as resource for feedsWidget TitleYou can insert YouTube Channel in couple different ways.You do not have sufficient permissions to access this page.YouTube Account OverviewYouTube Channel IDYouTube Channel WidgetYouTube Data API KeyYouTube Vanity NameYouTube Vanity/Custom ID from URL (part after /c/)Your YouTube legacy usernamedefaultin new window/tabnew window (JavaScript)new window (target="_blank")same windowsupport forumvideo(s)Project-Id-Version: YouTube Channel Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/youtube-channel PO-Revision-Date: Last-Translator: Aleksandar Urošević Language-Team: Aleksandar Urosevic Language: sr_RS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Poedit-KeywordsList: __;_e X-Poedit-SourceCharset: UTF-8 X-Generator: Poedit 2.4 X-Poedit-Basepath: .. X-Poedit-SearchPath-0: languages X-Poedit-SearchPath-1: . поставке1 дан1 сат1 минут1 месец1 недеља10 сати12 сати15 минута18 сати2 дана2 сата2 недеље3 дана3 недеље30 минута4 дана5 дана5 сати5 минута6 данаИзнад видеаДодајте %s у жељену %s, и подесите опције у виџету.РазмераАутоматски репродукуј видео или плеј листуИспод видеаТрајање кешаКеширај доводПажљиво прочитајте %2$s пре него што нас контирате. Ако то не помогне, преузмите JSON датотеку и пошаљите је на форум за подршку заједно са осталим подацима наведеним у овом чланку.КаналКанал (Кориснички отпремљени видеи)ИД каналаСтраница каналаОдаберите како да се угради блокПоставите подразумевана подешавања за везу ка каналу на дну %s блока. Ове поставке ће бити употребљене као подразумеване вредности приликом прављења новог виџета или шорткода.Поставите подразумевана подешавања за садржај који окружује видео за %s. Ове поставке ће бити употребљене као подразумеване вредности приликом прављења новог виџета или шорткода.Поставите подразумевана подешавања за опште поставке за %1$s које ће бити употребљене као почетне вредности приликом прављења новог виџета или шорткода. Да сазнате %2$s и %3$s посетите %5$s.Поставите подразумевана подешавања специфична за видео које ће бити искоришћене од стране %s приликом прављења новог виџета или шорткода.СадржајСадржајПоставке садржајаПрилагођена CSS класаПрилагођени ИДИД подразумеване плејлистеОдредите трајање кеша Јутјуб довода у секундамаДужина описаОнемогући искачући прозорчићНемој да кеширашБез кеширањаНешто не ради?Уграђена плеј листаОмогући респонзивностОмогућите ову опцију да би приказали опис видео записаОмогућите ову опцију да би сакрили информације о видео запису пре него што започен репродукција (наслов видео записа и аутора)Омогућите ову опцију да би сакрили контроле за репродукцијуОмогућите ову опцију да би сакрили релевантне видео записе након завршетка репродукцијеОмогућите ову опцију да би сакрили видео прибелешке (текст постављен преко слике видеа током репродукције)Омогућите ову опцију да би искључити звук када започне аутоматска репродукцијаОмогућите ову опцију да би заштитили приватност посетилацаУнесите прилагођену класу за YTC блок, ако желите да обликујете одређени блокУнесите подразумевани ИД плеј листе (не назив)Унесите дужину описа видео записа у знаковима (0 за цео опис)често постављана питањаОмиљениДобави из ресурсаОпштеОпште поставкеНасумично одабери видео записе из свите добијене са канала или из плеј листеОвде пронађите ваш %1$s и %2$s.Гугловој страници за програмереHTML5 (iframe)HTML5 (iframe) AsynchronousПомоћСакриј контроле за репродукцијуСакриј Јутјуб логотип (не ради за све видее)Сакриј Јутјуб логотипСакриј прибелешке са видео записаСакриј везуСакриј контроле плејераСакриј повезане видео записеСакриј опис сличицеСакриј насловСакриј видео прибелешкеСакриј информације о видео записуКако се користи YouTube ChannelКако да користите шорткодПочетна ширинаПочетна ширинаУметните шорткод %s у садржај странице или виџета, па чак и измените подразумеване поставке додатка помоћу параметара шорткода наведених у секцији испод.Сазнајте вишеСтаро корисничко имеСтаро корисничко имеСтаро корисничко имеСветла темаСвидело вам сеВидеи који се свиђајуВеза до каналаВеза ка страници каналаВеза ка старом корисничком именуВеза на прилагођено имеПовежи са...Искључи звук при аутоматској репродукцијиБрој видеа од којих ће бити одабран насумични (најмање 2, највише 50, подразумевано 25)Број видеа за приказИзвините, нешто не функционише како треба.Отвори везу у новом прозору (JavaScript)Отвори везу у новом прозору (target="blank")Отвори везу у истом прозоруОтвори везу у...Није обавезноРепродукција на страници за iOSПлеј листаИД плеј листеОбратите пажњу да можете изоставити све опције наведене изнад, и тада ће бити употребљене подразумеване опције постављене на картицама %1$s, %2$s, %3$s и %4$s.ОбавезноКористи ресурсИзвор:Одаберите размеру приказаног видеаОдаберите да ли треба и када приказати наслов видеаПриказ видео записа са Јутјуб канала или плеј листеПоставите подразумевани текст за везуОдредите подразумевану ширину видеа у пикселимаОдредите колико ће знакова имати опис видео записа (0 за цео опис)Поставите ширину видео записа у пикселимаОдредите како ће веза бити отворенаОдредите где ће веза да одведе посетиоцаПоставкеПрикажиПрикажи опис видео записаПрикажи наслов видео записаПодршкаТекст за везу "Посети канал"СличицаНаслов за виџетАлаткеПобољшана приватностКористи светлу тему (тамна је подразумевана)Прилагођени URLПрилагођена адресаПрилагођено имеВидеоПоставке видео записаПоставке видеаПосетите наш Јутјуб каналГледај видео %1$s објављен на %2$sШта приказати?Шта приказати?Шта користити као извор доводаНаслов виџетаYouTube Channel можете да уметнете на два начина.Немате одговарајуће привилегије да би приступили овој страници.Преглед подешавања каналаИД каналавиџет YouTube ChannelЈутјуб АПИ кључ за податкеПрилагођено имеYouTube Vanity/Custom ID из везе (део иза /c/)Ваше старо корисничко име за Јутјубподразумеваноу новом прозорунови прозор (ЈаваСкрипт)нови прозор (target="_blank")исти прозорфорум за подршкувидео запис(а)PK!bnf"languages/youtube-channel-sr_RS.ponu[msgid "" msgstr "" "Project-Id-Version: YouTube Channel\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/youtube-channel\n" "POT-Creation-Date: 2015-10-15 21:56+0200\n" "PO-Revision-Date: \n" "Last-Translator: Aleksandar Urošević \n" "Language-Team: Aleksandar Urosevic \n" "Language: sr_RS\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Poedit-KeywordsList: __;_e\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Generator: Poedit 2.4\n" "X-Poedit-Basepath: ..\n" "X-Poedit-SearchPath-0: languages\n" "X-Poedit-SearchPath-1: .\n" #: inc/settings-template.php:6 msgid " Settings" msgstr " поставке" #: inc/settings-template.php:12 inc/settings-usage-shortcode.php:104 #: inc/settings.php:38 msgid "General" msgstr "Опште" #: inc/settings-template.php:13 inc/settings-usage-shortcode.php:105 msgid "Video" msgstr "Видео" #: inc/settings-template.php:14 inc/settings-usage-shortcode.php:106 msgid "Content" msgstr "Садржај" #: inc/settings-template.php:15 inc/settings-usage-shortcode.php:15 #: inc/settings-usage-shortcode.php:107 inc/settings.php:653 inc/widget.php:217 msgid "Link to Channel" msgstr "Веза до канала" #: inc/settings-template.php:16 msgid "Tools" msgstr "Алатке" #: inc/settings-template.php:17 msgid "Help" msgstr "Помоћ" #: inc/settings-template.php:18 youtube-channel.php:208 msgid "Support" msgstr "Подршка" #: inc/settings-usage-shortcode.php:1 msgid "How to use shortcode" msgstr "Како да користите шорткод" #: inc/settings-usage-shortcode.php:5 #, php-format msgid "" "You can use shortcode %s with options listed below (all options are optional " "if you have set defaults in global plugin settings)." msgstr "" #: inc/settings-usage-shortcode.php:12 youtube-channel.php:327 msgid "General Settings" msgstr "Опште поставке" #: inc/settings-usage-shortcode.php:13 inc/widget.php:163 msgid "Video Settings" msgstr "Поставке видео записа" #: inc/settings-usage-shortcode.php:14 inc/widget.php:193 msgid "Content Layout" msgstr "Садржај" #: inc/settings-usage-shortcode.php:101 #, php-format msgid "" "Please note, you can omit all options listed above, and then will be used " "plugin defaults customized on tabs %1$s, %2$s, %3$s and %4$s." msgstr "" "Обратите пажњу да можете изоставити све опције наведене изнад, и тада ће " "бити употребљене подразумеване опције постављене на картицама %1$s, %2$s, " "%3$s и %4$s." #: inc/settings-usage-shortcode.php:112 #, php-format msgid "" "Important note: %s blocks inserted through widget have their own settings." msgstr "" #: inc/settings-usage-shortcode.php:115 inc/settings.php:311 #: inc/settings.php:730 inc/settings.php:731 inc/settings.php:758 #: inc/settings.php:772 inc/settings.php:782 inc/settings.php:792 #: inc/widget.php:11 msgid "YouTube Channel" msgstr "" #: inc/settings-usage.php:1 msgid "How to use YouTube Channel" msgstr "Како се користи YouTube Channel" #: inc/settings-usage.php:2 msgid "You can insert YouTube Channel in couple different ways." msgstr "YouTube Channel можете да уметнете на два начина." #: inc/settings-usage.php:7 #, php-format msgid "Add %s to preferred %s, and configure it there." msgstr "Додајте %s у жељену %s, и подесите опције у виџету." #: inc/settings-usage.php:10 msgid "YouTube Channel Widget" msgstr "виџет YouTube Channel" #: inc/settings-usage.php:13 msgid "Widget Area" msgstr "" #: inc/settings-usage.php:19 #, php-format msgid "" "Insert shortcode %s to your page or text widget, and even modify default " "settings by shortcode parameters listed in section below." msgstr "" "Уметните шорткод %s у садржај странице или виџета, па чак и измените " "подразумеване поставке додатка помоћу параметара шорткода наведених у " "секцији испод." #: inc/settings.php:46 youtube-channel.php:322 msgid "YouTube Data API Key" msgstr "Јутјуб АПИ кључ за податке" #: inc/settings.php:54 inc/settings.php:87 msgid "Required" msgstr "Обавезно" #: inc/settings.php:58 #, php-format msgid "" "Your YouTube Data API Key (get it from " "%2$s)" msgstr "" #: inc/settings.php:69 youtube-channel.php:324 msgid "Google Developers Console" msgstr "Гугловој страници за програмере" #: inc/settings.php:79 msgid "YouTube Channel ID" msgstr "ИД канала" #: inc/settings.php:91 #, php-format msgid "" "Your YouTube Channel ID (get it from " "%2$s)" msgstr "" #: inc/settings.php:102 inc/settings.php:136 inc/settings.php:762 msgid "YouTube Account Overview" msgstr "Преглед подешавања канала" #: inc/settings.php:112 msgid "YouTube Vanity Name" msgstr "Прилагођено име" #: inc/settings.php:120 inc/settings.php:154 inc/settings.php:172 msgid "Optional" msgstr "Није обавезно" #: inc/settings.php:124 #, php-format msgid "" "Your YouTube Custom Name (get only part after %1$s instead whole URL from %3$s)" msgstr "" #: inc/settings.php:146 msgid "Legacy YouTube Username" msgstr "Старо корисничко име" #: inc/settings.php:155 msgid "Your YouTube legacy username" msgstr "Ваше старо корисничко име за Јутјуб" #: inc/settings.php:164 msgid "Default Playlist ID" msgstr "ИД подразумеване плејлисте" #: inc/settings.php:173 msgid "Enter default playlist ID (not playlist name)" msgstr "Унесите подразумевани ИД плеј листе (не назив)" #: inc/settings.php:182 inc/widget.php:134 msgid "Resource to use" msgstr "Користи ресурс" #: inc/settings.php:188 msgid "Resource:" msgstr "Извор:" #: inc/settings.php:189 msgid "What to use as resource for feeds" msgstr "Шта користити као извор довода" #: inc/settings.php:193 msgid "Channel" msgstr "Канал" #: inc/settings.php:194 inc/widget.php:137 msgid "Favourites" msgstr "Омиљени" #: inc/settings.php:195 msgid "Liked Video" msgstr "Свидело вам се" #: inc/settings.php:196 inc/widget.php:139 msgid "Playlist" msgstr "Плеј листа" #: inc/settings.php:203 msgid "Cache Timeout" msgstr "Трајање кеша" #: inc/settings.php:209 msgid "Define caching timeout for YouTube feeds, in seconds" msgstr "Одредите трајање кеша Јутјуб довода у секундама" #: inc/settings.php:213 msgid "Do not chache" msgstr "Без кеширања" #: inc/settings.php:214 youtube-channel.php:1271 msgid "1 minute" msgstr "1 минут" #: inc/settings.php:215 youtube-channel.php:1272 msgid "5 minutes" msgstr "5 минута" #: inc/settings.php:216 youtube-channel.php:1273 msgid "15 minutes" msgstr "15 минута" #: inc/settings.php:217 youtube-channel.php:1274 msgid "30 minutes" msgstr "30 минута" #: inc/settings.php:218 youtube-channel.php:1277 msgid "1 hour" msgstr "1 сат" #: inc/settings.php:219 youtube-channel.php:1278 msgid "2 hours" msgstr "2 сата" #: inc/settings.php:220 youtube-channel.php:1279 msgid "5 hours" msgstr "5 сати" #: inc/settings.php:221 youtube-channel.php:1280 msgid "10 hours" msgstr "10 сати" #: inc/settings.php:222 youtube-channel.php:1281 msgid "12 hours" msgstr "12 сати" #: inc/settings.php:223 youtube-channel.php:1282 msgid "18 hours" msgstr "18 сати" #: inc/settings.php:224 youtube-channel.php:1285 msgid "1 day" msgstr "1 дан" #: inc/settings.php:225 youtube-channel.php:1286 msgid "2 days" msgstr "2 дана" #: inc/settings.php:226 youtube-channel.php:1287 msgid "3 days" msgstr "3 дана" #: inc/settings.php:227 youtube-channel.php:1288 msgid "4 days" msgstr "4 дана" #: inc/settings.php:228 youtube-channel.php:1289 msgid "5 days" msgstr "5 дана" #: inc/settings.php:229 youtube-channel.php:1290 msgid "6 days" msgstr "6 дана" #: inc/settings.php:230 youtube-channel.php:1293 msgid "1 week" msgstr "1 недеља" #: inc/settings.php:231 youtube-channel.php:1294 msgid "2 weeks" msgstr "2 недеље" #: inc/settings.php:232 youtube-channel.php:1295 msgid "3 weeks" msgstr "3 недеље" #: inc/settings.php:233 youtube-channel.php:1296 msgid "1 month" msgstr "1 месец" #: inc/settings.php:240 inc/widget.php:152 msgid "Fetch" msgstr "Добави из ресурса" #: inc/settings.php:246 inc/widget.php:152 msgid "" "Number of videos that will be used for random pick (min 2, max 50, default " "25)" msgstr "" "Број видеа од којих ће бити одабран насумични (најмање 2, највише 50, " "подразумевано 25)" #: inc/settings.php:257 inc/widget.php:155 msgid "Show" msgstr "Прикажи" #: inc/settings.php:263 inc/widget.php:155 msgid "Number of videos to display" msgstr "Број видеа за приказ" #: inc/settings.php:274 msgid "Use Enhanced privacy" msgstr "Побољшана приватност" #: inc/settings.php:283 #, php-format msgid "" "Enable this option to protect your visitors privacy. %2$s" msgstr "" #: inc/settings.php:294 inc/settings.php:427 msgid "Learn more here" msgstr "Сазнајте више" #: inc/settings.php:303 msgid "Enable TinyMCE button" msgstr "" #: inc/settings.php:310 #, php-format msgid "" "Disable this option to hide %s button from TinyMCE toolbar on post and page " "editor." msgstr "" #: inc/settings.php:328 msgid "Video Tweaks" msgstr "Поставке видеа" #: inc/settings.php:336 msgid "Initial Width" msgstr "Почетна ширина" #: inc/settings.php:342 msgid "Set default width for displayed video, in pixels" msgstr "Одредите подразумевану ширину видеа у пикселима" #: inc/settings.php:353 inc/widget.php:164 msgid "Aspect ratio" msgstr "Размера" #: inc/settings.php:359 msgid "Select aspect ratio for displayed video" msgstr "Одаберите размеру приказаног видеа" #: inc/settings.php:371 msgid "What to show?" msgstr "Шта приказати?" #: inc/settings.php:377 msgid "Choose how to embed video block" msgstr "Одаберите како да се угради блок" #: inc/settings.php:381 inc/widget.php:179 msgid "Thumbnail" msgstr "Сличица" #: inc/settings.php:382 inc/widget.php:180 msgid "HTML5 (iframe)" msgstr "HTML5 (iframe)" #: inc/settings.php:383 inc/widget.php:181 msgid "HTML5 (iframe) Asynchronous" msgstr "HTML5 (iframe) Asynchronous" #: inc/settings.php:384 inc/widget.php:182 msgid "Embedded Playlist" msgstr "Уграђена плеј листа" #: inc/settings.php:392 msgid "Enable Responsive" msgstr "Омогући респонзивност" #: inc/settings.php:398 msgid "" "Enable this option to make YTC videos and thumbnails responsive by default. " "Please note, this option will set videos and thumbnail to full width " "relative to parent container, and disable more than one video per row." msgstr "" #: inc/settings.php:407 msgid "Play inline on iOS" msgstr "Репродукција на страници за iOS" #: inc/settings.php:416 #, php-format msgid "" "Enable this option to override fullscreen playback on iOS, and force inline " "playback on page and in lightbox. %2$s" msgstr "" #: inc/settings.php:436 msgid "Disable Lightbox" msgstr "Онемогући искачући прозорчић" #: inc/settings.php:442 msgid "" "Enable this option to disable built-in lightbox for thumbnails (in case that " "you have youtube links lightbox trigger in theme or other plugin)." msgstr "" #: inc/settings.php:450 msgid "Enable Full Screen" msgstr "" #: inc/settings.php:456 msgid "" "Enable this option to make available Full Screen button for embedded " "playlists." msgstr "" #: inc/settings.php:465 msgid "Light Theme" msgstr "Светла тема" #: inc/settings.php:471 msgid "" "Enable this option to use light theme for playback controls instead dark." msgstr "" #: inc/settings.php:479 msgid "Hide Player Controls" msgstr "Сакриј контроле за репродукцију" #: inc/settings.php:485 msgid "Enable this option to hide playback controls" msgstr "Омогућите ову опцију да би сакрили контроле за репродукцију" #: inc/settings.php:494 inc/widget.php:187 msgid "Autoplay video or playlist" msgstr "Аутоматски репродукуј видео или плеј листу" #: inc/settings.php:500 msgid "" "Enable this option to start video playback right after block is rendered" msgstr "" #: inc/settings.php:508 inc/widget.php:188 msgid "Mute video on autoplay" msgstr "Искључи звук при аутоматској репродукцији" #: inc/settings.php:514 msgid "Enable this option to mute video when start autoplay" msgstr "" "Омогућите ову опцију да би искључити звук када започне аутоматска " "репродукција" #: inc/settings.php:522 inc/widget.php:189 msgid "Hide related videos" msgstr "Сакриј повезане видео записе" #: inc/settings.php:528 msgid "Enable this option to hide related videos after finished playback" msgstr "" "Омогућите ову опцију да би сакрили релевантне видео записе након завршетка " "репродукције" #: inc/settings.php:536 msgid "Hide YT logo" msgstr "Сакриј Јутјуб логотип" #: inc/settings.php:542 msgid "" "Enable this option to hide YouTube logo from playback control bar. Does not " "work for all videos." msgstr "" #: inc/settings.php:550 msgid "Hide video annotations" msgstr "Сакриј видео прибелешке" #: inc/settings.php:556 msgid "" "Enable this option to hide video annotations (custom text set by uploader " "over video during playback)" msgstr "" "Омогућите ову опцију да би сакрили видео прибелешке (текст постављен преко " "слике видеа током репродукције)" #: inc/settings.php:564 inc/widget.php:213 msgid "Hide video info" msgstr "Сакриј информације о видео запису" #: inc/settings.php:570 msgid "" "Enable this option to hide informations about video before play start (video " "title and uploader in overlay)" msgstr "" "Омогућите ову опцију да би сакрили информације о видео запису пре него што " "започен репродукција (наслов видео записа и аутора)" #: inc/settings.php:586 msgid "Content Tweaks" msgstr "Поставке садржаја" #: inc/settings.php:594 inc/widget.php:196 msgid "Show video title" msgstr "Прикажи наслов видео записа" #: inc/settings.php:600 msgid "Select should we and where display title of video" msgstr "Одаберите да ли треба и када приказати наслов видеа" #: inc/settings.php:604 inc/widget.php:199 msgid "Hide title" msgstr "Сакриј наслов" #: inc/settings.php:605 inc/widget.php:200 msgid "Above video/thumbnail" msgstr "Изнад видеа" #: inc/settings.php:606 inc/widget.php:201 msgid "Below video/thumbnail" msgstr "Испод видеа" #: inc/settings.php:613 inc/widget.php:204 msgid "Show video description" msgstr "Прикажи опис видео записа" #: inc/settings.php:619 msgid "Enable this option to display description for video" msgstr "Омогућите ову опцију да би приказали опис видео записа" #: inc/settings.php:627 inc/widget.php:206 msgid "Description length" msgstr "Дужина описа" #: inc/settings.php:633 msgid "Enter length for video description in characters (0 for full length)" msgstr "Унесите дужину описа видео записа у знаковима (0 за цео опис)" #: inc/settings.php:661 msgid "Link to..." msgstr "Повежи са..." #: inc/settings.php:668 msgid "Set where link will lead visitors" msgstr "Одредите где ће веза да одведе посетиоца" #: inc/settings.php:672 inc/widget.php:223 msgid "Hide link" msgstr "Сакриј везу" #: inc/settings.php:673 msgid "Vanity custom URL" msgstr "Прилагођена адреса" #: inc/settings.php:674 msgid "Channel page URL" msgstr "Страница канала" #: inc/settings.php:675 msgid "Legacy username page" msgstr "Старо корисничко име" #: inc/settings.php:682 msgid "Open link in..." msgstr "Отвори везу у..." #: inc/settings.php:689 msgid "Set where link will be opened" msgstr "Одредите како ће веза бити отворена" #: inc/settings.php:693 msgid "same window" msgstr "исти прозор" #: inc/settings.php:694 msgid "new window (JavaScript)" msgstr "нови прозор (ЈаваСкрипт)" #: inc/settings.php:695 msgid "new window (target=\"_blank\")" msgstr "нови прозор (target=\"_blank\")" #: inc/settings.php:702 msgid "Text for Visit channel link" msgstr "Текст за везу \"Посети канал\"" #: inc/settings.php:709 msgid "Set default title for link" msgstr "Поставите подразумевани текст за везу" #: inc/settings.php:748 #, php-format msgid "" "Configure general defaults for %1$s used as fallback options in widget or " "shortcodes. To get %2$s and %3$s visit " "%5$s." msgstr "" "Поставите подразумевана подешавања за опште поставке за %1$s које ће бити " "употребљене као почетне вредности приликом прављења новог виџета или " "шорткода. Да сазнате %2$s и %3$s посетите " "%5$s." #: inc/settings.php:759 inc/widget.php:108 inc/widget.php:119 msgid "Channel ID" msgstr "ИД канала" #: inc/settings.php:760 msgid "Vanity URL" msgstr "Прилагођени URL" #: inc/settings.php:771 #, php-format msgid "" "Configure video specific defaults for %s used as fallback options in widget " "or shortcodes." msgstr "" "Поставите подразумевана подешавања специфична за видео које ће бити " "искоришћене од стране %s приликом прављења новог виџета или шорткода." #: inc/settings.php:781 #, php-format msgid "" "Configure defaults of content around and over videos for %s used as fallback " "options in widget or shortcodes." msgstr "" "Поставите подразумевана подешавања за садржај који окружује видео за %s. Ове " "поставке ће бити употребљене као подразумеване вредности приликом прављења " "новог виџета или шорткода." #: inc/settings.php:791 #, php-format msgid "" "Configure defaults for link to channel below %s block used as fallback " "options in widget or shortcodes." msgstr "" "Поставите подразумевана подешавања за везу ка каналу на дну %s блока. Ове " "поставке ће бити употребљене као подразумеване вредности приликом прављења " "новог виџета или шорткода." #: inc/settings.php:968 msgid "You do not have sufficient permissions to access this page." msgstr "Немате одговарајуће привилегије да би приступили овој страници." #: inc/widget.php:14 msgid "Serve YouTube videos from channel or playlist right to widget area" msgstr "Приказ видео записа са Јутјуб канала или плеј листе" #: inc/widget.php:90 msgid "Widget Title" msgstr "Наслов виџета" #: inc/widget.php:91 msgid "Title for widget" msgstr "Наслов за виџет" #: inc/widget.php:95 msgid "Custom CSS Class" msgstr "Прилагођена CSS класа" #: inc/widget.php:96 msgid "Enter custom class for YTC block, if you wish to target block styling" msgstr "" "Унесите прилагођену класу за YTC блок, ако желите да обликујете одређени блок" #: inc/widget.php:103 #, php-format msgid "" "Get your %1$s and %2$s from here." msgstr "Овде пронађите ваш %1$s и %2$s." #: inc/widget.php:109 msgid "Custom ID" msgstr "Прилагођени ИД" #: inc/widget.php:114 msgid "Vanity/Custom ID" msgstr "Прилагођено име" #: inc/widget.php:115 msgid "YouTube Vanity/Custom ID from URL (part after /c/)" msgstr "YouTube Vanity/Custom ID из везе (део иза /c/)" #: inc/widget.php:120 msgid "" "Find Channel ID behind My Channel menu item in YouTube (ID have UC at the " "beginning)" msgstr "" #: inc/widget.php:124 msgid "Legacy Username" msgstr "Старо корисничко име" #: inc/widget.php:125 msgid "" "Legacy YouTube username located behind /user/ part of channel URL (available " "only on old YouTube accounts)" msgstr "" #: inc/widget.php:129 msgid "Playlist ID" msgstr "ИД плеј листе" #: inc/widget.php:130 msgid "Find Playlist ID in your playlists (ID have PL at the beginning)" msgstr "" #: inc/widget.php:136 msgid "Channel (User Uploads)" msgstr "Канал (Кориснички отпремљени видеи)" #: inc/widget.php:138 msgid "Liked Videos" msgstr "Видеи који се свиђају" #: inc/widget.php:144 msgid "Cache feed" msgstr "Кеширај довод" #: inc/widget.php:146 msgid "Do not cache" msgstr "Немој да кешираш" #: inc/widget.php:152 inc/widget.php:155 msgid "video(s)" msgstr "видео запис(а)" #: inc/widget.php:158 msgid "Enable this option to protect your visitors privacy" msgstr "Омогућите ову опцију да би заштитили приватност посетилаца" #: inc/widget.php:158 #, php-format msgid "Enable privacy-enhanced mode" msgstr "" #: inc/widget.php:160 msgid "Get random videos of all fetched from channel or playlist" msgstr "" "Насумично одабери видео записе из свите добијене са канала или из плеј листе" #: inc/widget.php:160 msgid "" "Show random video from resource (Have no effect if \"What to show?\" " "has been set to \"Embedded Playlist\")" msgstr "" #: inc/widget.php:169 msgid "" "Responsive video (distribute one full width item per row)" msgstr "" #: inc/widget.php:172 msgid "Initial width" msgstr "Почетна ширина" #: inc/widget.php:172 msgid "Set video width in pixels" msgstr "Поставите ширину видео записа у пикселима" #: inc/widget.php:172 msgid "default" msgstr "подразумевано" #: inc/widget.php:176 msgid "What to display?" msgstr "Шта приказати?" #: inc/widget.php:184 msgid "Hide thumbnail tooltip" msgstr "Сакриј опис сличице" #: inc/widget.php:185 msgid "Use light theme (default is dark)" msgstr "Користи светлу тему (тамна је подразумевана)" #: inc/widget.php:186 msgid "Hide player controls" msgstr "Сакриј контроле плејера" #: inc/widget.php:190 msgid "Hide YT Logo (does not work for all videos)" msgstr "Сакриј Јутјуб логотип (не ради за све видее)" #: inc/widget.php:207 msgid "" "Set number of characters to cut down video description to (0 means full " "length)" msgstr "Одредите колико ће знакова имати опис видео записа (0 за цео опис)" #: inc/widget.php:210 msgid "Hide annotations from video" msgstr "Сакриј прибелешке са видео записа" #: inc/widget.php:212 msgid "" "Enabling this option causes the player to not display information like the " "video title and uploader before the video starts playing." msgstr "" #: inc/widget.php:219 msgid "" "Default: Visit our YouTube channel. You can use placeholders %vanity%, " "%channel% and %username%." msgstr "" #: inc/widget.php:219 youtube-channel.php:1042 msgid "Visit our YouTube channel" msgstr "Посетите наш Јутјуб канал" #: inc/widget.php:224 msgid "Link to Vanity customized URL" msgstr "Веза на прилагођено име" #: inc/widget.php:225 msgid "Link to Channel page URL" msgstr "Веза ка страници канала" #: inc/widget.php:226 msgid "Link to Legacy username page" msgstr "Веза ка старом корисничком имену" #: inc/widget.php:231 msgid "Open link in same window" msgstr "Отвори везу у истом прозору" #: inc/widget.php:232 msgid "Open link in new window (JavaScript)" msgstr "Отвори везу у новом прозору (JavaScript)" #: inc/widget.php:233 msgid "Open link in new window (target=\"blank\")" msgstr "Отвори везу у новом прозору (target=\"blank\")" #: inc/widget.php:237 msgid "Does not work?" msgstr "Нешто не ради?" #: inc/widget.php:243 #, php-format msgid "" "Carefully read %2$s before you contact " "us. If that does not help, get JSON file and send it to support forum " "along with other details noted in this " "article." msgstr "" "Пажљиво прочитајте %2$s пре него што " "нас контирате. Ако то не помогне, преузмите JSON датотеку и пошаљите је на форум за подршку заједно са осталим подацима наведеним у овом чланку." #: inc/widget.php:249 msgid "FAQ" msgstr "често постављана питања" #: youtube-channel.php:185 msgid "Settings" msgstr "Поставке" #: youtube-channel.php:286 #, php-format msgid "" "

Your website running on web server with PHP version %s. Please note that " "%s requires PHP at least 5.3 or newer to work properly. Dismiss

" msgstr "" #: youtube-channel.php:299 #, php-format msgid "" "

Since %s v3.0.6 we store YouTube Data API Key in plugin settings. So, you can safely remove %s define line from " "your wp-config.php file. Dismiss

" msgstr "" #: youtube-channel.php:311 #, php-format msgid "" "

Please note, to make %1$s plugin v3+ work, generate " "%2$s in %4$s, as " "explained here, then add it to %7$s.

If you have any issue with new version of " "plugin, please ask for help on official " "%9$s.
This notice will disappear when you add missing key as " "mentioned above!

" msgstr "" #: youtube-channel.php:329 msgid "support forum" msgstr "форум за подршку" #: youtube-channel.php:338 #, php-format msgid "" "

%s since version 2.4 supports linking to channel through " "Vanity/Custom URL. Please review global and widgets settings. Dismiss" msgstr "" #: youtube-channel.php:352 #, php-format msgid "" "

%s changed shortcode parameters by removing " "only_pl and showgoto, and combining with " "parameters display and link_to respectively. " "Please check out %s and update your shortcodes. " "Dismiss" msgstr "" #: youtube-channel.php:615 #, php-format msgid "" "%s version 3+ requires YouTube DATA API Key to work. Learn more here." msgstr "" #: youtube-channel.php:789 #, php-format msgid "" "You have set to display videos from %s [resource list ID: %s], but there " "have no public videos in that resouce." msgstr "" #: youtube-channel.php:792 #, php-format msgid "" "We have empty record for this feed. Please read FAQ and if that does not help, contact support." msgstr "" #: youtube-channel.php:834 #, php-format msgid "" "Double check YouTube Data API Key on General plugin tab " "and make sure it's correct. Read Installation document." msgstr "" #: youtube-channel.php:840 #, php-format msgid "" "You have set wrong Channel ID. Fix that in General plugin settings, Widget " "and/or shortcode. Read FAQ document." msgstr "" #: youtube-channel.php:843 #, php-format msgid "" "You do not have permission to access ressource %s (it's " "maybe set to private or even does not exists!)" msgstr "" #: youtube-channel.php:964 msgid "Oops, something went wrong." msgstr "Извините, нешто не функционише како треба." #: youtube-channel.php:1045 msgid "in new window/tab" msgstr "у новом прозору" #: youtube-channel.php:1195 #, php-format msgid "Watch video %1$s published on %2$s" msgstr "Гледај видео %1$s објављен на %2$s" #~ msgid "" #~ "Your YouTube Data API Key (get it from " #~ "%s)" #~ msgstr "" #~ "Ваш АПИ кључ за Јутјуб податке (пронађите га на %s)" #~ msgid "" #~ "Your YouTube Channel ID (get it from %s)" #~ msgstr "" #~ "Ваш ИД Јутјуб канала (пронађите га на " #~ "%s)" #~ msgid "" #~ "Your YouTube Custom Name (get only part after www.youtube.com/c/ instead " #~ "whole URL from %s)" #~ msgstr "" #~ "Ваше Прилагођено име (само део иза www.youtube.com/c/ а не целу адресу са " #~ "странице %s)" #~ msgid "" #~ "Enable this option to protect your visitors privacy. %s" #~ msgstr "" #~ "Омогућите ову опцију да би заштитили приватност Ваших посетилаца. %s" #~ msgid "" #~ "Carefully read FAQ before you contact " #~ "us. If that does not help, get JSON " #~ "file and send it to support forum along with other details noted in this " #~ "article." #~ msgstr "" #~ "Пажљиво прочитајте често постављана " #~ "питања пре него што нас контактирате. Ако то не помогне, преузмите JSON датотеку и пошаљите је на форуму за подршку заједно са осталим " #~ "подацима наведеним у овом чланку." #~ msgid "" #~ "Your YouTube Data API Key (get it from Google Developers Console)" #~ msgstr "" #~ "Ваш Јутјуб АПИ кључ за податке (пронађите га у Гугловој конзоли за програмере)" #~ msgid "" #~ "Your YouTube Channel ID (get it from YouTube Account Overview)" #~ msgstr "" #~ "ИД Вашег јутјуб канала (пронађите га на YouTube Account Overview)" #~ msgid "" #~ "Your YouTube Custom Name (get only part after www.youtube.com/c/ instead " #~ "whole URL from YouTube Account Overview)" #~ msgstr "" #~ "Ваше лично прилагођено име за Јутјуб (само део иза www.youtube.com/c/ а " #~ "не цео линк, са странице YouTube Account " #~ "Overview)" #~ msgid "" #~ "Enable this option to protect your visitors privacy. Learn more here" #~ msgstr "" #~ "Омогућите ову опцију да би заштитили приватност Ваших посетилаца. Сазнајте више" #~ msgid "Aleksandar Urošević" #~ msgstr "Александар Урошевић" #~ msgid "" #~ "Enter your YouTube channel ID (channel name, not full URL to channel)" #~ msgstr "Унесите ИД Вашег Јутјуб канала (само назив канала, не целу путању)" #~ msgid "Favorites" #~ msgstr "Омиљени" #~ msgid "Embed standard playlist" #~ msgstr "Угради стандардну листу" #~ msgid "" #~ "Enable this option to embed whole playlist instead single video from " #~ "playlist when you chose playlist as resource" #~ msgstr "" #~ "Омогућите ову опцију за уградњу комплетне плејлисте када одаберете " #~ "плејлисту као ресурс" #~ msgid "Fix No items error/Respect playlist order" #~ msgstr "Поправи No items гешку (поштуј поредак плејлисте)" #~ msgid "Enable this option if you get error No Item" #~ msgstr "Омогућите ову опцију ако добијете грешку No items" #~ msgid "Show random video" #~ msgstr "Прикажи насумични видео" #~ msgid "Aspect Ratio" #~ msgstr "Размера" #~ msgid "16:9" #~ msgstr "16:9" #~ msgid "16:10" #~ msgstr "16:10" #~ msgid "4:3" #~ msgstr "4:3" #~ msgid "Video Width" #~ msgstr "Ширина видеа" #~ msgid "Set what will be shown by default" #~ msgstr "Одредите шта ће подразумевано бити приказано" #~ msgid "Flash (object)" #~ msgstr "Флеш објекат" #~ msgid "HTML5 (iframe) Async" #~ msgstr "Асинхрони HTML5 (iframe)" #~ msgid "Chromeless" #~ msgstr "Chromeless" #~ msgid "Use light theme" #~ msgstr "Користи светлу тему" #~ msgid "" #~ "Enable this option to use light theme for playback controls instead dark" #~ msgstr "" #~ "Омогућите ову опцију да би се користила светла тема у Јутрјуб плејеру" #~ msgid "Fix video height" #~ msgstr "Поправи висину видеа" #~ msgid "" #~ "Enable this option to fix video height when playback controls are not " #~ "hidden" #~ msgstr "" #~ "Омогућите ову опцију да би поправили висину када контроле за репродукцију " #~ "нису сакривене" #~ msgid "Enable this option to display title of video" #~ msgstr "Омогућите ову опцију да би приказали наслов видео записа" #~ msgid "Et cetera string" #~ msgstr "Знак за скраћени текст" #~ msgid "Indicator for shortened video description (default: …)" #~ msgstr "Индикатор за скраћени опис видео записа (подразумевано: ...)" #~ msgid "..." #~ msgstr "..." #~ msgid "Visit YouTube Channel text" #~ msgstr "Текст за везу до канала" #~ msgid "Use placeholder %channel% to insert channel name" #~ msgstr "Користи резервисану ниску %channel% да уметнете назив канала" #~ msgid "Visit my channel %channel%" #~ msgstr "Посетите мој канал %channel%" #~ msgid "Show link to channel" #~ msgstr "Прикажи везу до канала" #~ msgid "" #~ "Enable this option to show customized link to channel at the bottom of " #~ "YTC block" #~ msgstr "Омогућите ову опцију да би приказали веу до канала на дну YTC блока" #~ msgid "Open YouTube channel page" #~ msgstr "Отвори страницу Јутрјуб канала" #~ msgid "in same window" #~ msgstr "у истом прозору" #~ msgid "in new window (JavaScript)" #~ msgstr "у новом прозору (јаваскрипт)" #~ msgid "in new window (Target)" #~ msgstr "у новом прозору (циљано)" #~ msgid "Link to channel instead to user" #~ msgstr "Усмери као каналу уместо кориснику" #~ msgid "" #~ "Enable this option if link to your channel have /channel/ " #~ "instead /user/ part in URL" #~ msgstr "" #~ "Омогућите ову опцију ако веза до Вашег канала садржи /channel/ уместо /user/" #~ msgid "Usage" #~ msgstr "Употреба" #~ msgid " Options" #~ msgstr "Опције" #~ msgid "" #~ "

Easy embed playable videos from YouTube.

Here you can set " #~ "default options that will be used as defaults for new widgets, and for " #~ "shortcode.

" #~ msgstr "" #~ "

Лако уградите видео запис са Јутјуба.

Овде можете поставити " #~ "подразумеване опције које ће бити коришћене приликом прављења новог " #~ "виџета или у шорткоду.

" #~ msgid "" #~ "Enable this option to protect your visitors privacy." #~ msgstr "" #~ "Омогућите ову опцију како би заштитили приватност посетилаца." #~ msgid "YouTube Channel name (not URL to channel)" #~ msgstr "Назив Јутјуб канала (не адреса до канала)" #~ msgid "YouTube Playlist ID (not playlist name)" #~ msgstr "ИД плеј листе (не назив)" #~ msgid "" #~ "Enable this option to embed YouTube playlist widget instead single video " #~ "from playlist" #~ msgstr "" #~ "Омогућите ову опцију да би уградили плеј листу са Јутјуба уместо " #~ "појдеиначног видеа из плеј листе" #~ msgid "Use Enhanced Privacy" #~ msgstr "Користи Унапређену приватност" #~ msgid "Width" #~ msgstr "Ширина" #~ msgid "Fix height taken by controls" #~ msgstr "Поправи висину коју заузимају контроле" #~ msgid "Default: &hellip;" #~ msgstr "Подразумевано: &hellip;" #~ msgid "" #~ "Default: Visit channel %channel%. Use placeholder %channel% to insert " #~ "channel name." #~ msgstr "" #~ "Подразумевано: Посетите канал %channel%. Користите резервисану ниску " #~ "%channel% за уметање назива канала." #~ msgid "Debug YTC" #~ msgstr "Одклањање неправилности" #~ msgid "Enable debugging" #~ msgstr "Омогући одклањање неправилности" #~ msgid "" #~ "Insert debug data to support forum." #~ "
Please do not remove channel and playlist ID`s. If you are " #~ "concerned about privacy, send this debug log to email %s" #~ msgstr "" #~ "Пошаљите податке за отклањање неисправности на форум за подршку.
Молим Вас да не укљањате ИД " #~ "канала и плеј листе. Ако сте забринути за своју приватност, пошаљите " #~ "запис за озклањање неисправности електронском поштом на %s" #~ msgid "updated to version" #~ msgstr "ажуриран на верзију" #~ msgid "I did this already, dismiss notice!" #~ msgstr "Већ сам уради, исклјучи упозорење" #~ msgid "" #~ "To configure global %s options, you need to install and " #~ "activate %s." #~ msgstr "" #~ "За подешавање општих поставки %s, треба да додате и " #~ "активирате додатак %s." #~ msgid "No items" #~ msgstr "Нема видеа" #~ msgid "Check here why" #~ msgstr "проверите овде зашто" #~ msgid "Visit channel %1$s" #~ msgstr "Посетите канал %1$s" #~ msgid "Resource to use:" #~ msgstr "Користи ресурс" #~ msgid "Fetch:" #~ msgstr "Добави" #~ msgid "Show:" #~ msgstr "Прикажи" PK!Z؅"languages/youtube-channel-es_ES.monu[Z  " *5<C KU\ r   4 7 J 3X k , A% eg 4 3 H6 E - D 8 > 9F         N _ {  ' B 0 O< !<B"Q t! ;6Tfo'-6? HS\d lv ~  / #/ 5 BLa"{N ;vJ?OhQPA PMPS\CY #>bc*G^x8V:XR #- @M+g!$ ;Z kw6 I% THO<8QS3(*U X,N+9RV#-4E!7 'Z60&YDLW: )C/1P>=J2$@.M"5KG?;BAF1 day1 hour1 minute1 month1 week10 hours12 hours15 minutes18 hours2 days2 hours2 weeks3 days3 weeks30 minutes4 days5 days5 hours5 minutes6 daysAleksandar UroševićAspect ratioAutoplay video or playlistCache TimeoutCache feedChannelChannel IDContentContent LayoutCustom CSS ClassDefault Playlist IDDefine caching timeout for YouTube feeds, in secondsDescription lengthDo not chacheEnable this option to display description for videoEnable this option to hide informations about video before play start (video title and uploader in overlay)Enable this option to hide playback controlsEnable this option to hide related videos after finished playbackEnable this option to hide video annotations (custom text set by uploader over video during playback)Enable this option to mute video when start autoplayEnable this option to protect your visitors privacyEnable this option to start video playback right after block is renderedEnter custom class for YTC block, if you wish to target block stylingEnter default playlist ID (not playlist name)Enter length for video description in characters (0 for full length)FetchGeneralGet random videos of all fetched from channel or playlistHTML5 (iframe)HelpHide annotations from videoHide player controlsHide related videosHide video infoLink to ChannelMute video on autoplayNumber of videos that will be used for random pick (min 2, max 50, default 25)Number of videos to displayPlaylistPlaylist IDResource to useSelect aspect ratio for displayed videoServe YouTube videos from channel or playlist right to widget areaSet default width for displayed video, in pixelsSet number of characters to cut down video description to (0 means full length)Set video width in pixelsSettingsShowShow video descriptionShow video titleSupportThumbnailTitle for widgetToolsUse Enhanced privacyUse light theme (default is dark)VideoVideo SettingsWatch video %1$s published on %2$sWhat to show?What to use as resource for feedsWidget TitleYou do not have sufficient permissions to access this page.YouTube Channel IDdefaulthttp://urosevic.net/http://urosevic.net/wordpress/plugins/youtube-channel/in new window/tabvideo(s)Project-Id-Version: YouTube Channel v2.2.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2015-06-19 21:20+0100 PO-Revision-Date: 2015-06-19 21:20+0100 Last-Translator: Aleksandar Urošević Language-Team: Digital03.net Language: es_ES MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Generator: Poedit 1.8.1 X-Poedit-SourceCharset: UTF-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2 X-Poedit-Basepath: . X-Textdomain-Support: yes X-Poedit-SearchPath-0: . 1 día1 hora1 minuto1 mes1 semana10 horas12 horas15 minutos18 horas2 días2 horas2 semanas3 días3 semanas30 minutos4 días5 días5 horas5 minutos6 díasAleksandar UroševićRatio de aspectoAuto reproducir vídeo o lista de reproducciónTimeout cachéCaché feedCanalID del canalContenidoDiseño de contenidoClases CSS personalizadasLista de reproducción por defectoDefine el tiempo para descartar la caché de los feeds de Youtube, en segundosTamaño descripciónNo chachearActiva esta opción para mostrar la descripción del vídeoActiva esta opción para ocultar la información sobre el vídeo antes de reproducirlo (título del vídeo y uploader)Activa esta opción para ocultar los controles de reproducciónActiva esta opción para ocultar los vídeos relacionados tras la reproducciónActiva esta opción para ocultar las anotaciones del vídeo (texto personalizado creado por el uploader)Activa esta opción para desactivar el sonido al comenzar el vídeo con autoplayActiva esta opción para proteger la privacidad de tus visitantesActiva esta opción para auto iniciar la reproducción tras renderizar el bloqueIntroduce las clases personalizadas para el bloque YTC si quieres personalizarloIntroduce la ID de la lista de reproducción por defecto (no el nombre de la lista)Introduce el tamaño de la descripción del vídeo en caracteres (0 para mostrarlo completo)ObtenerGeneralElige vídeos aleatoriamente de todos los obtenidos del canal o la lista de reproducciónHTML5 (iframe)AyudaOcultar anotaciones del vídeoEsconder controles de reproducciónOcultar vídeos relacionadosEsconder info del vídeoEnlace al canalDesactivar sonido en autoplayNúmero de vídeos que se usarán para coger aleatoriamente (mínimo 2, máximo 50, por defecto 25)Número de vídeos a mostrarLista de reproducciónID lista de reproducciónRecurso a usarSelecciona relación de aspecto para mostrar los vídeosMuestra vídeos de Youtube de un canal o lista de reproducción en un área de widgetsFijar anchura por defecto para mostrar vídeos, en pixelesNúmero de caracteres para cortar la descripción del vídeo (0 para mostrarla completa)Anchura del vídeo en pixelesConfiguraciónMostrarMostrar descripción del vídeoMostrar título del vídeoSoporteMiniaturaTítulo del widgetHerramientasUsar Privacidad ExtendidaUsa plantilla clara (por defecto es oscura)VídeoConfiguración del vídeoVer vídeo %1$s publicado en %2$s¿Qué mostrar?Qué usar como recursos de los feedsTítulo del widgetNo tienes suficientes permisos para acceder a esta página.ID Canal Youtubepor defectohttp://urosevic.net/http://urosevic.net/wordpress/plugins/youtube-channel/en nueva ventana/pestañavídeo(s)PK!Llii readme.txtnu[PK!..ii8jchangelog_legacy.txtnu[PK!\sFyoutube-channel.phpnu[PK!cf-a a "Aassets/css/youtube-channel.min.cssnu[PK!+@  assets/css/admin.scssnu[PK!xb7))Jassets/css/admin.min.cssnu[PK!2Mttassets/css/admin.min.css.mapnu[PK!W {assets/css/youtube-channel.scssnu[PK!/O&z assets/css/youtube-channel.min.css.mapnu[PK!˥assets/img/yt_play.pngnu[PK!^P::sassets/js/youtube-channel.jsnu[PK!q//assets/js/tinymce/plugin.jsnu[PK!ƤVV Kassets/js/tinymce/plugin.min.jsnu[PK!K]]gassets/js/admin.jsnu[PK!qfG## Pnassets/js/youtube-channel.min.jsnu[PK!>oassets/js/admin.min.jsnu[PK!Ud8 sassets/lib/bigger-picture/css/bigger-picture.min.css.mapnu[PK!lȕ4)yassets/lib/bigger-picture/css/bigger-picture.min.cssnu[PK!RR!)assets/lib/bigger-picture/LICENSEnu[PK!9YkNN/̎assets/lib/bigger-picture/bigger-picture.min.jsnu[PK! j2&assets/lib/bigger-picture/scss/bigger-picture.scssnu[PK!|wfKK0LICENSEnu[PK!oW {update.phpnu[PK!+B66minc/helper.phpnu[PK!gg0classes/class-wpau-my-youtube-channel-widget.phpnu[PK!4饯2classes/class-wpau-my-youtube-channel-settings.phpnu[PK!I)classes/class-wpau-my-youtube-channel.phpnu[PK!Ka7$classes/class-wpau-my-youtube-channel-image-handler.phpnu[PK!әs 0feature-request.txtnu[PK!cJ!!&templates/settings-usage-shortcode.phpnu[PK!lptemplates/settings-tools.phpnu[PK!L_mtemplates/settings-usage.phpnu[PK!SVDDtemplates/settings.phpnu[PK!Py`y`"Blanguages/youtube-channel-cs_CZ.ponu[PK!++" ^languages/youtube-channel-da_DK.ponu[PK!VI"languages/youtube-channel-cs_CZ.monu[PK!L"languages/youtube-channel-da_DK.monu[PK!Ԛ_FUFU#languages/youtube-channel-xx_XX.potnu[PK!2"9Xlanguages/youtube-channel-es_ES.ponu[PK!HH"languages/youtube-channel-sr_RS.monu[PK!bnf"*languages/youtube-channel-sr_RS.ponu[PK!Z؅"languages/youtube-channel-es_ES.monu[PK**)