* EXPERIMENTAL: This hook allows one to register additional Angular modules
*
* @param array $angularModules
- * List of modules.
+ * List of modules. Each module defines:
+ * - ext: string, the CiviCRM extension which hosts the files.
+ * - js: array, list of JS files or globs.
+ * - css: array, list of CSS files or globs.
+ * - partials: array, list of base-dirs containing HTML.
+ * - requires: array, list of required Angular modules.
* @return null
* the return value is ignored
*
* 'js' => array('js/part1.js', 'js/part2.js'),
* 'css' => array('css/myAngularModule.css'),
* 'partials' => array('partials/myBigAngularModule'),
+ * 'requires' => array('otherModuleA', 'otherModuleB'),
* );
* }
* @endcode
break;
case 'settings':
+ case 'requires':
if (!empty($module[$resType])) {
$result[$moduleName] = $module[$resType];
}
'resourceUrls' => \CRM_Extension_System::singleton()->getMapper()->getActiveModuleUrls(),
'angular' => array(
'modules' => array_merge(array('ngRoute'), $moduleNames),
+ 'requires' => $page->angular->getResources($moduleNames, 'requires', 'requires'),
'cacheCode' => $page->res->getCacheCode(),
'bundleUrl' => \Civi::service('asset_builder')->getUrl('angular-modules.json', $assetParams),
),
});
$this->res->addScriptFile('civicrm', 'bower_components/angular/angular.min.js', 100, $this->region, FALSE);
+ $this->res->addScriptFile('civicrm', 'js/crm.angular.js', 101, $this->region, FALSE);
$headOffset = 0;
$config = \CRM_Core_Config::singleton();
return format.replace(/1.*234.*56/, result);
};
+ CRM.angRequires = function(name) {
+ return CRM.angular.requires[name] || [];
+ };
+
CRM.console = function(method, title, msg) {
if (window.console) {
method = $.isFunction(console[method]) ? method : 'log';
--- /dev/null
+(function (angular, $, _) {
+ // DEPRECATED: A variant of angular.module() which uses a dependency list provided by the server.
+ // REMOVE circa v4.7.22.
+ angular.crmDepends = function crmDepends(name) {
+ return angular.module(name, CRM.angRequires(name));
+ };
+})(angular, CRM.$, CRM._);
+var cv = require('civicrm-cv')({mode: 'sync'});
+var _CV = cv('vars:show');
+var cmd =
+ 'CRM_Core_BAO_ConfigSetting::enableComponent("CiviCase");' +
+ 'global $civicrm_root;' +
+ '$f = CRM_Utils_File::addTrailingSlash($civicrm_root)."tmp/karma.cv.js";' +
+ 'mkdir(dirname($f), 0777, TRUE);' +
+ '$a=Civi::service("angular");' +
+ '$data = "var CRM = CRM || {}; CRM.angular =";' +
+ '$data .= json_encode(array(' +
+ ' "modules" => array_keys($a->getModules()),' +
+ ' "requires" => $a->getResources(array_keys($a->getModules()), "requires","requires"),' +
+ '));' +
+ '$data .= ";";' +
+ 'file_put_contents($f, $data);' +
+ 'return $f;';
+var angularTempFile = cv(['php:eval', '-U', _CV.ADMIN_USER, cmd]);
+
module.exports = function(config) {
config.set({
autoWatch: true,
'packages/jquery/plugins/jquery.timeentry.js',
'js/Common.js',
'bower_components/angular/angular.js',
+ 'js/crm.angular.js',
+ angularTempFile,
'bower_components/angular-file-upload/angular-file-upload.js',
'bower_components/angular-jquery-dialog-service/dialog-service.js',
'bower_components/angular-route/angular-route.js',
'bower_components/angular-ui-sortable/sortable.js',
'bower_components/angular-ui-utils/ui-utils.js',
'bower_components/angular-unsavedChanges/dist/unsavedChanges.js',
- 'tests/karma/modules.js',
'js/crm.ajax.js',
'ang/*.js',
'ang/**/*.js',
},
"devDependencies": {
"bower": "^1.3.1",
+ "civicrm-cv": "^0.1.2",
"karma": "^0.12.16",
"karma-ng-html2js-preprocessor": "^0.1.2",
"karma-phantomjs-launcher": "^0.1.4",
+++ /dev/null
-CRM.angular = {
- modules: [
- 'ngRoute',
- 'ui.utils',
- 'ui.sortable',
- 'unsavedChanges',
- 'angularFileUpload',
- 'dialogService',
- 'crmAttachment',
- 'crmUi',
- 'crmUtil',
- ]
-};