'angular' => array(
'modules' => array_merge(array('ngRoute'), array_keys($modules)),
'cacheCode' => $page->res->getCacheCode(),
+ 'bundleUrl' => \Civi::service('asset_builder')->getUrl('angular-modules.json'),
),
));
});
else {
// Note: addScriptUrl() bypasses the normal string-localization of addScriptFile(),
// 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);
+ // $aggScriptUrl = \CRM_Utils_System::url('civicrm/ajax/angular-modules', 'format=js&r=' . $page->res->getCacheCode(), FALSE, NULL, FALSE);
+ $aggScriptUrl = \Civi::service('asset_builder')->getUrl('angular-modules.js');
$this->res->addScriptUrl($aggScriptUrl, 120, $this->region);
// 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);
+ //$aggStyleUrl = \Civi::service('asset_builder')->getUrl('angular-modules.css');
//$this->res->addStyleUrl($aggStyleUrl, 120, $this->region);
foreach ($this->angular->getResources(array_keys($modules), 'css', 'cacheUrl') as $url) {
class Modules extends \CRM_Core_Page {
/**
- * See class description.
+ * Generate asset content (when accessed via older, custom
+ * "civicrm/ajax/anulgar-modules" route).
+ *
+ * @deprecated
*/
public function run() {
/**
\CRM_Utils_System::civiExit();
}
+ /**
+ * Generate asset content (when accessed via AssetBuilder).
+ *
+ * @param \Civi\Core\Event\GenericHookEvent $event
+ * @see CRM_Utils_hook::buildAsset()
+ * @see \Civi\Core\AssetBuilder
+ */
+ public static function buildAngularModules($event) {
+ $page = new Modules();
+ $angular = \Civi::service('angular');
+
+ switch ($event->asset) {
+ case 'angular-modules.json':
+ $moduleNames = $page->parseModuleNames(\CRM_Utils_Array::value('modules', $event->params), $angular);
+ $event->mimeType = 'application/json';
+ $event->content = json_encode($page->getMetadata($moduleNames, $angular));
+ break;
+
+ case 'angular-modules.js':
+ $moduleNames = $page->parseModuleNames(\CRM_Utils_Array::value('modules', $event->params), $angular);
+ $event->mimeType = 'application/javascript';
+ $event->content = $page->digestJs($angular->getResources($moduleNames, 'js', 'path'));
+ break;
+
+ case 'angular-modules.css':
+ $moduleNames = $page->parseModuleNames(\CRM_Utils_Array::value('modules', $event->params), $angular);
+ $event->mimeType = 'text/css';
+ $event->content = \CRM_Utils_File::concat($angular->getResources($moduleNames, 'css', 'path'), "\n");
+
+ default:
+ // Not our problem.
+ }
+ }
+
/**
* @param array $files
* File paths.
// TODO We need a better code-convention for metadata about non-hook events.
$dispatcher->addListener('hook_civicrm_eventDefs', array('\Civi\API\Events', 'hookEventDefs'));
$dispatcher->addListener('hook_civicrm_eventDefs', array('\Civi\Core\Event\SystemInstallEvent', 'hookEventDefs'));
+ $dispatcher->addListener('hook_civicrm_buildAsset', array('\Civi\Angular\Page\Modules', 'buildAngularModules'));
$dispatcher->addListener('civi.dao.postInsert', array('\CRM_Core_BAO_RecurringEntity', 'triggerInsert'));
$dispatcher->addListener('civi.dao.postUpdate', array('\CRM_Core_BAO_RecurringEntity', 'triggerUpdate'));
$dispatcher->addListener('civi.dao.postDelete', array('\CRM_Core_BAO_RecurringEntity', 'triggerDelete'));
});
};
- var moduleUrl = CRM.url('civicrm/ajax/angular-modules', {l: CRM.config.lcMessages, r: CRM.angular.cacheCode});
+ var moduleUrl = CRM.angular.bundleUrl;
$http.get(moduleUrl)
.success(function httpSuccess(data) {
templates = [];