/*********************************************
* Copyright (c) 2014 AnsibleWorks, Inc.
*
* GeneratorHelpers
*
* Functions shared between FormGenerator and ListGenerator
*
*/
'use strict';
angular.module('GeneratorHelpers', ['GeneratorHelpers'])
.factory('Attr', function() {
return function(obj, key, fld) {
var result;
var value = (typeof obj[key] === "string") ? obj[key].replace(/[\'\"]/g, '"') : obj[key];
if (/^ng/.test(key)) {
result = 'ng-' + key.replace(/^ng/,'').toLowerCase() + "=\"" + value + "\" ";
}
else if (/^data|^aw/.test(key) && key != 'awPopOver') {
var s = '';
for (var i=0; i < key.length; i++) {
if (/[A-Z]/.test(key.charAt(i))) {
s += '-' + key.charAt(i).toLowerCase();
}
else {
s += key.charAt(i);
}
}
result = s + "=\"" + value + "\" ";
}
else {
switch(key) {
case 'trueValue':
result = "ng-true-value=\"" + value + "\" ";
break;
case 'falseValue':
result = "ng-false-value=\"" + value + "\" ";
break;
case 'awPopOver':
// construct the entire help link
result = " ";
break;
case 'columnShow':
result = "ng-show=\"" + value + "\" ";
break;
case 'icon':
// new method of constructing icon tag. Replces Icon method.
result = "";
break;
case 'autocomplete':
result = "autocomplete=\"";
result += (value) ? 'true' : 'false';
result += "\" ";
break;
default:
result = key + "=\"" + value + "\" ";
}
}
return result;
}
})
.factory('Icon', function() {
return function(icon) {
return " ";
}
})
.factory('SelectIcon', ['Icon', function(Icon) {
return function(params) {
// Common point for matching any type of action to the appropriate
// icon. The intention is to maintain consistent meaning and presentation
// for every icon used in the application.
var icon;
var action = params.action;
var size = params.size;
switch(action) {
case 'help':
icon = "fa-question-circle";
break;
case 'add':
case 'create':
icon= "fa-plus";
break;
case 'edit':
icon = "fa-pencil";
break;
case 'delete':
icon = "fa-trash-o";
break;
case 'group_update':
icon = 'fa-exchange';
break;
case 'scm_update':
icon = 'fa-cloud-download';
break;
case 'cancel':
icon = 'fa-minus-circle';
break;
case 'run':
case 'rerun':
case 'submit':
icon = 'fa-rocket';
break;
case 'stream':
icon = 'fa-clock-o';
break;
case 'refresh':
icon = 'fa-refresh';
break;
case 'close':
icon='fa-arrow-left';
break;
case 'save':
icon='fa-check-square-o';
break;
case 'properties':
icon="fa-wrench";
break;
case 'reset':
icon="fa-undo";
break;
case 'view':
icon="fa-search-plus";
break;
case 'sync_status':
icon="fa-cloud";
break;
}
icon += (size) ? " " + size : "";
return Icon(icon);
}
}])
.factory('Button', ['Attr', 'SelectIcon', function(Attr, SelectIcon) {
return function(params) {
// pass in button object, get back html
var btn = params.btn;
var action = params.action; // label used to select the icon
var toolbar = params.toolbar;
if (toolbar) {
//if this is a toolbar button, set some defaults
btn['class'] = 'btn-xs btn-primary';
btn['iconSize'] = 'fa-lg';
delete btn['label'];
}
var html = '';
html += " ";
return html;
}
}])
.factory('NavigationLink', ['Attr', 'Icon', function(Attr, Icon) {
return function(link) {
var html = "';
html += (link.icon) ? Icon(link.icon) : '';
html += (link.label) ? link.label : '';
html += "\n";
return html;
}
}])
.factory('DropDown', ['Attr', 'Icon', function(Attr, Icon) {
return function(params) {
var list = params['list'];
var fld = params['fld'];
var options = params['options'];
var html, field;
if (params.field) {
field = params.field;
}
else {
if (params.type) {
field = list[params.type][fld];
}
else {
field = list['fields'][fld];
}
}
var name = field['label'].replace(/ /g,'_');
if (params.td == undefined || params.td !== false) {
html = "
\n" : "";
return html;
}
}])
.factory('BadgeCount', [ function() {
return function(params) {
// Adds a badge count with optional tooltip
var list = params['list'];
var fld = params['fld'];
var field = list.fields[fld];
var options = params['options'];
var base = params['base'];
var html = "
\n";
return html;
}
}])
.factory('Badge', [ function() {
return function(field) {
// Adds an icon(s) with optional tooltip
var html = '';
if (field.badges) {
for (var i=0; i < field.badges.length; i++) {
if (field.badges[i].toolTip) {
html += "";
}
html += "";
if (field.badges[i].toolTip) {
html += "";
}
html += "\n";
}
}
else {
if (field.badgeToolTip) {
html += "";
}
html += "";
if (field.badgeToolTip) {
html += "";
}
html += "\n";
}
return html;
}
}])
.factory('Breadcrumbs', ['Attr', function(Attr) {
return function(params) {
// Generate breadcrumbs using the list-generator.js method.
var list = params.list;
var mode = params.mode;
var html = '';
html += "
";
if (mode == 'select') {
html += list.selectTitle;
}
else {
html += list.editTitle;
}
html += "
\n\n\n";
}
return html;
}
}])
.factory('Column', ['Attr', 'Icon', 'DropDown', 'Badge', 'BadgeCount', function(Attr, Icon, DropDown, Badge, BadgeCount) {
return function(params) {
var list = params['list'];
var fld = params['fld'];
var options = params['options'];
var base = params['base'];
var field = list['fields'][fld];
var html = '';
if (field.type !== undefined && field.type == 'DropDown') {
html = DropDown(params);
}
else if (field.type == 'badgeCount') {
html = BadgeCount(params);
}
else {
html += "
\n";
}
}])
.factory('HelpCollapse', function() {
return function(params) {
var hdr = params.hdr;
var content = params.content;
var show = params.show;
var idx = params.idx;
var bind = params.bind; //Pass in scope variable containing html
var html = '';
html += "
\n";
html += "
\n";
html += "
\n";
html += "
\n";
//html += " " + hdr;
html += hdr;
html += "";
html += "
\n";
html += "
\n";
html += "
\n";
html += "
\n";
html += (!bind) ? content : "";
html += "
\n";
html += "
\n";
html += "
\n";
html += "
\n";
return html;
}
})
.factory('SearchWidget', function() {
return function(params) {
//
// Generate search widget
//
var iterator = params.iterator;
var form = params.template;
var useMini = params.mini;
var html= '';
var searchWidgets = (params.searchWidgets) ? params.searchWidgets : 1;
for (var i=1; i <= searchWidgets; i++) {
var modifier = (i == 1) ? '' : i;
html += "
\n";
html += "
\n";
html += "
\n";
html += "\n";
html += "
\n";
for ( var fld in form.fields) {
if ( (form.fields[fld].searchable == undefined || form.fields[fld].searchable == true)
&& (((form.fields[fld].searchWidget == undefined || form.fields[fld].searchWidget == 1) && i == 1 ) ||
(form.fields[fld].searchWidget == i)) ) {
html += "
\n";
}
else {
html += form.fields[fld].label.replace(/\ /g,' ') + "', " + i + ")\">" +
form.fields[fld].label.replace(/\ /g,' ') + "\n";
}
}
}
html += "
\n";
html += "
\n";
html += "\n";
html += "\n";
// Reset button for drop-down
html += "
\n";
html += "\n";
html += "
\n";
html += "
\n";
html += "\n";
html += "\n";
html += "
\n";
}
return html;
}
})
.factory('PaginateWidget', [ function() {
return function(params) {
var iterator = params.iterator;
var set = params.set;
var html = '';
html += "\n";
html += "