From 81916bee866b3f6dc7da2c81a20fa9b4bc2ea3f3 Mon Sep 17 00:00:00 2001 From: Tobias Lounsbury Date: Mon, 20 Jul 2015 18:03:58 -0700 Subject: [PATCH] Added ability for angular to be loaded as a snippet --- Civi/Angular/Page/Main.php | 35 +++++++++++++++++++++------- templates/Civi/Angular/Page/Main.tpl | 12 ++++++++++ 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/Civi/Angular/Page/Main.php b/Civi/Angular/Page/Main.php index 344936fa35..0a0c070e9d 100644 --- a/Civi/Angular/Page/Main.php +++ b/Civi/Angular/Page/Main.php @@ -55,39 +55,47 @@ class Main extends \CRM_Core_Page { * The content generated by running this page */ public function run() { - $this->registerResources(); + $snippet = (array_key_exists('snippet', $_GET) && str_replace("/", "", $_GET['snippet']) != "0"); + $this->registerResources($snippet); return parent::run(); } /** * Register resources required by Angular. */ - public function registerResources() { + public function registerResources($snippet = false) { + $scripts = array(); + $styles = array(); $modules = $this->angular->getModules(); $page = $this; // PHP 5.3 does not propagate $this to inner functions. $this->res->addSettingsFactory(function () use (&$modules, $page) { // TODO optimization; client-side caching return array_merge($page->angular->getResources(array_keys($modules), 'settings', 'settings'), array( - 'resourceUrls' => \CRM_Extension_System::singleton()->getMapper()->getActiveModuleUrls(), - 'angular' => array( - 'modules' => array_merge(array('ngRoute'), array_keys($modules)), - 'cacheCode' => $page->res->getCacheCode(), - ), + 'resourceUrls' => \CRM_Extension_System::singleton()->getMapper()->getActiveModuleUrls(), + 'angular' => array( + 'modules' => array_merge(array('ngRoute'), array_keys($modules)), + 'cacheCode' => $page->res->getCacheCode(), + ), )); }); + $config = \CRM_Core_Config::singleton(); + $this->res->addScriptFile('civicrm', 'bower_components/angular/angular.min.js', 100, 'html-header', FALSE); + $scripts[] = $config->userFrameworkResourceURL .'bower_components/angular/angular.min.js'; + $headOffset = 0; - $config = \CRM_Core_Config::singleton(); if ($config->debug) { foreach ($modules as $moduleName => $module) { foreach ($this->angular->getResources($moduleName, 'css', 'cacheUrl') as $url) { $this->res->addStyleUrl($url, self::DEFAULT_MODULE_WEIGHT + (++$headOffset), 'html-header'); + $styles[] = $url; } foreach ($this->angular->getResources($moduleName, 'js', 'cacheUrl') as $url) { $this->res->addScriptUrl($url, self::DEFAULT_MODULE_WEIGHT + (++$headOffset), 'html-header'); + $scripts[] = $url; // addScriptUrl() bypasses the normal string-localization of addScriptFile(), // but that's OK because all Angular strings (JS+HTML) will load via crmResource. } @@ -98,6 +106,7 @@ class Main extends \CRM_Core_Page { // but that's OK because all Angular strings (JS+HTML) will load via crmResource. $aggScriptUrl = \CRM_Utils_System::url('civicrm/ajax/angular-modules', 'format=js&r=' . $page->res->getCacheCode(), FALSE, NULL, FALSE); $this->res->addScriptUrl($aggScriptUrl, 120, 'html-header'); + $scripts[] = $aggScriptUrl; // FIXME: The following CSS aggregator doesn't currently handle path-adjustments - which can break icons. //$aggStyleUrl = \CRM_Utils_System::url('civicrm/ajax/angular-modules', 'format=css&r=' . $page->res->getCacheCode(), FALSE, NULL, FALSE); @@ -105,8 +114,18 @@ class Main extends \CRM_Core_Page { foreach ($this->angular->getResources(array_keys($modules), 'css', 'cacheUrl') as $url) { $this->res->addStyleUrl($url, self::DEFAULT_MODULE_WEIGHT + (++$headOffset), 'html-header'); + $styles[] = $url; } } + + //This allows angular apps to be loaded as snippets in tabs + $this->assign("snippet", $snippet); + if($snippet) { + $this->assign("route", $_REQUEST['route']); + $this->assign("scripts", $scripts); + $this->assign("styles", $styles); + } + } } diff --git a/templates/Civi/Angular/Page/Main.tpl b/templates/Civi/Angular/Page/Main.tpl index 63eb5e3e45..6d28bcca5a 100644 --- a/templates/Civi/Angular/Page/Main.tpl +++ b/templates/Civi/Angular/Page/Main.tpl @@ -1,5 +1,17 @@ +{if $snippet} + + {foreach from=$styles item=styleURL} + + {/foreach} + {foreach from=$scripts item=scriptURL} + + {/foreach} +{/if} {literal}
{/literal} + -- 2.25.1