public/app.js (178 lines of code) (raw):

/** * Main JS module for Workflow's angular app. */ import angular from 'angular'; import { getEnvironment } from './environment'; import { react2angular } from './react/react2angular.tsx'; import { TopToolbarTitle } from './react/TopToolbarTitle.tsx'; import 'components/sentry/sentry'; import 'components/user-message/user-message'; import 'components/content-list/content-list'; import 'components/icons/icons'; import 'layouts/dashboard/dashboard'; import 'layouts/dashboard/dashboard-user'; import 'layouts/dashboard/dashboard-create'; import 'layouts/dashboard/dashboard-toolbar'; import 'layouts/dashboard/dashboard-sidebar'; import 'lib/date-service'; import 'lib/filters-service'; import 'lib/column-service'; import 'lib/preferences-service'; import 'lib/analytics'; import 'lib/polling-service'; import 'lib/title-service'; import 'lib/logger'; // 3rd party libs import 'angular-ui-router'; import 'angular-bootstrap-temporary'; import 'angular-animate'; import 'ng-infinite-scroll'; // App-wide Styles import './main.scss'; angular.module('workflow', [ 'ui.router', 'ngAnimate', 'wfSentry', 'wfUserMessage', 'wfDashboard', 'wfDashboardUser', 'wfDashboardCreate', 'wfDashboardToolbar', 'wfDashboardSidebar', 'wfIcons', 'wfContentList', 'wfDateService', 'wfFiltersService', 'wfColumnService', 'wfPreferencesService', 'wfAnalyticsServiceMod', 'infinite-scroll', 'wfTitleService', 'logger', // New //'angular-loading-bar', ]) .config(['$stateProvider', '$urlRouterProvider', '$compileProvider', '$locationProvider', '$animateProvider', "$provide", "$httpProvider", function ($stateProvider, $urlRouterProvider, $compileProvider, $locationProvider, $animateProvider, $provide, $httpProvider) { // TODO: remember user's state and redirect there on default '' route $urlRouterProvider.when('', '/dashboard'); $animateProvider.classNameFilter(/^((?!(day-view__item)).)*$/); // https://github.com/angular/angular.js/issues/3613#issuecomment-86704187 function sanitizeUrl(url) { return RegExp($compileProvider.aHrefSanitizationWhitelist().source + "|^\\s*" + url.match("^.*?:")[0]) } $compileProvider.aHrefSanitizationWhitelist( sanitizeUrl(_wfConfig.incopyOpenUrl) ); $compileProvider.aHrefSanitizationWhitelist( sanitizeUrl(_wfConfig.incopyExportUrl) ); $compileProvider.aHrefSanitizationWhitelist( sanitizeUrl(_wfConfig.indesignExportUrl) ); $provide.decorator('$log', ["$delegate", 'logger', function ($delegate, logger) { $delegate.error = function (...args) { args.splice(1,0,"ERROR") logger.log.apply(null, args); }; $delegate.warn = function (...args) { args.splice(1,0,"WARN") logger.log.apply(null, args); }; $delegate.info = function (...args) { args.splice(1,0,"INFO") logger.log.apply(null, args); }; $delegate.debug = function (...args) { args.splice(1,0,"DEBUG") logger.log.apply(null, args); }; return $delegate; }]); $stateProvider.state('dashboard', { url: '/dashboard', views: { '': { templateUrl: '/assets/layouts/dashboard/dashboard.html', controller: 'wfDashboardController' }, 'view-toolbar': { templateUrl: '/assets/layouts/dashboard/dashboard-toolbar.html', controller: 'wfDashboardToolbarController' }, 'view-create': { templateUrl: '/assets/layouts/dashboard/dashboard-create.html', controller: 'wfDashboardCreateController' }, 'view-user': { templateUrl: '/assets/layouts/dashboard/dashboard-user.html', controller: 'wfDashboardUserController' } } }) $locationProvider.html5Mode({ enabled: true, requireBase: false }); // Use a custom header for the csrf token. // `Csrf-Token` is what Play looks for by default. // See https://www.playframework.com/documentation/2.7.x/ScalaCsrf#Plays-CSRF-protection // See https://code.angularjs.org/1.5.11/docs/api/ng/service/$http#usage $httpProvider.defaults.xsrfHeaderName = 'Csrf-Token'; }]) // Environment specific globals .constant('wfEnvironment', getEnvironment()) // Global config .constant( 'config', { 'composerNewContent': _wfConfig.composer.create, 'composerViewContent': _wfConfig.composer.view, 'composerContentDetails': _wfConfig.composer.details, 'composerTemplates': _wfConfig.composer.templates, 'viewerUrl': _wfConfig.viewerUrl, 'storyPackagesUrl': _wfConfig.storyPackagesUrl, 'presenceUrl': _wfConfig.presenceUrl, 'incopyOpenUrl': _wfConfig.incopyOpenUrl, 'incopyExportUrl': _wfConfig.incopyExportUrl, 'indesignExportUrl': _wfConfig.indesignExportUrl, 'composerRestorerUrl': _wfConfig.composerRestorerUrl, 'maxNoteLength': 500, 'mediaAtomMakerNewAtom': _wfConfig.mediaAtomMaker.create, 'mediaAtomMakerViewAtom': _wfConfig.mediaAtomMaker.view, 'atomWorkshopNewAtom': _wfConfig.atomWorkshop.create, 'atomWorkshopViewAtom': _wfConfig.atomWorkshop.view, 'atomTypes': _wfConfig.atomTypes, 'sessionId': _wfConfig.sessionId, 'gaId': _wfConfig.googleTrackingId } ) .constant({ 'statuses': _wfConfig.statuses }) .constant({ 'statusLabels': _wfConfig.statuses.map((status) => { if (status === 'Stub') { return { label: 'News list', value: 'Stub' } } return { label: status, value: status } }) }) .constant({ 'sections': _wfConfig.sections }) .constant({ 'desks': _wfConfig.desks }) .constant({ 'priorities': _wfConfig.priorities }) .constant({ 'sectionsInDesks': _wfConfig.sectionsInDesks }) .constant({ 'legalValues': [ { name: 'Not required', value: 'NA' }, { name: 'Needs checking', value: 'REQUIRED' }, { name: 'Approved', value: 'COMPLETE'} ]}) .constant({ 'pictureDeskValues': [ { name: 'Not required', value: 'NA' }, { name: 'Needs checking', value: 'REQUIRED' }, { name: 'Checked', value: 'COMPLETE'} ]}).component('topToolbarTitle', react2angular(TopToolbarTitle,[ 'title', ])) .run(['wfAnalyticsService', function(){}]) .run(['$document', '$rootScope', function ($document, $rootScope) { $document.on('keydown', function(event) { if (event.shiftKey && event.keyCode === 123) { $rootScope.$apply(function() { $rootScope.showFeatureSwitches = !$rootScope.showFeatureSwitches; })} }); }]); // Bootstrap App angular.element(document).ready(function () { angular.bootstrap(document, ['workflow']); window.name='gu_workflow'; });