--- /dev/null
+[%
+ WRAPPER "staff/base.tt2";
+ ctx.page_title = l("Prediction Pattern Templates");
+ ctx.page_app = "egAdminConfig";
+ ctx.page_ctrl = 'PatternTemplate';
+%]
+
+[% BLOCK APP_JS %]
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/grid.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/fm_record_editor.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/ui.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/serials/app.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/serials/services/core.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/serials/directives/prediction_wizard.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/admin/serials/pattern_template.js"></script>
+<link rel="stylesheet" href="[% ctx.base_path %]/staff/css/admin.css" />
+[% END %]
+
+<div class="container-fluid" style="text-align:center">
+ <div class="alert alert-info alert-less-pad strong-text-2">
+ [% l('Prediction Templates') %]
+ </div>
+</div>
+
+<eg-grid
+ id-field="id"
+ idl-class="spt"
+ grid-controls="gridControls"
+ features="-multiselect"
+ persist-key="admin.serials.pattern_template">
+
+ <eg-grid-menu-item handler="new_record" label="[% l('New Record') %]"></eg-grid-menu-item>
+ <eg-grid-action handler="edit_record" label="[% l('Edit Record') %]"></eg-grid-action>
+ <eg-grid-action handler="delete_record" label="[% l('Delete Record') %]"></eg-grid-action>
+
+ <eg-grid-field label="[% l('Name') %]" path="name"></eg-grid-field>
+ <eg-grid-field label="[% l('Pattern Code') %]" path="pattern_code"></eg-grid-field>
+ <eg-grid-field label="[% l('Owning Library') %]" path="owning_lib.name"></eg-grid-field>
+ <eg-grid-field label="[% l('Sharing Depth') %]" path="share_depth"></eg-grid-field>
+ <eg-grid-field label="[% l('ID') %]" path='id' required hidden></eg-grid-field>
+ <eg-grid-field path='*' hidden></eg-grid-field>
+</eg-grid>
+
+[% END %]
--- /dev/null
+angular.module('egAdminConfig',
+ ['ngRoute','ui.bootstrap','egCoreMod','egUiMod','egGridMod','egFmRecordEditorMod','egSerialsMod','egSerialsAppDep'])
+
+.controller('PatternTemplate',
+ ['$scope','$q','$timeout','$location','$window','$uibModal','egCore','egGridDataProvider',
+ 'egConfirmDialog',
+function($scope , $q , $timeout , $location , $window , $uibModal , egCore , egGridDataProvider ,
+ egConfirmDialog) {
+
+ egCore.startup.go(); // standalone mode requires manual startup
+
+ $scope.new_record = function() {
+ spawn_editor();
+ }
+
+ $scope.edit_record = function(items) {
+ if (items.length != 1) return;
+ spawn_editor(items[0].id);
+ }
+
+ spawn_editor = function(id) {
+ var templ;
+ if (arguments.length == 1) {
+ templ = '<eg-edit-fm-record idl-class="spt" mode="update" record-id="id" on-save="ok" on-cancel="cancel" custom-field-templates="customFieldTemplates"></eg-edit-fm-record>';
+ } else {
+ templ = '<eg-edit-fm-record idl-class="spt" mode="create" on-save="ok" on-cancel="cancel" custom-field-templates="customFieldTemplates"></eg-edit-fm-record>';
+ }
+ gridControls = $scope.gridControls;
+ $uibModal.open({
+ template : templ,
+ controller : [
+ '$scope', '$uibModalInstance',
+ function($scope , $uibModalInstance) {
+ $scope.id = id;
+
+ $scope.openPatternEditorDialog = function(pred) {
+ $uibModal.open({
+ templateUrl: './serials/t_pattern_editor_dialog',
+ size: 'lg',
+ windowClass: 'eg-wide-modal',
+ backdrop: 'static',
+ controller:
+ ['$scope', '$uibModalInstance', function($scope, $uibModalInstance) {
+ $scope.focusMe = true;
+ $scope.patternCode = pred.pattern_code;
+ $scope.ok = function(patternCode) { $uibModalInstance.close(patternCode) }
+ $scope.cancel = function () { $uibModalInstance.dismiss() }
+ }]
+ }).result.then(function (patternCode) {
+ if (pred.pattern_code !== patternCode) {
+ pred.pattern_code = patternCode;
+ }
+ });
+ }
+
+ $scope.customFieldTemplates = {
+ share_depth : {
+ template : '<eg-share-depth-selector ng-model="rec_flat[field.name]">'
+ },
+ pattern_code : {
+ handlers : {
+ openPatternEditorDialog : $scope.openPatternEditorDialog
+ },
+ template : '<button class="btn btn-default" ng-click="field.handlers.openPatternEditorDialog(rec_flat)">Pattern Wizard</button>' // FIXME i18n
+ }
+ }
+
+ $scope.ok = function($event) {
+ $uibModalInstance.close();
+ gridControls.refresh();
+ }
+
+ $scope.cancel = function($event) {
+ $uibModalInstance.dismiss();
+ }
+ }
+ ]
+ });
+ }
+
+ $scope.delete_record = function(selected) {
+ if (!selected || !selected.length) return;
+
+ egCore.pcrud.retrieve('spt', selected[0].id).then(function(rec) {
+ egConfirmDialog.open(
+ egCore.strings.EG_CONFIRM_DELETE_RECORD_TITLE,
+ egCore.strings.EG_CONFIRM_DELETE_RECORD_BODY,
+ { id : rec.id() } // TODO replace with selector if available?
+ ).result.then(function() {
+ egCore.pcrud.remove(rec).then(function() {
+ $scope.gridControls.refresh();
+ });
+ });
+ });
+ }
+
+ function generateQuery() {
+ return {
+ 'id' : { '!=' : null },
+ }
+ }
+
+ $scope.gridControls = {
+ setQuery : function() {
+ return generateQuery();
+ },
+ setSort : function() {
+ return ['owning_lib.name','name'];
+ }
+ }
+}])