/**
  * Registers all the styles and scripts for the front end.
  *
  * @param array $opts The options.
  *
  * @return void
  */
 public final function printWidgetHtml($opts)
 {
     extract($opts);
     $context = tubepress_impl_patterns_sl_ServiceLocator::getExecutionContext();
     $parser = tubepress_impl_patterns_sl_ServiceLocator::getShortcodeParser();
     $gallery = tubepress_impl_patterns_sl_ServiceLocator::getShortcodeHtmlGenerator();
     /* default widget options */
     $defaultWidgetOptions = array(tubepress_api_const_options_names_Thumbs::RESULTS_PER_PAGE => 3, tubepress_api_const_options_names_Meta::VIEWS => false, tubepress_api_const_options_names_Meta::DESCRIPTION => true, tubepress_api_const_options_names_Meta::DESC_LIMIT => 50, tubepress_api_const_options_names_Embedded::PLAYER_LOCATION => 'popup', tubepress_api_const_options_names_Thumbs::THUMB_HEIGHT => 105, tubepress_api_const_options_names_Thumbs::THUMB_WIDTH => 135, tubepress_api_const_options_names_Thumbs::PAGINATE_ABOVE => false, tubepress_api_const_options_names_Thumbs::PAGINATE_BELOW => false, tubepress_api_const_options_names_Thumbs::THEME => 'sidebar', tubepress_api_const_options_names_Thumbs::FLUID_THUMBS => false);
     /* now apply the user's options */
     $rawTag = $context->get(tubepress_addons_wordpress_api_const_options_names_WordPress::WIDGET_SHORTCODE);
     $widgetTag = tubepress_impl_util_StringUtils::removeNewLines($rawTag);
     $parser->parse($widgetTag);
     /* calculate the final options */
     $finalOptions = array_merge($defaultWidgetOptions, $context->getCustomOptions());
     $context->setCustomOptions($finalOptions);
     if ($context->get(tubepress_api_const_options_names_Thumbs::THEME) === '') {
         $context->set(tubepress_api_const_options_names_Thumbs::THEME, 'sidebar');
     }
     try {
         $out = $gallery->getHtmlForShortcode('');
     } catch (Exception $e) {
         $out = $this->_dispatchErrorAndGetMessage($e);
     }
     /* do the standard WordPress widget dance */
     /** @noinspection PhpUndefinedVariableInspection */
     echo $before_widget . $before_title . $context->get(tubepress_addons_wordpress_api_const_options_names_WordPress::WIDGET_TITLE) . $after_title . $out . $after_widget;
     /* reset the context for the next shortcode */
     $context->reset();
 }
 private function _getHtml($content, $trigger, tubepress_spi_shortcode_ShortcodeParser $parser)
 {
     $context = tubepress_impl_patterns_sl_ServiceLocator::getExecutionContext();
     $gallery = tubepress_impl_patterns_sl_ServiceLocator::getShortcodeHtmlGenerator();
     /* Parse each shortcode one at a time */
     while ($parser->somethingToParse($content, $trigger)) {
         /* Get the HTML for this particular shortcode. Could be a single video or a gallery. */
         try {
             $generatedHtml = $gallery->getHtmlForShortcode($content);
         } catch (Exception $e) {
             $generatedHtml = $this->_dispatchErrorAndGetMessage($e);
         }
         /* remove any leading/trailing <p> tags from the content */
         $pattern = '/(<[P|p]>\\s*)(' . preg_quote($context->getActualShortcodeUsed(), '/') . ')(\\s*<\\/[P|p]>)/';
         $content = preg_replace($pattern, '${2}', $content);
         /* replace the shortcode with our new content */
         $currentShortcode = $context->getActualShortcodeUsed();
         $content = tubepress_impl_util_StringUtils::replaceFirst($currentShortcode, $generatedHtml, $content);
         $content = tubepress_impl_util_StringUtils::removeEmptyLines($content);
         /* reset the context for the next shortcode */
         $context->reset();
     }
     return $content;
 }