You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2016/06/27 03:22:53 UTC
[09/22] ignite git commit: Ignite Web Console beta2.
http://git-wip-us.apache.org/repos/asf/ignite/blob/541e17d0/modules/web-console/src/main/js/serve/routes/public.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/serve/routes/public.js b/modules/web-console/src/main/js/serve/routes/public.js
index 0009e6a..207289a 100644
--- a/modules/web-console/src/main/js/serve/routes/public.js
+++ b/modules/web-console/src/main/js/serve/routes/public.js
@@ -112,12 +112,16 @@ module.exports.factory = function(express, passport, nodemailer, settings, mail,
account.resetPasswordToken = _randomString();
return account.save()
- .then(() => mail.send(account, `Thanks for signing up for ${settings.smtp.username}.`,
- `Hello ${account.firstName} ${account.lastName}!<br><br>` +
- `You are receiving this email because you have signed up to use <a href="http://${req.headers.host}">${settings.smtp.username}</a>.<br><br>` +
- 'If you have not done the sign up and do not know what this email is about, please ignore it.<br>' +
- 'You may reset the password by clicking on the following link, or paste this into your browser:<br><br>' +
- `http://${req.headers.host}/password/reset?token=${account.resetPasswordToken}`));
+ .then(() => {
+ const resetLink = `http://${req.headers.host}/password/reset?token=${account.resetPasswordToken}`;
+
+ mail.send(account, `Thanks for signing up for ${settings.smtp.username}.`,
+ `Hello ${account.firstName} ${account.lastName}!<br><br>` +
+ `You are receiving this email because you have signed up to use <a href="http://${req.headers.host}">${settings.smtp.username}</a>.<br><br>` +
+ 'If you have not done the sign up and do not know what this email is about, please ignore it.<br>' +
+ 'You may reset the password by clicking on the following link, or paste this into your browser:<br><br>' +
+ `<a href="${resetLink}">${resetLink}</a>`);
+ });
})
.catch((err) => {
res.status(401).send(err.message);
@@ -166,14 +170,17 @@ module.exports.factory = function(express, passport, nodemailer, settings, mail,
return user.save();
})
- .then((user) => mail.send(user, 'Password Reset',
- `Hello ${user.firstName} ${user.lastName}!<br><br>` +
- 'You are receiving this because you (or someone else) have requested the reset of the password for your account.<br><br>' +
- 'Please click on the following link, or paste this into your browser to complete the process:<br><br>' +
- 'http://' + req.headers.host + '/password/reset?token=' + user.resetPasswordToken + '<br><br>' +
- 'If you did not request this, please ignore this email and your password will remain unchanged.',
- 'Failed to send email with reset link!')
- )
+ .then((user) => {
+ const resetLink = `http://${req.headers.host}/password/reset?token=${user.resetPasswordToken}`;
+
+ mail.send(user, 'Password Reset',
+ `Hello ${user.firstName} ${user.lastName}!<br><br>` +
+ 'You are receiving this because you (or someone else) have requested the reset of the password for your account.<br><br>' +
+ 'Please click on the following link, or paste this into your browser to complete the process:<br><br>' +
+ `<a href="${resetLink}">${resetLink}</a><br><br>` +
+ 'If you did not request this, please ignore this email and your password will remain unchanged.',
+ 'Failed to send email with reset link!');
+ })
.then(() => res.status(200).send('An email has been sent with further instructions.'))
.catch((err) => {
// TODO IGNITE-843 Send email to admin
http://git-wip-us.apache.org/repos/asf/ignite/blob/541e17d0/modules/web-console/src/main/js/views/configuration/clusters.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/views/configuration/clusters.jade b/modules/web-console/src/main/js/views/configuration/clusters.jade
index 6e29d86..6450163 100644
--- a/modules/web-console/src/main/js/views/configuration/clusters.jade
+++ b/modules/web-console/src/main/js/views/configuration/clusters.jade
@@ -43,12 +43,15 @@ include ../../app/helpers/jade/mixins.jade
div(ng-show='ui.expanded')
ignite-configuration-clusters-atomic
ignite-configuration-clusters-binary
+ ignite-configuration-clusters-collision
ignite-configuration-clusters-communication
ignite-configuration-clusters-connector
ignite-configuration-clusters-deployment
ignite-configuration-clusters-discovery
ignite-configuration-clusters-events
+ ignite-configuration-clusters-failover
ignite-configuration-clusters-igfs
+ ignite-configuration-clusters-logger
ignite-configuration-clusters-marshaller
ignite-configuration-clusters-metrics
ignite-configuration-clusters-ssl
@@ -56,5 +59,6 @@ include ../../app/helpers/jade/mixins.jade
ignite-configuration-clusters-thread
ignite-configuration-clusters-time
ignite-configuration-clusters-transactions
+ ignite-configuration-user-attributes
+advanced-options-toggle-default
http://git-wip-us.apache.org/repos/asf/ignite/blob/541e17d0/modules/web-console/src/main/js/views/configuration/domains-import.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/views/configuration/domains-import.jade b/modules/web-console/src/main/js/views/configuration/domains-import.jade
index 46385f9..23b9434 100644
--- a/modules/web-console/src/main/js/views/configuration/domains-import.jade
+++ b/modules/web-console/src/main/js/views/configuration/domains-import.jade
@@ -14,6 +14,8 @@
See the License for the specific language governing permissions and
limitations under the License.
+include ../../app/helpers/jade/mixins.jade
+
mixin chk(mdl, change, tip)
input(type='checkbox' ng-model=mdl ng-change=change bs-tooltip='' data-title=tip data-trigger='hover' data-placement='top')
@@ -22,174 +24,187 @@ mixin td-ellipses-lbl(w, lbl)
label #{lbl}
.modal.modal-domain-import.center(role='dialog')
- .modal-dialog
+ .modal-dialog.domains-import-dialog
.modal-content(ignite-loading='importDomainFromDb' ignite-loading-text='{{importDomain.loadingOptions.text}}')
#errors-container.modal-header.header
button.close(ng-click='$hide()' aria-hidden='true') ×
h4.modal-title(ng-if='!importDomain.demo') Import domain models from database
h4.modal-title(ng-if='importDomain.demo') Import domain models from demo database
- .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && !importDomain.jdbcDriversNotFound' style='margin-bottom: 321px')
- .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && importDomain.jdbcDriversNotFound' style='margin-bottom: 220px')
- | Domain model could not be imported
- ul
- li Agent failed to find JDBC drivers
- li Copy required JDBC drivers into agent '\jdbc-drivers' folder and try again
- li Refer to agent README.txt for more information
- .import-domain-model-wizard-page(ng-show='importDomain.action == "connect" && importDomain.demo' style='margin-bottom: 211px')
- div(ng-if='demoConnection.db == "H2"')
- label Demo description:
+ .modal-body
+ .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && !importDomain.jdbcDriversNotFound')
+ .import-domain-model-wizard-page(ng-if='importDomain.action == "drivers" && importDomain.jdbcDriversNotFound')
+ | Domain model could not be imported
ul
- li In-memory H2 database server will be started inside agent
- li Database will be populated with sample tables
- li You could test domain model generation with this demo database
- li Click "Next" to continue
- div(ng-if='demoConnection.db != "H2"')
- label Demo could not be started
+ li Agent failed to find JDBC drivers
+ li Copy required JDBC drivers into agent 'jdbc-drivers' folder and try again
+ li Refer to agent README.txt for more information
+ .import-domain-model-wizard-page(ng-show='importDomain.action == "connect" && importDomain.demo')
+ div(ng-if='demoConnection.db == "H2"')
+ label Demo description:
ul
- li Agent failed to resolve H2 database jar
- li Copy h2-x.x.x.jar into agent '\jdbc-drivers' folder and try again
- li Refer to agent README.txt for more information
- .import-domain-model-wizard-page(ng-show='importDomain.action == "connect" && !importDomain.demo' style='margin-bottom: 90px')
- form.form-horizontal(name='connectForm' novalidate)
- .settings-row
- label.col-xs-4.col-sm-2.col-md-2 Driver JAR:
- .col-xs-8.col-sm-10.col-md-10
- i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Select appropriate JAR with JDBC driver<br> To add another driver you need to place it into "/jdbc-drivers" folder of Ignite Web Agent<br> Refer to Ignite Web Agent README.txt for for more information')
- .input-tip
- button.select-toggle.form-control(id='jdbcDriverJar' bs-select data-container='.modal-domain-import' ng-model='ui.selectedJdbcDriverJar' ng-class='{placeholder: !(jdbcDriverJars && jdbcDriverJars.length > 0)}' placeholder='Choose JDBC driver' bs-options='item.value as item.label for item in jdbcDriverJars')
- .settings-row
- label.col-xs-4.col-sm-2.col-md-2 JDBC Driver:
- .col-xs-8.col-sm-10.col-md-10
- i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Fully qualified class name of JDBC driver that will be used to connect to database')
- .input-tip
- input.form-control(id='jdbcDriverClass' type='text' ng-model='selectedPreset.jdbcDriverClass' placeholder='JDBC driver fully qualified class name' required=true)
- .settings-row
- label.col-xs-4.col-sm-2.col-md-2 JDBC URL:
- .col-xs-8.col-sm-10.col-md-10
- i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='JDBC URL for connecting to database<br>Refer to your database documentation for details')
- .input-tip
- input.form-control(id='jdbcUrl' type='text' ng-model='selectedPreset.jdbcUrl' placeholder='JDBC URL' required=true)
- .settings-row
- label.col-xs-4.col-sm-2.col-md-2 User:
- .col-xs-8.col-sm-10.col-md-10
- i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='User name for connecting to database')
- .input-tip
- input.form-control(id='user' type='text' ng-model='selectedPreset.user')
- .settings-row
- label.col-xs-4.col-sm-2.col-md-2 Password:
- .col-xs-8.col-sm-10.col-md-10
- i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Password for connecting to database<br>Note, password would not be saved in preferences for security reasons')
- .input-tip
- input.form-control(id='password' type='password' ng-model='selectedPreset.password' on-enter='importDomainNext()')
- .settings-row
- .checkbox
- label
- input(id='tablesOnly' type='checkbox' ng-model='selectedPreset.tablesOnly')
- | Tables only
- i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='If selected, then only tables metadata will be parsed<br>Otherwise table and view metadata will be parsed')
- .import-domain-model-wizard-page(ng-show='importDomain.action == "schemas"')
- table.table.metadata(st-table='importDomain.displayedSchemas' st-safe-src='importDomain.schemas')
- thead
- tr
- th.header(colspan='2')
- .col-sm-4.pull-right(style='margin-bottom: 5px')
- input.form-control(type='text' st-search='name' placeholder='Filter schemas...' ng-model='importDomain.displayedSchemasFilter' ng-change='selectSchema()')
- tr
- th(width='30px')
- +chk('importDomain.allSchemasSelected', 'selectAllSchemas()', 'Select all schemas')
- th
- label Schema
+ li In-memory H2 database server will be started inside agent
+ li Database will be populated with sample tables
+ li You could test domain model generation with this demo database
+ li Click "Next" to continue
+ div(ng-if='demoConnection.db != "H2"')
+ label Demo could not be started
+ ul
+ li Agent failed to resolve H2 database jar
+ li Copy h2-x.x.x.jar into agent 'jdbc-drivers' folder and try again
+ li Refer to agent README.txt for more information
+ .import-domain-model-wizard-page(ng-show='importDomain.action == "connect" && !importDomain.demo')
+ form.form-horizontal(name='connectForm' novalidate)
+ .settings-row
+ label.col-xs-4.col-sm-2.col-md-2 Driver JAR:
+ .col-xs-8.col-sm-10.col-md-10
+ i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Select appropriate JAR with JDBC driver<br> To add another driver you need to place it into "/jdbc-drivers" folder of Ignite Web Agent<br> Refer to Ignite Web Agent README.txt for for more information')
+ .input-tip
+ button.select-toggle.form-control(id='jdbcDriverJar' bs-select data-container='.modal-domain-import' ng-model='ui.selectedJdbcDriverJar' ng-class='{placeholder: !(jdbcDriverJars && jdbcDriverJars.length > 0)}' placeholder='Choose JDBC driver' bs-options='item.value as item.label for item in jdbcDriverJars')
+ .settings-row
+ label.col-xs-4.col-sm-2.col-md-2 JDBC Driver:
+ .col-xs-8.col-sm-10.col-md-10
+ i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Fully qualified class name of JDBC driver that will be used to connect to database')
+ .input-tip
+ input.form-control(id='jdbcDriverClass' type='text' ng-model='selectedPreset.jdbcDriverClass' placeholder='JDBC driver fully qualified class name' required=true)
+ .settings-row
+ label.col-xs-4.col-sm-2.col-md-2 JDBC URL:
+ .col-xs-8.col-sm-10.col-md-10
+ i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='JDBC URL for connecting to database<br>Refer to your database documentation for details')
+ .input-tip
+ input.form-control(id='jdbcUrl' type='text' ng-model='selectedPreset.jdbcUrl' placeholder='JDBC URL' required=true)
+ .settings-row
+ label.col-xs-4.col-sm-2.col-md-2 User:
+ .col-xs-8.col-sm-10.col-md-10
+ i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='User name for connecting to database')
+ .input-tip
+ input.form-control(id='user' type='text' ng-model='selectedPreset.user')
+ .settings-row
+ label.col-xs-4.col-sm-2.col-md-2 Password:
+ .col-xs-8.col-sm-10.col-md-10
+ i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Password for connecting to database<br>Note, password would not be saved in preferences for security reasons')
+ .input-tip
+ input.form-control(id='password' type='password' ng-model='selectedPreset.password' on-enter='importDomainNext()')
+ .settings-row
+ .checkbox
+ label
+ input(id='tablesOnly' type='checkbox' ng-model='selectedPreset.tablesOnly')
+ | Tables only
+ i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='If selected, then only tables metadata will be parsed<br>Otherwise table and view metadata will be parsed')
+ .import-domain-model-wizard-page(ng-show='importDomain.action == "schemas"')
+ table.table.metadata(st-table='importDomain.displayedSchemas' st-safe-src='importDomain.schemas')
+ thead
+ tr
+ th.header(colspan='2')
+ .col-sm-4.pull-right(style='margin-bottom: 5px')
+ input.form-control(type='text' st-search='name' placeholder='Filter schemas...' ng-model='importDomain.displayedSchemasFilter' ng-change='selectSchema()')
+ tr
+ th(width='30px')
+ +chk('importDomain.allSchemasSelected', 'selectAllSchemas()', 'Select all schemas')
+ th
+ label Schema
+ tbody
+ tr
+ td(colspan='2')
+ .scrollable-y(style='height: 213px')
+ table.table-modal-striped(id='importSchemasData')
+ tbody
+ tr(ng-repeat='schema in importDomain.displayedSchemas')
+ td(width='30px')
+ input(type='checkbox' ng-model='schema.use' ng-change='selectSchema()')
+ td
+ label {{schema.name}}
+ .import-domain-model-wizard-page(ng-show='importDomain.action == "tables"')
+ table.table.metadata(st-table='importDomain.displayedTables' st-safe-src='importDomain.tables')
+ thead
+ tr
+ th.header(colspan='6')
+ .col-sm-4.pull-right(style='margin-bottom: 8px')
+ input.form-control(type='text' st-search='label' placeholder='Filter tables...' ng-model='importDomain.displayedTablesFilter' ng-change='selectTable()')
+ tr
+ th(width='30px')
+ +chk('importDomain.allTablesSelected', 'selectAllTables()', 'Select all tables')
+ th(width='130px')
+ label Schema
+ th(width='160px')
+ label Table name
+ th(colspan=2 width='288px')
+ label Cache
+ th
tbody
tr
- td(colspan='2')
- .scrollable-y(style='height: 213px')
- table.table-modal-striped(id='importSchemasData')
+ td(colspan='6')
+ .scrollable-y(style='height: 143px')
+ table.table-modal-striped(id='importTableData')
tbody
- tr(ng-repeat='schema in importDomain.displayedSchemas')
- td(width='30px')
- input(type='checkbox' ng-model='schema.use' ng-change='selectSchema()')
+ tr(ng-repeat='table in importDomain.displayedTables track by $index')
+ td(width='30px' style='min-width: 30px; max-width: 30px')
+ input(type='checkbox' ng-model='table.use' ng-change='selectTable()')
+ +td-ellipses-lbl('130px', '{{table.schema}}')
+ +td-ellipses-lbl('160px', '{{table.tbl}}')
+ td(colspan='2' width='288px' style='min-width: 160px; max-width: 160px')
+ div.td-ellipsis
+ a(ng-if='!table.edit' ng-click='startEditDbTableCache(table)') {{tableActionView(table)}}
+ div(style='display: flex' ng-if='table.edit')
+ button.select-toggle.form-control(style='width: 35%; margin-right: 5px' bs-select ng-model='table.action' data-container='.modal-domain-import' bs-options='item.value as item.shortLabel for item in importActions')
+ button.select-toggle.form-control(style='width: 65%; margin-right: 0' bs-select ng-model='table.cacheOrTemplate' data-container='.modal-domain-import' bs-options='item.value as item.label for item in table.cachesOrTemplates')
td
- label {{schema.name}}
- .import-domain-model-wizard-page(ng-show='importDomain.action == "tables"')
- table.table.metadata(st-table='importDomain.displayedTables' st-safe-src='importDomain.tables')
- thead
- tr
- th.header(colspan='6')
- .col-sm-4.pull-right(style='margin-bottom: 8px')
- input.form-control(type='text' st-search='label' placeholder='Filter tables...' ng-model='importDomain.displayedTablesFilter' ng-change='selectTable()')
- tr
- th(width='30px')
- +chk('importDomain.allTablesSelected', 'selectAllTables()', 'Select all tables')
- th(width='130px')
- label Schema
- th(width='160px')
- label Table name
- th(colspan=2 width='288px')
- label Cache
- th
- tbody
- tr
- td(colspan='6')
- .scrollable-y(style='height: 143px')
- table.table-modal-striped(id='importTableData')
- tbody
- tr(ng-repeat='table in importDomain.displayedTables track by $index')
- td(width='30px' style='min-width: 30px; max-width: 30px')
- input(type='checkbox' ng-model='table.use' ng-change='selectTable()')
- +td-ellipses-lbl('130px', '{{table.schema}}')
- +td-ellipses-lbl('160px', '{{table.tbl}}')
- td(colspan='2' width='288px' style='min-width: 160px; max-width: 160px')
- div.td-ellipsis
- a(ng-if='!table.edit' ng-click='startEditDbTableCache(table)') {{tableActionView(table)}}
- div(style='display: flex' ng-if='table.edit')
- button.select-toggle.form-control(style='width: 35%; margin-right: 5px' bs-select ng-model='table.action' data-container='.modal-domain-import' bs-options='item.value as item.shortLabel for item in importActions')
- button.select-toggle.form-control(style='width: 65%; margin-right: 0' bs-select ng-model='table.cacheOrTemplate' data-container='.modal-domain-import' bs-options='item.value as item.label for item in table.cachesOrTemplates')
- td
- .settings-row
- label Defaults to be applied for filtered tables
- i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='Select and apply options for caches generation')
- .settings-row
- .col-sm-11
- .col-sm-6(style='padding-right: 5px')
- button.select-toggle.form-control(bs-select ng-model='importCommon.action' data-container='.modal-domain-import' bs-options='item.value as item.label for item in importActions')
- .col-sm-6(style='padding-left: 5px; padding-right: 5px')
- button.select-toggle.form-control(bs-select ng-model='importCommon.cacheOrTemplate' data-container='.modal-domain-import' bs-options='item.value as item.label for item in importCommon.cachesOrTemplates')
- .col-sm-1(style='padding-left: 5px')
- button.btn.btn-primary(ng-click='applyDefaults()') Apply
- .import-domain-model-wizard-page(ng-show='importDomain.action == "options"' style='margin-bottom: 176px')
- form.form-horizontal(name='optionsForm' novalidate)
- .settings-row
- .col-xs-3.col-sm-2.col-md-2.required
- label.required Package:
- .col-xs-9.col-sm-10.col-md-10
- i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Package that will be used for POJOs generation')
- .input-tip
- input.form-control(id='domainPackageName' type='text' ng-model='ui.packageName' placeholder='Package for POJOs generation')
- .settings-row
- .checkbox
- label
- input(id='domainBuiltinKeys' type='checkbox' ng-model='ui.builtinKeys')
- | Use Java built-in types for keys
- i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='Use Java built-in types like "Integer", "Long", "String" instead of POJO generation in case when table primary key contains only one field')
- .settings-row
- .checkbox
- label
- input(id='domainUsePrimitives' type='checkbox' ng-model='ui.usePrimitives')
- | Use primitive types for NOT NULL table columns
- i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='Use primitive types like "int", "long", "double" for POJOs fields generation in case of NOT NULL columns')
.settings-row
- .checkbox
- label
- input(id='domainGenerateAliases' type='checkbox' ng-model='ui.generateAliases')
- | Generate aliases for query fields
- i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='Generate aliases for query fields with names from database fields')
+ label Defaults to be applied for filtered tables
+ i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='Select and apply options for caches generation')
.settings-row
- .col-xs-3.col-sm-2.col-md-2.required
- label Clusters:
- .col-xs-9.col-sm-10.col-md-10
- i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Choose clusters that will be associated with generated caches')
- .input-tip
- button.select-toggle.form-control(id='generatedCachesClusters' bs-select ng-model='ui.generatedCachesClusters' ng-class='{placeholder: !(ui.generatedCachesClusters && ui.generatedCachesClusters.length > 0)}' data-container='.modal-domain-import' data-multiple='1' placeholder='Choose clusters for generated caches' bs-options='item.value as item.label for item in clusters')
+ .col-sm-11
+ .col-sm-6(style='padding-right: 5px')
+ button.select-toggle.form-control(bs-select ng-model='importCommon.action' data-container='.modal-domain-import' bs-options='item.value as item.label for item in importActions')
+ .col-sm-6(style='padding-left: 5px; padding-right: 5px')
+ button.select-toggle.form-control(bs-select ng-model='importCommon.cacheOrTemplate' data-container='.modal-domain-import' bs-options='item.value as item.label for item in importCommon.cachesOrTemplates')
+ .col-sm-1(style='padding-left: 5px')
+ button.btn.btn-primary(ng-click='applyDefaults()') Apply
+ .import-domain-model-wizard-page(ng-show='importDomain.action == "options"')
+ form.form-horizontal(name='optionsForm' novalidate)
+ .settings-row
+ .col-xs-3.col-sm-2.col-md-2.required
+ label.required Package:
+ .col-xs-9.col-sm-10.col-md-10
+ i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Package that will be used for POJOs generation')
+ .input-tip
+ ignite-form-field-input-text(
+ data-id='domainPackageName'
+ data-name='domainPackageName'
+ data-ng-model='ui.packageName'
+ data-ignite-label-name='Package'
+ data-ng-required='true'
+ data-placeholder='Enter package name'
+ data-java-keywords='true'
+ data-java-package-name='package-only'
+ ng-model-options='{allowInvalid: true}'
+ )
+ +error-feedback('optionsForm.$error.javaPackageName', 'javaPackageName', 'Package name is invalid')
+ +error-feedback('optionsForm.$error.javaKeywords', 'javaKeywords', 'Package name could not contains reserved java keyword')
+ .settings-row
+ .checkbox
+ label
+ input(id='domainBuiltinKeys' type='checkbox' ng-model='ui.builtinKeys')
+ | Use Java built-in types for keys
+ i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='Use Java built-in types like "Integer", "Long", "String" instead of POJO generation in case when table primary key contains only one field')
+ .settings-row
+ .checkbox
+ label
+ input(id='domainUsePrimitives' type='checkbox' ng-model='ui.usePrimitives')
+ | Use primitive types for NOT NULL table columns
+ i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='Use primitive types like "int", "long", "double" for POJOs fields generation in case of NOT NULL columns')
+ .settings-row
+ .checkbox
+ label
+ input(id='domainGenerateAliases' type='checkbox' ng-model='ui.generateAliases')
+ | Generate aliases for query fields
+ i.tipLabel.fa.fa-question-circle(bs-tooltip='' data-title='Generate aliases for query fields with names from database fields')
+ .settings-row
+ .col-xs-3.col-sm-2.col-md-2.required
+ label Clusters:
+ .col-xs-9.col-sm-10.col-md-10
+ i.tipField.fa.fa-question-circle(bs-tooltip='' data-title='Choose clusters that will be associated with generated caches')
+ .input-tip
+ button.select-toggle.form-control(id='generatedCachesClusters' bs-select ng-model='ui.generatedCachesClusters' ng-class='{placeholder: !(ui.generatedCachesClusters && ui.generatedCachesClusters.length > 0)}' data-container='.modal-domain-import' data-multiple='1' placeholder='Choose clusters for generated caches' bs-options='item.value as item.label for item in clusters')
.modal-footer
label(ng-hide='importDomain.action == "drivers" || (importDomain.action == "connect" && importDomain.demo)').labelField {{importDomain.info}}
a.btn.btn-primary(ng-hide='importDomain.action == "drivers" || importDomain.action == "connect"' ng-click='importDomainPrev()' bs-tooltip='' data-title='{{prevTooltipText()}}' data-placement='bottom') Prev
http://git-wip-us.apache.org/repos/asf/ignite/blob/541e17d0/modules/web-console/src/main/js/views/settings/profile.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/views/settings/profile.jade b/modules/web-console/src/main/js/views/settings/profile.jade
index 355d232..53991b3 100644
--- a/modules/web-console/src/main/js/views/settings/profile.jade
+++ b/modules/web-console/src/main/js/views/settings/profile.jade
@@ -48,29 +48,29 @@ mixin lbl(txt)
.details-row
.advanced-options
i.fa(
- ng-click='expandedToken = !expandedToken'
+ ng-click='toggleToken()'
ng-class='expandedToken ? "fa-chevron-circle-down" : "fa-chevron-circle-right"')
- a(ng-click='expandedToken = !expandedToken') {{expandedToken ? 'Cancel security token changing...' : 'Show security token...'}}
+ a(ng-click='toggleToken()') {{expandedToken ? 'Cancel security token changing...' : 'Show security token...'}}
div(ng-if='expandedToken')
+lbl('Security token:')
- label(ng-init='user.token = $root.user.token') {{user.token || 'No security token. Regenerate please.'}}
+ label {{user.token || 'No security token. Regenerate please.'}}
i.tipLabel.fa.fa-refresh(ng-click='generateToken()' bs-tooltip='' data-title='Generate random security token')
i.tipLabel.fa.fa-clipboard(ng-click-copy='{{user.token}}' bs-tooltip='' data-title='Copy security token to clipboard')
i.tipLabel.fa.fa-question-circle(ng-if=lines bs-tooltip='' data-title='The security token is used for authorization of web agent')
.details-row
.advanced-options
i.fa(
- ng-click='expandedPassword = !expandedPassword'
+ ng-click='togglePassword()'
ng-class='expandedPassword ? "fa-chevron-circle-down" : "fa-chevron-circle-right"')
- a(ng-click='expandedPassword = !expandedPassword') {{expandedPassword ? 'Cancel password changing...' : 'Change password...'}}
+ a(ng-click='togglePassword()') {{expandedPassword ? 'Cancel password changing...' : 'Change password...'}}
div(ng-if='expandedPassword')
.details-row
+lbl('New password:')
.col-xs-5.col-sm-4
- input.form-control(ng-init='user.password=null' type='password' ng-model='user.password' placeholder='New password')
+ input.form-control(type='password' ng-model='user.password' placeholder='New password')
.details-row
+lbl('Confirm:')
.col-xs-5.col-sm-4
- input.form-control(ng-init='user.confirm=null' type='password' ng-model='user.confirm' match='user.password' placeholder='Confirm new password')
+ input.form-control(type='password' ng-model='user.confirm' match='user.password' placeholder='Confirm new password')
.col-xs-12.col-sm-12.details-row
a.btn.btn-primary(ng-disabled='!profileCouldBeSaved()' ng-click='profileCouldBeSaved() && saveUser()' bs-tooltip='' data-title='{{saveBtnTipText()}}' data-placement='bottom' data-trigger='hover') Save
http://git-wip-us.apache.org/repos/asf/ignite/blob/541e17d0/modules/web-console/src/main/js/views/signin.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/views/signin.jade b/modules/web-console/src/main/js/views/signin.jade
index 7c25a5a..73a07e7 100644
--- a/modules/web-console/src/main/js/views/signin.jade
+++ b/modules/web-console/src/main/js/views/signin.jade
@@ -48,11 +48,15 @@ header#header.header
.settings-row(ng-show='action == "signup"')
+lblRequired('Last Name:')
.col-xs-9.col-md-8
- input#last_name.form-control(enter-focus-next='email' type='text' ng-model='ui.lastName' placeholder='Input last name' ng-required='action=="signup"')
- .settings-row(ng-show='action != "signup"')
+ input#last_name.form-control(enter-focus-next='signup_email' type='text' ng-model='ui.lastName' placeholder='Input last name' ng-required='action=="signup"')
+ .settings-row(ng-show='action == "password/forgot"')
+lblRequired('Email:')
.col-xs-9.col-md-8
- input#signin_email.form-control(enter-focus-next='company' type='email' ng-model='ui.email' placeholder='Input email' required)
+ input#forgot_email.form-control(on-enter='form.$valid && forgotPassword(ui)' type='email' ng-model='ui.email' placeholder='Input email' required)
+ .settings-row(ng-show='action == "signin"')
+ +lblRequired('Email:')
+ .col-xs-9.col-md-8
+ input#signin_email.form-control(enter-focus-next='user_password' type='email' ng-model='ui.email' placeholder='Input email' required)
.settings-row(ng-show='action == "signup"')
+lblRequired('Email:')
.col-xs-9.col-md-8
@@ -80,17 +84,17 @@ header#header.header
| I agree to the #[a(ui-sref='{{::terms.termsState}}' target='_blank') terms and conditions]
.col-xs-12.col-md-11
.login-footer(ng-show='action == "signup"')
- a.labelField(ng-click='action = "password/forgot"' on-click-focus='email') Forgot password?
- a.labelLogin(ng-click='action = "signin"' on-click-focus='email') Sign In
+ a.labelField(ng-click='action = "password/forgot"' on-click-focus='signin_email') Forgot password?
+ a.labelLogin(ng-click='action = "signin"' on-click-focus='signin_email') Sign In
button#signup.btn.btn-primary(ng-click='auth(action, ui)' ng-disabled='form.$invalid') Sign Up
.col-xs-12.col-md-11
.login-footer(ng-show='action == "password/forgot"')
- a.labelField(ng-click='action = "signin"' on-click-focus='email') Sign In
- button#forgot.btn.btn-primary(ng-click='auth(action, ui)' ng-disabled='form.$invalid') Send it to me
+ a.labelField(ng-click='action = "signin"' on-click-focus='signin_email') Sign In
+ button#forgot.btn.btn-primary(ng-click='forgotPassword(ui)' ng-disabled='form.$invalid') Send it to me
.col-xs-12.col-md-11
.login-footer(ng-show='action == "signin"')
- a.labelField(ng-click='action = "password/forgot"' on-click-focus='email') Forgot password?
- a.labelLogin(ng-click='action = "signup"' on-click-focus='user_name') Sign Up
+ a.labelField(ng-click='action = "password/forgot"' on-click-focus='signin_email') Forgot password?
+ a.labelLogin(ng-click='action = "signup"' on-click-focus='first_name') Sign Up
button#login.btn.btn-primary(ng-click='auth(action, ui)' ng-disabled='form.$invalid') Sign In
.col-xs-12.col-md-11.home-panel
@@ -144,10 +148,10 @@ header#header.header
h3 Query chart
p View data in tabular form and as charts
// Controls
- a.left.carousel-control(href='#carousel', role='button', data-slide='prev')
+ a.left.carousel-control(href='#carousel', ng-click='$event.preventDefault()', role='button', data-slide='prev')
span.fa.fa-chevron-left(aria-hidden='true')
span.sr-only Previous
- a.right.carousel-control(href='#carousel', role='button', data-slide='next')
+ a.right.carousel-control(href='#carousel', ng-click='$event.preventDefault()', role='button', data-slide='next')
span.fa.fa-chevron-right(aria-hidden='true')
span.sr-only Next
http://git-wip-us.apache.org/repos/asf/ignite/blob/541e17d0/modules/web-console/src/main/js/views/sql/cache-metadata.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/views/sql/cache-metadata.jade b/modules/web-console/src/main/js/views/sql/cache-metadata.jade
index 40b7a6b..450c178 100644
--- a/modules/web-console/src/main/js/views/sql/cache-metadata.jade
+++ b/modules/web-console/src/main/js/views/sql/cache-metadata.jade
@@ -24,7 +24,7 @@
span(ng-switch='' on='node.type')
span(ng-switch-when='type' ng-dblclick='dblclickMetadata(paragraph, node)')
i.fa.fa-table
- label.clickable(ng-bind-html='node.displayMame')
+ label.clickable(ng-bind='node.displayName')
span(ng-switch-when='plain')
label {{node.name}}
span(ng-switch-when='field' ng-dblclick='dblclickMetadata(paragraph, node)')
http://git-wip-us.apache.org/repos/asf/ignite/blob/541e17d0/modules/web-console/src/main/js/views/sql/sql.jade
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/views/sql/sql.jade b/modules/web-console/src/main/js/views/sql/sql.jade
index 5eade69..be6d85e 100644
--- a/modules/web-console/src/main/js/views/sql/sql.jade
+++ b/modules/web-console/src/main/js/views/sql/sql.jade
@@ -42,24 +42,105 @@ mixin chart-settings(mdl)
.col-xs-4
+result-toolbar
+mixin notebook-rename
+ .docs-header.notebook-header
+ h1.col-sm-6(ng-hide='notebook.edit')
+ label(style='max-width: calc(100% - 60px)') {{notebook.name}}
+ .btn-group(ng-if='!demo')
+ +btn-toolbar('fa-pencil', 'notebook.edit = true;notebook.editName = notebook.name', 'Rename notebook')
+ +btn-toolbar('fa-trash', 'removeNotebook()', 'Remove notebook')
+ h1.col-sm-6(ng-show='notebook.edit')
+ i.btn.fa.fa-floppy-o(ng-show='notebook.editName' ng-click='renameNotebook(notebook.editName)' bs-tooltip data-title='Save notebook name' data-trigger='hover')
+ .input-tip
+ input.form-control(ng-model='notebook.editName' required on-enter='renameNotebook(notebook.editName)' on-escape='notebook.edit = false;')
+ h1.pull-right
+ a.dropdown-toggle(data-toggle='dropdown' bs-dropdown='scrollParagraphs' data-placement='bottom-right') Scroll to query
+ span.caret
+ .btn-group(style='margin-top: 2px')
+ +btn-toolbar('fa-plus', 'addParagraph()', 'Add new query')
+
+mixin notebook-error
+ h2 Failed to load notebook
+ label.col-sm-12 Notebook not accessible any more. Go back to configuration or open to another notebook.
+ button.h3.btn.btn-primary(ui-sref='base.configuration.clusters') Back to configuration
+
+mixin paragraph-rename
+ .col-sm-6(ng-hide='paragraph.edit')
+ i.tipLabel.fa(ng-class='paragraphExpanded(paragraph) ? "fa-chevron-circle-down" : "fa-chevron-circle-right"')
+ label {{paragraph.name}}
+
+ .btn-group(ng-hide='notebook.paragraphs.length > 1')
+ +btn-toolbar('fa-pencil', 'paragraph.edit = true; paragraph.editName = paragraph.name; $event.stopPropagation();', 'Rename query', 'paragraph-name-{{paragraph.id}}')
+
+ .btn-group(ng-show='notebook.paragraphs.length > 1' ng-click='$event.stopPropagation();')
+ +btn-toolbar('fa-pencil', 'paragraph.edit = true; paragraph.editName = paragraph.name;', 'Rename query', 'paragraph-name-{{paragraph.id}}')
+ +btn-toolbar('fa-remove', 'removeParagraph(paragraph)', 'Remove query')
+
+ .col-sm-6(ng-show='paragraph.edit')
+ i.tipLabel.fa(style='float: left;' ng-class='paragraphExpanded(paragraph) ? "fa-chevron-circle-down" : "fa-chevron-circle-right"')
+ i.tipLabel.fa.fa-floppy-o(style='float: right;' ng-show='paragraph.editName' ng-click='renameParagraph(paragraph, paragraph.editName); $event.stopPropagation();' bs-tooltip data-title='Save query name' data-trigger='hover')
+ .input-tip
+ input.form-control(id='paragraph-name-{{paragraph.id}}' ng-model='paragraph.editName' required ng-click='$event.stopPropagation();' on-enter='renameParagraph(paragraph, paragraph.editName)' on-escape='paragraph.edit = false')
+
+mixin query-controls
+ .sql-controls
+ a.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, true)' ng-click='actionAvailable(paragraph, true) && execute(paragraph)' data-placement='bottom' bs-tooltip data-title='{{actionTooltip(paragraph, "execute", true)}}') Execute
+ a.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, true)' ng-click='actionAvailable(paragraph, true) && explain(paragraph)' data-placement='bottom' bs-tooltip data-title='{{actionTooltip(paragraph, "explain", true)}}') Explain
+ a.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, false)' ng-click='actionAvailable(paragraph, false) && scan(paragraph)' data-placement='bottom' bs-tooltip data-title='{{actionTooltip(paragraph, "execute scan", false)}}') Scan
+ .pull-right
+ labelHide System columns:
+ a.btn.btn-default.fa.fa-bars.tipLabel(ng-class='{"btn-info": paragraph.systemColumns}' ng-click='toggleSystemColumns(paragraph)' ng-disabled='paragraph.disabledSystemColumns' bs-tooltip data-title='Show "_KEY", "_VAL" columns')
+ label.tipLabel Refresh rate:
+ button.btn.btn-default.fa.fa-clock-o.tipLabel(title='Click to show refresh rate dialog' ng-class='{"btn-info": paragraph.rate && paragraph.rate.installed}' bs-popover data-template-url='/sql/paragraph-rate.html' data-placement='left' data-auto-close='1' data-trigger='click') {{rateAsString(paragraph)}}
+ label.tipLabel Page size:
+ button.select-toggle.fieldButton.btn.btn-default(ng-model='paragraph.pageSize' bs-options='item for item in pageSizes' bs-select bs-tooltip data-placement='bottom-right' data-title='Max number of rows to show in query result as one page')
+
+mixin table-result
+ .sql-table-total.row
+ .col-xs-4
+ label(style='margin-right: 10px;') Page: #[b {{paragraph.page}}]
+ label Results so far: #[b {{paragraph.rows.length + paragraph.total}}]
+ .col-xs-4
+ +result-toolbar
+ .col-xs-4
+ .btn-group.pull-right(ng-disabled='paragraph.loading')
+ button.btn.btn-primary.fieldButton(ng-click='exportCsv(paragraph)' bs-tooltip data-title='{{actionTooltip(paragraph, "export", false)}}') Export
+ button.btn.btn-primary(id='export-item-dropdown' data-toggle='dropdown' data-container='body' bs-dropdown='exportDropdown' data-placement='bottom-right')
+ span.caret
+ .grid(ui-grid='paragraph.gridOptions' ui-grid-resize-columns ui-grid-exporter)
+
+mixin chart-result
+ div(ng-show='paragraph.queryExecuted()')
+ +chart-settings
+ div(ng-show='paragraph.chartColumns.length > 0 && !paragraph.chartColumnsConfigured()')
+ .sql-empty-result Cannot display chart. Please configure axis using #[b Chart settings]
+ div(ng-show='paragraph.chartColumns.length == 0')
+ .sql-empty-result Cannot display chart. Result set must contain Java build-in type columns. Please change query and execute it again.
+ div(ng-show='paragraph.chartColumnsConfigured()')
+ div(ng-show='paragraph.timeLineSupported() || !paragraph.chartTimeLineEnabled()')
+ div(ng-repeat='chart in paragraph.charts')
+ nvd3(options='chart.options' data='chart.data' api='chart.api')
+ .sql-empty-result(ng-show='!paragraph.timeLineSupported() && paragraph.chartTimeLineEnabled()') Pie chart does not support 'TIME_LINE' column for X-axis. Please use another column for X-axis or switch to another chart.
+ .sql-empty-result(ng-hide='paragraph.queryExecuted()')
+ .row
+ .col-xs-4.col-xs-offset-4
+ +result-toolbar
+ label.margin-top-dflt Charts do not support #[b Explain] and #[b Scan] query
+
+mixin footer-controls
+ hr(style='margin-top: 0; margin-bottom: 5px')
+ a(style='float: left; margin-left: 10px; margin-bottom: 5px' ng-click='showResultQuery(paragraph)') Show query
+
+ -var nextVisibleCondition = 'paragraph.queryId && (paragraph.table() || paragraph.chart() && (paragraph.timeLineSupported() || !paragraph.chartTimeLineEnabled()))'
+
+ .sql-next(ng-show=nextVisibleCondition)
+ i.fa.fa-chevron-circle-right(ng-class='{disabled: paragraph.loading}' ng-click='!paragraph.loading && nextPage(paragraph)')
+ a(ng-class='{disabled: paragraph.loading}' ng-click='!paragraph.loading && nextPage(paragraph)') Next
+
.row(ng-controller='sqlController')
.docs-content
.row(ng-if='notebook' bs-affix style='margin-bottom: 20px;')
- .docs-header.notebook-header
- h1.col-sm-6(ng-hide='notebook.edit')
- label(style='max-width: calc(100% - 60px)') {{notebook.name}}
- .btn-group(ng-if='!demo')
- +btn-toolbar('fa-pencil', 'notebook.edit = true;notebook.editName = notebook.name', 'Rename notebook')
- +btn-toolbar('fa-trash', 'removeNotebook()', 'Remove notebook')
- h1.col-sm-6(ng-show='notebook.edit')
- i.btn.fa.fa-floppy-o(ng-show='notebook.editName' ng-click='renameNotebook(notebook.editName)' bs-tooltip data-title='Save notebook name' data-trigger='hover')
- .input-tip
- input.form-control(ng-model='notebook.editName' required on-enter='renameNotebook(notebook.editName)' on-escape='notebook.edit = false;')
- h1.pull-right
- a.dropdown-toggle(data-toggle='dropdown' bs-dropdown='scrollParagraphs' data-placement='bottom-right') Scroll to query
- span.caret
- .btn-group(style='margin-top: 2px')
- +btn-toolbar('fa-plus', 'addParagraph()', 'Add new query')
+ +notebook-rename
ignite-information(data-title='With SQL notebook you can' style='margin-top: 0; margin-bottom: 30px')
ul
@@ -69,31 +150,15 @@ mixin chart-settings(mdl)
li View data in tabular form and as charts
div(ng-if='notebookLoadFailed' style='text-align: center')
- h2 Failed to load notebook
- label.col-sm-12 Notebook not accessible any more. Go back to configuration or open to another notebook.
- button.h3.btn.btn-primary(ui-sref='base.configuration.clusters') Back to configuration
+ +notebook-error
+
div(ng-if='notebook' ignite-loading='sqlLoading' ignite-loading-text='{{ loadingText }}' ignite-loading-position='top')
.docs-body.paragraphs
.panel-group(bs-collapse ng-model='notebook.expandedParagraphs' data-allow-multiple='true' data-start-collapsed='false')
.panel.panel-default(ng-repeat='paragraph in notebook.paragraphs')
.panel-heading(id='{{paragraph.id}}' bs-collapse-toggle)
.row
- .col-sm-6(ng-hide='paragraph.edit')
- i.tipLabel.fa(ng-class='paragraphExpanded(paragraph) ? "fa-chevron-circle-down" : "fa-chevron-circle-right"')
- label {{paragraph.name}}
-
- .btn-group(ng-hide='notebook.paragraphs.length > 1')
- +btn-toolbar('fa-pencil', 'paragraph.edit = true; paragraph.editName = paragraph.name; $event.stopPropagation();', 'Rename query', 'paragraph-name-{{paragraph.id}}')
-
- .btn-group(ng-show='notebook.paragraphs.length > 1' ng-click='$event.stopPropagation();')
- +btn-toolbar('fa-pencil', 'paragraph.edit = true; paragraph.editName = paragraph.name;', 'Rename query', 'paragraph-name-{{paragraph.id}}')
- +btn-toolbar('fa-remove', 'removeParagraph(paragraph)', 'Remove query')
-
- .col-sm-6(ng-show='paragraph.edit')
- i.tipLabel.fa(style='float: left;' ng-class='paragraphExpanded(paragraph) ? "fa-chevron-circle-down" : "fa-chevron-circle-right"')
- i.tipLabel.fa.fa-floppy-o(style='float: right;' ng-show='paragraph.editName' ng-click='renameParagraph(paragraph, paragraph.editName); $event.stopPropagation();' bs-tooltip data-title='Save query name' data-trigger='hover')
- .input-tip
- input.form-control(id='paragraph-name-{{paragraph.id}}' ng-model='paragraph.editName' required ng-click='$event.stopPropagation();' on-enter='renameParagraph(paragraph, paragraph.editName)' on-escape='paragraph.edit = false')
+ +paragraph-rename
.panel-collapse(role='tabpanel' bs-collapse-target)
.col-sm-12
.col-xs-8.col-sm-9(style='border-right: 1px solid #eee')
@@ -105,13 +170,13 @@ mixin chart-settings(mdl)
lable.labelField.labelFormField Caches:
i.fa.fa-database.tipField(title='Click to show cache types metadata dialog' bs-popover data-template-url='/sql/cache-metadata.html', data-placement='bottom', data-trigger='click')
.input-tip
- input.form-control(type='text' st-search='name' placeholder='Filter caches...')
+ input.form-control(type='text' st-search='label' placeholder='Filter caches...')
table.links
- tbody.scrollable-y(style='max-height: 15em;display:block;' ng-model='paragraph.cacheName' bs-radio-group)
+ tbody.scrollable-y(style='max-height: 15em; display: block;')
tr(ng-repeat='cache in displayedCaches track by cache.name')
td(style='width: 100%')
- input.labelField(type='radio' value='{{cache.name}}')
- label(ng-bind-html='maskCacheName(cache.name)')
+ input.labelField(id='cache{{$index}}' type='radio' value='{{cache.name}}' ng-model='paragraph.cacheName')
+ label(for='cache{{$index}}' ng-bind='cache.label')
.empty-caches(ng-show='displayedCaches.length == 0 && caches.length != 0')
label Wrong caches filter
.empty-caches(ng-show='caches.length == 0')
@@ -119,62 +184,18 @@ mixin chart-settings(mdl)
.col-sm-12
hr(style='margin: 0')
.col-sm-12
- .sql-controls
- a.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, true)' ng-click='actionAvailable(paragraph, true) && execute(paragraph)' data-placement='bottom' bs-tooltip data-title='{{actionTooltip(paragraph, "execute", true)}}') Execute
- a.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, true)' ng-click='actionAvailable(paragraph, true) && explain(paragraph)' data-placement='bottom' bs-tooltip data-title='{{actionTooltip(paragraph, "explain", true)}}') Explain
- a.btn.btn-primary(ng-disabled='!actionAvailable(paragraph, false)' ng-click='actionAvailable(paragraph, false) && scan(paragraph)' data-placement='bottom' bs-tooltip data-title='{{actionTooltip(paragraph, "execute scan", false)}}') Scan
- .pull-right
- labelHide System columns:
- a.btn.btn-default.fa.fa-bars.tipLabel(ng-class='{"btn-info": paragraph.systemColumns}' ng-click='toggleSystemColumns(paragraph)' ng-disabled='paragraph.disabledSystemColumns' bs-tooltip data-title='Show "_KEY", "_VAL" columns')
- label.tipLabel Refresh rate:
- button.btn.btn-default.fa.fa-clock-o.tipLabel(title='Click to show refresh rate dialog' ng-class='{"btn-info": paragraph.rate && paragraph.rate.installed}' bs-popover data-template-url='/sql/paragraph-rate.html' data-placement='left' data-auto-close='1' data-trigger='click') {{rateAsString(paragraph)}}
- label.tipLabel Page size:
- button.select-toggle.fieldButton.btn.btn-default(ng-model='paragraph.pageSize' bs-options='item for item in pageSizes' bs-select bs-tooltip data-title='Max number of rows to show in query result as one page')
+ +query-controls
.col-sm-12.sql-error-result(ng-show='paragraph.errMsg') Error: {{paragraph.errMsg}}
- .col-sm-12(ng-show='!paragraph.errMsg && paragraph.result != "none"')
+ .col-sm-12(ng-show='!paragraph.errMsg && paragraph.queryArgs')
hr(style='margin-top: 0; margin-bottom: 10px')
+
.sql-empty-result(ng-show='!paragraph.nonEmpty()') Result set is empty
+
div(ng-show='paragraph.table() && paragraph.nonEmpty()')
- .sql-table-total.row
- .col-xs-4
- label Page #
- b {{paragraph.page}}
- label Results so far:
- b {{paragraph.rows.length + paragraph.total}}
- .col-xs-4
- +result-toolbar
- .col-xs-4
- .btn-group.pull-right(ng-disabled='paragraph.loading')
- button.btn.btn-primary.fieldButton(ng-click='exportCsv(paragraph)' bs-tooltip data-title='{{actionTooltip(paragraph, "export", false)}}') Export
- button.btn.btn-primary(id='export-item-dropdown' data-toggle='dropdown' data-container='body' bs-dropdown='exportDropdown' data-placement='bottom-right')
- span.caret
- .grid(ui-grid='paragraph.gridOptions' ui-grid-auto-resize ui-grid-exporter ng-style='{ height: paragraph.gridOptions.height }')
+ +table-result
+
div(ng-show='paragraph.chart() && paragraph.nonEmpty()')
- div(ng-show='paragraph.queryExecuted()')
- +chart-settings
- div(ng-show='paragraph.chartColumns.length > 0 && !paragraph.chartColumnsConfigured()')
- .sql-empty-result Cannot display chart. Please configure axis using #[b Chart settings]
- div(ng-show='paragraph.chartColumns.length == 0')
- .sql-empty-result Cannot display chart. Result set must contain Java build-in type columns. Please change query and execute it again.
- div(ng-show='paragraph.chartColumnsConfigured()')
- div(ng-show='paragraph.timeLineSupported() || !paragraph.chartTimeLineEnabled()')
- div(ng-repeat='chart in paragraph.charts')
- nvd3(options='chart.options' data='chart.data' api='chart.api')
- .sql-empty-result(ng-show='!paragraph.timeLineSupported() && paragraph.chartTimeLineEnabled()') Pie chart does not support 'TIME_LINE' column for X-axis. Please use another column for X-axis or switch to another chart.
- .sql-empty-result(ng-hide='paragraph.queryExecuted()')
- .row
- .col-xs-4.col-xs-offset-4
- +result-toolbar
- label.margin-top-dflt Charts do not support 
- b Explain
- | and
- b Scan
- | query
- div(ng-show='paragraph.queryArgs && !paragraph.refreshExecuting()')
- -var nextVisibleCondition = 'paragraph.queryId && (paragraph.table() || paragraph.chart() && paragraph.queryExecute() && (paragraph.timeLineSupported() || !paragraph.chartTimeLineEnabled()))'
-
- hr(style='margin-top: 0; margin-bottom: 5px')
- a(style='float: left; margin-left: 10px; margin-bottom: 5px' ng-click='showResultQuery(paragraph)') Show query
- .sql-next(ng-show=nextVisibleCondition )
- i.fa.fa-chevron-circle-right(ng-class='{disabled: paragraph.loading}' ng-click='!paragraph.loading && nextPage(paragraph)')
- a(ng-class='{disabled: paragraph.loading}' ng-click='!paragraph.loading && nextPage(paragraph)') Next
+ +chart-result
+
+ div(ng-show='!paragraph.refreshExecuting()')
+ +footer-controls