/********************************************* * 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 = "\n"; } else { html = ''; } html += "
\n"; html += "\n"; html += "\n"; html += "
\n"; html += (params.td == undefined || params.td !== false) ? "\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"; html += ""; html += "\{\{ " + list.iterator + '.' + fld + " \}\}"; html += ""; html += (field.badgeLabel) ? " " + field.badgeLabel : ""; html += "\n"; 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 += "
"; if (field.badges[i].toolTip) { html += ""; } html += "\n"; } } else { if (field.badgeToolTip) { 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 += "
\n"; html += "\n"; } html += "
"; break; } } html += "\n"; html += "
\n"; html += "
\n"; } else { 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 += "" : ""; // Badge if ( options.mode !== 'lookup' && (field.badges || (field.badgeIcon && field.badgePlacement && field.badgePlacement == 'left')) ) { html += Badge(field); } // Add collapse/expand icon --used on job_events page if (list['hasChildren'] && field.hasChildren) { html += " " + " "; //ng-show=\"'\{\{ " + list.iterator + ".related.children \}\}' !== ''\" } // Start the Link if ( (field.key || field.link || field.linkTo || field.ngClick || field.ngHref) && options['mode'] != 'lookup' && options['mode'] != 'select' && !field.noLink && !field.ngBindHtml) { var cap=false; if (field.linkTo) { html += "" : ""; } // Add icon: if (field.ngShowIcon) { html += " "; } else { if (field.icon) { html += Icon(field.icon) + " "; } } // Add data binds if (!field.ngBindHtml && (field.showValue == undefined || field.showValue == true)) { if (field.ngBind) { html += "{{ " + field.ngBind + " }}"; } else { html += "{{" + list.iterator + "." + fld + "}}"; } } // Add additional text: if (field.text) { html += field.text; } if (list['hasChildren'] && field.hasChildren) { html += ""; } // close the link if ( (field.key || field.link || field.linkTo || field.ngClick || field.ngHref ) && options.mode != 'lookup' && options.mode != 'select' && !field.noLink && !field.ngBindHtml ) { html += ""; } // close ngShow html += (field.ngShow) ? "" : ""; // Specific to Job Events page -showing event detail/results html += (field.appendHTML) ? "
    \n" : ""; // Badge if (options.mode !== 'lookup' && field.badgeIcon && field.badgePlacement && field.badgePlacement !== 'left') { html += Badge(field); } } return 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 += " " + hdr; html += hdr; html += ""; html += "

    \n"; html += "
    \n"; html += "
    \n"; 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 += "
    • " + form.fields[fld].searchLabel + "
    • \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 += "
    \n"; html += "
    \n"; html += "
      \n"; html += "
    • " + "
    • \n"; html += "
    • " + "
    • \n"; html += "
    • " + "{{ page }}
    • \n"; html += "
    • " + iterator + "_num_pages\">
    • \n"; html += "
    • = " + iterator + "_num_pages\">
    • \n"; html += "
    \n"; html += "
    \n"; html += "
    \n"; html += "
    \n"; html += "Page {{ " + iterator + "_page }} of {{ " + iterator + "_num_pages }} for {{ " + iterator + "_total_rows | number:0 }} " + set + '.'; html += "
    \n"; html += "
    \n"; html += "
    \n"; return html; } }]);