Esempio n. 1
0
 function getTopScripts($globalVariables = [])
 {
     $vars = [];
     $scripts = '';
     $globalVariables['Wikia'] = new StdClass();
     //this is run to grab all global variables
     wfRunHooks('WikiaSkinTopScripts', [&$vars, &$scripts, $this]);
     // load ResourceLoader modules that have a short caching time
     $scripts .= $this->renderTopShortTTLModules();
     //send list of supported videos so we can treat not supported ones differently
     $globalVariables['supportedVideos'] = $this->wg->WikiaMobileSupportedVideos;
     //global variables
     //from Output class
     //and from ResourceLoaderStartUpModule
     $res = new ResourceVariablesGetter();
     $vars = array_intersect_key($this->wg->Out->getJSVars() + $res->get() + $vars, array_flip($this->wg->WikiaMobileIncludeJSGlobals));
     return WikiaSkin::makeInlineVariablesScript($vars + $globalVariables) . $scripts;
 }
 public function index()
 {
     $this->wf->profileIn(__METHOD__);
     $jsHeadPackages = array('wikiamobile_js_head');
     $jsBodyPackages = array();
     $scssPackages = array();
     $cssLinks = '';
     $jsBodyFiles = '';
     $jsHeadFiles = '';
     $styles = null;
     $scripts = null;
     $assetsManager = F::build('AssetsManager', array(), 'getInstance');
     $advert = '';
     F::build('JSMessages')->enqueuePackage('WkMbl', JSMessages::INLINE);
     $jsBodyPackages[] = 'wikiamobile_js_body_full';
     $scssPackages[] = 'wikiamobile_scss';
     $styles = $this->skin->getStyles();
     $scripts = $this->skin->getScripts();
     //show ads only for anon users
     if ($this->wg->user->isAnon()) {
         $jsBodyPackages[] = 'wikiamobile_js_ads';
         $advert = $this->app->renderView('WikiaMobileAdService', 'index');
     }
     $nav = $this->app->renderView('WikiaMobileNavigationService', 'index');
     $pageContent = $this->app->renderView('WikiaMobileBodyService', 'index', array('bodyText' => $this->templateObject->get('bodytext'), 'categoryLinks' => $this->templateObject->get('catlinks')));
     $footer = $this->app->renderView('WikiaMobileFooterService', 'index');
     //let extensions manipulate the asset packages (e.g. ArticleComments,
     //this is done to cut down the number or requests)
     $this->app->runHook('WikiaMobileAssetsPackages', array(&$jsHeadPackages, &$jsBodyPackages, &$scssPackages));
     if (is_array($scssPackages)) {
         //force main SCSS as first to make overriding it possible
         foreach ($assetsManager->getURL($scssPackages) as $s) {
             //packages/assets are enqueued via an hook, let's make sure we should actually let them through
             if ($assetsManager->checkAssetUrlForSkin($s, $this->skin)) {
                 //W3C standard says type attribute and quotes (for single non-URI values) not needed, let's save on output size
                 $cssLinks .= "<link rel=stylesheet href=\"" . $s . "\"/>";
             }
         }
     }
     if (is_array($styles)) {
         foreach ($styles as $s) {
             //safe URL's as getStyles performs all the required checks
             //W3C standard says type attribute and quotes (for single non-URI values) not needed, let's save on output size
             $cssLinks .= "<link rel=stylesheet href=\"{$s['url']}\"/>";
             //this is a strict skin, getStyles returns only elements with a set URL
         }
     }
     if (is_array($jsHeadPackages)) {
         //core JS in the head section, definitely safe
         foreach ($assetsManager->getURL($jsHeadPackages) as $src) {
             //HTML5 standard, no type attribute required == smaller output
             $jsHeadFiles .= "<script src=\"{$src}\"></script>";
         }
     }
     if (is_array($jsBodyPackages)) {
         foreach ($assetsManager->getURL($jsBodyPackages) as $s) {
             //packages/assets are enqueued via an hook, let's make sure we should actually let them through
             if ($assetsManager->checkAssetUrlForSkin($s, $this->skin)) {
                 //HTML5 standard, no type attribute required == smaller output
                 $jsBodyFiles .= "<script src=\"{$s}\"></script>";
             }
         }
     }
     if (is_array($scripts)) {
         foreach ($scripts as $s) {
             //safe URL's as getScripts performs all the required checks
             //HTML5 standard, no type attribute required == smaller output
             $jsBodyFiles .= "<script src=\"{$s['url']}\"></script>";
         }
     }
     //Bottom Scripts
     //do not run this hook, all the functionalities hooking in this don't take into account the pecularity of the mobile skin
     //$this->wf->RunHooks( 'SkinAfterBottomScripts', array ( $this->wg->User->getSkin(), &$bottomscripts ) );
     //AppCache will be disabled for the first several releases
     //$this->appCacheManifestPath = ( $this->wg->DevelEnvironment && !$this->wg->Request->getBool( 'appcache' ) ) ? null : self::CACHE_MANIFEST_PATH . "&{$this->wg->StyleVersion}";
     $this->response->setVal('jsHeadFiles', $jsHeadFiles);
     $this->response->setVal('topScripts', $this->skin->getTopScripts());
     $this->response->setVal('allowRobots', !$this->wg->DevelEnvironment);
     $this->response->setVal('cssLinks', $cssLinks);
     $this->response->setVal('mimeType', $this->templateObject->get('mimetype'));
     $this->response->setVal('charSet', $this->templateObject->get('charset'));
     $this->response->setVal('headItems', $this->skin->getHeadItems());
     $this->response->setVal('languageCode', $this->templateObject->get('lang'));
     $this->response->setVal('languageDirection', $this->templateObject->get('dir'));
     $this->response->setVal('headLinks', $this->wg->Out->getHeadLinks());
     $this->response->setVal('pageTitle', $this->wg->Out->getHTMLTitle());
     $this->response->setVal('bodyClasses', array('wkMobile', $this->templateObject->get('pageclass')));
     $this->response->setVal('jsBodyFiles', $jsBodyFiles);
     $this->response->setVal('advertisement', $advert);
     $this->response->setVal('wikiaNavigation', $nav);
     $this->response->setVal('pageContent', $pageContent);
     $this->response->setVal('wikiaFooter', $footer);
     //global variables
     //from Output class
     //and from ResourceLoaderStartUpModule
     $res = new ResourceVariablesGetter();
     $vars = array_diff_key($this->wg->Out->getJSVars() + $res->get(), array_flip($this->wg->WikiaMobileExcludeJSGlobals));
     $this->response->setVal('globalVariablesScript', WikiaSkin::makeInlineVariablesScript($vars));
     //tracking
     $trackingCode = '';
     if (!in_array($this->wg->Request->getVal('action'), array('edit', 'submit'))) {
         $trackingCode .= AnalyticsEngine::track('QuantServe', AnalyticsEngine::EVENT_PAGEVIEW, array(), array('extraLabels' => array('mobilebrowser'))) . AnalyticsEngine::track('Comscore', AnalyticsEngine::EVENT_PAGEVIEW);
     }
     //Stats for Gracenote reporting
     if ($this->wg->cityId == self::LYRICSWIKI_ID) {
         $trackingCode .= AnalyticsEngine::track('GA_Urchin', 'lyrics');
     }
     $trackingCode .= AnalyticsEngine::track('GA_Urchin', AnalyticsEngine::EVENT_PAGEVIEW) . AnalyticsEngine::track('GA_Urchin', 'onewiki', array($this->wg->cityId)) . AnalyticsEngine::track('GA_Urchin', 'pagetime', array('wikiamobile')) . AnalyticsEngine::track('GA_Urchin', 'varnish-stat') . AnalyticsEngine::track('GAS', 'usertiming');
     $this->response->setVal('trackingCode', $trackingCode);
     $this->wf->profileOut(__METHOD__);
 }
 private function setAssets($type = 'live')
 {
     global $wgOut;
     $jsHeadGroups = ['venus_head_js'];
     $jsHeadFiles = '';
     $jsBodyGroups = ['venus_body_js'];
     $jsBodyFiles = '';
     $cssGroups = ['venus_css'];
     $cssLinks = '';
     if ($type == 'preview') {
         $cssGroups[] = 'article_scss';
         $jsPreviewFiles = '';
         foreach ($this->assetsManager->getURL(['venus_preview_js']) as $src) {
             $jsPreviewFiles .= "<script src='{$src}'></script>";
         }
         $this->jsPreviewFiles = $jsPreviewFiles;
     } else {
         // let extensions manipulate the asset packages (e.g. ArticleComments,
         // this is done to cut down the number or requests)
         $this->app->runHook('VenusAssetsPackages', [&$jsHeadGroups, &$jsBodyGroups, &$cssGroups]);
     }
     // SASS files requested via VenusAssetsPackages hook
     $sassFiles = [];
     foreach ($this->assetsManager->getURL($cssGroups) as $src) {
         if ($this->assetsManager->checkAssetUrlForSkin($src, $this->skin)) {
             $sassFiles[] = $src;
         }
     }
     // try to fetch all SASS files using a single request (CON-1487)
     // "WikiaSkin::getStylesWithCombinedSASS: combined 9 SASS files"
     $cssLinks .= $this->skin->getStylesWithCombinedSASS($sassFiles);
     foreach ($this->assetsManager->getURL($jsHeadGroups) as $src) {
         if ($this->assetsManager->checkAssetUrlForSkin($src, $this->skin)) {
             $jsHeadFiles .= "<script src='{$src}'></script>";
         }
     }
     // try to fetch all AM groups in a single JS request (CON-1772)
     // "WikiaSkin::getScriptsWithCombinedGroups: combined 8 JS groups"
     $jsBodyFiles = $this->skin->getScriptsWithCombinedGroups($jsBodyGroups);
     // global variables from ResourceLoaderStartUpModule
     $res = new ResourceVariablesGetter();
     $vars = WikiaSkin::makeInlineVariablesScript($res->get());
     // is it used anywhere?
     // set variables
     $this->cssLinks = $cssLinks;
     $this->jsBodyFiles = $jsBodyFiles;
     $this->jsHeadScripts = $wgOut->getHeadScripts() . $jsHeadFiles;
 }
 /**
  * function returns globals needed for an Article
  */
 public function getGlobals()
 {
     $wg = F::app()->wg;
     $skin = Skin::newFromKey('wikiamobile');
     //global variables
     //from Output class
     //and from ResourceLoaderStartUpModule
     $res = new ResourceVariablesGetter();
     $vars = array_intersect_key($wg->Out->getJSVars() + $res->get(), array_flip($wg->GameGuidesGlobalsWhiteList));
     $this->setVal('globals', WikiaSkin::makeInlineVariablesScript($vars) . $skin->getTopScripts());
 }