You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2015/06/17 09:05:29 UTC
incubator-ignite git commit: # ignite-850 Add requered.
Repository: incubator-ignite
Updated Branches:
refs/heads/ignite-843 ca022de1e -> 53d301db0
# ignite-850 Add requered.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/53d301db
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/53d301db
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/53d301db
Branch: refs/heads/ignite-843
Commit: 53d301db0c5995f3937dca0a0894f5a2fe243e93
Parents: ca022de
Author: Andrey <an...@gridgain.com>
Authored: Wed Jun 17 14:00:15 2015 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Jun 17 14:03:31 2015 +0700
----------------------------------------------------------------------
.../nodejs/public/form-models/caches.json | 94 +++--
.../nodejs/public/form-models/clusters.json | 400 ++++++++++---------
.../public/javascripts/controllers/common.js | 3 +-
.../nodejs/public/stylesheets/style.css | 2 +-
.../nodejs/public/stylesheets/style.less | 12 +-
.../nodejs/views/includes/controls.jade | 28 +-
6 files changed, 291 insertions(+), 248 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/53d301db/modules/webconfig/nodejs/public/form-models/caches.json
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/form-models/caches.json b/modules/webconfig/nodejs/public/form-models/caches.json
index ef6659b..6a9bddc 100644
--- a/modules/webconfig/nodejs/public/form-models/caches.json
+++ b/modules/webconfig/nodejs/public/form-models/caches.json
@@ -91,47 +91,59 @@
"Cache expiration policy"
],
"details": {
- "LRU": [
- {
- "label": "Batch size",
- "type": "text",
- "model": "batchSize",
- "placeholder": "1"
- },
- {
- "label": "Max memory size",
- "type": "text",
- "model": "maxMemorySize",
- "placeholder": "0",
- "tip": [
- "Maximum allowed cache size in bytes"
- ]
- }
- ],
- "RND": [
- {
- "label": "Batch size",
- "type": "text",
- "model": "batchSize",
- "placeholder": "1"
- }
- ],
- "FIFO": [
- {
- "label": "Batch size",
- "type": "text",
- "model": "batchSize",
- "placeholder": "1"
- }
- ],
- "SORTED": [
- {
- "label": "Batch size",
- "type": "text",
- "model": "batchSize",
- "placeholder": "1"
- }
- ]
+ "LRU": {
+ "expanded": false,
+ "fields": [
+ {
+ "label": "Batch size",
+ "type": "text",
+ "model": "batchSize",
+ "placeholder": "1"
+ },
+ {
+ "label": "Max memory size",
+ "type": "text",
+ "model": "maxMemorySize",
+ "placeholder": "0",
+ "tip": [
+ "Maximum allowed cache size in bytes"
+ ]
+ }
+ ]
+ },
+ "RND": {
+ "expanded": false,
+ "fields": [
+ {
+ "label": "Batch size",
+ "type": "text",
+ "model": "batchSize",
+ "placeholder": "1"
+ }
+ ]
+ },
+ "FIFO": {
+ "expanded": false,
+ "fields": [
+ {
+ "label": "Batch size",
+ "type": "text",
+ "model": "batchSize",
+ "placeholder": "1"
+ }
+ ]
+ },
+ "SORTED": {
+ "expanded": false,
+ "fields": [
+ {
+ "label": "Batch size",
+ "type": "text",
+ "model": "batchSize",
+ "placeholder": "1"
+ }
+ ]
+ }
}
}
]
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/53d301db/modules/webconfig/nodejs/public/form-models/clusters.json
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/form-models/clusters.json b/modules/webconfig/nodejs/public/form-models/clusters.json
index f34cade..ab8c56f 100644
--- a/modules/webconfig/nodejs/public/form-models/clusters.json
+++ b/modules/webconfig/nodejs/public/form-models/clusters.json
@@ -10,204 +10,224 @@
{
"label": "Discovery",
"type": "dropdown-details",
- "customizable": true,
- "expanded": false,
"group": "discovery",
"model": "kind",
+ "required": true,
"placeholder": "Choose discovery",
"items": "discoveries",
"tip": [
"Discovery allows to discover remote nodes in grid."
],
"details": {
- "Vm": [
- {
- "tableLabel": "Addresses",
- "label": "address",
- "type": "table-simple",
- "model": "addresses",
- "editIdx": -1,
- "placeholder": "IP address",
- "tip": [
- "Addresses may be represented as follows:",
- "<ul>",
- " <li>IP address (e.g. 127.0.0.1, 9.9.9.9, etc);</li>",
- " <li>IP address and port (e.g. 127.0.0.1:47500, 9.9.9.9:47501, etc);</li>",
- " <li>IP address and port range (e.g. 127.0.0.1:47500..47510, 9.9.9.9:47501..47504, etc);</li>",
- " <li>Hostname (e.g. host1.com, host2, etc);</li>",
- " <li>Hostname and port (e.g. host1.com:47500, host2:47502, etc).</li>",
- " <li>Hostname and port range (e.g. host1.com:47500..47510, host2:47502..47508, etc).</li>",
- "</ul>",
- "<p>",
- "If port is 0 or not provided then default port will be used (depends on",
- "discovery SPI configuration).",
- "<p>",
- "If port range is provided (e.g. host:port1..port2) the following should be considered:",
- "<ul>",
- " <li>port1 < port2 should be true;</li>",
- " <li>Both port1 and port2 should be greater than 0.</li>",
- "</ul>"
- ]
- }
- ],
- "Multicast": [
- {
- "label": "IP address",
- "type": "text",
- "model": "multicastGroup",
- "placeholder": "228.1.2.4",
- "tip": [
- "IP address of multicast group."
- ]
- },
- {
- "label": "Port number",
- "type": "text",
- "model": "multicastPort",
- "placeholder": "47400",
- "tip": [
- "Port number which multicast messages are sent to."
- ]
- },
- {
- "label": "Waits for reply ",
- "type": "text",
- "model": "responseWaitTime",
- "placeholder": "500",
- "tip": [
- "Time in milliseconds IP finder waits for reply to multicast address request."
- ]
- },
- {
- "label": "Attempts count",
- "type": "text",
- "model": "addressRequestAttempts",
- "placeholder": "2",
- "tip": [
- "Number of attempts to send multicast address request. ",
- "IP finder re-sends request only in case if no reply for previous request is received."
- ]
- },
- {
- "label": "Local address",
- "type": "text",
- "model": "localAddress",
- "tip": [
- "Local host address used by this IP finder.",
- "If provided address is non-loopback then multicast socket is bound to this interface.",
- "If local address is not set or is any local address then",
- "IP finder creates multicast sockets for all found non-loopback addresses"
- ]
- }
- ],
- "S3": [
- {
- "label": "Bucket name",
- "type": "text",
- "model": "bucketName",
- "placeholder": ""
- }
- ],
- "Cloud": [
- {
- "label": "Credential",
- "type": "text",
- "model": "credential",
- "placeholder": "",
- "tip": [
- "Credential that is used during authentication on the cloud.",
- "Depending on a cloud platform it can be a password or access key."
- ]
- },
- {
- "label": "Path to credential",
- "type": "text",
- "model": "credentialPath",
- "placeholder": "",
- "tip": [
- "Path to a credential that is used during authentication on the cloud.",
- "Access key or private key should be stored in a plain or PEM file without a passphrase."
- ]
- },
- {
- "label": "Identity",
- "type": "text",
- "model": "identity",
- "placeholder": "",
- "tip": [
- "Identity that is used as a user name during a connection to the cloud.",
- "Depending on a cloud platform it can be an email address, user name, etc."
- ]
- },
- {
- "label": "Provider",
- "type": "text",
- "model": "provider",
- "placeholder": "",
- "tip": [
- "Cloud provider to use."
- ]
- }
- ],
- "GoogleStorage": [
- {
- "label": "Project name",
- "type": "text",
- "model": "projectName",
- "placeholder": "",
- "tip": [
- "Google Cloud Platforms project name.",
- "Usually this is an auto generated project number (ex. 208709979073) that can be found in 'Overview' section of Google Developer Console."
- ]
- },
- {
- "label": "Bucket name",
- "type": "text",
- "model": "bucketName",
- "placeholder": "",
- "tip": [
- "Google Cloud Storage bucket name.",
- "If the bucket doesn't exist Ignite will automatically create it.",
- "However the name must be unique across whole Google Cloud Storage and Service Account Id must be authorized to perform this operation."
- ]
- },
- {
- "label": "Private key path",
- "type": "text",
- "model": "serviceAccountP12FilePath",
- "placeholder": "",
- "tip": [
- "Full path to the private key in PKCS12 format of the Service Account."
- ]
- },
- {
- "label": "Account id",
- "type": "text",
- "model": "accountId",
- "placeholder": "",
- "tip": [
- "Service account ID (typically an e-mail address)."
- ]
- }
- ],
- "Jdbc": [
- {
- "label": "DB schema should be initialized by Ignite",
- "type": "check",
- "model": "initSchema",
- "tip": [
- "Flag indicating whether DB schema should be initialized by Ignite or was explicitly created by user."
- ]
- }
- ],
- "SharedFs": [
- {
- "label": "File path",
- "type": "text",
- "model": "path",
- "placeholder": "disco/tcp"
- }
- ]
+ "Vm": {
+ "expanded": true,
+ "fields": [
+ {
+ "tableLabel": "Addresses",
+ "label": "address",
+ "type": "table-simple",
+ "model": "addresses",
+ "editIdx": -1,
+ "placeholder": "IP address",
+ "tip": [
+ "Addresses may be represented as follows:",
+ "<ul>",
+ " <li>IP address (e.g. 127.0.0.1, 9.9.9.9, etc);</li>",
+ " <li>IP address and port (e.g. 127.0.0.1:47500, 9.9.9.9:47501, etc);</li>",
+ " <li>IP address and port range (e.g. 127.0.0.1:47500..47510, 9.9.9.9:47501..47504, etc);</li>",
+ " <li>Hostname (e.g. host1.com, host2, etc);</li>",
+ " <li>Hostname and port (e.g. host1.com:47500, host2:47502, etc).</li>",
+ " <li>Hostname and port range (e.g. host1.com:47500..47510, host2:47502..47508, etc).</li>",
+ "</ul>",
+ "<p>",
+ "If port is 0 or not provided then default port will be used (depends on",
+ "discovery SPI configuration).",
+ "<p>",
+ "If port range is provided (e.g. host:port1..port2) the following should be considered:",
+ "<ul>",
+ " <li>port1 < port2 should be true;</li>",
+ " <li>Both port1 and port2 should be greater than 0.</li>",
+ "</ul>"
+ ]
+ }
+ ]
+ },
+ "Multicast": {
+ "expanded": false,
+ "fields": [
+ {
+ "label": "IP address",
+ "type": "text",
+ "model": "multicastGroup",
+ "placeholder": "228.1.2.4",
+ "tip": [
+ "IP address of multicast group."
+ ]
+ },
+ {
+ "label": "Port number",
+ "type": "text",
+ "model": "multicastPort",
+ "placeholder": "47400",
+ "tip": [
+ "Port number which multicast messages are sent to."
+ ]
+ },
+ {
+ "label": "Waits for reply ",
+ "type": "text",
+ "model": "responseWaitTime",
+ "placeholder": "500",
+ "tip": [
+ "Time in milliseconds IP finder waits for reply to multicast address request."
+ ]
+ },
+ {
+ "label": "Attempts count",
+ "type": "text",
+ "model": "addressRequestAttempts",
+ "placeholder": "2",
+ "tip": [
+ "Number of attempts to send multicast address request. ",
+ "IP finder re-sends request only in case if no reply for previous request is received."
+ ]
+ },
+ {
+ "label": "Local address",
+ "type": "text",
+ "model": "localAddress",
+ "tip": [
+ "Local host address used by this IP finder.",
+ "If provided address is non-loopback then multicast socket is bound to this interface.",
+ "If local address is not set or is any local address then",
+ "IP finder creates multicast sockets for all found non-loopback addresses"
+ ]
+ }
+ ]
+ },
+ "S3": {
+ "expanded": true,
+ "fields": [
+ {
+ "label": "Bucket name",
+ "type": "text",
+ "model": "bucketName",
+ "placeholder": ""
+ }
+ ]
+ },
+ "Cloud": {
+ "expanded": true,
+ "fields": [
+ {
+ "label": "Credential",
+ "type": "text",
+ "model": "credential",
+ "placeholder": "",
+ "tip": [
+ "Credential that is used during authentication on the cloud.",
+ "Depending on a cloud platform it can be a password or access key."
+ ]
+ },
+ {
+ "label": "Path to credential",
+ "type": "text",
+ "model": "credentialPath",
+ "placeholder": "",
+ "tip": [
+ "Path to a credential that is used during authentication on the cloud.",
+ "Access key or private key should be stored in a plain or PEM file without a passphrase."
+ ]
+ },
+ {
+ "label": "Identity",
+ "type": "text",
+ "model": "identity",
+ "placeholder": "",
+ "tip": [
+ "Identity that is used as a user name during a connection to the cloud.",
+ "Depending on a cloud platform it can be an email address, user name, etc."
+ ]
+ },
+ {
+ "label": "Provider",
+ "type": "text",
+ "model": "provider",
+ "placeholder": "",
+ "tip": [
+ "Cloud provider to use."
+ ]
+ }
+ ]
+ },
+ "GoogleStorage": {
+ "expanded": true,
+ "fields": [
+ {
+ "label": "Project name",
+ "type": "text",
+ "model": "projectName",
+ "placeholder": "",
+ "tip": [
+ "Google Cloud Platforms project name.",
+ "Usually this is an auto generated project number (ex. 208709979073) that can be found in 'Overview' section of Google Developer Console."
+ ]
+ },
+ {
+ "label": "Bucket name",
+ "type": "text",
+ "model": "bucketName",
+ "placeholder": "",
+ "tip": [
+ "Google Cloud Storage bucket name.",
+ "If the bucket doesn't exist Ignite will automatically create it.",
+ "However the name must be unique across whole Google Cloud Storage and Service Account Id must be authorized to perform this operation."
+ ]
+ },
+ {
+ "label": "Private key path",
+ "type": "text",
+ "model": "serviceAccountP12FilePath",
+ "placeholder": "",
+ "tip": [
+ "Full path to the private key in PKCS12 format of the Service Account."
+ ]
+ },
+ {
+ "label": "Account id",
+ "type": "text",
+ "model": "accountId",
+ "placeholder": "",
+ "tip": [
+ "Service account ID (typically an e-mail address)."
+ ]
+ }
+ ]
+ },
+ "Jdbc": {
+ "expanded": true,
+ "fields": [
+ {
+ "label": "DB schema should be initialized by Ignite",
+ "type": "check",
+ "model": "initSchema",
+ "tip": [
+ "Flag indicating whether DB schema should be initialized by Ignite or was explicitly created by user."
+ ]
+ }
+ ]
+ },
+ "SharedFs": {
+ "expanded": false,
+ "fields": [
+ {
+ "label": "File path",
+ "type": "text",
+ "model": "path",
+ "placeholder": "disco/tcp"
+ }
+ ]
+ }
}
},
{
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/53d301db/modules/webconfig/nodejs/public/javascripts/controllers/common.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/common.js b/modules/webconfig/nodejs/public/javascripts/controllers/common.js
index a993754..f472605 100644
--- a/modules/webconfig/nodejs/public/javascripts/controllers/common.js
+++ b/modules/webconfig/nodejs/public/javascripts/controllers/common.js
@@ -30,7 +30,8 @@ configuratorModule.config(function($selectProvider) {
angular.extend($selectProvider.defaults, {
maxLength: '1',
allText: 'Select All',
- noneText: 'Clear All'
+ noneText: 'Clear All',
+ template: '/select'
});
});
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/53d301db/modules/webconfig/nodejs/public/stylesheets/style.css
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/stylesheets/style.css b/modules/webconfig/nodejs/public/stylesheets/style.css
index 406c573..5c2e347 100644
--- a/modules/webconfig/nodejs/public/stylesheets/style.css
+++ b/modules/webconfig/nodejs/public/stylesheets/style.css
@@ -1 +1 @@
-.main-header .logo{height:auto}.main-sidebar{padding-top:60px}.navbar-default .navbar-brand,.navbar-default .navbar-brand:hover{position:absolute;width:100%;left:0;text-align:center}.modal-backdrop.am-fade{opacity:.5;transition:opacity .15s linear}.modal-backdrop.am-fade.ng-enter{opacity:0}.modal-backdrop.am-fade.ng-enter.ng-enter-active{opacity:.5}.modal-backdrop.am-fade.ng-leave{opacity:.5}.modal-backdrop.am-fade.ng-leave.ng-leave-active{opacity:0}.modal.center .modal-dialog{position:fixed;top:40%;left:50%;min-width:320px;max-width:630px;width:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ng-table th.text-right{text-align:right}.ng-table th.text-left{text-align:left}.ng-table th.text-center{text-align:center}.fa.fa-remove{color:red}.border-left{-webkit-box-shadow:1px 0 0 0 #eee inset;box-shadow:1px 0 0 0 #eee inset}.border-right{-webkit-box-shadow:1px 0 0 0 #eee;box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.t
heme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding:10px 25px;background-color:rgba(0,0,0,0.15)}.theme-line header a.btn:hover{background-color:rgba(0,0,0,0.25)}.theme-line header a.btn.btn-link{background:transparent;color:rgba(255,255,255,0.8)}.theme-line header a.btn.btn-link:hover{color:#fff;text-decoration:none}.theme-line .navbar-nav a{background-color:transparent}.theme-line .navbar-nav a:hover,.theme-line .navbar-nav a:active,.theme-line .navbar-nav a:focus{background-color:transparent}.theme-line .main-links{padding-top:50px}.theme-line .main-links h3{margin-top:0;font-size:17px}.theme-line .main-links .links a{color:#888}.theme-line .main-links .links a:hover{text-decoration:none}.theme-line #category-columns,.theme-solid #category-columns{margin:50px 30px 0}.theme-line #category-columns h4{text-transform:uppercase;font-weight:300;color:#999;font-size:14px}.theme-line #category-columns ul{list-style:none;padding:0;margin-bottom:15px}.theme
-line #category-columns ul li a{padding:4px 0;display:block;font-size:16px}.theme-line #category-columns ul .view-all{font-size:0.85em}.theme-line .docs-header{color:#999;overflow:hidden}.theme-line .docs-header h1{color:#444;margin-top:0;font-size:25px}.theme-line .btn-primary{border:0 none}.theme-line .main-content .nav-horizontal a{-webkit-box-shadow:0 0;box-shadow:0 0;border:0 none;background-color:#fff;-webkit-border-radius:0;border-radius:0;color:#aaa;padding:6px;margin:0 14px}.theme-line .main-content .nav-horizontal a:hover{color:#999;border-bottom:4px solid #ddd}.theme-line .main-content .nav-horizontal a.active{border-bottom:4px solid #888}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:13px;margin:3px 0 0}.theme-line .sidebar-nav ul li a{padding:3px 0;display:block;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-n
av ul li a:before{top:0;content:" ";display:block;width:6px;height:100%;position:absolute;left:-30px}.theme-line .sidebar-nav ul li a:hover{text-decoration:none}.theme-line .select li a{color:#666}.theme-line .select li a:hover,.theme-line .select .active{color:#ec1c24;background-color:white}.theme-line .sidebar-nav ul li .subcategory{padding-left:15px}.theme-line .sidebar-nav h4{margin-top:2em;font-weight:normal;text-transform:uppercase;font-size:11px;margin-bottom:10px;color:#bbb}.theme-line .sidebar-nav h4:first-child{margin-top:0}.theme-line .sidebar-nav .ask{width:100%;text-align:center;padding:10px}.theme-line .border-left .sidebar-nav{padding-left:15px}.theme-line .suggest{padding:4px;display:inline-block;font-size:12px}.header{padding:15px}.header .has-github{padding-right:136px}.header h1.navbar-brand{height:40px;width:200px;padding:0;margin:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center center;display:block;width:100%;height:100%;-w
ebkit-background-size:contain;-moz-background-size:contain;background-size:contain}.header .nav.navbar-nav.pull-right{position:relative;right:-30px}.header .nav.navbar-nav .not-link{padding:15px;display:inline-block}.header .nav.navbar-nav .stable,.header .nav.navbar-nav .beta,.header .nav.navbar-nav .private{font-size:9px;padding:3px 5px;display:inline-block;line-height:8px;-webkit-border-radius:3px;border-radius:3px;margin-left:6px;color:#fff;top:-2px;position:relative;opacity:0.6;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";filter:alpha(opacity=60)}.header .nav.navbar-nav a:hover>.stable,.header .nav.navbar-nav a:hover>.beta,.header .nav.navbar-nav a:hover>.private{opacity:1;-ms-filter:none;filter:none}.header .nav.navbar-nav .beta{background-color:#59c3d1}.header .nav.navbar-nav .stable{background-color:#41b841}.header .nav.navbar-nav .private{background-color:#333}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header
p{color:#666}.theme-line header{border-bottom-color:#ec1c24}.theme-line .navbar-nav{color:#888}.theme-line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{color:#ec1c24}.theme-line .navbar-nav .active a:hover{color:#950d12}.theme-line .main-links .links a:hover{color:#ec1c24}.theme-line .main-content a{color:#666}.theme-line .main-content a:hover{color:#950d12}.theme-line .sidebar-nav ul li a.active:before{background-color:#ec1c24}.theme-line .sidebar-nav ul li a.active{color:#ec1c24}.theme-line .sidebar-nav ul li a:hover,.theme-line .sidebar-nav ul li a.active:hover{color:#950d12}.theme-line .btn-primary{background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .
nav-horizontal a.active{border-color:#ec1c24;color:#ec1c24}.theme-line .main-content .nav-horizontal a:hover{color:#950d12}.theme-line .main-content .nav-horizontal a.active:hover{border-color:#950d12}.theme-line header .navbar-nav a.active,.theme-line #versions-list li a:hover strong,.theme-line #versions-list li a.active .current,.theme-line #versions-list li a:active .current{color:#ec1c24}.theme-line.body-threes .section-right .threes-nav .btn-default:hover,.theme-line.page-docs.body-threes .section-right .threes-nav .pull-right a:hover{color:#ec1c24;border-color:#ec1c24}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 0 0 1px rgba(0,0,0,0.1);background-color:#fff}body{font-weight:400;font-family:Roboto Slab, serif}h1,h2,h3,h4,h5,h6{font-weight:700;font-family:Roboto Slab, serif}.submit-vote.submit-vote-parent.voted a.
submit-vote-button,.submit-vote.submit-vote-parent a.submit-vote-button:hover{background-color:#ec1c24}div.submit-vote.submit-vote-parent.voted a.submit-vote-button:hover{background-color:#950d12}a,.link .title{color:#ec1c24}a:hover,.link:hover .title{color:#950d12}.header h1.navbar-brand a{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.header h1.navbar-brand{width:96px}.block-edit-parameters{text-align:right;padding-bottom:5px}.ng-table-pager{display:none}.container-footer{margin-top:20px}.vcenter{display:inline-block;vertical-align:middle;float:none}.vcenter2{position:relative;top:50%;transform:translateY(-50%)}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:24px;right:24px;float:none}.modal .modal-dialog{width:610px}.modal .modal-content{-webkit-border-radius:0;border-radius:0;background-color:#f7f7f7}.modal .modal-content .modal-header{background-color:#fff;text-align:center;color:#555;padding:24px;font-family:"myriad-pr
o",sans-serif}.modal .modal-content .modal-header h4{font-family:"myriad-pro",sans-serif;font-size:22px}.modal .modal-content .modal-header h4 .fa{display:block;font-size:41px;color:#ddd;margin-bottom:5px}.modal .modal-content .modal-header p{color:#aaa;font-size:1em;margin:3px 0 0}.modal .modal-content .modal-spacer{padding:10px 10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:30px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.st-sort-ascent:after{font-family:FontAwesome, serif;content:'\f077'}.st-sort-descent:after{font-family:FontAwesome, serif;content:'\f078'}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 230px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:20px;padding-bottom:10px}}.details-row,.settings-row{display:block;margin:0.65em 0;line-height:28px}.details-row [class*="col-"],.settings-row [class*="
col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}.details-row{padding-left:1.3em}button{margin-right:4px}h1,h2,h3{-webkit-user-select:none;font-weight:normal;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.input-group{display:inline-block}.input-group .form-control{width:auto;margin-left:0;margin-right:0}.form-control{display:inline-block;text-align:left;padding:3px 6px;height:28px}.form-control button{text-align:left}.form-horizontal .control-label{padding-top:4px}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:bla
ck;cursor:pointer}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{color:#ec1c24;cursor:pointer}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line .links-edit table{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line .links-edit table td{padding-left:18px}.theme-line .links table .active a,.theme-line .links-edit table .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line .links-edit table a:hover{color:#950d12}.theme-line .links table a,.theme-line .links-edit table a{color:#666}.theme-line .links-edit table label{line-height:28px;color:#666}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:1.3em;padding:0.65em;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.tooltip>.tooltip-inner{max-
width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;line-height:14px;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden;padding-right:4px}.tipField{float:right;line-height:28px;margin-right:18px}.tipLabel{margin-left:4px}.table-nowrap{table-layout:fixed}.td-overflow{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fa-edit{cursor:pointer}.fa-remove{margin-left:10px;cursor:pointer}.required{font-weight:bold}.blank{visibility:hidden}
\ No newline at end of file
+.main-header .logo{height:auto}.main-sidebar{padding-top:60px}.navbar-default .navbar-brand,.navbar-default .navbar-brand:hover{position:absolute;width:100%;left:0;text-align:center}.modal-backdrop.am-fade{opacity:.5;transition:opacity .15s linear}.modal-backdrop.am-fade.ng-enter{opacity:0}.modal-backdrop.am-fade.ng-enter.ng-enter-active{opacity:.5}.modal-backdrop.am-fade.ng-leave{opacity:.5}.modal-backdrop.am-fade.ng-leave.ng-leave-active{opacity:0}.modal.center .modal-dialog{position:fixed;top:40%;left:50%;min-width:320px;max-width:630px;width:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ng-table th.text-right{text-align:right}.ng-table th.text-left{text-align:left}.ng-table th.text-center{text-align:center}.fa.fa-remove{color:red}.border-left{-webkit-box-shadow:1px 0 0 0 #eee inset;box-shadow:1px 0 0 0 #eee inset}.border-right{-webkit-box-shadow:1px 0 0 0 #eee;box-shadow:1px 0 0 0 #eee}.theme-line{background-color:#f9f9f9}.t
heme-line header{background-color:#fff}.theme-line header a.btn{border:0 none;padding:10px 25px;background-color:rgba(0,0,0,0.15)}.theme-line header a.btn:hover{background-color:rgba(0,0,0,0.25)}.theme-line header a.btn.btn-link{background:transparent;color:rgba(255,255,255,0.8)}.theme-line header a.btn.btn-link:hover{color:#fff;text-decoration:none}.theme-line .navbar-nav a{background-color:transparent}.theme-line .navbar-nav a:hover,.theme-line .navbar-nav a:active,.theme-line .navbar-nav a:focus{background-color:transparent}.theme-line .main-links{padding-top:50px}.theme-line .main-links h3{margin-top:0;font-size:17px}.theme-line .main-links .links a{color:#888}.theme-line .main-links .links a:hover{text-decoration:none}.theme-line #category-columns,.theme-solid #category-columns{margin:50px 30px 0}.theme-line #category-columns h4{text-transform:uppercase;font-weight:300;color:#999;font-size:14px}.theme-line #category-columns ul{list-style:none;padding:0;margin-bottom:15px}.theme
-line #category-columns ul li a{padding:4px 0;display:block;font-size:16px}.theme-line #category-columns ul .view-all{font-size:0.85em}.theme-line .docs-header{color:#999;overflow:hidden}.theme-line .docs-header h1{color:#444;margin-top:0;font-size:25px}.theme-line .btn-primary{border:0 none}.theme-line .main-content .nav-horizontal a{-webkit-box-shadow:0 0;box-shadow:0 0;border:0 none;background-color:#fff;-webkit-border-radius:0;border-radius:0;color:#aaa;padding:6px;margin:0 14px}.theme-line .main-content .nav-horizontal a:hover{color:#999;border-bottom:4px solid #ddd}.theme-line .main-content .nav-horizontal a.active{border-bottom:4px solid #888}.theme-line .sidebar-nav{color:#474a54;padding-bottom:30px}.theme-line .sidebar-nav ul{padding:0;list-style:none;font-size:13px;margin:3px 0 0}.theme-line .sidebar-nav ul li a{padding:3px 0;display:block;color:#666;position:relative;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.theme-line .sidebar-n
av ul li a:before{top:0;content:" ";display:block;width:6px;height:100%;position:absolute;left:-30px}.theme-line .sidebar-nav ul li a:hover{text-decoration:none}.theme-line .select li a{color:#666}.theme-line .select li a:hover,.theme-line .select .active{color:#ec1c24;background-color:white}.theme-line .sidebar-nav ul li .subcategory{padding-left:15px}.theme-line .sidebar-nav h4{margin-top:2em;font-weight:normal;text-transform:uppercase;font-size:11px;margin-bottom:10px;color:#bbb}.theme-line .sidebar-nav h4:first-child{margin-top:0}.theme-line .sidebar-nav .ask{width:100%;text-align:center;padding:10px}.theme-line .border-left .sidebar-nav{padding-left:15px}.theme-line .suggest{padding:4px;display:inline-block;font-size:12px}.header{padding:15px}.header .has-github{padding-right:136px}.header h1.navbar-brand{height:40px;width:200px;padding:0;margin:5px 15px 0 0}.header h1.navbar-brand a{text-indent:-99999px;background:no-repeat center center;display:block;width:100%;height:100%;-w
ebkit-background-size:contain;-moz-background-size:contain;background-size:contain}.header .nav.navbar-nav.pull-right{position:relative;right:-30px}.header .nav.navbar-nav .not-link{padding:15px;display:inline-block}.header .nav.navbar-nav .stable,.header .nav.navbar-nav .beta,.header .nav.navbar-nav .private{font-size:9px;padding:3px 5px;display:inline-block;line-height:8px;-webkit-border-radius:3px;border-radius:3px;margin-left:6px;color:#fff;top:-2px;position:relative;opacity:0.6;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=60)";filter:alpha(opacity=60)}.header .nav.navbar-nav a:hover>.stable,.header .nav.navbar-nav a:hover>.beta,.header .nav.navbar-nav a:hover>.private{opacity:1;-ms-filter:none;filter:none}.header .nav.navbar-nav .beta{background-color:#59c3d1}.header .nav.navbar-nav .stable{background-color:#41b841}.header .nav.navbar-nav .private{background-color:#333}.theme-line header{border-bottom:8px solid}.theme-line header h2{color:#aaa}.theme-line header
p{color:#666}.theme-line header{border-bottom-color:#ec1c24}.theme-line .navbar-nav{color:#888}.theme-line .navbar-nav a{color:#bbb}.theme-line header a.btn{background-color:#ec1c24}.theme-line header a.btn:hover{background-color:#950d12}.theme-line header .navbar-nav .tt-cursor{background-color:#ec1c24}.theme-line header .navbar-nav a:hover,.theme-line header .navbar-nav .open>a{color:#ec1c24}.theme-line .navbar-nav .active a{color:#ec1c24}.theme-line .navbar-nav .active a:hover{color:#950d12}.theme-line .main-links .links a:hover{color:#ec1c24}.theme-line .main-content a{color:#666}.theme-line .main-content a:hover{color:#950d12}.theme-line .sidebar-nav ul li a.active:before{background-color:#ec1c24}.theme-line .sidebar-nav ul li a.active{color:#ec1c24}.theme-line .sidebar-nav ul li a:hover,.theme-line .sidebar-nav ul li a.active:hover{color:#950d12}.theme-line .btn-primary{background-color:#ec1c24}.theme-line .btn-primary:hover{background-color:#950d12}.theme-line .main-content .
nav-horizontal a.active{border-color:#ec1c24;color:#ec1c24}.theme-line .main-content .nav-horizontal a:hover{color:#950d12}.theme-line .main-content .nav-horizontal a.active:hover{border-color:#950d12}.theme-line header .navbar-nav a.active,.theme-line #versions-list li a:hover strong,.theme-line #versions-list li a.active .current,.theme-line #versions-list li a:active .current{color:#ec1c24}.theme-line.body-threes .section-right .threes-nav .btn-default:hover,.theme-line.page-docs.body-threes .section-right .threes-nav .pull-right a:hover{color:#ec1c24;border-color:#ec1c24}.theme-line .section-right{padding-left:30px}.body-overlap .main-content{margin-top:30px}.body-box .main-content,.body-overlap .main-content{padding:30px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,0.1);box-shadow:0 0 0 1px rgba(0,0,0,0.1);background-color:#fff}body{font-weight:400;font-family:Roboto Slab, serif}h1,h2,h3,h4,h5,h6{font-weight:700;font-family:Roboto Slab, serif}.submit-vote.submit-vote-parent.voted a.
submit-vote-button,.submit-vote.submit-vote-parent a.submit-vote-button:hover{background-color:#ec1c24}div.submit-vote.submit-vote-parent.voted a.submit-vote-button:hover{background-color:#950d12}a,.link .title{color:#ec1c24}a:hover,.link:hover .title{color:#950d12}.header h1.navbar-brand a{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.header h1.navbar-brand{width:96px}.block-edit-parameters{text-align:right;padding-bottom:5px}.ng-table-pager{display:none}.container-footer{margin-top:20px}.vcenter{display:inline-block;vertical-align:middle;float:none}.vcenter2{position:relative;top:50%;transform:translateY(-50%)}.modal{display:block;overflow:hidden}.modal .close{position:absolute;top:24px;right:24px;float:none}.modal .modal-dialog{width:610px}.modal .modal-content{-webkit-border-radius:0;border-radius:0;background-color:#f7f7f7}.modal .modal-content .modal-header{background-color:#fff;text-align:center;color:#555;padding:24px;font-family:"myriad-pr
o",sans-serif}.modal .modal-content .modal-header h4{font-family:"myriad-pro",sans-serif;font-size:22px}.modal .modal-content .modal-header h4 .fa{display:block;font-size:41px;color:#ddd;margin-bottom:5px}.modal .modal-content .modal-header p{color:#aaa;font-size:1em;margin:3px 0 0}.modal .modal-content .modal-spacer{padding:10px 10px 0 10px}.modal .modal-content .modal-footer{margin-top:0}.modal-body{padding-top:30px}h1.ignite-logo{background-image:url("https://www.filepicker.io/api/file/QagunjDGRFul2JgNCAli")}.st-sort-ascent:after{font-family:FontAwesome, serif;content:'\f077'}.st-sort-descent:after{font-family:FontAwesome, serif;content:'\f078'}.block-display-image img{max-width:100%;max-height:450px;margin:auto;display:block}.greedy{min-height:200px;height:calc(100vh - 230px)}@media (min-width:768px){.navbar-nav>li>a{padding-top:20px;padding-bottom:10px}}.details-row,.settings-row{display:block;margin:0.65em 0;line-height:28px}.details-row [class*="col-"],.settings-row [class*="
col-"]{display:inline-block;vertical-align:middle;float:none;padding-left:0 !important;padding-right:0 !important}.details-row input[type="checkbox"],.settings-row input[type="checkbox"]{line-height:20px;margin-right:4px}.details-row .checkbox label,.settings-row .checkbox label{line-height:20px;vertical-align:middle}.details-row{padding-left:1.3em}button{margin-right:4px}h1,h2,h3{-webkit-user-select:none;font-weight:normal;line-height:1}h3{color:black;font-size:1.2em;margin-top:0;margin-bottom:1.5em}table tr:hover{cursor:pointer}.input-group{display:inline-block}.input-group .form-control{width:auto;margin-left:0;margin-right:0}.form-control{display:inline-block;text-align:left;padding:3px 6px;height:28px}.form-control button{text-align:left}.form-horizontal .control-label{padding-top:4px}button .caret{float:right;margin-left:0;margin-top:7px}.theme-line .panel-heading{padding:10px 10px;margin:0}.theme-line .panel-heading h3{margin-bottom:0}.theme-line .panel-heading h3>a{color:bla
ck;cursor:pointer}.theme-line .panel-title a{color:#ec1c24}.theme-line .panel-title h3{margin-bottom:1.3em}.theme-line .panel-body{padding:0.65em 1.3em}.theme-line .main-content a.customize{color:#ec1c24;cursor:pointer}.theme-line .panel-collapse{margin:0}.theme-line .links table,.theme-line .links-edit table{display:table;table-layout:fixed;margin-bottom:20px}.theme-line .links table td,.theme-line .links-edit table td{padding-left:18px}.theme-line .links table .active a,.theme-line .links-edit table .active a{color:#ec1c24;font-weight:bold}.theme-line .links table a:hover,.theme-line .links-edit table a:hover{color:#950d12}.theme-line .links table a,.theme-line .links-edit table a{color:#666}.theme-line .links-edit table label{line-height:28px;color:#666}.btn{padding:3px 6px}.panel-title a{font-size:14px}.panel-details{margin-top:1.3em;margin-bottom:0.65em;padding:0.65em;border-radius:4px;border:thin dotted lightgrey}.tooltip.right .tooltip-arrow{border-right-color:#ec1c24}.toolti
p>.tooltip-inner{max-width:400px;text-align:left;background-color:#ec1c24}label{font-weight:normal;line-height:14px;margin-bottom:0}.form-horizontal .checkbox{padding-top:0}.input-tip{display:block;overflow:hidden;padding-right:4px}.labelField{float:left;margin-right:4px}.tipField{float:right;line-height:28px;margin-right:18px}.tipLabel{margin-left:4px}.table-nowrap{table-layout:fixed}.td-overflow{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fa-edit{cursor:pointer}.fa-remove{margin-left:10px;cursor:pointer}label.required:after{color:#ec1c24;content:' *';display:inline}.blank{visibility:hidden}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/53d301db/modules/webconfig/nodejs/public/stylesheets/style.less
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/stylesheets/style.less b/modules/webconfig/nodejs/public/stylesheets/style.less
index 48d91fb..52c4f67 100644
--- a/modules/webconfig/nodejs/public/stylesheets/style.less
+++ b/modules/webconfig/nodejs/public/stylesheets/style.less
@@ -797,6 +797,7 @@ button .caret {
.panel-details {
margin-top: 1.3em;
+ margin-bottom: 0.65em;
padding: 0.65em;
border-radius: 4px;
@@ -829,6 +830,11 @@ label {
padding-right:4px;
}
+.labelField {
+ float: left;
+ margin-right: 4px;
+}
+
.tipField {
float: right;
line-height: @input-height;
@@ -859,8 +865,10 @@ label {
cursor: pointer;
}
-.required {
- font-weight: bold;
+label.required:after {
+ color: #ec1c24;
+ content: ' *';
+ display:inline;
}
.blank {
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/53d301db/modules/webconfig/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/includes/controls.jade b/modules/webconfig/nodejs/views/includes/controls.jade
index 0865731..02d4564 100644
--- a/modules/webconfig/nodejs/views/includes/controls.jade
+++ b/modules/webconfig/nodejs/views/includes/controls.jade
@@ -44,11 +44,11 @@ mixin details-row
.col-sm-8
+tipField('detail.tip')
.input-tip
- button.form-control(bs-select ng-model=detailMdl data-template='/select' data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in {{detail.items}}')
+ button.form-control(bs-select ng-model=detailMdl data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in {{detail.items}}')
div(ng-switch-when='dropdown-multiple')
label(class=lblDetailClasses) {{detail.label}}:
.col-sm-8
- button.form-control(bs-select ng-model=detailMdl data-multiple='1' data-template='/select' data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in {{detail.items}}')
+ button.form-control(bs-select ng-model=detailMdl data-multiple='1' data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in {{detail.items}}')
+tipField('detail.tip')
div(ng-switch-when='table-simple')
.details-label
@@ -81,27 +81,29 @@ mixin form-row
input.form-control(type='text' ng-if='!group.model' ng-model='backupItem[field.model]' placeholder='{{field.placeholder}}' ng-required='field.required')
input.form-control(type='text' ng-if='group.model' ng-model='backupItem[group.model][field.model]' placeholder='{{field.placeholder}}' ng-required='field.required')
div(ng-switch-when='dropdown')
- label(class=lblClasses) {{field.label}}:
+ label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
.col-sm-4
+tipField('field.tip')
.input-tip
- button.form-control(bs-select ng-if='!group.model' ng-model='backupItem[field.model]' data-template='/select' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')
- button.form-control(bs-select ng-if='group.model' ng-model='backupItem[group.model][field.model]' data-template='/select' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')
+ button.form-control(bs-select ng-if='!group.model' ng-model='backupItem[field.model]' ng-required='field.required' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}' )
+ button.form-control(bs-select ng-if='group.model' ng-model='backupItem[group.model][field.model]' ng-required='field.required' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')
div(ng-switch-when='dropdown-multiple')
- label(class=lblClasses) {{field.label}}:
+ label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
.col-sm-4
+tipField('field.tip')
.input-tip
- button.form-control(bs-select ng-model='backupItem[field.model]' data-multiple='1' data-template='/select' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')
+ button.form-control(bs-select ng-model='backupItem[field.model]' data-multiple='1' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')
div(ng-switch-when='dropdown-details')
- label(class=lblClasses) {{field.label}}:
+ - var expanded = 'field.details[backupItem[field.group][field.model]].expanded'
+
+ label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
.col-sm-4
+tipField('field.tip')
.input-tip
- button.form-control(bs-select ng-model=masterMdl data-template='/select' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')
- a.customize(ng-if='field.customizable' ng-show=masterMdl ng-init='lbl="Show settings"' ng-click='field.expanded = !field.expanded; lbl = field.expanded ? "Hide settings" : lbl="Show settings"') {{lbl}}
- .col-sm-6.panel-details(ng-show='field.expanded && #{masterMdl}')
- .details-row(ng-repeat='detail in field.details[#{masterMdl}]')
+ button.form-control(bs-select ng-model=masterMdl ng-required='field.required' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')
+ a.customize(ng-show=masterMdl ng-init='' ng-click='#{expanded} = !#{expanded}') {{#{expanded} ? "Hide settings" : "Show settings"}}
+ .col-sm-6.panel-details(ng-show='#{expanded} && #{masterMdl}')
+ .details-row(ng-repeat='detail in field.details[#{masterMdl}].fields')
+details-row
div(ng-switch-when='indexedTypes')
div
@@ -130,7 +132,7 @@ mixin form-row
a(ng-click='field.editIdx = $index; curValue = #{tblMdl}[$index]') {{$index + 1}}. {{item}}
i.tipField.fa.fa-remove(ng-click='field.editIdx = -1; #{tblMdl}.splice($index, 1)')
div(ng-show='field.editIdx == {{$index}}')
- label(style='float: left') {{$index + 1}}. 
+ label.labelField {{$index + 1}}.
i.tipField.fa.fa-floppy-o(ng-click='field.editIdx = -1; #{tblMdl}[$index]=curValue')
.input-tip
input.form-control(type='text' ng-model='curValue' placeholder='{{field.placeholder}}')