-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create Dialog component #82
Conversation
@eclarizio . Here is the new dialog component in all its glory. Please take a look and provide feedback. Thanks in advance. |
this.dialogFields[field] = this.updateDialogFieldData(field, data); | ||
}); | ||
}); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If I understand this correctly, this would change the way cascading currently works, right? This is going to loop through all the fields to refresh and immediately fire off the .refreshField
function. If, in the list of fieldsToRefresh
, the 2nd one depends on the 1st one completing, this will not behave like it does currently.
I think instead of iterating, we need to do something recursive like:
public updateRefreshableFields(listOfFieldsToExclude) {
const fieldsToRefresh = _.without(this.refreshableFields, listOfFieldsToExclude);
return if fieldsToRefresh[0] === undefined;
const firstFieldToRefresh = fieldsToRefresh[0];
const listOfFieldsToExclude = listOfFieldsToExclude.concat(firstFieldToRefresh);
firstFieldToRefresh.refreshField({ field:this.dialogFields[firstFieldToRefresh] }).then(data) => {
this.dialogFields[firstFieldToRefresh] = this.updateDialogFieldData(firstFieldToRefresh, data);
this.updateRefreshableFields(listOfFieldsToExclude);
});
}
@chalettu Thanks! Looks good so far, just noticed one thing regarding the potential change I addressed above, will continue looking for more things but again on first glance looks great. Super excited to be able to use this 👍 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Noted a few glaring items, will continue to review more thoroughly in the coming days 🙇♀️
dist/css/ui-components.css
Outdated
@@ -1,2 +1,252 @@ | |||
.miq-sand-paper,.miq-sand-paper>div{background:#f5f5f5;overflow:hidden}.toolbar-pf .form-group .btn,.toolbar-pf .form-group .btn-group{margin-left:5px}.form-group.miq-toolbar-group,.form-group.miq-toolbar-group .miq-custom-html form{display:inline-block}.form-group.miq-toolbar-group .miq-custom-html .form-group{margin-bottom:0!important;border-right:0}.form-group.miq-toolbar-group .miq-custom-html .form-group:last-child{padding-right:0}.dialog-editor-tab-list{margin-bottom:20px}.delete-tab{opacity:.3;visibility:visible}.select-tab:hover .delete-tab{opacity:1;visibility:visible}.miq-data-tables-header{text-align:left}.miq-data-tables-header .pull-right{padding-right:20px}.miq-data-tables-header .pull-right div{display:inline-block;margin-right:10px}table.miq-table-with-footer{margin-bottom:0}.miq-table thead th{color:#0099d3;cursor:pointer}.dataTables_footer span{margin-left:10px}.miq-tile-section .card .card-content{padding-right:5px}.miq-tile-section div.miq-paging{text-align:center}.miq-tile-section div.miq-paging ul{margin-top:0}.miq-tile-view .card-view-pf .card{padding:0!important;cursor:pointer}.miq-tile-view .card-view-pf .card .card-content>div{padding-top:10px}.miq-tile-view .card-view-pf .card .card-check-box{left:0!important;top:12px!important}.miq-tile-with-body .card-view-pf .card{width:375px;height:175px}.miq-tile-with-body .card-view-pf .card .card-content{overflow:hidden}.miq-tile-with-body .card-view-pf .card .miq-icon-section{padding-right:0}.miq-tile-with-body .card-view-pf .card .miq-info-section{padding-left:0}.miq-tile-with-body .card-view-pf .card .miq-info-section dl.dl-horizontal.tile dt{margin-left:10px}.miq-tile-with-body .card-view-pf .card .miq-info-section dl.dl-horizontal.tile dd{margin-left:120px;text-align:left}.miq-row-margin-only-top{margin-top:15px;margin-left:0;margin-right:0}.miq-small-tile .card-view-pf .card{width:130px;height:131px}.miq-small-tile .card-view-pf .card .card-content .miq-quadicon{display:inline-block}.miq-small-tile .card-view-pf .card .card-content .miq-tile-head{margin-left:20px}.miq-small-tile .card-view-pf .card .card-content a{word-wrap:break-word}.miq-select-all{padding-right:0}.miq-select-all input[type=checkbox]{margin:0 4px;vertical-align:middle;position:relative;top:-1px}.miq-sort-items{padding-right:0}.miq-sort-items .sort-pf .uib-dropdown-menu{max-height:400px;overflow-y:auto}.miq-sort-items .sort-pf .uib-dropdown button{max-width:150px;overflow:hidden}.miq-pagination .miq-pager .miq-paging .disabled{pointer-events:none;cursor:not-allowed;background-color:#fafafa!important;background-image:none!important;border-color:#d1d1d1!important;color:#8b8d8f!important;opacity:1}.miq-pagination .miq-pager{float:right}.miq-pagination .miq-pager .miq-per-page{display:inline-block;vertical-align:top}.miq-pagination .miq-pager .miq-paging{display:inline-block}.miq-pagination .miq-pager .miq-paging ul li a{cursor:pointer}.miq-page-counter{padding-top:3px}.miq-data-table .miq-paging{text-align:center}.miq-data-table .miq-paging ul.pagination{margin-top:0;margin-bottom:10px}.paginate_of b{display:inline-block}.miq-siteswitcher-icon{color:#fff}.miq-siteswitcher-link{color:#000}.miq-siteswitcher-entry{display:inline-block;padding:10px;text-align:center;min-width:90px;border:1px solid #fff}.miq-siteswitcher-entry:hover{border:1px solid #bbb}.miq-siteswitcher-entry:hover a{color:#0088ce}.miq-siteswitcher .uib-dropdown-menu{padding:9px;left:8px;margin-top:11px;min-width:220px}.miq-siteswitcher .uib-dropdown-menu.uib-dropdown-menu-right{left:auto;right:-2px}.miq-siteswitcher .uib-dropdown-menu.uib-dropdown-menu-right:after,.miq-siteswitcher .uib-dropdown-menu.uib-dropdown-menu-right:before{left:auto;right:6px}.miq-siteswitcher .uib-dropdown-menu:after,.miq-siteswitcher .uib-dropdown-menu:before{border-bottom-color:#bbb;border-bottom-style:solid;border-bottom-width:10px;border-left:10px solid transparent;border-right:10px solid transparent;content:"";display:inline-block;left:6px;position:absolute;top:-11px}.miq-siteswitcher .uib-dropdown-menu:after{border-bottom-color:#fff;top:-10px}.miq-siteswitcher.dropup .uib-dropdown-menu{margin-bottom:11px;margin-top:0}.miq-siteswitcher.dropup .uib-dropdown-menu:after,.miq-siteswitcher.dropup .uib-dropdown-menu:before{border-bottom:none;border-top-color:#bbb;border-top-style:solid;border-top-width:10px;bottom:-11px;top:auto}.miq-siteswitcher.dropup .uib-dropdown-menu:after{border-top-color:#fff;bottom:-10px}miq-fonticon-picker button.picked{width:3em;text-align:center}.fonticon-modal .modal-content .tab-content{height:calc(100vh - 260px);overflow-y:auto!important;overflow-x:hidden}.fonticon-modal .modal-content .tab-content div.fonticon{font-size:24px;text-align:center}.fonticon-modal .modal-content .tab-content div.fonticon span.active i{padding:3px 5px;background-color:#0088ce;color:#fff} | |||
.miq-sand-paper, .miq-sand-paper > div { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks like the dist didn't build correctly, still has comments and is expanded
dist/js/ui-components.js
Outdated
@@ -1,2 +1,3810 @@ | |||
!function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=".",e(e.s=100)}([function(t,e){t.exports=_},function(t,e){t.exports=angular},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(3);e.default=function(t){t.component("dialogEditorModalFieldTemplate",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=(function(){function t(){}}(),function(){function t(){this.template=function(t,e){return n(98)("./"+e.template)},this.template.$inject=["$element","$attrs"],this.scope=!0,this.controllerAs="vm",this.bindings={modalData:"=",categories:"=?",addEntry:"&?",removeEntry:"&?",currentCategoryEntries:"&?",resolveCategories:"&?"}}return t}());e.default=i},,function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=function(){function t(t){this.MiQTranslateService=t,this.currentPageView=1}return t.$inject=["MiQTranslateService"],t.prototype.onCheckAll=function(t){var e=this;i.each(this.rows,function(n){e.onItemSelected({item:n,isSelected:t})})},t.prototype.onSortClick=function(t,e){this.onSort({headerId:t,isAscending:e})},t.prototype.perPageClick=function(e){var n=Math.ceil(this.settings.items/e.value);this.currentPageView=this.currentPageView>n?n:this.currentPageView;var i=t.calculateStartIndex(this.currentPageView,e.value);this.loadMoreItems({start:i,perPage:e.value})},t.prototype.setPage=function(e){e>this.settings.total&&(this.currentPageView=this.settings.total,e=this.currentPageView),this.currentPageView=e;var n=t.calculateStartIndex(e,this.settings.perpage);this.loadMoreItems({start:n,perPage:this.settings.perpage})},t.prototype.translateOf=function(t,e,n){return this.settings&&this.settings.hasOwnProperty("translateTotalof")?this.settings.translateTotalOf(t,e,n):t+" - "+e+" of "+n},t.prototype.onItemButtonClick=function(t){t.hasOwnProperty("onclick")&&new Function(t.onclick)()},t.prototype.setPagingNumbers=function(){this.settings.hasOwnProperty("current")&&this.settings.hasOwnProperty("perpage")&&(this.settings.startIndex=this.settings.startIndex||t.calculateStartIndex(this.settings.current,this.settings.perpage),this.settings.current===this.settings.total?this.settings.endIndex=this.settings.items-1:this.settings.endIndex=this.settings.current*this.settings.perpage-1)},t.calculateStartIndex=function(t,e){return(t-1)*e},t}();e.DataViewClass=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ToolbarType={BUTTON:"button",BUTTON_TWO_STATE:"buttonTwoState",BUTTON_SELECT:"buttonSelect",CUSTOM:"custom",SEPARATOR:"separator"}},,function(t,e){},,function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(57),a=n(54),l=n(1);!function(t){t.app=l.module("miqStaticAssets.common",[]),t.app.config(["$windowProvider",function(t){var e=t.$get();e.hasOwnProperty("__")||(e.__=function(t){return t})}]),o.default(t.app),a.default(t.app)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(69),a=n(63),l=n(1);!function(t){t.app=l.module("miqStaticAssets.dialogEditor",["ui.sortable","ngDragDrop","frapontillo.bootstrap-switch"]),o.default(t.app),a.default(t.app)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(75),a=n(77),l=n(1);!function(t){t.app=l.module("miqStaticAssets.fonticonPicker",["ui.bootstrap"]),a.default(t.app),o.default(t.app)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(88),a=n(84),l=n(80),s=n(1);!function(t){t.app=s.module("miqStaticAssets.gtl",[]),o.default(t.app),a.default(t.app),l.default(t.app)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(1);!function(t){o.module("miqStaticAssets",["miqStaticAssets.toolbar","miqStaticAssets.common","miqStaticAssets.dialogEditor","miqStaticAssets.gtl","miqStaticAssets.siteSwitcher","miqStaticAssets.fonticonPicker"])}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(89),a=n(1);!function(t){t.app=a.module("miqStaticAssets.siteSwitcher",[]),t.app.component("miqSiteSwitcher",new o.default)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(96),a=n(90),l=n(1);!function(t){t.app=l.module("miqStaticAssets.toolbar",["ngSanitize"]),o.default(t.app),a.default(t.app)}(i||(i={}))},,,,,,,,,function(t,e){t.exports='<div class=\'dialog\'>\n <div style="background-color: #f1f1f1; padding: 20px;"\n ng-model=\'vm.dialogTabs[vm.service.activeTab].dialog_groups\'\n ui-sortable=\'vm.sortableOptionsBox\'\n ng-repeat=\'tab in vm.dialogTabs\'\n ng-if=\'tab.position === vm.service.activeTab\'>\n \x3c!-- tab content --\x3e\n <div ng-repeat=\'box in tab.dialog_groups track by $index\'>\n <div class="panel panel-default"\n data-drop=\'true\'\n jqyoui-droppable=\'{multiple: true, onDrop: "vm.droppableOptions"}\'\n ng-model=\'box.dialog_fields\'>\n <div class="panel-heading">\n <i class="pficon-edit"\n ng-click=\'vm.editDialogModal(\n vm.service.activeTab,\n box.position\n )\'></i>\n <strong>{{ box.label }}</strong>\n <button type="button" class="close"\n ng-click="vm.removeBox(box.position)">\n <span aria-hidden="true">\n <i class="fa fa-times"></i>\n </span>\n </button>\n </div>\n <div class="panel-body">\n <div ui-sortable=\'vm.sortableOptionsFields\'\n ng-model=\'box.dialog_fields\'>\n <div class="well well-lg nosort"\n ng-if=\'box.dialog_fields.length === 0\'>\n <i class="fa fa-object-group"></i>\n {{ \'Drag your components here\' | translate }}\n </div>\n <div ng-repeat=\'field in box.dialog_fields\'>\n <form class="form-horizontal">\n <dialog-editor-field box-position="box.position" field-data=\'field\'></dialog-editor-field>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="blank-slate-pf nosort"\n ng-if=\'tab.dialog_groups.length === 0\'\n ng-click=\'vm.addBox()\'>\n <div class="blank-slate-pf-icon">\n <i class="fa fa-plus-circle"></i>\n </div>\n <h1 translate>Start with adding a box</h1>\n </div>\n <div class="panel panel-default nosort">\n <a ng-click=\'vm.addBox()\' translate>\n <i class="pficon-add-circle-o"></i> Create Box\n </a>\n </div>\n </div>\n</div>\n'},function(t,e){t.exports='<div ng-switch on="vm.fieldData.type" class="form-group">\n <label class="control-label col-sm-2">{{ vm.fieldData.label }}</label>\n <div class="col-sm-5">\n\n \x3c!-- text box --\x3e\n <input ng-switch-when="DialogFieldTextBox"\n ng-model="vm.fieldData.default_value"\n class="form-control"\n type="{{ vm.fieldData.options.protected ? \'password\' : \'text\' }}"\n placeholder="{{\'Default value\'|translate}}">\n\n \x3c!-- text area --\x3e\n <textarea ng-switch-when="DialogFieldTextAreaBox"\n ng-model="vm.fieldData.default_value"\n class="form-control"\n rows="4">\n {{ vm.fieldData.default_value }}\n </textarea>\n\n \x3c!-- check box --\x3e\n <input ng-switch-when="DialogFieldCheckBox"\n ng-model="vm.fieldData.default_value"\n ng-true-value="\'t\'"\n class="form-control"\n type="checkbox">\n\n \x3c!-- date control --\x3e\n <input ng-switch-when="DialogFieldDateControl"\n pf-datepicker options="vm.fieldData.options"\n ng-disabled="true"\n date="vm.fieldData.default_value">\n\n \x3c!-- date time control --\x3e\n <div ng-switch-when="DialogFieldDateTimeControl">\n <div class="col-sm-6 dateTimePadding">\n <input ng-model="vm.fieldData.default_value"\n pf-datepicker options="vm.fieldData.dateOptions"\n date="vm.fieldData.default_value">\n </div>\n <div class="col-sm-6">\n <timepicker ng-model="vm.fieldData.default_value"></timepicker>\n </div>\n </div>\n\n \x3c!-- drop down list --\x3e\n <select ng-switch-when="DialogFieldDropDownList"\n ng-model="vm.fieldData.default_value"\n class="form-control">\n <option ng-repeat="option in vm.fieldData.values"\n value="{{ option[0] }}">\n {{ option[1] }}\n </option>\n </select>\n\n \x3c!-- radio button --\x3e\n <span ng-switch-when="DialogFieldRadioButton"\n class="btn-group">\n <label ng-repeat="option in vm.fieldData.values"\n class="btn btn-primary">\n <input type="radio"\n ng-model="vm.fieldData.default_value"\n name="vm.fieldData.name"\n value="option[0]">\n {{ option[1] }}\n </label>\n </span>\n\n \x3c!-- tag control --\x3e\n <select ng-switch-when="DialogFieldTagControl"\n class="form-control">\n <option ng-repeat="option in vm.fieldData.values"\n value="{{ option[0] }}">\n {{ option[1] }}\n </option>\n </select>\n\n </div>\n <div class="col-sm-5">\n <button type="button" class="close"\n ng-click="vm.editDialogModal(\n vm.service.activeTab,\n vm.boxPosition,\n vm.fieldData.position\n )">\n <span aria-hidden="true">\n <i class="pficon-edit"></i>\n </span>\n </button>\n </div>\n</div>\n'},function(t,e){t.exports='\x3c!-- text check box --\x3e\n<div pf-form-group pf-label="{{\'Default value\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.default_value"\n ng-true-value="\'t\'"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate }}">\n</div>\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n'},function(t,e){t.exports='\x3c!-- date time control --\x3e\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Show Past Dates\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.options.show_past_dates"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n'},function(t,e){t.exports='\x3c!-- any dynamic element --\x3e\n<div pf-form-group pf-label="{{\'Entry Point\'|translate}}">\n \x3c!-- TODO: until treepicker and API for it are in the SSUI --\x3e\n <input ng-model="vm.modalData.resource_action.ae_namespace"/>\n</div>\n<div pf-form-group pf-label="{{\'Show Refresh Button\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.show_refresh_button"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate }}"/>\n</div>\n<div pf-form-group pf-label="{{\'Load Values on Init\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.load_values_on_init"\n switch-active="{{vm.modalData.show_refresh_button}}"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n'},function(t,e){t.exports='\x3c!-- radio button --\x3e\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Visible\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.visible"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Default value\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.default_value"\n ng-options="entry as entry[0] for entry in vm.modalData.values">\n <option selected="selected" value="" translate>None</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Value type\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.data_type">\n <option value="integer" translate>Integer</option>\n <option selected="selected" value="string" translate>String</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Sort by\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.sort_by">\n <option value="none" translate>None</option>\n <option value="description" translate>Description</option>\n <option value="value" translate>Value</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Sort order\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.sort_order">\n <option selected="selected" value="ascending" translate>Ascending</option>\n <option value="descending" translate>Descending</option>\n </select>\n</div>\n<div pf-form-group class="form-inline" pf-label="{{\'Entries\'|translate}}" required>\n <div ng-repeat="entry in vm.modalData.values">\n <input id="label" name="label"\n ng-model="entry[0]" type="text" placeholder="Key" required/>\n <input id="label" name="label"\n ng-model="entry[1]" type="text" placeholder="Value" required/>\n <a ng-click=\'vm.removeEntry(entry)\'><i class=\'pficon-close\'></i></a>\n </div>\n <a ng-click=\'vm.addEntry()\'><i class=\'pficon-add-circle-o\'></i></a>\n</div>\n'},function(t,e){t.exports='\x3c!-- tag-contorl --\x3e\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Visible\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.visible"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Category\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.category_id"\n ng-options="category.id.toString() as category.description for category in vm.categories.resources">\n <option selected="selected" value="" translate>None</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Single value\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.options.force_single_value"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Value type\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.data_type">\n <option value="integer" translate>Integer</option>\n <option selected="selected" value="string" translate>String</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Sort by\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.sort_by">\n <option value="none" translate>None</option>\n <option value="description" translate>Description</option>\n <option value="value" translate>Value</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Sort order\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.sort_order">\n <option selected="selected" value="ascending" translate>Ascending</option>\n <option value="descending" translate>Descending</option>\n </select>\n</div>\n<div pf-form-group class="form-inline" pf-label="{{\'Entries\'|translate}}" required>\n <div ng-repeat="entry in vm.currentCategoryEntries().children">\n <input id="label" name="label"\n ng-model="entry.description" type="text" placeholder="Key" readonly/>\n </div>\n</div>\n'},function(t,e){t.exports='\x3c!-- text area box --\x3e\n<div pf-form-group pf-input-class="col-sm-9" pf-label="{{\'Default value\'|translate}}">\n <textarea id="default_value" name="default_value"\n ng-model="vm.modalData.default_value">\n {{ vm.modalData.default_value }}\n </textarea>\n</div>\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Visible\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.visible"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Validation\'|translate}}">\n <input id="validator_rule" name="validator_rule"\n ng-model="vm.modalData.validator_rule"/>\n</div>\n'},function(t,e){t.exports='\x3c!-- text box --\x3e\n<div pf-form-group pf-label="{{\'Default value\'|translate}}">\n <input id="default_value" name="default_value"\n ng-model="vm.modalData.default_value"\n type="{{vm.modalData.options.protected ? \'password\' : \'text\'}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Protected\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.options.protected"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate }}"/>\n</div>\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Visible\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.visible"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Validation\'|translate}}">\n <input id="validator_rule" name="validator_rule"\n ng-model="vm.modalData.validator_rule"/>\n</div>\n'},function(t,e){t.exports="<ul ui-sortable='vm.sortableOptions'\n ng-model='vm.tabList'\n class='nav nav-tabs'\n data-tabs='tabs'>\n <li ng-class='{active: tab.active}' ng-repeat='tab in vm.tabList'>\n <a class=\"select-tab\" ng-click='vm.selectTab(tab.position)' data-toggle='tab'>\n <i class=\"pficon-edit\" ng-click='vm.editDialogModal(tab.position)'></i>\n {{ tab.label }}\n <i class='delete-tab glyphicon glyphicon-remove' ng-click='vm.removeTab(tab.position)'></i>\n </a>\n </li>\n <li class='nosort'>\n <a ng-click='vm.addTab()'>\n <i class='pficon-add-circle-o'></i>\n {{ 'Create Tab' | translate }}\n </a>\n </li>\n</ul>\n"},function(t,e){t.exports='<div class="container-fluid container-cards-pf">\n <div class="row row-cards-pf">\n <div class="col-xs-6 col-sm-4 col-md-4"\n ng-repeat=\'dialogField in vm.fields\'\n data-drag="true"\n jqyoui-draggable="{animate:true, placeholder: \'keep\', deepCopy: true}"\n data-jqyoui-options="{revert: \'invalid\', helper: \'clone\'}"\n ng-model="dialogField.placeholders">\n <div class="card-pf card-pf-aggregate-status">\n <h2 class="card-pf-title">\n {{dialogField.label}}\n </h2>\n <div class="card-pf-body">\n <p class="card-pf-aggregate-status-notifications">\n <span class="card-pf-aggregate-status-notification">\n <i ng-class="dialogField.icon"></i>\n </span>\n </p>\n </div>\n </div>\n </div>\n </div>\x3c!-- /row --\x3e\n</div>\x3c!-- /container --\x3e\n'},function(t,e){t.exports='<div class="modal-header">\n <button type="button" class="close" ng-click="$dismiss()" aria-hidden="true">\n <span class="pficon pficon-close"></span>\n </button>\n <h4 class="modal-title" id="myModalLabel" translate>Edit Dialog field</h4>\n</div>\n\n<div class="modal-body">\n <ul class="nav nav-tabs dialog-editor-tab-list">\n <li ng-class="{active:vm.modalTabIsSet(\'element_information\')}">\n <a ng-click="vm.modalTabSet(\'element_information\')" translate>Element Information</a>\n </li>\n <li ng-if="vm.element === \'field\'" ng-class="{active:vm.modalTabIsSet(\'options\')}">\n <a ng-click="vm.modalTabSet(\'options\')" translate>Options</a>\n </li>\n <li ng-if="vm.element === \'field\'" ng-class="{active:vm.modalTabIsSet(\'advanced\')}">\n <a ng-click="vm.modalTabSet(\'advanced\')" translate>Advanced</a>\n </li>\n </ul>\n \x3c!-- general details same for each component - element information --\x3e\n <div ng-show="vm.modalTabIsSet(\'element_information\')">\n <form class="form-horizontal">\n <div pf-form-group pf-label="{{\'Label\'|translate}}" required>\n <input id="label" name="label"\n ng-model="vm.modalData.label" type="text" required/>\n </div>\n <div ng-if="vm.element === \'field\'"\n pf-form-group\n pf-label="{{\'Name\'|translate}}" required>\n <input id="name" name="name"\n ng-model="vm.modalData.name" type="text" required/>\n </div>\n <div pf-form-group pf-input-class="col-sm-9" pf-label="{{\'Description\'|translate}}">\n <textarea id="description" name="description" ng-model="vm.modalData.description">\n {{ vm.modalData.description }}\n </textarea>\n </div>\n <div ng-if="vm.element === \'field\' && vm.modalData.type !== \'DialogFieldTagControl\'"\n pf-form-group\n pf-label="{{\'Dynamic\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.dynamic"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n </div>\n </form>\n </div>\n \x3c!-- field specific details --\x3e\n <div ng-show="vm.modalTabIsSet(\'options\')">\n <form class="form-horizontal">\n <div ng-if="!vm.modalData.dynamic" ng-switch on="vm.modalData.type">\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldTextBox"\n template="text-box.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldTextAreaBox"\n template="text-area-box.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldCheckBox"\n template="check-box.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldDateControl"\n template="date-time-control.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldDateTimeControl"\n template="date-time-control.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldRadioButton"\n template="radio-button-drop-down-list.html"\n add-entry="vm.addEntry"\n remove-entry="vm.removeEntry"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldDropDownList"\n template="radio-button-drop-down-list.html"\n add-entry="vm.addEntry"\n remove-entry="vm.removeEntry"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldTagControl"\n template="tag-control.html"\n current-category-entries="vm.currentCategoryEntries"\n categories="vm.categories"\n resolve-categories="vm.resolveCategories"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n </div>\n <div ng-if="vm.modalData.dynamic">\n <dialog-editor-modal-field-template template="dynamic.html">\n </dialog-editor-modal-field-template>\n </div>\n </form>\n </div>\n \x3c!-- general details same for each field - advanced --\x3e\n <div ng-show="vm.modalTabIsSet(\'advanced\')">\n <form class="form-horizontal">\n <div pf-form-group pf-label="{{\'Reconfigurable\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.reconfigurable"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}" >\n </div>\n </form>\n </div>\n</div>\n\n<div class="modal-footer">\n <button class="btn btn-danger"\n type="button"\n ng-click="vm.deleteField()" translate>Delete</button>\n <button type="button" class="btn btn-default" ng-click="$dismiss()" translate>Cancel</button>\n <button type="button"\n class="btn btn-primary"\n ng-click="vm.saveDialogFieldDetails()"\n ng-disabled="vm.modalUnchanged()" translate>Save\n </button>\n</div>\n'},function(t,e){t.exports='<div class="modal-header">\n <h4 class="modal-title" translate>Select an icon</h4>\n</div>\n<div class="modal-body">\n <uib-tabset>\n <uib-tab ng-repeat="font in $ctrl.parent.families" index="0" heading="{{ font.title }}">\n <div class="row">\n <div class="col-xs-1 fonticon" ng-repeat="icon in $ctrl.parent.fonticons[font.selector]" ng-click="$ctrl.parent.markToSelect(icon.class);">\n <span class="fonticon" ng-class="$ctrl.parent.toSelect === icon.class ? \'active\' : \'\'">\n <i ng-class="icon.class" title="{{ icon.selector }}"></i>\n </span>\n </div>\n </div>\n </uib-tab>\n </uib-tabset>\n</div>\n<div class="modal-footer">\n <button class="btn btn-primary" ng-click="$ctrl.parent.closeModal(true);" translate>Apply</button>\n <button class="btn btn-default" ng-click="$ctrl.parent.closeModal(false);" translate>Close</button>\n</div>\n'},function(t,e){t.exports='<div class="btn-group">\n <button type="button" class="btn picked" ng-class="$ctrl.btnClass">\n <i class="fa-lg" ng-class="$ctrl.selected" ng-if="$ctrl.selected"></i>\n <span ng-if="!$ctrl.selected"> </span>\n </button>\n <button type="button" class="btn" ng-class="$ctrl.btnClass" ng-click="$ctrl.openModal();">\n <span class="caret"></span>\n </button>\n</div>\n<div class="hidden" ng-transclude></div>\n<input type="hidden" name="{{ $ctrl.inputName }}" value="{{ $ctrl.selected }}">\n'},function(t,e){t.exports='<div class="miq-data-table">\n <div ng-if="tableCtrl.settings.isLoading" class="spinner spinner-lg"></div>\n <div class="row miq-pagination"\n ng-if="tableCtrl.settings && tableCtrl.settings.sortBy && (tableCtrl.settings.isLoading || tableCtrl.rows.length !== 0)">\n <div ng-if="!tableCtrl.settings.hideSelect"\n class="miq-select-all col-md-2 col-lg-2 col-xs-2">\n <label>{{tableCtrl.settings.selectAllTitle}}: </label>\n <input type="checkbox" ng-model="isChecked" ng-click="tableCtrl.onCheckAll(isChecked)" title="{{tableCtrl.settings.selectAllTitle}}" />\n </div>\n <miq-sort-items ng-if="tableCtrl.settings.sortBy"\n class="miq-sort-items col-md-2 col-lg-2 col-xs-2"\n sort-object="tableCtrl.settings.sortBy"\n headers="tableCtrl.columns"\n drop-down-class="tableCtrl.settings.dropDownClass"\n on-sort="tableCtrl.onSortClick(sortObject.colId, isAscending)"></miq-sort-items>\n <div class="col-md-7 col-lg-7 col-xs-7">\n <div class="miq-pager">\n <div class="miq-per-page">\n <miq-toolbar-list on-item-click="tableCtrl.perPageClick(item)"\n drop-down-class="tableCtrl.settings.dropDownClass"\n toolbar-list="tableCtrl.perPage"></miq-toolbar-list>\n </div>\n <div class="miq-paging" ng-if="tableCtrl.settings.current">\n <miq-paging settings="tableCtrl.settings" on-change-page="tableCtrl.setTablePage(pageNumber)"></miq-paging>\n </div>\n </div>\n </div>\n <div ng-if="tableCtrl.settings.items" class="col-md-1 col-lg-1 col-xs-1 miq-page-counter">\n <label>\n {{tableCtrl.translateOf(tableCtrl.settings.startIndex, tableCtrl.settings.endIndex, tableCtrl.settings.items)}}\n </label>\n </div>\n </div>\n <table class="table table-bordered table-striped table-hover miq-table-with-footer miq-table"\n ng-if="tableCtrl.rows && tableCtrl.rows.length !== 0">\n <thead>\n <tr>\n <th class="narrow">\n\n </th>\n <th ng-if="$index !== 0"\n ng-repeat="column in tableCtrl.columns track by $index"\n ng-click="tableCtrl.onSortClick($index, !!tableCtrl.settings.sortBy && !tableCtrl.settings.sortBy.isAscending)"\n ng-class="tableCtrl.getColumnClass(column)">\n {{column.text}}\n <div class="pull-right" ng-if="tableCtrl.isFilteredBy(column)" >\n <i class="fa" ng-class="tableCtrl.getSortClass()"></i>\n </div>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="row in tableCtrl.rows"\n ng-class="{active : row.selected}"\n ng-click="tableCtrl.onRowClick({item: row, event: $event})">\n <td ng-repeat="(columnKey, column) in tableCtrl.columns"\n ng-class="{\n narrow: row.cells[columnKey].is_checkbox || row.cells[columnKey].icon || row.cells[columnKey].is_button\n }">\n <input ng-if="row.cells[columnKey].is_checkbox && !tableCtrl.settings.hideSelect"\n ng-click="tableCtrl.onItemSelected({item: row, isSelected: isSelected})"\n onclick="event.stopPropagation();"\n type="checkbox"\n ng-model="isSelected"\n name="check_{{row.id}}"\n value="{{row.id}}"\n ng-checked="row.checked"\n class="list-grid-checkbox">\n <i ng-if="row.cells[columnKey].icon && tableCtrl.isIconOrImage(row, columnKey)"\n class="{{row.cells[columnKey].icon}}"\n title="{{row.cells[columnKey].title}}">\n <i ng-if="row.cells[columnKey].icon2" ng-class="row.cells[columnKey].icon2"></i>\n </i>\n <img ng-if="row.cells[columnKey].icon === null && tableCtrl.isIconOrImage(row, columnKey)"\n ng-src="{{row.img_url}}"\n alt="{{row.cells[columnKey].title}}"\n title="{{row.cells[columnKey].title}}" />\n <span ng-if="row.cells[columnKey].text && !row.cells[columnKey].is_button">\n {{row.cells[columnKey].text}}\n </span>\n <button ng-if="row.cells[columnKey].is_button && row.cells[columnKey].onclick"\n class="btn btn-primary"\n title="{{row.cells[columnKey].title}}"\n alt="{{row.cells[columnKey].title}}"\n ng-click="tableCtrl.onItemButtonClick(row.cells[columnKey])">\n {{row.cells[columnKey].text}}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n'},function(t,e){t.exports='<ul class="pagination">\n <li>\n <a ng-class="{disabled: pagingCtrl.settings.current === 1}"\n ng-click="pagingCtrl.onChangePage({pageNumber: 1})"\n href="javascript:void(0)">\n <span class="i fa fa-angle-double-left"></span>\n </a>\n </li>\n <li>\n <a ng-class="{disabled: pagingCtrl.settings.current === 1}"\n ng-click="pagingCtrl.onChangePage({pageNumber: pagingCtrl.settings.current - 1})"\n href="javascript:void(0)">\n <span class="i fa fa-angle-left"></span>\n </a>\n </li>\n <li ng-repeat="page in pagingCtrl.updatePages(pagingCtrl.settings.total) track by $index">\n <a ng-class="{disabled: pagingCtrl.settings.current === (page + 1)}"\n href="javascript:void(0)"\n ng-click="pagingCtrl.onChangePage({pageNumber: page + 1})">\n {{page + 1}}\n </a>\n </li>\n <li>\n <a ng-class="{disabled: (pagingCtrl.settings.current) === pagingCtrl.settings.total}"\n ng-click="pagingCtrl.onChangePage({pageNumber: (pagingCtrl.settings.current + 1)})"\n href="javascript:void(0)">\n <span class="i fa fa-angle-right"></span>\n </a>\n </li>\n <li>\n <a ng-class="{disabled: (pagingCtrl.settings.current) === pagingCtrl.settings.total}"\n ng-click="pagingCtrl.onChangePage({pageNumber: pagingCtrl.settings.total})"\n href="javascript:void(0)">\n <span class="i fa fa-angle-double-right"></span>\n </a>\n </li>\n</ul>\n'},function(t,e){t.exports='<div class="miq-tile-section">\n <div ng-if="tileCtrl.settings.isLoading" class="spinner spinner-lg"></div>\n <div class="row miq-pagination"\n ng-if="tileCtrl.settings && tileCtrl.settings.sortBy && (tileCtrl.settings.isLoading || tileCtrl.rows.length !== 0)">\n <div class="miq-select-all col-md-2 col-lg-2 col-xs-2"\n ng-if="!tileCtrl.settings.hideSelect">\n <label>{{tileCtrl.settings.selectAllTitle}}: </label>\n <input type="checkbox" ng-model="isChecked" ng-click="tileCtrl.onCheckAllTiles(isChecked)" title="{{tileCtrl.settings.selectAllTitle}}" />\n </div>\n <miq-sort-items ng-if="tileCtrl.settings.sortBy"\n class="miq-sort-items col-md-2 col-lg-2 col-xs-2"\n sort-object="tileCtrl.settings.sortBy"\n headers="tileCtrl.columns"\n drop-down-class="tileCtrl.settings.dropDownClass"\n on-sort="tileCtrl.onSortClick(sortObject.colId, isAscending)"></miq-sort-items>\n <div class="col-md-7 col-lg-7 col-xs-7">\n <div class="miq-pager">\n <div class="miq-per-page">\n <miq-toolbar-list on-item-click="tileCtrl.perPageClick(item)"\n drop-down-class="tileCtrl.settings.dropDownClass"\n toolbar-list="tileCtrl.perPage"></miq-toolbar-list>\n </div>\n <div class="miq-paging" ng-if="tileCtrl.settings.current">\n <miq-paging settings="tileCtrl.settings" on-change-page="tileCtrl.setPage(pageNumber)"></miq-paging>\n </div>\n </div>\n </div>\n <div ng-if="tileCtrl.settings.items" class="col-md-1 col-lg-1 col-xs-1 miq-page-counter">\n <label>\n {{tileCtrl.translateOf(tileCtrl.settings.startIndex, tileCtrl.settings.endIndex, tileCtrl.settings.items)}}\n </label>\n </div>\n </div>\n <div pf-card-view\n config="tileCtrl.options"\n items="tileCtrl.rows"\n class="miq-tile-view"\n ng-class="tileCtrl.tileClass()">\n <div ng-switch="config.type">\n <ng-switch-when ng-switch-when="small">\n <div class="miq-tile-head">\n <a href="javascript:void(0)" title="{{config.fetchTileName(item)}}" ng-click="config.onItemClick(item, $event)">{{config.fetchTileName(item) | limitToSuffix : 5 : 5 }}</a>\n </div>\n <div class="miq-quadicon">\n <a href="javascript:void(0)" ng-click="config.onItemClick(item, $event)">\n <div ng-bind-html="config.trustAsHtmlQuadicon(item)"></div>\n </a>\n </div>\n </ng-switch-when>\n <ng-switch-when ng-switch-when="big">\n <a href="javascript:void(0)" ng-click="config.onItemClick(item, $event)">{{config.fetchTileName(item)}}</a>\n <div class="row miq-row-margin-only-top ">\n <div class="col-md-3 col-lg-3 col-xs-3 miq-icon-section">\n <a href="javascript:void(0)" ng-click="config.onItemClick(item, $event)">\n <div ng-bind-html="config.trustAsHtmlQuadicon(item)"></div>\n </a>\n </div>\n <div class="col-md-9 col-lg-9 col-xs-9 miq-info-section">\n <dl class="dl-horizontal tile">\n <dt ng-repeat-start="(key, header) in config.columns | limitTo: 7 track by $index" ng-if="header.text && header.text.indexOf(\'Name\') === -1" title="{{header.text}}">{{header.text}}:</dt>\n <dd ng-repeat-end ng-if="header.text && header.text.indexOf(\'Name\') === -1" title="{{item.cells[key].text}}">{{item.cells[key].text | limitToSuffix : 25 : 25}}</dd>\n </dl>\n <div ng-repeat="(columnKey, column) in config.columns"\n ng-if="item.cells[columnKey].is_button && item.cells[columnKey].onclick"\n align="right">\n <button class="btn btn-primary"\n title="{{item.cells[columnKey].title}}"\n alt="{{item.cells[columnKey].title}}"\n ng-click="config.onButtonItemClick(item.cells[columnKey])">\n {{item.cells[columnKey].text}}\n </button>\n </div>\n </div>\n </div>\n </ng-switch-when>\n </div>\n </div>\n</div>\n'},function(t,e){t.exports='<div class="uib-dropdown miq-siteswitcher">\n <button class="btn btn-link uib-dropdown-toggle" type="button" id="domain-switcher" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">\n <span class="fa fa-lg fa-th miq-siteswitcher-icon"></span>\n </button>\n <div class="uib-dropdown-menu uib-dropdown-menu-right" aria-labelledby="domain-switcher">\n <div ng-repeat="site in ctrl.sites" class="miq-siteswitcher-entry">\n <a class="miq-siteswitcher-link" ng-href="{{site.url}}" target="_blank">\n <span title="{{site.tooltip}}" class="fa fa-3x" ng-class="site.iconClass"></span>\n <div>{{site.title}}</div>\n </a>\n </div>\n </div>\n</div>\n'},function(t,e){t.exports='<button title="{{toolbarButton.title}}"\n data-explorer="{{toolbarButton.explorer}}"\n data-confirm-tb="{{toolbarButton.confirm}}"\n id="{{toolbarButton.id}}"\n name="{{toolbarButton.name}}"\n type="button"\n class="btn btn-default"\n data-click="{{toolbarButton.id}}"\n data-url="{{toolbarButton.url}}"\n data-url_parms="{{toolbarButton.url_parms}}"\n data-prompt="{{toolbarButton.prompt}}"\n data-popup="{{toolbarButton.popup}}"\n ng-class="{active: toolbarButton.selected, disabled: !toolbarButton.enabled}"\n ng-hide="toolbarButton.hidden"\n ng-click="onItemClick({item: toolbarButton, $event: $event})">\n <i ng-if="toolbarButton.icon && toolbarButton.text" class="{{toolbarButton.icon}}" style="margin-right: 5px;"></i>\n <i ng-if="toolbarButton.icon && !toolbarButton.text" class="{{toolbarButton.icon}}"></i>\n <img ng-if="toolbarButton.img_url && !toolbarButton.icon" ng-src="{{toolbarButton.img_url}}"\n data-enabled="{{toolbarButton.img_url}}"\n data-disabled="{{toolbarButton.img_url}}">\n {{toolbarButton.text}}\n</button>\n'},function(t,e){t.exports='<div class="btn-group" ng-class="vm.dropDownClass" uib-dropdown ng-if="vm.isEmpty">\n <button type="button" uib-dropdown-toggle class="btn uib-dropdown-toggle btn-default"\n ng-class="{disabled: !vm.toolbarList.enabled}" title="{{vm.toolbarList.title}}">\n <i class="{{vm.toolbarList.icon}}" style="margin-right: 5px;" ng-if="vm.toolbarList.icon"></i>\n {{vm.toolbarList.text}}\n <span class="caret"></span>\n </button>\n <ul class="uib-dropdown-menu" role="menu">\n <li ng-repeat="item in vm.toolbarList.items track by $index" ng-class="{disabled: !item.enabled}">\n <a ng-if="item.type !== \'separator\'"\n ng-hide="item.hidden"\n href=""\n title="{{item.title}}"\n data-explorer="{{item.explorer}}"\n data-confirm-tb="{{item.confirm}}"\n ng-click="vm.onItemClick({item: item, $event: $event})"\n data-function="{{item.data.function}}"\n data-function-data="{{item.data[\'function-data\']}}"\n data-target="{{item.data.target}}"\n data-toggle="{{item.data.toggle}}"\n data-click="{{item.id}}"\n name="{{item.id}}"\n id="{{item.id}}"\n data-url_parms="{{item.url_parms}}"\n data-prompt="{{item.prompt}}"\n data-popup="{{item.popup}}"\n data-url="{{item.url}}">\n <i ng-if="item.icon && item.text" class="{{item.icon}}" style="margin-right: 5px;"></i>\n <i ng-if="item.icon && !item.text" class="{{item.icon}}"></i>\n <img ng-if="item.img_url && !item.icon" ng-src="{{item.img_url}}"\n data-enabled="{{item.img_url}}"\n data-disabled="{{item.img_url}}">\n {{item.text}}\n </a>\n <div ng-if="item.type === \'separator\'" class="divider " role="presentation" ng-hide="item.hidden"></div>\n </li>\n </ul>\n</div>\n'},function(t,e){t.exports='<div class="toolbar-pf-actions miq-toolbar-actions">\n <div class="form-group miq-toolbar-group"\n ng-repeat="toolbarItem in vm.toolbarItems"\n ng-if="vm.hasContent(toolbarItem)">\n <ng-repeat ng-repeat="item in toolbarItem ">\n <miq-toolbar-button ng-if="item.type === vm.getButtonType()"\n toolbar-button="item"\n on-item-click="vm.onItemClick(item, $event)">\n </miq-toolbar-button>\n <miq-toolbar-button ng-if="item.type === vm.getButtonTwoState() && item.id.indexOf(\'view_\') === -1"\n toolbar-button="item"\n on-item-click="vm.onItemClick(item, $event)">\n </miq-toolbar-button>\n <miq-toolbar-list ng-if="item.type === vm.getToolbarListType() && item.items.length > 0"\n toolbar-list="item"\n on-item-click="vm.onItemClick(item, $event)">\n </miq-toolbar-list>\n <div ng-if="item.name == \'custom\' && item.args && item.args.html"\n ng-bind-html="vm.trustAsHtml(item.args.html)"\n class="miq-custom-html"></div>\n </ng-repeat>\n </div>\n <miq-toolbar-view toolbar-views="vm.toolbarViews"\n on-item-click="vm.onViewClick({item: item, $event: $event})"\n class="miq-view-list">\n </miq-toolbar-view>\n</div>\n'},function(t,e){t.exports='<div class="toolbar-pf-view-selector pull-right form-group">\n <button class="btn btn-link"\n ng-repeat="item in vm.toolbarViews"\n ng-class="{active: item.selected}"\n title="{{item.title}}"\n id="{{item.id}}"\n data-url="{{item.url}}"\n data-url_parms="{{item.url_parms}}"\n data-prompt="{{item.prompt}}"\n data-popup="{{item.popup}}"\n ng-click="vm.onItemClick({item: item, $event: $event})"\n name="{{item.name}}">\n <i class="{{item.icon}}" style=""></i>\n </button>\n</div>\n'},,,,,,,,function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(55);e.default=function(t){t.component("miqSortItems",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=function(){function t(t,e){this.$element=t,this.$timeout=e,this.initOptions()}return t.$inject=["$element","$timeout"],t.prototype.$onChanges=function(t){t.headers&&(this.fillFields(),this.sortObject&&this.setSortItem()),t.dropDownClass&&this.applyClass()},t.prototype.$postLink=function(){var t=this;this.$timeout(function(){return t.applyClass()})},t.prototype.setSortItem=function(){this.sortObject&&this.sortObject.sortObject&&this.sortObject&&this.sortObject.sortObject.text&&(this.options.currentField={colId:i.findIndex(this.headers,this.sortObject.sortObject),id:this.sortObject.sortObject.text.toLowerCase(),title:this.sortObject.sortObject.text},this.options.isAscending=this.sortObject.isAscending)},t.prototype.initOptions=function(){var t=this;this.options={fields:[],onSortChange:function(e,n){return t.onSort({sortObject:e,isAscending:n})},currentField:{}}},t.prototype.fillFields=function(){var t=this;i.each(this.headers,function(e,n){!e.hasOwnProperty("is_narrow")&&e.hasOwnProperty("text")&&t.options.fields.push({colId:n,id:e.text.toLowerCase(),title:e.text})})},t.prototype.applyClass=function(){this.dropDownClass&&(Array.isArray(this.dropDownClass)?(t=this.$element.find(".uib-dropdown")).addClass.apply(t,this.dropDownClass):this.$element.find(".uib-dropdown").addClass(this.dropDownClass));var t},t}();e.SortItemsController=o;var a=function(){function t(){this.replace=!0,this.template='<div pf-sort config="vm.options"></div>',this.controller=o,this.controllerAs="vm",this.bindings={onSort:"&",headers:"<",sortObject:"<",dropDownClass:"<"}}return t}();e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(){this.listDataTable="/list",this.deleteItemDataTable="/delete",this.validateItem="/validate",this.createItem="/create",this.providerSettings="/list_providers_settings",this.toolbarSettings="/toolbar"}return t}();e.DefaultEndpoints=i;var o=function(){function t(){this.rootPoint="",this.endpoints=new i}return t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(56),o=n(58);e.default=function(t){t.service("MiQEndpointsService",i.default),t.service("MiQTranslateService",o.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.$window=t}return t.$inject=["$window"],t.prototype.translateString=function(t){return this.$window.__(t)},t}();e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1),o=n(0),a=function(){function t(t,e){this.DialogEditor=t,this.DialogEditorModal=e}return t.$inject=["DialogEditor","DialogEditorModal"],t.prototype.$onInit=function(){var t=this;this.service=this.DialogEditor,this.dialogTabs=this.DialogEditor.getDialogTabs(),this.sortableOptionsBox={axis:"y",cancel:".nosort",cursor:"move",opacity:.5,revert:50,stop:function(e,n){var i=n.item.scope().$parent.tab.dialog_groups;t.DialogEditor.updatePositions(i)}},this.sortableOptionsFields={axis:"y",cancel:".nosort",cursor:"move",revert:50,stop:function(e,n){var i=n.item.scope().$parent.box.dialog_fields;t.DialogEditor.updatePositions(i)}}},t.prototype.addBox=function(){this.dialogTabs[this.DialogEditor.activeTab].dialog_groups.push({description:__("Description"),label:__("Label"),display:"edit",position:0,dialog_fields:[]}),this.DialogEditor.updatePositions(this.dialogTabs[this.DialogEditor.activeTab].dialog_groups)},t.prototype.removeBox=function(t){o.remove(this.dialogTabs[this.DialogEditor.activeTab].dialog_groups,function(e){return e.position===t}),this.DialogEditor.updatePositions(this.dialogTabs[this.DialogEditor.activeTab].dialog_groups)},t.prototype.droppableOptions=function(t,e){var n=i.element(t.target).scope();this.DialogEditor.updatePositions(n.box.dialog_fields)},t.prototype.editDialogModal=function(t,e){this.DialogEditorModal.showModal(t,e)},t}(),l=function(){function t(){this.template=n(25),this.controller=a,this.controllerAs="vm"}return t}();e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(59);e.default=function(t){t.component("dialogEditorBoxes",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){this.DialogEditor=t,this.DialogEditorModal=e}return t.$inject=["DialogEditor","DialogEditorModal"],t.prototype.$onInit=function(){this.service=this.DialogEditor},t.prototype.editDialogModal=function(t,e,n){this.DialogEditorModal.showModal(t,e,n)},t}(),o=function(){function t(){this.template=n(26),this.controller=i,this.controllerAs="vm",this.bindings={fieldData:"<",boxPosition:"<"}}return t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(61);e.default=function(t){t.component("dialogEditorField",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(64),o=n(60),a=n(62),l=n(66),s=n(2);e.default=function(t){i.default(t),o.default(t),a.default(t),l.default(t),s.default(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(65);e.default=function(t){t.component("dialogEditorTabs",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1),o=n(0),a=function(){function t(t,e){this.DialogEditor=t,this.DialogEditorModal=e}return t.$inject=["DialogEditor","DialogEditorModal"],t.prototype.$onInit=function(){var t=this;this.tabList=this.DialogEditor.getDialogTabs(),0!==this.tabList.length&&(this.DialogEditor.activeTab=0,this.tabList[this.DialogEditor.activeTab].active=!0),this.sortableOptions={cancel:".nosort",cursor:"move",helper:"clone",revert:50,stop:function(e,n){var a=i.element(n.item).scope().$parent,l=a.vm.tabList;t.DialogEditor.updatePositions(l),t.DialogEditor.activeTab=o.find(l,{active:!0}).position}}},t.prototype.addTab=function(){this.tabList.forEach(function(t){return t.active=!1});var t=this.tabList.length;this.tabList.push({description:__("New tab ")+t,display:"edit",label:__("New tab ")+t,position:t,active:!0,dialog_groups:[]}),this.DialogEditor.activeTab=t,this.DialogEditor.updatePositions(this.tabList)},t.prototype.removeTab=function(t){if(this.tabList[t].active&&(this.tabList.length-1===this.tabList[t].position&&this.tabList.length-1!=0?this.tabList[t-1].active=!0:this.tabList.length-1>this.tabList[t].position&&(this.tabList[t+1].active=!0)),o.remove(this.tabList,function(e){return e.position===t}),0!==this.tabList.length){this.DialogEditor.updatePositions(this.tabList);var e=o.find(this.tabList,{active:!0});i.isDefined(e)&&(this.DialogEditor.activeTab=e.position)}},t.prototype.selectTab=function(t){o.find(this.tabList,{active:!0}).active=!1,this.tabList[t].active=!0,this.DialogEditor.activeTab=t},t.prototype.editDialogModal=function(t){this.DialogEditorModal.showModal(t)},t}(),l=function(){function t(){this.template=n(34),this.controller=a,this.controllerAs="vm"}return t}();e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(67);e.default=function(t){t.component("dialogEditorFieldStatic",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e,n,i){void 0===i&&(i={}),this.icon=e,this.label=n,this.placeholders=Object.assign({name:"",description:"",type:t,display:"edit",display_method_options:{},read_only:!1,required:!1,required_method_options:{},default_value:"",values_method_options:{},label:n,position:0,dynamic:!1,show_refresh_button:!1,load_values_on_init:!1,auto_refresh:!1,trigger_auto_refresh:!1,reconfigurable:!1,visible:!0,options:{protected:!1},resource_action:{resource_type:"DialogField",ae_attributes:{}}},i)}return t}(),o=function(){function t(){this.fields={dialogFieldTextBox:new i("DialogFieldTextBox","fa fa-font",__("Text Box")),dialogFieldTextAreaBox:new i("DialogFieldTextAreaBox","fa fa-file-text-o",__("Text Area")),dialogFieldCheckBox:new i("DialogFieldCheckBox","fa fa-check-square-o",__("Check Box")),dialogFieldDropDownList:new i("DialogFieldDropDownList","fa fa-caret-square-o-down",__("Dropdown List"),{data_type:"string",values:[],options:{sort_by:"description",sort_order:"ascending"}}),dialogFieldRadioButton:new i("DialogFieldRadioButton","fa fa-circle-o",__("Radio Button"),{data_type:"string",values:[],options:{sort_by:"description",sort_order:"ascending"}}),dialogFieldDateControl:new i("DialogFieldDateControl","fa fa-calendar",__("Date Control")),dialogFieldDateTimeControl:new i("DialogFieldDateTimeControl","fa fa-clock-o",__("Date Time Control")),dialogFieldTagControl:new i("DialogFieldTagControl","fa fa-tags",__("Tag Control"),{data_type:"string",values:[],options:{force_single_value:!1,sort_by:"description",sort_order:"ascending"}})}}return t}();e.ToolboxController=o;var a=function(){function t(){this.template=n(35),this.controller=o,this.controllerAs="vm"}return t}();e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(){this.data={},this.activeTab=0}return t.prototype.setData=function(t){this.data=t},t.prototype.getDialogId=function(){return this.data.content[0].id},t.prototype.getDialogLabel=function(){return this.data.content[0].label},t.prototype.getDialogDescription=function(){return this.data.content[0].description},t.prototype.getDialogTabs=function(){return this.data.content[0].dialog_tabs},t.prototype.updatePositions=function(t){t.forEach(function(t,e){return t.position=e})},t}();e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(68),o=n(70);e.default=function(t){t.service("DialogEditor",i.default),t.service("DialogEditorModal",o.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1),a=function(){function t(t,e,n,a){var l=this;switch(this.dialogDetails=t,this.$uibModalInstance=e,this.API=n,this.DialogEditor=a,this.modalTab="element_information",o.extend(this,{dialog:this.dialogDetails,saveDialogFieldDetails:this.saveDialogFieldDetails,addEntry:this.addEntry,removeEntry:this.removeEntry,deleteField:this.deleteField,modalUnchanged:this.modalUnchanged,modalTabSet:this.modalTabSet,modalTabIsSet:this.modalTabIsSet,currentCategoryEntries:this.currentCategoryEntries}),o.isUndefined(this.dialog.fieldId)&&o.isUndefined(this.dialog.boxId)&&o.isDefined(this.dialog.tabId)?this.element="tab":o.isUndefined(this.dialog.fieldId)&&o.isDefined(this.dialog.boxId)&&o.isDefined(this.dialog.tabId)?this.element="box":o.isDefined(this.dialog.fieldId)&&o.isDefined(this.dialog.boxId)&&o.isDefined(this.dialog.tabId)&&(this.element="field"),this.element){case"tab":this.modalData=i.cloneDeep(this.DialogEditor.getDialogTabs()[this.dialog.tabId]);break;case"box":this.modalData=i.cloneDeep(this.DialogEditor.getDialogTabs()[this.dialog.tabId].dialog_groups[this.dialog.boxId]);break;case"field":this.modalData=i.cloneDeep(this.DialogEditor.getDialogTabs()[this.dialog.tabId].dialog_groups[this.dialog.boxId].dialog_fields[this.dialog.fieldId]),"DialogFieldTagControl"===this.modalData.type&&this.resolveCategories().then(function(t){l.categories=t})}}return t.$inject=["dialogDetails","$uibModalInstance","API","DialogEditor"],t.prototype.resolveCategories=function(){return this.API.get("/api/categories?expand=resources&attributes=description,single_value,children")},t.prototype.modalTabSet=function(t){this.modalTab=t},t.prototype.modalTabIsSet=function(t){return this.modalTab===t},t.prototype.modalUnchanged=function(){switch(this.element){case"tab":return i.isMatch(this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab],this.modalData);case"box":return i.isMatch(this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId],this.modalData);case"field":return i.isMatch(this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].dialog_fields[this.dialog.fieldId],this.modalData)}},t.prototype.saveDialogFieldDetails=function(){switch(this.element){case"tab":this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].label=this.modalData.label,this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].description=this.modalData.description;break;case"box":this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].label=this.modalData.label,this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].description=this.modalData.description;break;case"field":this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].dialog_fields[this.dialog.fieldId]=this.modalData}this.$uibModalInstance.close()},t.prototype.deleteField=function(){var t=this;i.remove(this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].dialog_fields,function(e){return e.position===t.dialog.fieldId}),this.$uibModalInstance.close()},t.prototype.addEntry=function(){this.modalData.values.push(["",""])},t.prototype.removeEntry=function(t){i.pull(this.modalData.values,t)},t.prototype.currentCategoryEntries=function(){if(o.isDefined(this.categories))return i.find(this.categories.resources,"id",Number(this.modalData.options.category_id))},t}(),l=function(){function t(t){this.$uibModal=t}return t.$inject=["$uibModal"],t.prototype.showModal=function(t,e,i){var o={template:n(36),controller:a,controllerAs:"vm",size:"lg",resolve:{dialogDetails:function(){return{tabId:t,boxId:e,fieldId:i}}}};return this.$uibModal.open(o).result.catch(function(){})},t}();e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(){}return t.prototype.$onInit=function(){this.FonticonPickerCtrl.addFamily({title:this.title,selector:this.selector})},t}(),o=function(){function t(){this.controller=i,this.require={FonticonPickerCtrl:"^miqFonticonPicker"},this.bindings={title:"@",selector:"@"}}return t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(71);e.default=function(t){t.component("miqFonticonFamily",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){this.MiQFonticonService=t,this.$uibModal=e,this.families=[],this.btnClass="btn-default"}return t.$inject=["MiQFonticonService","$uibModal"],t.prototype.addFamily=function(t){this.families.push(t)},t.prototype.openModal=function(){var t=this;void 0===this.fonticons&&(this.fonticons=this.MiQFonticonService.fetch(this.families)),this.toSelect=this.selected,this.modal=this.$uibModal.open({template:n(37),windowClass:"fonticon-modal",keyboard:!1,size:"lg",controllerAs:"$ctrl",controller:["parent",function(t){this.parent=t}],resolve:{parent:function(){return t}}})},t.prototype.closeModal=function(t){t&&(this.selected=this.toSelect),this.modal.close()},t.prototype.markToSelect=function(t){this.toSelect=t},t}();e.FonticonPickerController=i;var o=function(){function t(){this.controller=i,this.template=n(38),this.transclude=!0,this.bindings={btnClass:"@?",selected:"@",inputName:"@"}}return t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(73);e.default=function(t){t.component("miqFonticonPicker",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(74),o=n(72);e.default=function(t){i.default(t),o.default(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=function(){function t(){}return t.prototype.fetch=function(e){return i.reduce(e,function(e,n){return e[n.selector]=t.filterRules(n.selector),e},{})},t.filterRules=function(e){return i.chain(document.styleSheets).map(function(t){return t.rules}).map(function(n){return i.filter(n,function(n){return t.isFontIcon(n,e)})}).filter(function(t){return 0!==t.length}).map(function(e){return i.map(e,function(e){return t.clearRule(e.selectorText)})}).flatten().reduce(function(n,i){return n.concat([t.makeRuleObject(e,i)])},[]).value()},t.isFontIcon=function(t,e){return t.selectorText&&1===t.selectorText.indexOf(e)&&-1!==t.cssText.indexOf("content:")},t.clearRule=function(t){return t.replace("::before","").split(",")[0].replace(".","")},t.makeRuleObject=function(t,e){return{class:t+" "+e,selector:"."+t+"."+e}},t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(76);e.default=function(t){t.service("MiQFonticonService",i.default)}},function(t,e,n){"use strict";var i=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype= |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eeeeeek same here, dist definitely didn't build correctly, js isn't concatenated or uglified
|
||
export default class dialogField { | ||
/*@ngInject*/ | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not sure if the spacing between the ngInject matters here 🤔
dist/js/ui-components.js
Outdated
@@ -1,2 +1,3810 @@ | |||
!function(t){function e(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=".",e(e.s=100)}([function(t,e){t.exports=_},function(t,e){t.exports=angular},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(3);e.default=function(t){t.component("dialogEditorModalFieldTemplate",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=(function(){function t(){}}(),function(){function t(){this.template=function(t,e){return n(98)("./"+e.template)},this.template.$inject=["$element","$attrs"],this.scope=!0,this.controllerAs="vm",this.bindings={modalData:"=",categories:"=?",addEntry:"&?",removeEntry:"&?",currentCategoryEntries:"&?",resolveCategories:"&?"}}return t}());e.default=i},,function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=function(){function t(t){this.MiQTranslateService=t,this.currentPageView=1}return t.$inject=["MiQTranslateService"],t.prototype.onCheckAll=function(t){var e=this;i.each(this.rows,function(n){e.onItemSelected({item:n,isSelected:t})})},t.prototype.onSortClick=function(t,e){this.onSort({headerId:t,isAscending:e})},t.prototype.perPageClick=function(e){var n=Math.ceil(this.settings.items/e.value);this.currentPageView=this.currentPageView>n?n:this.currentPageView;var i=t.calculateStartIndex(this.currentPageView,e.value);this.loadMoreItems({start:i,perPage:e.value})},t.prototype.setPage=function(e){e>this.settings.total&&(this.currentPageView=this.settings.total,e=this.currentPageView),this.currentPageView=e;var n=t.calculateStartIndex(e,this.settings.perpage);this.loadMoreItems({start:n,perPage:this.settings.perpage})},t.prototype.translateOf=function(t,e,n){return this.settings&&this.settings.hasOwnProperty("translateTotalof")?this.settings.translateTotalOf(t,e,n):t+" - "+e+" of "+n},t.prototype.onItemButtonClick=function(t){t.hasOwnProperty("onclick")&&new Function(t.onclick)()},t.prototype.setPagingNumbers=function(){this.settings.hasOwnProperty("current")&&this.settings.hasOwnProperty("perpage")&&(this.settings.startIndex=this.settings.startIndex||t.calculateStartIndex(this.settings.current,this.settings.perpage),this.settings.current===this.settings.total?this.settings.endIndex=this.settings.items-1:this.settings.endIndex=this.settings.current*this.settings.perpage-1)},t.calculateStartIndex=function(t,e){return(t-1)*e},t}();e.DataViewClass=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ToolbarType={BUTTON:"button",BUTTON_TWO_STATE:"buttonTwoState",BUTTON_SELECT:"buttonSelect",CUSTOM:"custom",SEPARATOR:"separator"}},,function(t,e){},,function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(57),a=n(54),l=n(1);!function(t){t.app=l.module("miqStaticAssets.common",[]),t.app.config(["$windowProvider",function(t){var e=t.$get();e.hasOwnProperty("__")||(e.__=function(t){return t})}]),o.default(t.app),a.default(t.app)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(69),a=n(63),l=n(1);!function(t){t.app=l.module("miqStaticAssets.dialogEditor",["ui.sortable","ngDragDrop","frapontillo.bootstrap-switch"]),o.default(t.app),a.default(t.app)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(75),a=n(77),l=n(1);!function(t){t.app=l.module("miqStaticAssets.fonticonPicker",["ui.bootstrap"]),a.default(t.app),o.default(t.app)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(88),a=n(84),l=n(80),s=n(1);!function(t){t.app=s.module("miqStaticAssets.gtl",[]),o.default(t.app),a.default(t.app),l.default(t.app)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(1);!function(t){o.module("miqStaticAssets",["miqStaticAssets.toolbar","miqStaticAssets.common","miqStaticAssets.dialogEditor","miqStaticAssets.gtl","miqStaticAssets.siteSwitcher","miqStaticAssets.fonticonPicker"])}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(89),a=n(1);!function(t){t.app=a.module("miqStaticAssets.siteSwitcher",[]),t.app.component("miqSiteSwitcher",new o.default)}(i||(i={}))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i,o=n(96),a=n(90),l=n(1);!function(t){t.app=l.module("miqStaticAssets.toolbar",["ngSanitize"]),o.default(t.app),a.default(t.app)}(i||(i={}))},,,,,,,,,function(t,e){t.exports='<div class=\'dialog\'>\n <div style="background-color: #f1f1f1; padding: 20px;"\n ng-model=\'vm.dialogTabs[vm.service.activeTab].dialog_groups\'\n ui-sortable=\'vm.sortableOptionsBox\'\n ng-repeat=\'tab in vm.dialogTabs\'\n ng-if=\'tab.position === vm.service.activeTab\'>\n \x3c!-- tab content --\x3e\n <div ng-repeat=\'box in tab.dialog_groups track by $index\'>\n <div class="panel panel-default"\n data-drop=\'true\'\n jqyoui-droppable=\'{multiple: true, onDrop: "vm.droppableOptions"}\'\n ng-model=\'box.dialog_fields\'>\n <div class="panel-heading">\n <i class="pficon-edit"\n ng-click=\'vm.editDialogModal(\n vm.service.activeTab,\n box.position\n )\'></i>\n <strong>{{ box.label }}</strong>\n <button type="button" class="close"\n ng-click="vm.removeBox(box.position)">\n <span aria-hidden="true">\n <i class="fa fa-times"></i>\n </span>\n </button>\n </div>\n <div class="panel-body">\n <div ui-sortable=\'vm.sortableOptionsFields\'\n ng-model=\'box.dialog_fields\'>\n <div class="well well-lg nosort"\n ng-if=\'box.dialog_fields.length === 0\'>\n <i class="fa fa-object-group"></i>\n {{ \'Drag your components here\' | translate }}\n </div>\n <div ng-repeat=\'field in box.dialog_fields\'>\n <form class="form-horizontal">\n <dialog-editor-field box-position="box.position" field-data=\'field\'></dialog-editor-field>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="blank-slate-pf nosort"\n ng-if=\'tab.dialog_groups.length === 0\'\n ng-click=\'vm.addBox()\'>\n <div class="blank-slate-pf-icon">\n <i class="fa fa-plus-circle"></i>\n </div>\n <h1 translate>Start with adding a box</h1>\n </div>\n <div class="panel panel-default nosort">\n <a ng-click=\'vm.addBox()\' translate>\n <i class="pficon-add-circle-o"></i> Create Box\n </a>\n </div>\n </div>\n</div>\n'},function(t,e){t.exports='<div ng-switch on="vm.fieldData.type" class="form-group">\n <label class="control-label col-sm-2">{{ vm.fieldData.label }}</label>\n <div class="col-sm-5">\n\n \x3c!-- text box --\x3e\n <input ng-switch-when="DialogFieldTextBox"\n ng-model="vm.fieldData.default_value"\n class="form-control"\n type="{{ vm.fieldData.options.protected ? \'password\' : \'text\' }}"\n placeholder="{{\'Default value\'|translate}}">\n\n \x3c!-- text area --\x3e\n <textarea ng-switch-when="DialogFieldTextAreaBox"\n ng-model="vm.fieldData.default_value"\n class="form-control"\n rows="4">\n {{ vm.fieldData.default_value }}\n </textarea>\n\n \x3c!-- check box --\x3e\n <input ng-switch-when="DialogFieldCheckBox"\n ng-model="vm.fieldData.default_value"\n ng-true-value="\'t\'"\n class="form-control"\n type="checkbox">\n\n \x3c!-- date control --\x3e\n <input ng-switch-when="DialogFieldDateControl"\n pf-datepicker options="vm.fieldData.options"\n ng-disabled="true"\n date="vm.fieldData.default_value">\n\n \x3c!-- date time control --\x3e\n <div ng-switch-when="DialogFieldDateTimeControl">\n <div class="col-sm-6 dateTimePadding">\n <input ng-model="vm.fieldData.default_value"\n pf-datepicker options="vm.fieldData.dateOptions"\n date="vm.fieldData.default_value">\n </div>\n <div class="col-sm-6">\n <timepicker ng-model="vm.fieldData.default_value"></timepicker>\n </div>\n </div>\n\n \x3c!-- drop down list --\x3e\n <select ng-switch-when="DialogFieldDropDownList"\n ng-model="vm.fieldData.default_value"\n class="form-control">\n <option ng-repeat="option in vm.fieldData.values"\n value="{{ option[0] }}">\n {{ option[1] }}\n </option>\n </select>\n\n \x3c!-- radio button --\x3e\n <span ng-switch-when="DialogFieldRadioButton"\n class="btn-group">\n <label ng-repeat="option in vm.fieldData.values"\n class="btn btn-primary">\n <input type="radio"\n ng-model="vm.fieldData.default_value"\n name="vm.fieldData.name"\n value="option[0]">\n {{ option[1] }}\n </label>\n </span>\n\n \x3c!-- tag control --\x3e\n <select ng-switch-when="DialogFieldTagControl"\n class="form-control">\n <option ng-repeat="option in vm.fieldData.values"\n value="{{ option[0] }}">\n {{ option[1] }}\n </option>\n </select>\n\n </div>\n <div class="col-sm-5">\n <button type="button" class="close"\n ng-click="vm.editDialogModal(\n vm.service.activeTab,\n vm.boxPosition,\n vm.fieldData.position\n )">\n <span aria-hidden="true">\n <i class="pficon-edit"></i>\n </span>\n </button>\n </div>\n</div>\n'},function(t,e){t.exports='\x3c!-- text check box --\x3e\n<div pf-form-group pf-label="{{\'Default value\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.default_value"\n ng-true-value="\'t\'"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate }}">\n</div>\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n'},function(t,e){t.exports='\x3c!-- date time control --\x3e\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Show Past Dates\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.options.show_past_dates"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n'},function(t,e){t.exports='\x3c!-- any dynamic element --\x3e\n<div pf-form-group pf-label="{{\'Entry Point\'|translate}}">\n \x3c!-- TODO: until treepicker and API for it are in the SSUI --\x3e\n <input ng-model="vm.modalData.resource_action.ae_namespace"/>\n</div>\n<div pf-form-group pf-label="{{\'Show Refresh Button\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.show_refresh_button"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate }}"/>\n</div>\n<div pf-form-group pf-label="{{\'Load Values on Init\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.load_values_on_init"\n switch-active="{{vm.modalData.show_refresh_button}}"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n'},function(t,e){t.exports='\x3c!-- radio button --\x3e\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Visible\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.visible"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Default value\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.default_value"\n ng-options="entry as entry[0] for entry in vm.modalData.values">\n <option selected="selected" value="" translate>None</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Value type\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.data_type">\n <option value="integer" translate>Integer</option>\n <option selected="selected" value="string" translate>String</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Sort by\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.sort_by">\n <option value="none" translate>None</option>\n <option value="description" translate>Description</option>\n <option value="value" translate>Value</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Sort order\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.sort_order">\n <option selected="selected" value="ascending" translate>Ascending</option>\n <option value="descending" translate>Descending</option>\n </select>\n</div>\n<div pf-form-group class="form-inline" pf-label="{{\'Entries\'|translate}}" required>\n <div ng-repeat="entry in vm.modalData.values">\n <input id="label" name="label"\n ng-model="entry[0]" type="text" placeholder="Key" required/>\n <input id="label" name="label"\n ng-model="entry[1]" type="text" placeholder="Value" required/>\n <a ng-click=\'vm.removeEntry(entry)\'><i class=\'pficon-close\'></i></a>\n </div>\n <a ng-click=\'vm.addEntry()\'><i class=\'pficon-add-circle-o\'></i></a>\n</div>\n'},function(t,e){t.exports='\x3c!-- tag-contorl --\x3e\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Visible\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.visible"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Category\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.category_id"\n ng-options="category.id.toString() as category.description for category in vm.categories.resources">\n <option selected="selected" value="" translate>None</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Single value\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.options.force_single_value"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Value type\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.data_type">\n <option value="integer" translate>Integer</option>\n <option selected="selected" value="string" translate>String</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Sort by\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.sort_by">\n <option value="none" translate>None</option>\n <option value="description" translate>Description</option>\n <option value="value" translate>Value</option>\n </select>\n</div>\n<div pf-form-group pf-label="{{\'Sort order\'|translate}}">\n <select class="form-control" ng-model="vm.modalData.options.sort_order">\n <option selected="selected" value="ascending" translate>Ascending</option>\n <option value="descending" translate>Descending</option>\n </select>\n</div>\n<div pf-form-group class="form-inline" pf-label="{{\'Entries\'|translate}}" required>\n <div ng-repeat="entry in vm.currentCategoryEntries().children">\n <input id="label" name="label"\n ng-model="entry.description" type="text" placeholder="Key" readonly/>\n </div>\n</div>\n'},function(t,e){t.exports='\x3c!-- text area box --\x3e\n<div pf-form-group pf-input-class="col-sm-9" pf-label="{{\'Default value\'|translate}}">\n <textarea id="default_value" name="default_value"\n ng-model="vm.modalData.default_value">\n {{ vm.modalData.default_value }}\n </textarea>\n</div>\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Visible\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.visible"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Validation\'|translate}}">\n <input id="validator_rule" name="validator_rule"\n ng-model="vm.modalData.validator_rule"/>\n</div>\n'},function(t,e){t.exports='\x3c!-- text box --\x3e\n<div pf-form-group pf-label="{{\'Default value\'|translate}}">\n <input id="default_value" name="default_value"\n ng-model="vm.modalData.default_value"\n type="{{vm.modalData.options.protected ? \'password\' : \'text\'}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Protected\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.options.protected"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate }}"/>\n</div>\n<div pf-form-group pf-label="{{\'Required\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.required"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Read only\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.read_only"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Visible\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.visible"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}">\n</div>\n<div pf-form-group pf-label="{{\'Auto refresh on change\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.trigger_auto_refresh"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n</div>\n<div pf-form-group pf-label="{{\'Validation\'|translate}}">\n <input id="validator_rule" name="validator_rule"\n ng-model="vm.modalData.validator_rule"/>\n</div>\n'},function(t,e){t.exports="<ul ui-sortable='vm.sortableOptions'\n ng-model='vm.tabList'\n class='nav nav-tabs'\n data-tabs='tabs'>\n <li ng-class='{active: tab.active}' ng-repeat='tab in vm.tabList'>\n <a class=\"select-tab\" ng-click='vm.selectTab(tab.position)' data-toggle='tab'>\n <i class=\"pficon-edit\" ng-click='vm.editDialogModal(tab.position)'></i>\n {{ tab.label }}\n <i class='delete-tab glyphicon glyphicon-remove' ng-click='vm.removeTab(tab.position)'></i>\n </a>\n </li>\n <li class='nosort'>\n <a ng-click='vm.addTab()'>\n <i class='pficon-add-circle-o'></i>\n {{ 'Create Tab' | translate }}\n </a>\n </li>\n</ul>\n"},function(t,e){t.exports='<div class="container-fluid container-cards-pf">\n <div class="row row-cards-pf">\n <div class="col-xs-6 col-sm-4 col-md-4"\n ng-repeat=\'dialogField in vm.fields\'\n data-drag="true"\n jqyoui-draggable="{animate:true, placeholder: \'keep\', deepCopy: true}"\n data-jqyoui-options="{revert: \'invalid\', helper: \'clone\'}"\n ng-model="dialogField.placeholders">\n <div class="card-pf card-pf-aggregate-status">\n <h2 class="card-pf-title">\n {{dialogField.label}}\n </h2>\n <div class="card-pf-body">\n <p class="card-pf-aggregate-status-notifications">\n <span class="card-pf-aggregate-status-notification">\n <i ng-class="dialogField.icon"></i>\n </span>\n </p>\n </div>\n </div>\n </div>\n </div>\x3c!-- /row --\x3e\n</div>\x3c!-- /container --\x3e\n'},function(t,e){t.exports='<div class="modal-header">\n <button type="button" class="close" ng-click="$dismiss()" aria-hidden="true">\n <span class="pficon pficon-close"></span>\n </button>\n <h4 class="modal-title" id="myModalLabel" translate>Edit Dialog field</h4>\n</div>\n\n<div class="modal-body">\n <ul class="nav nav-tabs dialog-editor-tab-list">\n <li ng-class="{active:vm.modalTabIsSet(\'element_information\')}">\n <a ng-click="vm.modalTabSet(\'element_information\')" translate>Element Information</a>\n </li>\n <li ng-if="vm.element === \'field\'" ng-class="{active:vm.modalTabIsSet(\'options\')}">\n <a ng-click="vm.modalTabSet(\'options\')" translate>Options</a>\n </li>\n <li ng-if="vm.element === \'field\'" ng-class="{active:vm.modalTabIsSet(\'advanced\')}">\n <a ng-click="vm.modalTabSet(\'advanced\')" translate>Advanced</a>\n </li>\n </ul>\n \x3c!-- general details same for each component - element information --\x3e\n <div ng-show="vm.modalTabIsSet(\'element_information\')">\n <form class="form-horizontal">\n <div pf-form-group pf-label="{{\'Label\'|translate}}" required>\n <input id="label" name="label"\n ng-model="vm.modalData.label" type="text" required/>\n </div>\n <div ng-if="vm.element === \'field\'"\n pf-form-group\n pf-label="{{\'Name\'|translate}}" required>\n <input id="name" name="name"\n ng-model="vm.modalData.name" type="text" required/>\n </div>\n <div pf-form-group pf-input-class="col-sm-9" pf-label="{{\'Description\'|translate}}">\n <textarea id="description" name="description" ng-model="vm.modalData.description">\n {{ vm.modalData.description }}\n </textarea>\n </div>\n <div ng-if="vm.element === \'field\' && vm.modalData.type !== \'DialogFieldTagControl\'"\n pf-form-group\n pf-label="{{\'Dynamic\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.dynamic"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}"/>\n </div>\n </form>\n </div>\n \x3c!-- field specific details --\x3e\n <div ng-show="vm.modalTabIsSet(\'options\')">\n <form class="form-horizontal">\n <div ng-if="!vm.modalData.dynamic" ng-switch on="vm.modalData.type">\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldTextBox"\n template="text-box.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldTextAreaBox"\n template="text-area-box.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldCheckBox"\n template="check-box.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldDateControl"\n template="date-time-control.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldDateTimeControl"\n template="date-time-control.html"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldRadioButton"\n template="radio-button-drop-down-list.html"\n add-entry="vm.addEntry"\n remove-entry="vm.removeEntry"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldDropDownList"\n template="radio-button-drop-down-list.html"\n add-entry="vm.addEntry"\n remove-entry="vm.removeEntry"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n <dialog-editor-modal-field-template ng-switch-when="DialogFieldTagControl"\n template="tag-control.html"\n current-category-entries="vm.currentCategoryEntries"\n categories="vm.categories"\n resolve-categories="vm.resolveCategories"\n modal-data="vm.modalData">\n </dialog-editor-modal-field-template>\n </div>\n <div ng-if="vm.modalData.dynamic">\n <dialog-editor-modal-field-template template="dynamic.html">\n </dialog-editor-modal-field-template>\n </div>\n </form>\n </div>\n \x3c!-- general details same for each field - advanced --\x3e\n <div ng-show="vm.modalTabIsSet(\'advanced\')">\n <form class="form-horizontal">\n <div pf-form-group pf-label="{{\'Reconfigurable\'|translate}}">\n <input bs-switch\n ng-model="vm.modalData.reconfigurable"\n type="checkbox"\n switch-on-text="{{\'Yes\'|translate}}"\n switch-off-text="{{\'No\'|translate}}" >\n </div>\n </form>\n </div>\n</div>\n\n<div class="modal-footer">\n <button class="btn btn-danger"\n type="button"\n ng-click="vm.deleteField()" translate>Delete</button>\n <button type="button" class="btn btn-default" ng-click="$dismiss()" translate>Cancel</button>\n <button type="button"\n class="btn btn-primary"\n ng-click="vm.saveDialogFieldDetails()"\n ng-disabled="vm.modalUnchanged()" translate>Save\n </button>\n</div>\n'},function(t,e){t.exports='<div class="modal-header">\n <h4 class="modal-title" translate>Select an icon</h4>\n</div>\n<div class="modal-body">\n <uib-tabset>\n <uib-tab ng-repeat="font in $ctrl.parent.families" index="0" heading="{{ font.title }}">\n <div class="row">\n <div class="col-xs-1 fonticon" ng-repeat="icon in $ctrl.parent.fonticons[font.selector]" ng-click="$ctrl.parent.markToSelect(icon.class);">\n <span class="fonticon" ng-class="$ctrl.parent.toSelect === icon.class ? \'active\' : \'\'">\n <i ng-class="icon.class" title="{{ icon.selector }}"></i>\n </span>\n </div>\n </div>\n </uib-tab>\n </uib-tabset>\n</div>\n<div class="modal-footer">\n <button class="btn btn-primary" ng-click="$ctrl.parent.closeModal(true);" translate>Apply</button>\n <button class="btn btn-default" ng-click="$ctrl.parent.closeModal(false);" translate>Close</button>\n</div>\n'},function(t,e){t.exports='<div class="btn-group">\n <button type="button" class="btn picked" ng-class="$ctrl.btnClass">\n <i class="fa-lg" ng-class="$ctrl.selected" ng-if="$ctrl.selected"></i>\n <span ng-if="!$ctrl.selected"> </span>\n </button>\n <button type="button" class="btn" ng-class="$ctrl.btnClass" ng-click="$ctrl.openModal();">\n <span class="caret"></span>\n </button>\n</div>\n<div class="hidden" ng-transclude></div>\n<input type="hidden" name="{{ $ctrl.inputName }}" value="{{ $ctrl.selected }}">\n'},function(t,e){t.exports='<div class="miq-data-table">\n <div ng-if="tableCtrl.settings.isLoading" class="spinner spinner-lg"></div>\n <div class="row miq-pagination"\n ng-if="tableCtrl.settings && tableCtrl.settings.sortBy && (tableCtrl.settings.isLoading || tableCtrl.rows.length !== 0)">\n <div ng-if="!tableCtrl.settings.hideSelect"\n class="miq-select-all col-md-2 col-lg-2 col-xs-2">\n <label>{{tableCtrl.settings.selectAllTitle}}: </label>\n <input type="checkbox" ng-model="isChecked" ng-click="tableCtrl.onCheckAll(isChecked)" title="{{tableCtrl.settings.selectAllTitle}}" />\n </div>\n <miq-sort-items ng-if="tableCtrl.settings.sortBy"\n class="miq-sort-items col-md-2 col-lg-2 col-xs-2"\n sort-object="tableCtrl.settings.sortBy"\n headers="tableCtrl.columns"\n drop-down-class="tableCtrl.settings.dropDownClass"\n on-sort="tableCtrl.onSortClick(sortObject.colId, isAscending)"></miq-sort-items>\n <div class="col-md-7 col-lg-7 col-xs-7">\n <div class="miq-pager">\n <div class="miq-per-page">\n <miq-toolbar-list on-item-click="tableCtrl.perPageClick(item)"\n drop-down-class="tableCtrl.settings.dropDownClass"\n toolbar-list="tableCtrl.perPage"></miq-toolbar-list>\n </div>\n <div class="miq-paging" ng-if="tableCtrl.settings.current">\n <miq-paging settings="tableCtrl.settings" on-change-page="tableCtrl.setTablePage(pageNumber)"></miq-paging>\n </div>\n </div>\n </div>\n <div ng-if="tableCtrl.settings.items" class="col-md-1 col-lg-1 col-xs-1 miq-page-counter">\n <label>\n {{tableCtrl.translateOf(tableCtrl.settings.startIndex, tableCtrl.settings.endIndex, tableCtrl.settings.items)}}\n </label>\n </div>\n </div>\n <table class="table table-bordered table-striped table-hover miq-table-with-footer miq-table"\n ng-if="tableCtrl.rows && tableCtrl.rows.length !== 0">\n <thead>\n <tr>\n <th class="narrow">\n\n </th>\n <th ng-if="$index !== 0"\n ng-repeat="column in tableCtrl.columns track by $index"\n ng-click="tableCtrl.onSortClick($index, !!tableCtrl.settings.sortBy && !tableCtrl.settings.sortBy.isAscending)"\n ng-class="tableCtrl.getColumnClass(column)">\n {{column.text}}\n <div class="pull-right" ng-if="tableCtrl.isFilteredBy(column)" >\n <i class="fa" ng-class="tableCtrl.getSortClass()"></i>\n </div>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="row in tableCtrl.rows"\n ng-class="{active : row.selected}"\n ng-click="tableCtrl.onRowClick({item: row, event: $event})">\n <td ng-repeat="(columnKey, column) in tableCtrl.columns"\n ng-class="{\n narrow: row.cells[columnKey].is_checkbox || row.cells[columnKey].icon || row.cells[columnKey].is_button\n }">\n <input ng-if="row.cells[columnKey].is_checkbox && !tableCtrl.settings.hideSelect"\n ng-click="tableCtrl.onItemSelected({item: row, isSelected: isSelected})"\n onclick="event.stopPropagation();"\n type="checkbox"\n ng-model="isSelected"\n name="check_{{row.id}}"\n value="{{row.id}}"\n ng-checked="row.checked"\n class="list-grid-checkbox">\n <i ng-if="row.cells[columnKey].icon && tableCtrl.isIconOrImage(row, columnKey)"\n class="{{row.cells[columnKey].icon}}"\n title="{{row.cells[columnKey].title}}">\n <i ng-if="row.cells[columnKey].icon2" ng-class="row.cells[columnKey].icon2"></i>\n </i>\n <img ng-if="row.cells[columnKey].icon === null && tableCtrl.isIconOrImage(row, columnKey)"\n ng-src="{{row.img_url}}"\n alt="{{row.cells[columnKey].title}}"\n title="{{row.cells[columnKey].title}}" />\n <span ng-if="row.cells[columnKey].text && !row.cells[columnKey].is_button">\n {{row.cells[columnKey].text}}\n </span>\n <button ng-if="row.cells[columnKey].is_button && row.cells[columnKey].onclick"\n class="btn btn-primary"\n title="{{row.cells[columnKey].title}}"\n alt="{{row.cells[columnKey].title}}"\n ng-click="tableCtrl.onItemButtonClick(row.cells[columnKey])">\n {{row.cells[columnKey].text}}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n'},function(t,e){t.exports='<ul class="pagination">\n <li>\n <a ng-class="{disabled: pagingCtrl.settings.current === 1}"\n ng-click="pagingCtrl.onChangePage({pageNumber: 1})"\n href="javascript:void(0)">\n <span class="i fa fa-angle-double-left"></span>\n </a>\n </li>\n <li>\n <a ng-class="{disabled: pagingCtrl.settings.current === 1}"\n ng-click="pagingCtrl.onChangePage({pageNumber: pagingCtrl.settings.current - 1})"\n href="javascript:void(0)">\n <span class="i fa fa-angle-left"></span>\n </a>\n </li>\n <li ng-repeat="page in pagingCtrl.updatePages(pagingCtrl.settings.total) track by $index">\n <a ng-class="{disabled: pagingCtrl.settings.current === (page + 1)}"\n href="javascript:void(0)"\n ng-click="pagingCtrl.onChangePage({pageNumber: page + 1})">\n {{page + 1}}\n </a>\n </li>\n <li>\n <a ng-class="{disabled: (pagingCtrl.settings.current) === pagingCtrl.settings.total}"\n ng-click="pagingCtrl.onChangePage({pageNumber: (pagingCtrl.settings.current + 1)})"\n href="javascript:void(0)">\n <span class="i fa fa-angle-right"></span>\n </a>\n </li>\n <li>\n <a ng-class="{disabled: (pagingCtrl.settings.current) === pagingCtrl.settings.total}"\n ng-click="pagingCtrl.onChangePage({pageNumber: pagingCtrl.settings.total})"\n href="javascript:void(0)">\n <span class="i fa fa-angle-double-right"></span>\n </a>\n </li>\n</ul>\n'},function(t,e){t.exports='<div class="miq-tile-section">\n <div ng-if="tileCtrl.settings.isLoading" class="spinner spinner-lg"></div>\n <div class="row miq-pagination"\n ng-if="tileCtrl.settings && tileCtrl.settings.sortBy && (tileCtrl.settings.isLoading || tileCtrl.rows.length !== 0)">\n <div class="miq-select-all col-md-2 col-lg-2 col-xs-2"\n ng-if="!tileCtrl.settings.hideSelect">\n <label>{{tileCtrl.settings.selectAllTitle}}: </label>\n <input type="checkbox" ng-model="isChecked" ng-click="tileCtrl.onCheckAllTiles(isChecked)" title="{{tileCtrl.settings.selectAllTitle}}" />\n </div>\n <miq-sort-items ng-if="tileCtrl.settings.sortBy"\n class="miq-sort-items col-md-2 col-lg-2 col-xs-2"\n sort-object="tileCtrl.settings.sortBy"\n headers="tileCtrl.columns"\n drop-down-class="tileCtrl.settings.dropDownClass"\n on-sort="tileCtrl.onSortClick(sortObject.colId, isAscending)"></miq-sort-items>\n <div class="col-md-7 col-lg-7 col-xs-7">\n <div class="miq-pager">\n <div class="miq-per-page">\n <miq-toolbar-list on-item-click="tileCtrl.perPageClick(item)"\n drop-down-class="tileCtrl.settings.dropDownClass"\n toolbar-list="tileCtrl.perPage"></miq-toolbar-list>\n </div>\n <div class="miq-paging" ng-if="tileCtrl.settings.current">\n <miq-paging settings="tileCtrl.settings" on-change-page="tileCtrl.setPage(pageNumber)"></miq-paging>\n </div>\n </div>\n </div>\n <div ng-if="tileCtrl.settings.items" class="col-md-1 col-lg-1 col-xs-1 miq-page-counter">\n <label>\n {{tileCtrl.translateOf(tileCtrl.settings.startIndex, tileCtrl.settings.endIndex, tileCtrl.settings.items)}}\n </label>\n </div>\n </div>\n <div pf-card-view\n config="tileCtrl.options"\n items="tileCtrl.rows"\n class="miq-tile-view"\n ng-class="tileCtrl.tileClass()">\n <div ng-switch="config.type">\n <ng-switch-when ng-switch-when="small">\n <div class="miq-tile-head">\n <a href="javascript:void(0)" title="{{config.fetchTileName(item)}}" ng-click="config.onItemClick(item, $event)">{{config.fetchTileName(item) | limitToSuffix : 5 : 5 }}</a>\n </div>\n <div class="miq-quadicon">\n <a href="javascript:void(0)" ng-click="config.onItemClick(item, $event)">\n <div ng-bind-html="config.trustAsHtmlQuadicon(item)"></div>\n </a>\n </div>\n </ng-switch-when>\n <ng-switch-when ng-switch-when="big">\n <a href="javascript:void(0)" ng-click="config.onItemClick(item, $event)">{{config.fetchTileName(item)}}</a>\n <div class="row miq-row-margin-only-top ">\n <div class="col-md-3 col-lg-3 col-xs-3 miq-icon-section">\n <a href="javascript:void(0)" ng-click="config.onItemClick(item, $event)">\n <div ng-bind-html="config.trustAsHtmlQuadicon(item)"></div>\n </a>\n </div>\n <div class="col-md-9 col-lg-9 col-xs-9 miq-info-section">\n <dl class="dl-horizontal tile">\n <dt ng-repeat-start="(key, header) in config.columns | limitTo: 7 track by $index" ng-if="header.text && header.text.indexOf(\'Name\') === -1" title="{{header.text}}">{{header.text}}:</dt>\n <dd ng-repeat-end ng-if="header.text && header.text.indexOf(\'Name\') === -1" title="{{item.cells[key].text}}">{{item.cells[key].text | limitToSuffix : 25 : 25}}</dd>\n </dl>\n <div ng-repeat="(columnKey, column) in config.columns"\n ng-if="item.cells[columnKey].is_button && item.cells[columnKey].onclick"\n align="right">\n <button class="btn btn-primary"\n title="{{item.cells[columnKey].title}}"\n alt="{{item.cells[columnKey].title}}"\n ng-click="config.onButtonItemClick(item.cells[columnKey])">\n {{item.cells[columnKey].text}}\n </button>\n </div>\n </div>\n </div>\n </ng-switch-when>\n </div>\n </div>\n</div>\n'},function(t,e){t.exports='<div class="uib-dropdown miq-siteswitcher">\n <button class="btn btn-link uib-dropdown-toggle" type="button" id="domain-switcher" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">\n <span class="fa fa-lg fa-th miq-siteswitcher-icon"></span>\n </button>\n <div class="uib-dropdown-menu uib-dropdown-menu-right" aria-labelledby="domain-switcher">\n <div ng-repeat="site in ctrl.sites" class="miq-siteswitcher-entry">\n <a class="miq-siteswitcher-link" ng-href="{{site.url}}" target="_blank">\n <span title="{{site.tooltip}}" class="fa fa-3x" ng-class="site.iconClass"></span>\n <div>{{site.title}}</div>\n </a>\n </div>\n </div>\n</div>\n'},function(t,e){t.exports='<button title="{{toolbarButton.title}}"\n data-explorer="{{toolbarButton.explorer}}"\n data-confirm-tb="{{toolbarButton.confirm}}"\n id="{{toolbarButton.id}}"\n name="{{toolbarButton.name}}"\n type="button"\n class="btn btn-default"\n data-click="{{toolbarButton.id}}"\n data-url="{{toolbarButton.url}}"\n data-url_parms="{{toolbarButton.url_parms}}"\n data-prompt="{{toolbarButton.prompt}}"\n data-popup="{{toolbarButton.popup}}"\n ng-class="{active: toolbarButton.selected, disabled: !toolbarButton.enabled}"\n ng-hide="toolbarButton.hidden"\n ng-click="onItemClick({item: toolbarButton, $event: $event})">\n <i ng-if="toolbarButton.icon && toolbarButton.text" class="{{toolbarButton.icon}}" style="margin-right: 5px;"></i>\n <i ng-if="toolbarButton.icon && !toolbarButton.text" class="{{toolbarButton.icon}}"></i>\n <img ng-if="toolbarButton.img_url && !toolbarButton.icon" ng-src="{{toolbarButton.img_url}}"\n data-enabled="{{toolbarButton.img_url}}"\n data-disabled="{{toolbarButton.img_url}}">\n {{toolbarButton.text}}\n</button>\n'},function(t,e){t.exports='<div class="btn-group" ng-class="vm.dropDownClass" uib-dropdown ng-if="vm.isEmpty">\n <button type="button" uib-dropdown-toggle class="btn uib-dropdown-toggle btn-default"\n ng-class="{disabled: !vm.toolbarList.enabled}" title="{{vm.toolbarList.title}}">\n <i class="{{vm.toolbarList.icon}}" style="margin-right: 5px;" ng-if="vm.toolbarList.icon"></i>\n {{vm.toolbarList.text}}\n <span class="caret"></span>\n </button>\n <ul class="uib-dropdown-menu" role="menu">\n <li ng-repeat="item in vm.toolbarList.items track by $index" ng-class="{disabled: !item.enabled}">\n <a ng-if="item.type !== \'separator\'"\n ng-hide="item.hidden"\n href=""\n title="{{item.title}}"\n data-explorer="{{item.explorer}}"\n data-confirm-tb="{{item.confirm}}"\n ng-click="vm.onItemClick({item: item, $event: $event})"\n data-function="{{item.data.function}}"\n data-function-data="{{item.data[\'function-data\']}}"\n data-target="{{item.data.target}}"\n data-toggle="{{item.data.toggle}}"\n data-click="{{item.id}}"\n name="{{item.id}}"\n id="{{item.id}}"\n data-url_parms="{{item.url_parms}}"\n data-prompt="{{item.prompt}}"\n data-popup="{{item.popup}}"\n data-url="{{item.url}}">\n <i ng-if="item.icon && item.text" class="{{item.icon}}" style="margin-right: 5px;"></i>\n <i ng-if="item.icon && !item.text" class="{{item.icon}}"></i>\n <img ng-if="item.img_url && !item.icon" ng-src="{{item.img_url}}"\n data-enabled="{{item.img_url}}"\n data-disabled="{{item.img_url}}">\n {{item.text}}\n </a>\n <div ng-if="item.type === \'separator\'" class="divider " role="presentation" ng-hide="item.hidden"></div>\n </li>\n </ul>\n</div>\n'},function(t,e){t.exports='<div class="toolbar-pf-actions miq-toolbar-actions">\n <div class="form-group miq-toolbar-group"\n ng-repeat="toolbarItem in vm.toolbarItems"\n ng-if="vm.hasContent(toolbarItem)">\n <ng-repeat ng-repeat="item in toolbarItem ">\n <miq-toolbar-button ng-if="item.type === vm.getButtonType()"\n toolbar-button="item"\n on-item-click="vm.onItemClick(item, $event)">\n </miq-toolbar-button>\n <miq-toolbar-button ng-if="item.type === vm.getButtonTwoState() && item.id.indexOf(\'view_\') === -1"\n toolbar-button="item"\n on-item-click="vm.onItemClick(item, $event)">\n </miq-toolbar-button>\n <miq-toolbar-list ng-if="item.type === vm.getToolbarListType() && item.items.length > 0"\n toolbar-list="item"\n on-item-click="vm.onItemClick(item, $event)">\n </miq-toolbar-list>\n <div ng-if="item.name == \'custom\' && item.args && item.args.html"\n ng-bind-html="vm.trustAsHtml(item.args.html)"\n class="miq-custom-html"></div>\n </ng-repeat>\n </div>\n <miq-toolbar-view toolbar-views="vm.toolbarViews"\n on-item-click="vm.onViewClick({item: item, $event: $event})"\n class="miq-view-list">\n </miq-toolbar-view>\n</div>\n'},function(t,e){t.exports='<div class="toolbar-pf-view-selector pull-right form-group">\n <button class="btn btn-link"\n ng-repeat="item in vm.toolbarViews"\n ng-class="{active: item.selected}"\n title="{{item.title}}"\n id="{{item.id}}"\n data-url="{{item.url}}"\n data-url_parms="{{item.url_parms}}"\n data-prompt="{{item.prompt}}"\n data-popup="{{item.popup}}"\n ng-click="vm.onItemClick({item: item, $event: $event})"\n name="{{item.name}}">\n <i class="{{item.icon}}" style=""></i>\n </button>\n</div>\n'},,,,,,,,function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(55);e.default=function(t){t.component("miqSortItems",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=function(){function t(t,e){this.$element=t,this.$timeout=e,this.initOptions()}return t.$inject=["$element","$timeout"],t.prototype.$onChanges=function(t){t.headers&&(this.fillFields(),this.sortObject&&this.setSortItem()),t.dropDownClass&&this.applyClass()},t.prototype.$postLink=function(){var t=this;this.$timeout(function(){return t.applyClass()})},t.prototype.setSortItem=function(){this.sortObject&&this.sortObject.sortObject&&this.sortObject&&this.sortObject.sortObject.text&&(this.options.currentField={colId:i.findIndex(this.headers,this.sortObject.sortObject),id:this.sortObject.sortObject.text.toLowerCase(),title:this.sortObject.sortObject.text},this.options.isAscending=this.sortObject.isAscending)},t.prototype.initOptions=function(){var t=this;this.options={fields:[],onSortChange:function(e,n){return t.onSort({sortObject:e,isAscending:n})},currentField:{}}},t.prototype.fillFields=function(){var t=this;i.each(this.headers,function(e,n){!e.hasOwnProperty("is_narrow")&&e.hasOwnProperty("text")&&t.options.fields.push({colId:n,id:e.text.toLowerCase(),title:e.text})})},t.prototype.applyClass=function(){this.dropDownClass&&(Array.isArray(this.dropDownClass)?(t=this.$element.find(".uib-dropdown")).addClass.apply(t,this.dropDownClass):this.$element.find(".uib-dropdown").addClass(this.dropDownClass));var t},t}();e.SortItemsController=o;var a=function(){function t(){this.replace=!0,this.template='<div pf-sort config="vm.options"></div>',this.controller=o,this.controllerAs="vm",this.bindings={onSort:"&",headers:"<",sortObject:"<",dropDownClass:"<"}}return t}();e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(){this.listDataTable="/list",this.deleteItemDataTable="/delete",this.validateItem="/validate",this.createItem="/create",this.providerSettings="/list_providers_settings",this.toolbarSettings="/toolbar"}return t}();e.DefaultEndpoints=i;var o=function(){function t(){this.rootPoint="",this.endpoints=new i}return t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(56),o=n(58);e.default=function(t){t.service("MiQEndpointsService",i.default),t.service("MiQTranslateService",o.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.$window=t}return t.$inject=["$window"],t.prototype.translateString=function(t){return this.$window.__(t)},t}();e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1),o=n(0),a=function(){function t(t,e){this.DialogEditor=t,this.DialogEditorModal=e}return t.$inject=["DialogEditor","DialogEditorModal"],t.prototype.$onInit=function(){var t=this;this.service=this.DialogEditor,this.dialogTabs=this.DialogEditor.getDialogTabs(),this.sortableOptionsBox={axis:"y",cancel:".nosort",cursor:"move",opacity:.5,revert:50,stop:function(e,n){var i=n.item.scope().$parent.tab.dialog_groups;t.DialogEditor.updatePositions(i)}},this.sortableOptionsFields={axis:"y",cancel:".nosort",cursor:"move",revert:50,stop:function(e,n){var i=n.item.scope().$parent.box.dialog_fields;t.DialogEditor.updatePositions(i)}}},t.prototype.addBox=function(){this.dialogTabs[this.DialogEditor.activeTab].dialog_groups.push({description:__("Description"),label:__("Label"),display:"edit",position:0,dialog_fields:[]}),this.DialogEditor.updatePositions(this.dialogTabs[this.DialogEditor.activeTab].dialog_groups)},t.prototype.removeBox=function(t){o.remove(this.dialogTabs[this.DialogEditor.activeTab].dialog_groups,function(e){return e.position===t}),this.DialogEditor.updatePositions(this.dialogTabs[this.DialogEditor.activeTab].dialog_groups)},t.prototype.droppableOptions=function(t,e){var n=i.element(t.target).scope();this.DialogEditor.updatePositions(n.box.dialog_fields)},t.prototype.editDialogModal=function(t,e){this.DialogEditorModal.showModal(t,e)},t}(),l=function(){function t(){this.template=n(25),this.controller=a,this.controllerAs="vm"}return t}();e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(59);e.default=function(t){t.component("dialogEditorBoxes",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){this.DialogEditor=t,this.DialogEditorModal=e}return t.$inject=["DialogEditor","DialogEditorModal"],t.prototype.$onInit=function(){this.service=this.DialogEditor},t.prototype.editDialogModal=function(t,e,n){this.DialogEditorModal.showModal(t,e,n)},t}(),o=function(){function t(){this.template=n(26),this.controller=i,this.controllerAs="vm",this.bindings={fieldData:"<",boxPosition:"<"}}return t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(61);e.default=function(t){t.component("dialogEditorField",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(64),o=n(60),a=n(62),l=n(66),s=n(2);e.default=function(t){i.default(t),o.default(t),a.default(t),l.default(t),s.default(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(65);e.default=function(t){t.component("dialogEditorTabs",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(1),o=n(0),a=function(){function t(t,e){this.DialogEditor=t,this.DialogEditorModal=e}return t.$inject=["DialogEditor","DialogEditorModal"],t.prototype.$onInit=function(){var t=this;this.tabList=this.DialogEditor.getDialogTabs(),0!==this.tabList.length&&(this.DialogEditor.activeTab=0,this.tabList[this.DialogEditor.activeTab].active=!0),this.sortableOptions={cancel:".nosort",cursor:"move",helper:"clone",revert:50,stop:function(e,n){var a=i.element(n.item).scope().$parent,l=a.vm.tabList;t.DialogEditor.updatePositions(l),t.DialogEditor.activeTab=o.find(l,{active:!0}).position}}},t.prototype.addTab=function(){this.tabList.forEach(function(t){return t.active=!1});var t=this.tabList.length;this.tabList.push({description:__("New tab ")+t,display:"edit",label:__("New tab ")+t,position:t,active:!0,dialog_groups:[]}),this.DialogEditor.activeTab=t,this.DialogEditor.updatePositions(this.tabList)},t.prototype.removeTab=function(t){if(this.tabList[t].active&&(this.tabList.length-1===this.tabList[t].position&&this.tabList.length-1!=0?this.tabList[t-1].active=!0:this.tabList.length-1>this.tabList[t].position&&(this.tabList[t+1].active=!0)),o.remove(this.tabList,function(e){return e.position===t}),0!==this.tabList.length){this.DialogEditor.updatePositions(this.tabList);var e=o.find(this.tabList,{active:!0});i.isDefined(e)&&(this.DialogEditor.activeTab=e.position)}},t.prototype.selectTab=function(t){o.find(this.tabList,{active:!0}).active=!1,this.tabList[t].active=!0,this.DialogEditor.activeTab=t},t.prototype.editDialogModal=function(t){this.DialogEditorModal.showModal(t)},t}(),l=function(){function t(){this.template=n(34),this.controller=a,this.controllerAs="vm"}return t}();e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(67);e.default=function(t){t.component("dialogEditorFieldStatic",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e,n,i){void 0===i&&(i={}),this.icon=e,this.label=n,this.placeholders=Object.assign({name:"",description:"",type:t,display:"edit",display_method_options:{},read_only:!1,required:!1,required_method_options:{},default_value:"",values_method_options:{},label:n,position:0,dynamic:!1,show_refresh_button:!1,load_values_on_init:!1,auto_refresh:!1,trigger_auto_refresh:!1,reconfigurable:!1,visible:!0,options:{protected:!1},resource_action:{resource_type:"DialogField",ae_attributes:{}}},i)}return t}(),o=function(){function t(){this.fields={dialogFieldTextBox:new i("DialogFieldTextBox","fa fa-font",__("Text Box")),dialogFieldTextAreaBox:new i("DialogFieldTextAreaBox","fa fa-file-text-o",__("Text Area")),dialogFieldCheckBox:new i("DialogFieldCheckBox","fa fa-check-square-o",__("Check Box")),dialogFieldDropDownList:new i("DialogFieldDropDownList","fa fa-caret-square-o-down",__("Dropdown List"),{data_type:"string",values:[],options:{sort_by:"description",sort_order:"ascending"}}),dialogFieldRadioButton:new i("DialogFieldRadioButton","fa fa-circle-o",__("Radio Button"),{data_type:"string",values:[],options:{sort_by:"description",sort_order:"ascending"}}),dialogFieldDateControl:new i("DialogFieldDateControl","fa fa-calendar",__("Date Control")),dialogFieldDateTimeControl:new i("DialogFieldDateTimeControl","fa fa-clock-o",__("Date Time Control")),dialogFieldTagControl:new i("DialogFieldTagControl","fa fa-tags",__("Tag Control"),{data_type:"string",values:[],options:{force_single_value:!1,sort_by:"description",sort_order:"ascending"}})}}return t}();e.ToolboxController=o;var a=function(){function t(){this.template=n(35),this.controller=o,this.controllerAs="vm"}return t}();e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(){this.data={},this.activeTab=0}return t.prototype.setData=function(t){this.data=t},t.prototype.getDialogId=function(){return this.data.content[0].id},t.prototype.getDialogLabel=function(){return this.data.content[0].label},t.prototype.getDialogDescription=function(){return this.data.content[0].description},t.prototype.getDialogTabs=function(){return this.data.content[0].dialog_tabs},t.prototype.updatePositions=function(t){t.forEach(function(t,e){return t.position=e})},t}();e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(68),o=n(70);e.default=function(t){t.service("DialogEditor",i.default),t.service("DialogEditorModal",o.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=n(1),a=function(){function t(t,e,n,a){var l=this;switch(this.dialogDetails=t,this.$uibModalInstance=e,this.API=n,this.DialogEditor=a,this.modalTab="element_information",o.extend(this,{dialog:this.dialogDetails,saveDialogFieldDetails:this.saveDialogFieldDetails,addEntry:this.addEntry,removeEntry:this.removeEntry,deleteField:this.deleteField,modalUnchanged:this.modalUnchanged,modalTabSet:this.modalTabSet,modalTabIsSet:this.modalTabIsSet,currentCategoryEntries:this.currentCategoryEntries}),o.isUndefined(this.dialog.fieldId)&&o.isUndefined(this.dialog.boxId)&&o.isDefined(this.dialog.tabId)?this.element="tab":o.isUndefined(this.dialog.fieldId)&&o.isDefined(this.dialog.boxId)&&o.isDefined(this.dialog.tabId)?this.element="box":o.isDefined(this.dialog.fieldId)&&o.isDefined(this.dialog.boxId)&&o.isDefined(this.dialog.tabId)&&(this.element="field"),this.element){case"tab":this.modalData=i.cloneDeep(this.DialogEditor.getDialogTabs()[this.dialog.tabId]);break;case"box":this.modalData=i.cloneDeep(this.DialogEditor.getDialogTabs()[this.dialog.tabId].dialog_groups[this.dialog.boxId]);break;case"field":this.modalData=i.cloneDeep(this.DialogEditor.getDialogTabs()[this.dialog.tabId].dialog_groups[this.dialog.boxId].dialog_fields[this.dialog.fieldId]),"DialogFieldTagControl"===this.modalData.type&&this.resolveCategories().then(function(t){l.categories=t})}}return t.$inject=["dialogDetails","$uibModalInstance","API","DialogEditor"],t.prototype.resolveCategories=function(){return this.API.get("/api/categories?expand=resources&attributes=description,single_value,children")},t.prototype.modalTabSet=function(t){this.modalTab=t},t.prototype.modalTabIsSet=function(t){return this.modalTab===t},t.prototype.modalUnchanged=function(){switch(this.element){case"tab":return i.isMatch(this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab],this.modalData);case"box":return i.isMatch(this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId],this.modalData);case"field":return i.isMatch(this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].dialog_fields[this.dialog.fieldId],this.modalData)}},t.prototype.saveDialogFieldDetails=function(){switch(this.element){case"tab":this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].label=this.modalData.label,this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].description=this.modalData.description;break;case"box":this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].label=this.modalData.label,this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].description=this.modalData.description;break;case"field":this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].dialog_fields[this.dialog.fieldId]=this.modalData}this.$uibModalInstance.close()},t.prototype.deleteField=function(){var t=this;i.remove(this.DialogEditor.getDialogTabs()[this.DialogEditor.activeTab].dialog_groups[this.dialog.boxId].dialog_fields,function(e){return e.position===t.dialog.fieldId}),this.$uibModalInstance.close()},t.prototype.addEntry=function(){this.modalData.values.push(["",""])},t.prototype.removeEntry=function(t){i.pull(this.modalData.values,t)},t.prototype.currentCategoryEntries=function(){if(o.isDefined(this.categories))return i.find(this.categories.resources,"id",Number(this.modalData.options.category_id))},t}(),l=function(){function t(t){this.$uibModal=t}return t.$inject=["$uibModal"],t.prototype.showModal=function(t,e,i){var o={template:n(36),controller:a,controllerAs:"vm",size:"lg",resolve:{dialogDetails:function(){return{tabId:t,boxId:e,fieldId:i}}}};return this.$uibModal.open(o).result.catch(function(){})},t}();e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(){}return t.prototype.$onInit=function(){this.FonticonPickerCtrl.addFamily({title:this.title,selector:this.selector})},t}(),o=function(){function t(){this.controller=i,this.require={FonticonPickerCtrl:"^miqFonticonPicker"},this.bindings={title:"@",selector:"@"}}return t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(71);e.default=function(t){t.component("miqFonticonFamily",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){this.MiQFonticonService=t,this.$uibModal=e,this.families=[],this.btnClass="btn-default"}return t.$inject=["MiQFonticonService","$uibModal"],t.prototype.addFamily=function(t){this.families.push(t)},t.prototype.openModal=function(){var t=this;void 0===this.fonticons&&(this.fonticons=this.MiQFonticonService.fetch(this.families)),this.toSelect=this.selected,this.modal=this.$uibModal.open({template:n(37),windowClass:"fonticon-modal",keyboard:!1,size:"lg",controllerAs:"$ctrl",controller:["parent",function(t){this.parent=t}],resolve:{parent:function(){return t}}})},t.prototype.closeModal=function(t){t&&(this.selected=this.toSelect),this.modal.close()},t.prototype.markToSelect=function(t){this.toSelect=t},t}();e.FonticonPickerController=i;var o=function(){function t(){this.controller=i,this.template=n(38),this.transclude=!0,this.bindings={btnClass:"@?",selected:"@",inputName:"@"}}return t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(73);e.default=function(t){t.component("miqFonticonPicker",new i.default)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(74),o=n(72);e.default=function(t){i.default(t),o.default(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),o=function(){function t(){}return t.prototype.fetch=function(e){return i.reduce(e,function(e,n){return e[n.selector]=t.filterRules(n.selector),e},{})},t.filterRules=function(e){return i.chain(document.styleSheets).map(function(t){return t.rules}).map(function(n){return i.filter(n,function(n){return t.isFontIcon(n,e)})}).filter(function(t){return 0!==t.length}).map(function(e){return i.map(e,function(e){return t.clearRule(e.selectorText)})}).flatten().reduce(function(n,i){return n.concat([t.makeRuleObject(e,i)])},[]).value()},t.isFontIcon=function(t,e){return t.selectorText&&1===t.selectorText.indexOf(e)&&-1!==t.cssText.indexOf("content:")},t.clearRule=function(t){return t.replace("::before","").split(",")[0].replace(".","")},t.makeRuleObject=function(t,e){return{class:t+" "+e,selector:"."+t+"."+e}},t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(76);e.default=function(t){t.service("MiQFonticonService",i.default)}},function(t,e,n){"use strict";var i=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function i(){this.constructor=e}t(e,n),e.prototype= |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For sure something is wack with dist build, new content isn't concatenated or uglified :-/ :thinking:
@@ -0,0 +1,25 @@ | |||
|
|||
export default class DialogComponentController { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Keep to the project's standards please. 2 spaces, not 4.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@chalettu Still relevant ;)
application-settings.js
Outdated
@@ -12,7 +12,8 @@ module.exports = { | |||
dialogEditor: '/dialog-editor', | |||
gtl: '/gtl', | |||
siteSwitcher: '/site-switcher', | |||
fonticonPicker: '/fonticon-picker' | |||
fonticonPicker: '/fonticon-picker', | |||
dialogs:'/dialogs' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing space ;)
@@ -0,0 +1,29 @@ | |||
<div> | |||
<div ng-if=" !vm.dialog.label"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here, bad spacing.
@himdel good catch. Maybe we should add linting check to travis? |
* @name DialogController | ||
*/ | ||
export class DialogController extends DialogClass implements IDialogs { | ||
public dialogFields: any; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And here :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Still relevant.
@@ -0,0 +1,133 @@ | |||
<div ng-if="vm.dialogField.visible" class="form-group" ng-class="{'has-error': vm.dialogField.fieldValidation===false}"> | |||
<label class="control-label col-md-2 col-lg-4 col-xl-2 col-sm-2">{{ ::vm.dialogField.label }}</label> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And here..
@chriskacerguis That makes sense :) maybe not so much travis as code climate, but sure :) |
And just a heads up, after we merge #83, you can drop the |
@chalettu Could you please rebase and make the changes people requested, so we can merge this? |
1 similar comment
@chalettu Could you please rebase and make the changes people requested, so we can merge this? |
f710160
to
b78af39
Compare
In the process of rebasing and going over the linting related issues. |
@himdel , I went through and found where the linter that is in place had messages about formatting. I addressed all linting related warnings and also reformatted the HTML templates to line up more as expected. |
src/dialogs/services/dialogData.ts
Outdated
* | ||
**/ | ||
private updateFieldSortOrder(data) { | ||
const values: any = data.values; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This whole function could be
let values = _.sortBy(data.values, data.options.sort_by === 'value' ? 0 : 1);
return data.sort_order === 'ascending' ? values : values.reverse();
(not saying it has to be this short, just that you probably don't need to reimplement sortBy by yourself)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good feedback. Some of these functions are carryovers from the existing components, this is a solid enhancement
src/dialogs/services/dialogData.ts
Outdated
* @function isBlank | ||
* @param value {any} value to check to see if blank | ||
*/ | ||
private isBlank(value): any { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This whole function is ! value
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ended up removing it. Realized I must have changed something to where it wasn't needed.
src/dialogs/services/dialogData.ts
Outdated
const regex = new RegExp(`${field.validator_rule}`); | ||
const regexValidates = regex.test(fieldValue); | ||
validation.isValid = regexValidates; | ||
validation.message = 'Entered text does not match required format.'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
missing gettext?
src/dialogs/services/dialogData.ts
Outdated
if (field.required) { | ||
if (fieldValue === '') { | ||
validation.isValid = false; | ||
validation.message = 'This field is required'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
missing gettext?
src/dialogs/services/dialogData.ts
Outdated
if (angular.isDefined(data.default_value) && data.default_value !== null) { | ||
defaultValue = data.default_value; | ||
} else { | ||
defaultValue = data.values[0][0]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The data comes that way from the server, right? :(
I don't like all those [0]
and [1]
instead of .value
, .description
, and that combined with taking the first element of array means this code is completely opaque until you know what the data looks like.
(I guess this is mostly a rant, unless you can change how the data comes from the server, right? :))
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, on this one it is how the data comes back from the server. It annoys me as well. I might tweak it to make it more readable.
} | ||
} | ||
export default class DialogField { | ||
/*@ngInject*/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
stray ngInject
?
dist/js/ui-components.js
Outdated
@@ -0,0 +1,3810 @@ | |||
/******/ (function(modules) { // webpackBootstrap |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You need to remove this file from git, and rebase so that you get the .gitiignore
entry for it ;).
We can't merge with this here..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same goes for dist/js/ui-components.js.map
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, i had rebased and not sure how it got back in. Will remove it.
demo/views/dialogs/main.html
Outdated
@@ -0,0 +1,19 @@ | |||
<div> | |||
<div class="row demo-dialog-container "> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Still bad spacing
*/ | ||
|
||
export class DialogFieldController extends DialogFieldClass { | ||
public service: any; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And here, 2 spaces not 4.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This made it past whatever linting rules are in place in the repo. I can switch this to two spaces though.
|
||
this.changesHappened(); // doing this so that the field value gets bubbled up to the dialog component | ||
} | ||
/** |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would be nice to get some newlines here, at least between functions, and between classes.
@serenamarie125 we are componentizing the dialog rendering system so we can use it both in the SUI and ops ui (so we don't need to maintain it in two places) |
@serenamarie125 : In ManageIQ we can create custom dialogs. These are mostly used to order services. This is a component "plays" such custom dialog for a user. It let's the user fill in stuff and returns the values. Typically the values would be passed to automate to execute some automation. There's another implementation of this in the OPS UI and the plan is to share a single (Angular) implementation of the dialog player. |
@martinpovolny Looks like Otherwise, looks good :). |
@martinpovolny Our implementation strategy was going to be to request another version bump to NPM and we would update the SUI package.json to reflect it. |
LGTM, i will create some issues regarding UX review items regarding code which existed in the SUI. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, i will enter GH Issues around some of the concerns i have with existing code.
@martinpovolny @himdel @eclarizio any other issues to address, or could we merge? |
4620433
to
9e23e0a
Compare
@serenamarie125 , I moved the error messaging per your request. Thank you for your feedback. |
@chriskacerguis , I rebased and addressed the last piece of feedback received. |
Created Dialog component that allows for editing and viewing of dynamic dialogs