You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by se...@apache.org on 2015/07/24 15:46:18 UTC

[07/16] incubator-ignite git commit: IGNITE-843: Tooltips for add and remove buttons.

IGNITE-843: Tooltips for add and remove buttons.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/e795ef45
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/e795ef45
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/e795ef45

Branch: refs/heads/ignite-1121
Commit: e795ef45a4e2c7269182ef946cd19b37e12b90cf
Parents: f4e3a14
Author: AKuznetsov <ak...@gridgain.com>
Authored: Thu Jul 23 18:09:08 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Thu Jul 23 18:09:08 2015 +0700

----------------------------------------------------------------------
 .../src/main/js/controllers/models/caches.json  |  6 ++
 .../main/js/controllers/models/clusters.json    |  6 ++
 .../main/js/controllers/models/metadata.json    | 10 ++
 .../src/main/js/views/includes/controls.jade    | 98 ++++++++++----------
 4 files changed, 71 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e795ef45/modules/web-control-center/src/main/js/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/src/main/js/controllers/models/caches.json b/modules/web-control-center/src/main/js/controllers/models/caches.json
index 13c5985..e3f0613 100644
--- a/modules/web-control-center/src/main/js/controllers/models/caches.json
+++ b/modules/web-control-center/src/main/js/controllers/models/caches.json
@@ -372,6 +372,8 @@
           "model": "indexedTypes",
           "keyName": "keyClass",
           "valueName": "valueClass",
+          "addTip": "Add new key and value classes to indexed types.",
+          "removeTip": "Remove item from indexed types.",
           "tip": [
             "Collection of types to index."
           ]
@@ -382,6 +384,8 @@
           "model": "sqlFunctionClasses",
           "editIdx": -1,
           "placeholder": "SQL function full class name",
+          "addTip": "Add new user-defined functions for SQL queries.",
+          "removeTip": "Remove user-defined function.",
           "tableTip": [
             "Collections of classes with user-defined functions for SQL queries."
           ],
@@ -810,6 +814,8 @@
                   "model": "hibernateProperties",
                   "editIdx": -1,
                   "placeholder": "key=value",
+                  "addTip": "Add new Hibernate property.",
+                  "removeTip": "Remove Hibernate property.",
                   "tip": [
                     "List of Hibernate properties.",
                     "For example: connection.url=jdbc:h2:mem:"

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e795ef45/modules/web-control-center/src/main/js/controllers/models/clusters.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/src/main/js/controllers/models/clusters.json b/modules/web-control-center/src/main/js/controllers/models/clusters.json
index e90094e..0ffb1b3 100644
--- a/modules/web-control-center/src/main/js/controllers/models/clusters.json
+++ b/modules/web-control-center/src/main/js/controllers/models/clusters.json
@@ -68,6 +68,8 @@
               "reordering": true,
               "ipaddress": true,
               "placeholder": "IP address:port",
+              "addTip": "Add new address.",
+              "removeTip": "Remove address.",
               "tip": [
                 "Addresses may be represented as follows:",
                 "<ul>",
@@ -221,6 +223,8 @@
               "model": "regions",
               "editIdx": -1,
               "placeholder": "",
+              "addTip": "Add new region.",
+              "removeTip": "Remove region.",
               "tableTip": [
                 "List of regions where VMs are located.",
                 "If the regions are not set then every region, that a cloud provider has, will be investigated. This could lead to significant performance degradation.",
@@ -237,6 +241,8 @@
               "model": "zones",
               "editIdx": -1,
               "placeholder": "",
+              "addTip": "Add new zone.",
+              "removeTip": "Remove zone.",
               "tableTip": [
                 "List of zones where VMs are located.",
                 "If the zones are not set then every zone from regions, set by {@link #setRegions(Collection)}}, will be taken into account.",

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e795ef45/modules/web-control-center/src/main/js/controllers/models/metadata.json
----------------------------------------------------------------------
diff --git a/modules/web-control-center/src/main/js/controllers/models/metadata.json b/modules/web-control-center/src/main/js/controllers/models/metadata.json
index 516fb6e..bd6d7a0 100644
--- a/modules/web-control-center/src/main/js/controllers/models/metadata.json
+++ b/modules/web-control-center/src/main/js/controllers/models/metadata.json
@@ -115,6 +115,8 @@
       "keyName": "name",
       "valueName": "className",
       "hide": "backupItem.kind != 'query'",
+      "addTip": "Add field to query.",
+      "removeTip": "Remove field.",
       "tip": [
         "Collection of name-to-type mappings to be queried, in addition to indexed fields."
       ]
@@ -126,6 +128,8 @@
       "keyName": "name",
       "valueName": "className",
       "hide": "backupItem.kind != 'query'",
+      "addTip": "Add field to index in ascending order.",
+      "removeTip": "Remove field.",
       "tip": [
         "Collection of name-to-type mappings to index in ascending order."
       ]
@@ -137,6 +141,8 @@
       "keyName": "name",
       "valueName": "className",
       "hide": "backupItem.kind != 'query'",
+      "addTip": "Add field to index in descending order.",
+      "removeTip": "Remove field.",
       "tip": [
         "Collection of name-to-type mappings to index in descending order."
       ]
@@ -147,6 +153,8 @@
       "model": "textFields",
       "hide": "backupItem.kind != 'query'",
       "placeholder": "Field name",
+      "addTip": "Add field to index as text.",
+      "removeTip": "Remove field.",
       "tableTip": [
         "Fields to index as text."
       ],
@@ -159,6 +167,8 @@
       "type": "queryGroups",
       "model": "groups",
       "hide": "backupItem.kind != 'query'",
+      "addTip": "Add new group index.",
+      "removeTip": "Remove group.",
       "tip": [
         "Collection of group indexes."
       ]

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e795ef45/modules/web-control-center/src/main/js/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/src/main/js/views/includes/controls.jade b/modules/web-control-center/src/main/js/views/includes/controls.jade
index 2318370..c0ccc91 100644
--- a/modules/web-control-center/src/main/js/views/includes/controls.jade
+++ b/modules/web-control-center/src/main/js/views/includes/controls.jade
@@ -40,11 +40,11 @@ mixin ico-exclamation(mdl, err, msg)
 mixin btn-save(show, click)
     i.tipField.fa.fa-floppy-o(ng-show=show ng-click=click bs-tooltip data-title='Save item')
 
-mixin btn-add(click)
-    i.tipField.fa.fa-plus(ng-click=click bs-tooltip data-title='Add new item')
+mixin btn-add(click, tip)
+    i.tipField.fa.fa-plus(ng-click=click bs-tooltip=tip)
 
-mixin btn-remove(click)
-    i.tipField.fa.fa-remove(ng-click=click bs-tooltip data-title='Remove item' data-trigger='hover')
+mixin btn-remove(click, tip)
+    i.tipField.fa.fa-remove(ng-click=click bs-tooltip=tip data-trigger='hover')
 
 mixin btn-up(show, click)
     i.tipField.fa.fa-arrow-up(ng-show=show ng-click=click bs-tooltip data-title='Move item up')
@@ -63,7 +63,7 @@ mixin table-pair(header, tblMdl, keyFld, valFld, keyPlaceholder, valPlaceholder)
     .col-sm-6
         label.table-header #{header}:
         +tipLabel('field.tip')
-        +btn-add('tableNewItem(field)')
+        +btn-add('tableNewItem(field)', 'field.addTip')
         .table-details(ng-show='(#{tblMdl} && #{tblMdl}.length > 0) || tableNewItemActive(field)')
             table.links-edit.col-sm-12(st-table=tblMdl)
                 tbody
@@ -71,7 +71,7 @@ mixin table-pair(header, tblMdl, keyFld, valFld, keyPlaceholder, valPlaceholder)
                         td.col-sm-12
                             div(ng-show='!tableEditing(field, $index)')
                                 a.labelFormField(ng-click='curPair = tableStartEdit(backupItem, field, $index); curKey = curPair.#{keyFld}; curValue = curPair.#{valFld}') {{$index + 1}}) {{item.#{keyFld}}} / {{item.#{valFld}}}
-                                +btn-remove('tableRemove(backupItem, field, $index)')
+                                +btn-remove('tableRemove(backupItem, field, $index)', 'field.removeTip')
                             div(ng-show='tableEditing(field, $index)')
                                 label.labelField {{$index + 1}})
                                 +btn-save('tablePairSaveVisible(curKey, curValue)', 'tablePairSave(tablePairValid, backupItem, field, curKey, curValue, $index)')
@@ -92,41 +92,41 @@ mixin details-row
 
     div(ng-switch='detail.type')
         div(ng-switch-when='label')
-            label {{detail.label}}
+            label {{::detail.label}}
         div.checkbox(ng-switch-when='check')
             label
                 input(type='checkbox')&attributes(detailCommon)
-                |{{detail.label}}
+                |{{::detail.label}}
                 +tipLabel('detail.tip')
         div(ng-switch-when='text')
-            label(class=lblDetailClasses ng-class='{required: detail.required}') {{detail.label}}:
+            label(class=lblDetailClasses ng-class='{required: detail.required}') {{::detail.label}}:
             .col-sm-8
                 +tipField('detail.tip')
                 .input-tip
-                    input.form-control(type='text' placeholder='{{detail.placeholder}}')&attributes(detailCommon)
+                    input.form-control(type='text' placeholder='{{::detail.placeholder}}')&attributes(detailCommon)
         div(ng-switch-when='number' )
-            label(class=lblDetailClasses ng-class='{required: detail.required}') {{detail.label}}:
+            label(class=lblDetailClasses ng-class='{required: detail.required}') {{::detail.label}}:
             .col-sm-8
                 +tipField('detail.tip')
                 .input-tip
-                    input.form-control(name='{{detail.model}}' type='number' placeholder='{{detail.placeholder}}' min='{{detail.min ? detail.min : 0}}' max='{{detail.max ? detail.max : Number.MAX_VALUE}}')&attributes(detailCommon)
+                    input.form-control(name='{{detail.model}}' type='number' placeholder='{{::detail.placeholder}}' min='{{detail.min ? detail.min : 0}}' max='{{detail.max ? detail.max : Number.MAX_VALUE}}')&attributes(detailCommon)
                     +ico-exclamation('{{detail.model}}', 'min', 'Value is less than allowable minimum.')
                     +ico-exclamation('{{detail.model}}', 'max', 'Value is more than allowable maximum.')
                     +ico-exclamation('{{detail.model}}', 'number', 'Invalid value. Only numbers allowed.')
         div(ng-switch-when='dropdown')
-            label(class=lblDetailClasses ng-class='{required: detail.required}') {{detail.label}}:
+            label(class=lblDetailClasses ng-class='{required: detail.required}') {{::detail.label}}:
             .col-sm-8
                 +tipField('detail.tip')
                 .input-tip
-                    button.form-control(bs-select data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in {{detail.items}}')&attributes(detailCommon)
+                    button.form-control(bs-select data-placeholder='{{::detail.placeholder}}' bs-options='item.value as item.label for item in {{detail.items}}')&attributes(detailCommon)
         div(ng-switch-when='dropdown-multiple')
-            label(class=lblDetailClasses ng-class='{required: detail.required}') {{detail.label}}:
+            label(class=lblDetailClasses ng-class='{required: detail.required}') {{::detail.label}}:
             .col-sm-8
-                button.form-control(bs-select data-multiple='1' data-placeholder='{{detail.placeholder}}' bs-options='item.value as item.label for item in {{detail.items}}')&attributes(detailCommon)
+                button.form-control(bs-select data-multiple='1' data-placeholder='{{::detail.placeholder}}' bs-options='item.value as item.label for item in {{detail.items}}')&attributes(detailCommon)
             +tipField('detail.tip')
         div(ng-switch-when='table-simple')&attributes(detailCommon)
             div(ng-if='detail.label')
-                label.table-header {{detail.label}}:
+                label.table-header {{::detail.label}}:
                 +tipLabel('detail.tableTip')
             table.col-sm-12.links-edit-details(st-table='#{detailMdl}')
                 tbody
@@ -134,19 +134,19 @@ mixin details-row
                         td
                             div(ng-show='!tableEditing(detail, $index)')
                                 a.labelFormField(ng-click='curValue = tableStartEdit(backupItem, detail, $index)') {{$index + 1}}) {{item}}
-                                +btn-remove('tableRemove(backupItem, detail, $index)')
+                                +btn-remove('tableRemove(backupItem, detail, $index)', 'detail.removeTip')
                                 +btn-down('detail.reordering && tableSimpleDownVisible(backupItem, detail, $index)', 'tableSimpleDown(backupItem, detail, $index)')
                                 +btn-up('detail.reordering && $index > 0', 'tableSimpleUp(backupItem, detail, $index)')
                             div(ng-show='tableEditing(detail, $index)')
                                 label.labelField {{$index + 1}})
                                 +btn-save('tableSimpleSaveVisible(curValue)', 'tableSimpleSave(tableSimpleValid, backupItem, detail, curValue, $index)')
                                 .input-tip.form-group.has-feedback
-                                    input.form-control(name='{{detail.model}}.edit' type='text' ng-model='curValue' placeholder='{{detail.placeholder}}')&attributes(customValidators)
+                                    input.form-control(name='{{detail.model}}.edit' type='text' ng-model='curValue' placeholder='{{::detail.placeholder}}')&attributes(customValidators)
                                     +ico-exclamation('{{detail.model}}.edit', 'ipaddress', 'Invalid address, see help for format description.')
             button.btn.btn-primary.fieldButton(ng-disabled='!newValue' ng-click='tableSimpleSave(tableSimpleValid, backupItem, detail, newValue, -1)') Add
             +tipField('detail.tip')
             .input-tip.form-group.has-feedback
-                input.form-control(name='{{detail.model}}' type='text' ng-model='newValue' ng-focus='tableNewItem(detail)' placeholder='{{detail.placeholder}}')&attributes(customValidators)
+                input.form-control(name='{{detail.model}}' type='text' ng-model='newValue' ng-focus='tableNewItem(detail)' placeholder='{{::detail.placeholder}}')&attributes(customValidators)
                 +ico-exclamation('{{detail.model}}', 'ipaddress', 'Invalid address, see help for format description.')
 
 mixin table-db-field-edit(dbName, dbType, javaName, javaType)
@@ -183,63 +183,63 @@ mixin form-row-custom(lblClasses, fieldClasses)
 
     div(ng-switch='field.type')
         div.col-sm-6(ng-switch-when='label')
-            label {{field.label}}
+            label {{::field.label}}
         div.checkbox.col-sm-6(ng-switch-when='check' ng-hide=fieldHide)
             label
                 input(type='checkbox')&attributes(fieldCommon)
-                | {{field.label}}
+                | {{::field.label}}
                 +tipLabel('field.tip')
         div(ng-switch-when='text' ng-hide=fieldHide)
-            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{::field.label}}:
             div(class=fieldClasses)
                 +tipField('field.tip')
                 .input-tip
-                    input.form-control(type='text' placeholder='{{field.placeholder}}')&attributes(fieldCommon)
+                    input.form-control(type='text' placeholder='{{::field.placeholder}}')&attributes(fieldCommon)
         div(ng-switch-when='password' ng-hide=fieldHide)
-            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{::field.label}}:
             div(class=fieldClasses)
                 +tipField('field.tip')
                 .input-tip
-                    input.form-control(type='password' placeholder='{{field.placeholder}}')&attributes(fieldCommon)
+                    input.form-control(type='password' placeholder='{{::field.placeholder}}')&attributes(fieldCommon)
         div(ng-switch-when='number' ng-hide=fieldHide)
-            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{::field.label}}:
             div(class=fieldClasses)
                 +tipField('field.tip')
                 .input-tip
-                    input.form-control(name='{{field.model}}' type='number' placeholder='{{field.placeholder}}' min='{{field.min ? field.min : 0}}' max='{{field.max ? field.max : Number.MAX_VALUE}}')&attributes(fieldCommon)
+                    input.form-control(name='{{field.model}}' type='number' placeholder='{{::field.placeholder}}' min='{{field.min ? field.min : 0}}' max='{{field.max ? field.max : Number.MAX_VALUE}}')&attributes(fieldCommon)
                     +ico-exclamation('{{field.model}}', 'min', 'Value is less than allowable minimum.')
                     +ico-exclamation('{{field.model}}', 'max', 'Value is more than allowable maximum.')
                     +ico-exclamation('{{field.model}}', 'number', 'Invalid value. Only numbers allowed.')
         div(ng-switch-when='dropdown' ng-hide=fieldHide)
-            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{::field.label}}:
             div(class=fieldClasses)
                 +tipField('field.tip')
                 .input-tip
-                    button.form-control(bs-select data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')&attributes(fieldCommon)
+                    button.form-control(bs-select data-placeholder='{{::field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')&attributes(fieldCommon)
         div(ng-switch-when='dropdown-multiple' ng-hide=fieldHide)
-            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{::field.label}}:
             div(class=fieldClasses)
                 +tipField('field.tip')
                 .input-tip
-                    button.form-control(bs-select ng-disabled='{{field.items}}.length == 0' data-multiple='1' data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')&attributes(fieldCommon)
+                    button.form-control(bs-select ng-disabled='{{field.items}}.length == 0' data-multiple='1' data-placeholder='{{::field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')&attributes(fieldCommon)
             a.customize(ng-show='field.addLink' ng-href='{{field.addLink.ref}}') {{field.addLink.label}}
         div(ng-switch-when='dropdown-details' ng-hide=fieldHide)
             - var expanded = 'field.details[' + fieldMdl + '].expanded'
 
-            label(class=lblClasses ng-class=fieldRequiredClass) {{field.label}}:
+            label(class=lblClasses ng-class=fieldRequiredClass) {{::field.label}}:
             div(class=fieldClasses)
                 +tipField('field.tip')
                 .input-tip
-                    button.form-control(bs-select data-placeholder='{{field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')&attributes(fieldCommon)
+                    button.form-control(bs-select data-placeholder='{{::field.placeholder}}' bs-options='item.value as item.label for item in {{field.items}}')&attributes(fieldCommon)
             a.customize(ng-show='#{fieldMdl} && field.details[#{fieldMdl}].fields' ng-click='#{expanded} = !#{expanded}') {{#{expanded} ? "Hide settings" : "Show settings"}}
             .col-sm-6.panel-details(ng-show='#{expanded} && #{fieldMdl}')
                 .details-row(ng-repeat='detail in field.details[#{fieldMdl}].fields')
                     +details-row
         div(ng-switch-when='table-simple' ng-hide=fieldHide)&attributes(fieldCommon)
             .col-sm-6
-                label.table-header {{field.label}}:
+                label.table-header {{::field.label}}:
                 +tipLabel('field.tableTip')
-                +btn-add('tableNewItem(field)')
+                +btn-add('tableNewItem(field)', 'field.addTip')
             .col-sm-12(ng-show='(#{fieldMdl} && #{fieldMdl}.length > 0) || tableNewItemActive(field)')
                 .col-sm-6
                     .table-details
@@ -249,29 +249,29 @@ mixin form-row-custom(lblClasses, fieldClasses)
                                     td.col-sm-12
                                         div(ng-show='!tableEditing(field, $index)')
                                             a.labelFormField(ng-click='curValue = tableStartEdit(backupItem, field, $index)') {{$index + 1}}) {{item | compact}}
-                                            +btn-remove('tableRemove(backupItem, field, $index)')
+                                            +btn-remove('tableRemove(backupItem, field, $index)', 'field.removeTip')
                                             +btn-down('field.reordering && tableSimpleDownVisible(backupItem, field, $index)', 'tableSimpleDown(backupItem, field, $index)')
                                             +btn-up('field.reordering && $index > 0', 'tableSimpleUp(backupItem, field, $index)')
                                         div(ng-show='tableEditing(field, $index)')
                                             label.labelField {{$index + 1}})
                                             +btn-save('tableSimpleSaveVisible(curValue)', 'tableSimpleSave(tableSimpleValid, backupItem, field, curValue, $index)')
                                             .input-tip
-                                                input.form-control(type='text' ng-model='curValue' placeholder='{{field.placeholder}}')
+                                                input.form-control(type='text' ng-model='curValue' placeholder='{{::field.placeholder}}')
                             tfoot(ng-show='tableNewItemActive(field)')
                                 tr
                                     td.col-sm-12
                                         +btn-save('tableSimpleSaveVisible(newValue)', 'tableSimpleSave(tableSimpleValid, backupItem, field, newValue, -1)')
                                         .input-tip
-                                            input.form-control(type='text' ng-model='newValue' placeholder='{{field.placeholder}}')
+                                            input.form-control(type='text' ng-model='newValue' placeholder='{{::field.placeholder}}')
         div(ng-switch-when='indexedTypes')
             +table-pair('Index key-value type pairs', fieldMdl, 'keyClass', 'valueClass', 'Key class full name', 'Value class full name')
         div(ng-switch-when='queryFields' ng-hide=fieldHide)
-            +table-pair('{{field.label}}', fieldMdl, 'name', 'className', 'Field name', 'Field class full name')
+            +table-pair('{{::field.label}}', fieldMdl, 'name', 'className', 'Field name', 'Field class full name')
         div(ng-switch-when='dbFields' ng-hide=fieldHide)
             .col-sm-6
-                label.table-header {{field.label}}:
+                label.table-header {{::field.label}}:
                 +tipLabel('field.tip')
-                +btn-add('tableNewItem(field)')
+                +btn-add('tableNewItem(field)', 'field.addTip')
             .col-sm-12(ng-show='(#{fieldMdl} && #{fieldMdl}.length > 0) || tableNewItemActive(field)')
                 .col-sm-6
                     .table-details
@@ -281,7 +281,7 @@ mixin form-row-custom(lblClasses, fieldClasses)
                                     td.col-sm-12
                                         div(ng-show='!tableEditing(field, $index)')
                                             a.labelFormField(ng-click='curField = tableStartEdit(backupItem, field, $index); curDbName = curField.dbName; curDbType = curField.dbType; curJavaName = curField.javaName; curJavaType = curField.javaType') {{$index + 1}}) {{item.dbName}} / {{item.dbType}} / {{item.javaName}} / {{item.javaType}}
-                                            +btn-remove('tableRemove(backupItem, field, $index)')
+                                            +btn-remove('tableRemove(backupItem, field, $index)', 'field.removeTip')
                                         div(ng-if='tableEditing(field, $index)')
                                             label.labelField {{$index + 1}})
                                             +btn-save('tableDbFieldSaveVisible(curDbName, curDbType, curJavaName, curJavaType)', 'tableDbFieldSave(field, curDbName, curDbType, curJavaName, curJavaType, $index)')
@@ -293,21 +293,21 @@ mixin form-row-custom(lblClasses, fieldClasses)
                                         +table-db-field-edit('newDbName', 'newDbType', 'newJavaName', 'newJavaType')
         div(ng-switch-when='queryGroups' ng-hide=fieldHide)
             .col-sm-6
-                label.table-header {{field.label}}:
+                label.table-header {{::field.label}}:
                 +tipLabel('field.tip')
-                +btn-add('tableNewItem(field)')
+                +btn-add('tableNewItem(field)', 'field.addTip')
             .col-sm-12(ng-show='(#{fieldMdl} && #{fieldMdl}.length > 0) || tableNewItemActive(field)')
                 .col-sm-6
                     .table-details
-                        table.links-edit.col-sm-12(st-table=fieldMdl)
+                        table.links-edit.col-sm-12(st-table=fieldMdl ng-init='newDirection = "ASC"')
                             tbody
                                 tr(ng-repeat='group in #{fieldMdl}')
                                     td.col-sm-12
                                         div
                                             .col-sm-12(ng-show='!tableEditing(field, $index)')
                                                 a.labelFormField(ng-click='curGroup = tableStartEdit(backupItem, field, $index); curGroupName = curGroup.name; curFields = curGroup.fields') {{$index + 1}}) {{group.name}}
-                                                +btn-remove('tableRemove(backupItem, field, $index)')
-                                                +btn-add('tableGroupNewItem($index); newDirection = "ASC"')
+                                                +btn-remove('tableRemove(backupItem, field, $index)', 'field.removeTip')
+                                                +btn-add('tableGroupNewItem($index)', 'field.addTip')
                                             div(ng-show='tableEditing(field, $index)')
                                                 label.labelField {{$index + 1}})
                                                 +btn-save('tableGroupSaveVisible(curGroupName)', 'tableGroupSave(curGroupName, $index)')
@@ -319,7 +319,7 @@ mixin form-row-custom(lblClasses, fieldClasses)
                                                         td
                                                             div(ng-show='!tableGroupItemEditing(groupIndex, $index)')
                                                                 a.labelFormField(ng-click='curGroupItem = tableGroupItemStartEdit(groupIndex, $index); curFieldName = curGroupItem.name; curClassName = curGroupItem.className; curDirection = curGroupItem.direction') {{$index + 1}}) {{groupItem.name}} / {{groupItem.className}} / {{groupItem.direction}}
-                                                                +btn-remove('tableRemoveGroupItem(group, $index)')
+                                                                +btn-remove('tableRemoveGroupItem(group, $index)', 'field.removeTip')
                                                             div(ng-show='tableGroupItemEditing(groupIndex, $index)')
                                                                 label.labelField {{$index + 1}})
                                                                 +btn-save('tableGroupItemSaveVisible(curFieldName, curClassName)', 'tableGroupItemSave(curFieldName, curClassName, curDirection, groupIndex, $index)')