http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html b/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html new file mode 100644 index 0000000..e5ca971 --- /dev/null +++ b/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html @@ -0,0 +1,355 @@ +<!-- +/** +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +--> +<form name="datasourceForm" novalidate id="datasourceFormGeneralStep"> + <div class="col-xs-24 plr0px"> + <div class="col-xs-12"> + <label class="light" tooltip="datasource.name">Connection Name<mandatory-field></mandatory-field></label> + <input type="text" class="form-control" ng-disabled="editingMode" ng-keydown="validations.acceptNoSpaces($event)" + check-name="{type:'datasource', check:!editingMode}" ng-class="{fakeInvalid:!validations.nameAvailable}" + ng-model="datasource.name" ng-required="true" ng-pattern="validations.patterns.name"/> + </div> + <div class="col-xs-12"> + <label class="light" tooltip="cluster.colo">Data Center or Colo Name<mandatory-field></mandatory-field></label> + <input type="text" class="form-control" + ng-pattern="validations.patterns.name" + ng-required="true" ng-disabled="xmlPreview.edit" + ng-model="datasource.colo" validation-message="{{validations.messages.colo}}"/> + </div> + </div> + <div class="col-xs-24"> + <label class="light">Description</label> + <input type="text" class="form-control" + ng-disabled="xmlPreview.edit" + ng-pattern="validations.patterns.freeText" + ng-model="datasource.description" /> + </div> + <div class="col-xs-24"> + <label class="light">Tags</label> + </div> + + <div class="col-xs-12"> + <div ng-repeat="tag in datasource.tags"> + <div class="row dynamic-table-spacer"> + <div class="col-xs-8"> + <input type="text" class="form-control" ng-model="tag.key" + validation-optional-message="{{validations.messages.key}}" + ng-pattern="validations.patterns.alpha" ng-required="tag.value" placeholder="key"/> + </div> + <div class="col-xs-8"> + <input type="text" class="form-control" validation-optional-message="{{validations.messages.value}}" + ng-model="tag.value" + ng-pattern="validations.patterns.alpha" ng-required="tag.key" placeholder="value"/> + </div> + <div class="col-xs-8"> + <button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-disabled="xmlPreview.edit" ng-if="!$first || !$last"> + <span class="entypo minus"></span> delete + </button> + <button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-disabled="xmlPreview.edit" ng-if="$last"> + <span class="entypo plus"></span> add tag + </button> + </div> + </div> + </div> + </div> + + <div class="col-xs-24 plr0px"> + <div class="col-xs-12"> + <label class="light">Database Manager<mandatory-field></mandatory-field></label> + <select class="form-control padding0 "ng-required="true" validation-message="{{validations.messages.dbManager}}" + ng-model="datasource.type" ng-change="getDatabaseDefaultDetails()"> + <option value="" disabled selected style='display:none;'>- Select Database Manager -</option> + <option value="mysql">MySQL</option> + <option value="oracle">Oracle</option> + <option value="hsql">HSQL</option> + <option value="db2">DB2</option> + <option value="postgres">Postgres</option> + <option value="netezza">Netezza</option> + <option value="teradata">Teradata</option> + <option value="generic">Generic</option> + <!-- <option ng-repeat="driverItem in driverList">{{driverItem.name}}</option> --> + </select> + </div> + <div class="col-xs-12"> + <label class="light">Connection String<mandatory-field></mandatory-field></label> + <input type="text" title="You need to update the connection string to point to your db" + ng-required="true" + validation-message="{{validations.messages.connectionString}}" + class="form-control endpointDefault" ng-class="{endpointChanged:datasourceForm.endpoint.$dirty}" + ng-model="datasource.interfaces.interfaces[0].endpoint"/> + <!-- <span>jdbc:sqlserver//localhost:80</span> --> + </div> + </div> + <div class="col-xs-24 plr0px"> + <div class="col-xs-12"> + <label class="light" tooltip="datasource.driver.jar">Driver Jar<mandatory-field></mandatory-field></label> + <div ng-repeat="jar in datasource.driver.jar track by $index" class="col-xs-24 plr0px"> + <div class="col-xs-16 plr0px"> + <input type="text" class="form-control" ng-model="jar.value" + validation-message="{{validations.messages.driver.jar}}" + ng-pattern="validations.patterns.driver" + ng-required="true" + /> + </div> + <div class="col-xs-4" ng-if="!$first || !$last"> + <a href="" class="driver-jar-link" ng-click="removeDriverJar($index)" ng-disabled="xmlPreview.edit">- Delete</a> + </div> + <div class="col-xs-4"> + <a href="" class="driver-jar-link" ng-click="addDriverJar()" ng-disabled="xmlPreview.edit" ng-if="$last">+ Add</a> + </div> + </div> + </div> + <div class="col-xs-12"> + <label class="light" tooltip="datasource.driver">Driver Class<mandatory-field></mandatory-field></label> + <input type="text" name="driverClass" class="form-control" ng-model="datasource.driver.clazz" + validation-message="{{validations.messages.driver.clazz}}" + ng-required="true" + ng-pattern="validations.patterns.driver" + /> + </div> + </div> + <div class="col-xs-12 plr0px"> + <div class="col-xs-24"> + <label class="light">Type<mandatory-field></mandatory-field></label> + </div> + <div class="col-xs-24"> + <input type="radio" ng-model="datasource.interfaces.interfaces[0].type" value="readonly" class="ml0" /> + <label class="light mt5" tooltip="datasource.readMode">Read only</label> + <input type="radio" ng-model="datasource.interfaces.interfaces[0].type" value="write"/> + <label class="light mt5" tooltip="datasource.writeMode">Write</label> + </div> + <div class="col-xs-24 plr0px"> + <div class="col-xs-24"> + <label class="light" tooltip="datasource.interfaces.credentialType">Credential Type<mandatory-field></mandatory-field></label> + </div> + <div class="col-xs-24"> + <input type="radio" ng-model="datasource.interfaces.interfaces[0].credential.type" ng-required="!datasource.interfaces.credential.type" value="password-text" class="ml0" /> + <label class="light mt5" tooltip="datasource.interfaces.credentialType">Username / Password</label> + <input type="radio" ng-model="datasource.interfaces.interfaces[0].credential.type" ng-required="!datasource.interfaces.credential.type" value="password-file"/> + <label class="light mt5" tooltip="datasource.interfaces.credentialType">Password File</label> + <input type="radio" ng-model="datasource.interfaces.interfaces[0].credential.type" ng-required="!datasource.interfaces.credential.type" value="password-alias"/> + <label class="light mt5" tooltip="datasource.interfaces.credentialType">Password Alias</label> + <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!datasource.interfaces.interfaces[0].credential.type"> + {{validations.messages.credential.empty}} + </label> + </div> + + <div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type"> + <label class="light" tooltip="datasource.userName">Username<mandatory-field></mandatory-field></label> + <input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.userName" + ng-required="true" + validation-optional-message="{{validations.messages.userName}}" + ng-pattern="validations.patterns.userName" + /> + </div> + <div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-text'"> + <label class="light" tooltip="datasource.password">Password<mandatory-field></mandatory-field></label> + <input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.passwordText" + ng-required="true" + validation-optional-message="{{validations.messages.dbPassword}}" + ng-pattern="validations.patterns.password" + /> + </div> + <div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-file'"> + <label class="light" tooltip="datasource.credential.passwordFile">Password File<mandatory-field></mandatory-field></label> + <input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.passwordFile" + ng-required="true" + validation-optional-message="{{validations.messages.passwordFile}}" + ng-pattern="validations.patterns.password" + /> + </div> + <div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-alias'"> + <label class="light" tooltip="datasource.password">Password Alias<mandatory-field></mandatory-field></label> + <input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.passwordAlias" + validation-optional-message="{{validations.messages.passwordAlias}}" + ng-required="true" + ng-pattern="validations.patterns.password" + /> + </div> + + <div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-alias'"> + <label class="light" tooltip="datasource.password">Provider Path<mandatory-field></mandatory-field></label> + <input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.providerPath" + validation-optional-message="{{validations.messages.providerPath}}" + ng-required="true" + ng-pattern="validations.patterns.password" + /> + </div> + </div> + </div> + <div class="col-xs-24 plr0px"> + <label class="col-xs-24" tooltip="datasource.properties">Sqoop Properties</label> + <div class="col-xs-12"> + <input type="checkbox" class="ml0" + ng-model="((datasource.properties | filter:{name:'directMode'})[0]).value" + ng-disabled="xmlPreview.edit" /> + <label class="light" tooltip="datasource.directMode">Direct</label> + <input type="checkbox" + ng-model="((datasource.properties | filter:{name:'verboseMode'})[0]).value" + ng-disabled="xmlPreview.edit" /> + <label class="light" tooltip="datasource.verboseMode">Verbose</label> + </div> + </div> + <div class="col-xs-24 plr0px"> + <div class="col-xs-24"> + <a href="" class="datasource-link" ng-click="addProperty()" ng-disabled="xmlPreview.edit">+ Add Property</a> + </div> + <div class="row m0" ng-if="datasource.customProperties.length > 0"> + <label class="col-xs-8">Property Name</label><label class="col-xs-16">Value</label> + </div> + <div ng-repeat="property in datasource.customProperties" class="row m0" ng-if="datasource.customProperties.length > 0"> + <div class="col-xs-8 dynamic-table-spacer"> + <input type="text" class="form-control" ng-model="property.name" + ng-pattern="validations.patterns.propertyName" + validation-optional-message="{{validations.messages.name}}" + ng-disabled="xmlPreview.edit" + ng-required="property.value" placeholder="name" /> + </div> + <div class="col-xs-8 dynamic-table-spacer"> + <input type="text" class="form-control" ng-model="property.value" + validation-optional-message="{{validations.messages.value}}" + ng-disabled="xmlPreview.edit" + ng-required="property.name" placeholder="value" /> + </div> + <div class="dynamic-table-spacer"> + <button type="button" class="btn btn-default btn-xs" ng-click="removeProperty($index)" + ng-disabled="xmlPreview.edit"> + <span class="entypo minus"></span> delete + </button> + </div> + </div> +</div> +</div> +<div class="col-xs-24 plr0px"> + <div class="col-xs-12"> + <label class="light" tooltip="datasource.parameterFile">Sqoop Parameter File</label> + <div class="form-inline"> + <input type="text" class="form-control" ng-disabled="xmlPreview.edit" + ng-model="((datasource.properties | filter:{name:'parameterFile'})[0]).value" + validation-optional-message="{{validations.messages.parameterFile}}"/> + <!-- <button type="button" class="btn btn-sharp btn-browse" ng-disabled="xmlPreview.edit" ng-click=""> + <i>Browse</i> + </button> --> + <!-- <a href="" class="datasource-link" ng-click="addParameter()" ng-disabled="xmlPreview.edit">+ Add Parameters</a> --> + <!-- <div class="pull-right"> + <label class="light" tooltip="datasource.parameters">Parameters</label> + <a href="" class="datasource-link">+ Add Parameters</a> + </div> +</div> --> +<!-- <div class="form-inline pull-right"> +<label class="light" tooltip="datasource.parameterFile">Parameter File</label> +<input type="text" class="form-control" ng-disabled="xmlPreview.edit" +ng-model="datasource.parameterFile" +validation-optional-message="{{validations.messages.parameterFile}}"/> +<button type="button" class="btn btn-sharp btn-browse" ng-disabled="xmlPreview.edit" ng-click=""> +<i>Browse</i> +</button> +</div> --> +</div> +</div> +</div> + +<div class="col-xs-12 plr0px"> + <div class="row m0" ng-if="datasource.parameters.length > 0"> + <label class="col-xs-8">Parameter Name</label><label class="col-xs-16">Value</label> + </div> + <div ng-repeat="parameter in datasource.parameters" class="row m0" ng-if="datasource.parameters.length > 0"> + <div class="col-xs-8 dynamic-table-spacer"> + <input type="text" class="form-control" ng-model="parameter.name" + ng-pattern="validations.patterns.propertyName" + validation-optional-message="{{validations.messages.name}}" + ng-disabled="xmlPreview.edit" + ng-required="parameter.value" placeholder="name" /> + </div> + <div class="col-xs-8 dynamic-table-spacer"> + <input type="text" class="form-control" ng-model="parameter.value" + validation-optional-message="{{validations.messages.value}}" + ng-disabled="xmlPreview.edit" + ng-required="parameter.name" placeholder="value" /> + </div> + <div class="dynamic-table-spacer"> + <button type="button" class="btn btn-default btn-xs" ng-click="removeParameter($index)" + ng-disabled="xmlPreview.edit"> + <span class="entypo minus"></span> delete + </button> + </div> +</div> +</div> +<!-- <div class="pull-right"> +<label class="light" tooltip="datasource.properties">Properties</label> +<a href="" class="datasource-link">+ Add Properties</a> +</div> --> + + <div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions" id="snapshotAdvancedOption"> + <label class="mt15 pointer blink-success">ADVANCED OPTIONS</label> + <i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i> + <i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i> + </div> + + <div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}"> + <div class="col-xs-24"><label>Access Control List</label></div> + <div class="col-xs-24 plr0px"> + <div class="col-xs-8"> + <label class="light">Owner<mandatory-field></mandatory-field></label> + <input type="text" class="form-control" validation-message="{{validations.messages.acl.owner}}" + ng-required="true" + ng-pattern="validations.patterns.unixId" + ng-model="datasource.ACL.owner"/> + </div> + <div class="col-xs-8"> + <label class="light">Group<mandatory-field></mandatory-field></label> + <input type="text" class="form-control" validation-message="{{validations.messages.acl.group}}" + ng-required="true" + ng-pattern="validations.patterns.unixId" + ng-model="datasource.ACL.group"/> + </div> + <div class="col-xs-24"> + <div class="col-xs-8 plr0px"> + <label class="light">Permissions<mandatory-field></mandatory-field></label> + <acl-permissions acl-model="datasource.ACL.permission"></acl-permissions> + </div> + </div> + </div> + </div> + + <div class="col-xs-24"> + <div class="pull-right"> + <button id="datasource.step2" class="btn btn-datasource" + ng-disabled="buttonSpinners.validateShow" + ng-click="validate()"> + TEST <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.validateShow" /> + </button> + </div> + </div> + + <div class="col-xs-24 pb15px mt35"> + <div class="pull-right"> + <a class="btn cnclBtn" ui-sref="main"> + CANCEL + </a> + <button id="datasource.step1" class="btn nextBtn" + ng-disabled="buttonSpinners.show" + ng-click="goNext(datasourceForm.$invalid)" + scroll-to-error> + NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" /> + </button> + </div> + </div> + +</form>
http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html b/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html new file mode 100644 index 0000000..29923f9 --- /dev/null +++ b/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html @@ -0,0 +1,113 @@ +<!-- +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--> +<div class="row datasourceSummaryRow" id="datasourceSummaryStep"> + <h4 class="col-sm-24"> + General + </h4> + <div class="col-sm-24"> + <label>Connection Name</label>: <span>{{datasource.name}}</span> + </div> + <div class="col-sm-24"> + <label>Data Center or Colo Name</label>: <span>{{datasource.colo}}</span> + </div> + <div class="col-sm-24"> + <label>Description</label>: <span>{{datasource.description}}</span> + </div> + <div class="col-sm-24"> + <label>Type</label>: <span>{{datasource.type}}</span> + </div> + + <h4 class="col-sm-24"> + Interfaces + </h4> + <div class="col-sm-24 plr0px" ng-repeat="interface in datasource.interfaces.interfaces"> + <div class="col-sm-24"> + <label>Interface Type</label>: <span>{{interface.type}}</span> + </div> + <div class="col-sm-24"> + <label>Interface Endpoint</label>: <span>{{interface.endpoint}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type != ''"> + <label>Interface Credentials</label> + </div> + <div class="col-sm-24" ng-if="interface.credential.type != ''"> + <label>Credential Type</label>: <span>{{interface.credential.type}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'"> + <label>User Name</label>: <span>{{interface.credential.userName}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'"> + <label>Password Text</label>: <span>{{interface.credential.passwordText}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type == 'password-file'"> + <label>Password File</label>: <span>{{interface.credential.passwordFile}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type == 'password-alias'"> + <label>Password Alias</label>: <span>{{interface.credential.passwordAlias}}</span> + </div> + </div> + + <h4 class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''"> + Default Credentials + </h4> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''"> + <label>Credential Type</label>: <span>{{datasource.interfaces.credential.type}}</span> + </div> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'"> + <label>User Name</label>: <span>{{datasource.interfaces.credential.userName}}</span> + </div> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'"> + <label>Password Text</label>: <span>{{datasource.interfaces.credential.passwordText}}</span> + </div> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-file'"> + <label>Password File</label>: <span>{{datasource.interfaces.credential.passwordFile}}</span> + </div> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-alias'"> + <label>Password Alias</label>: <span>{{datasource.interfaces.credential.passwordAlias}}</span> + </div> + + <h4 class="col-sm-24"> + Properties + </h4> + <div class="col-sm-24" ng-repeat="property in datasource.customProperties | filter: {name: '!!'}"> + <label>{{property.name}}</label>: <span>{{property.value}}</span> + </div> + <div ng-repeat="property in datasource.properties"> + <div class="col-sm-24" ng-if="property.value && property.value !== ''"> + <label>{{property.name}}</label>: <span>{{property.value}}</span> + </div> + </div> +</div> + +<div class="col-xs-24 mt35 pb15px pl0px"> + <button id="datasource.backToStep1" class="btn prevBtn" type="button" + ng-click="goBack()" + ng-disabled="buttonSpinners.backShow"> + PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" /> + </button> + <div class="pull-right"> + <a class="btn cnclBtn" ui-sref="main"> + CANCEL + </a> + <button id="datasource.step2" class="btn nextBtn" ng-click="saveEntity()" focus-if> + SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" /> + </button> + </div> +</div> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/datasource/datasourceFormTpl.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/datasource/datasourceFormTpl.html b/falcon-ui/app/html/datasource/datasourceFormTpl.html new file mode 100644 index 0000000..7a0b7ec --- /dev/null +++ b/falcon-ui/app/html/datasource/datasourceFormTpl.html @@ -0,0 +1,96 @@ +<!-- +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--> +<div class="datasourceForm"> + <div class="col-xs-24"> + <div class="preview pullOver"> + <button type="button" class="btn btn-default btn-md pull-right nextBtn" ng-click="toggleclick()" >Preview XML</button> + </div> + <br/> + <div> + <div class=" formBoxContainer detailsBox"> + <div class="datasourceProgressBox" ng-class="{ + general:isActive('forms.datasource.general'), + summary:isActive('forms.datasource.summary') + }"> + <div class="progressBar col-xs-24"> + <div class="text-center fir" ng-class="{ + active:isActive('forms.datasource.general'), + completed:isCompleted('forms.datasource.general')}">General</div> + <div class="text-center fif" ng-class="{ + active:isActive('forms.datasource.summary'), + completed:isCompleted('forms.datasource.summary')}">Summary</div> + </div> + </div> + <div class="row customContainer"> + <div class="col-xs-offset-1 col-xs-22"> + <fieldset ng-disabled="!editXmlDisabled"> + <div class="formViewContainer"> + <div class="col-xs-24"> + <label class="title"><span class="entypo download icon-lg entypo-align-sub"></span> NEW DATA SOURCE</label> + </div> + <div ui-view></div> + </div> + </fieldset> + </div> + </div> + </div> + + <div class="hide xmlPreviewContainer detailsBox"> + <div class="row dt"> + <div class="col-xs-24 pt15px"> + <div class="col-xs-13 noSpecial"> + <h5>XML Preview</h5> + <label style="margin-top: -10px;margin-bottom: -2px;" ng-if="invalidXml" class="custom-danger">Invalid Xml</label> + </div> + + <div class="pull-right"> + <button type="button" + id="datasource.editXML" + class="btn btn-default btn-xs" + ng-click="toggleEditXml()" + ng-class="{'btn-warning':!editXmlDisabled}" + ng-disabled="invalidXml"> + <div ng-if="editXmlDisabled">Edit XML</div> + <div ng-if="!editXmlDisabled">Finish</div> + </button> + + <button type="button" + class="btn btn-default btn-xs" + ng-if="invalidXml" + ng-click="revertXml()"> + <div>Revert</div> + </button> + </div> + </div> + <div class="col-sm-24 showValidationStyle"> + <textarea ng-model="prettyXml" + elastic + class="form-control" + ng-disabled="editXmlDisabled" + ng-class="{fakeInvalid:invalidXml}"> + </textarea> + <!--{{xmlEditValidationError}}--> + </div> + + </div> + </div> + </div> + </div> +</div> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/datasource/datasourceSummary.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/datasource/datasourceSummary.html b/falcon-ui/app/html/datasource/datasourceSummary.html new file mode 100644 index 0000000..69e68f8 --- /dev/null +++ b/falcon-ui/app/html/datasource/datasourceSummary.html @@ -0,0 +1,95 @@ +<!-- +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--> +<div class="summaryBox" id="datasourceFormSummary"> + <h4 class="col-sm-24"> + General + </h4> + <div class="col-sm-24"> + <label>Connection Name</label>: <span>{{datasource.name}}</span> + </div> + <div class="col-sm-24"> + <label>Data Center or Colo Name</label>: <span>{{datasource.colo}}</span> + </div> + <div class="col-sm-24"> + <label>Description</label>: <span>{{datasource.description}}</span> + </div> + <div class="col-sm-24"> + <label>Type</label>: <span>{{datasource.type}}</span> + </div> + + <h4 class="col-sm-24"> + Interfaces + </h4> + <div class="col-sm-24 plr0px" ng-repeat="interface in datasource.interfaces.interfaces"> + <div class="col-sm-24"> + <label>Interface Type</label>: <span>{{interface.type}}</span> + </div> + <div class="col-sm-24"> + <label>Interface Endpoint</label>: <span>{{interface.endpoint}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type != ''"> + <label>Interface Credentials</label> + </div> + <div class="col-sm-24" ng-if="interface.credential.type != ''"> + <label>Credential Type</label>: <span>{{interface.credential.type}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'"> + <label>User Name</label>: <span>{{interface.credential.userName}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'"> + <label>Password Text</label>: <span>{{interface.credential.passwordText}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type == 'password-file'"> + <label>Password File</label>: <span>{{interface.credential.passwordFile}}</span> + </div> + <div class="col-sm-24" ng-if="interface.credential.type == 'password-alias'"> + <label>Password Alias</label>: <span>{{interface.credential.passwordAlias}}</span> + </div> + </div> + + <h4 class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''"> + Default Credentials + </h4> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''"> + <label>Credential Type</label>: <span>{{datasource.interfaces.credential.type}}</span> + </div> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'"> + <label>User Name</label>: <span>{{datasource.interfaces.credential.userName}}</span> + </div> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'"> + <label>Password Text</label>: <span>{{datasource.interfaces.credential.passwordText}}</span> + </div> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-file'"> + <label>Password File</label>: <span>{{datasource.interfaces.credential.passwordFile}}</span> + </div> + <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-alias'"> + <label>Password Alias</label>: <span>{{datasource.interfaces.credential.passwordAlias}}</span> + </div> + + <h4 class="col-sm-24"> + Properties + </h4> + <div class="col-sm-24" ng-repeat="property in datasource.customProperties"> + <label>{{property.name}}</label>: <span>{{property.value}}</span> + </div> + <div class="col-sm-24" ng-repeat="property in datasource.properties"> + <label>{{property.name}}</label>: <span>{{property.value}}</span> + </div> +</div> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/aclPermissions.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/aclPermissions.html b/falcon-ui/app/html/directives/aclPermissions.html new file mode 100644 index 0000000..13e4b50 --- /dev/null +++ b/falcon-ui/app/html/directives/aclPermissions.html @@ -0,0 +1,45 @@ +<!-- +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +--> +<div class="col-xs-24 plr0px panel panel-default aclPermission"> + <div class="col-xs-24 plr0px"> + <span class="col-xs-4"></span> + <span class="col-xs-4 font11px pt5px">Read</span> + <span class="col-xs-4 font11px pt5px">Write</span> + <span class="col-xs-4 font11px pt5px">Execute</span> + </div> + <div class="col-xs-24 plr0px"> + <span class="col-xs-4 font11px pt5px">Owner</span> + <span class="col-xs-4"><input type="checkbox" name="owner" value="4" ng-click="calculatePermission('owner')" ng-disabled="xmlPreview.edit"></span> + <span class="col-xs-4"><input type="checkbox" name="owner" value="2" ng-click="calculatePermission('owner')" ng-disabled="xmlPreview.edit"></span> + <span class="col-xs-4"><input type="checkbox" name="owner" value="1" ng-click="calculatePermission('owner')" ng-disabled="xmlPreview.edit"></span> + </div> + <div class="col-xs-24 plr0px"> + <span class="col-xs-4 font11px pt5px">Group</span> + <span class="col-xs-4"><input type="checkbox" name="groups" value="4" ng-click="calculatePermission('groups')" ng-disabled="xmlPreview.edit"></span> + <span class="col-xs-4"><input type="checkbox" name="groups" value="2" ng-click="calculatePermission('groups')" ng-disabled="xmlPreview.edit"></span> + <span class="col-xs-4"><input type="checkbox" name="groups" value="1" ng-click="calculatePermission('groups')" ng-disabled="xmlPreview.edit"></span> + </div> + <div class="col-xs-24 plr0px"> + <span class="col-xs-4 font11px pt5px">Others</span> + <span class="col-xs-4"><input type="checkbox" name="others" value="4" ng-click="calculatePermission('others')" ng-disabled="xmlPreview.edit"></span> + <span class="col-xs-4"><input type="checkbox" name="others" value="2" ng-click="calculatePermission('others')" ng-disabled="xmlPreview.edit"></span> + <span class="col-xs-4"><input type="checkbox" name="others" value="1" ng-click="calculatePermission('others')" ng-disabled="xmlPreview.edit"></span> + </div> +</div> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/dependenciesGraphDv.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/dependenciesGraphDv.html b/falcon-ui/app/html/directives/dependenciesGraphDv.html index 7fbba06..9b263fd 100644 --- a/falcon-ui/app/html/directives/dependenciesGraphDv.html +++ b/falcon-ui/app/html/directives/dependenciesGraphDv.html @@ -16,4 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ ---> \ No newline at end of file +--> +<svg > + <g/> +</svg> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/entitiesListDv.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/entitiesListDv.html b/falcon-ui/app/html/directives/entitiesListDv.html index 7016de1..f791e50 100644 --- a/falcon-ui/app/html/directives/entitiesListDv.html +++ b/falcon-ui/app/html/directives/entitiesListDv.html @@ -52,9 +52,9 @@ <span class="entypo play"></span> <div>Resume</div> </div> <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-hide="selectedDisabledButtons.suspend" ng-if="type !== 'cluster'"> - <span class="entypo paus"></span> <div>Suspend</div> + <span class="entypo paus"></span> <div>Pause</div> </div> - <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeEdit()" ng-hide="selectedRows.length === 0 || selectedRows.length > 1" ng-if="type !== 'cluster'"> + <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeEdit()" ng-hide="selectedRows.length === 0 || selectedRows.length > 1"> <span class="entypo cog"></span> <div>Edit</div> </div> <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeClone()" ng-hide="selectedRows.length === 0 || selectedRows.length > 1"> @@ -68,6 +68,8 @@ </div> </td> </tr> + </tbody> + <tbody> <tr ng-if="input.length === 0 && !server.responses.listLoaded[type]"> <td> loading {{ type }}s </td> </tr> @@ -104,4 +106,4 @@ </tr> </tbody> -</table> \ No newline at end of file +</table> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/entitiesSearchListDv.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/entitiesSearchListDv.html b/falcon-ui/app/html/directives/entitiesSearchListDv.html index 3e356fc..30dee7c 100644 --- a/falcon-ui/app/html/directives/entitiesSearchListDv.html +++ b/falcon-ui/app/html/directives/entitiesSearchListDv.html @@ -22,31 +22,39 @@ <table class="listTable table" id="entitiesSearchList"> <thead> <tr> - <th><div class="filtersSearchBox"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th> + <th><div class="filtersSearchBox pointer"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th> <th><div class="filtersSearchBox pointer" ng-click="toggleSortOrder()">Name <span class="glyphicon glyphicon-sort"></span></div> </th> <th><div class="filtersSearchBox">Tags</div></th> - <th><div class="filtersSearchBox">Cluster</div></th> - <th><div class="filtersSearchBox">Type</div></th> - <th><div class="filtersSearchBox">Status</div></th> + <th ng-if="$parent.$parent.$parent.entityType != 'cluster'"><div class="filtersSearchBox">Cluster</div></th> + <th ng-if="$parent.$parent.$parent.entityType != 'cluster'"><div class="filtersSearchBox">Type</div></th> + <th ng-if="$parent.$parent.$parent.entityType != 'cluster'"><div class="filtersSearchBox">Status</div></th> </tr> + </thead> <tbody> <tr ng-if="input.length > 0" class="buttonsRow"> <td class="buttonCell" colspan="9"> - <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSchedule()" ng-disabled="selectedDisabledButtons.schedule"> + <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSchedule()" ng-disabled="selectedDisabledButtons.schedule" + ng-if="$parent.$parent.$parent.entityType != 'cluster'"> <span class="entypo play"></span> <div>Schedule</div> </div> - <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selectedDisabledButtons.resume"> + <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selectedDisabledButtons.resume" + ng-if="$parent.$parent.$parent.entityType != 'cluster'"> <span class="entypo play"></span> <div>Resume</div> </div> - <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-disabled="selectedDisabledButtons.suspend"> - <span class="entypo paus"></span> <div>Suspend</div> + <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-disabled="selectedDisabledButtons.suspend" + ng-if="$parent.$parent.$parent.entityType != 'cluster'"> + <span class="entypo paus"></span> <div>Pause</div> </div> - <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeEdit()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1"> + <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeEdit()" + ng-disabled="selectedRows.length === 0 || selectedRows.length > 1 || ($parent.$parent.$parent.entityType === 'cluster' && (!isSafeMode() || !isSuperUser()))" + ng-class="{disabledEditBtn: $parent.$parent.$parent.entityType === 'cluster' && (!isSafeMode() || !isSuperUser())}" + title="{{($parent.$parent.$parent.entityType === 'cluster' && (!isSafeMode() || !isSuperUser())) ? 'Cluster entity update can only be performed by superuser during safemode' : ''}}"> <span class="entypo cog"></span> <div>Edit</div> </div> - <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeClone()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1"> + <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeClone()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1" + ng-if="$parent.$parent.$parent.entityType != 'cluster'"> <span class="entypo docs"></span> <div>Copy</div> </div> <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeRemove()" ng-disabled="selectedRows.length === 0"> @@ -57,7 +65,8 @@ </div> </td> </tr> - + </tbody> + <tbody> <tr ng-if="input.length === 0 && !server.responses.listLoaded"> <td> loading... </td> </tr> @@ -72,14 +81,15 @@ ng-class="{ firstEntityRow:$first, lastEntityRow:$last, rowSelected:checkedRow(item.name) - }"> + }" + ng-class-odd="'oddRow'" ng-class-even="'evenRow'"> <td class="checkboxCell"> <input type="checkbox" checklist-model="selectedRows" ng-model="$index" checklist-value="{name:item.name, type:item.type, status:item.status}" ng-change="checkButtonsToShow()"/> </td> <td class="nameCell" ng-init="entityType = item.type | uppercase"> - <button type="button" class="btn btn-default" ng-click="goEntityDetails(item.name, item.type)"> + <button type="button" class="btn btn-link" ng-click="goEntityDetails(item.name, item.type)"> <span ng-class="displayIcon((item.type | uppercase), item.tags.tag)"></span> {{ item.name }} </button> </td> @@ -88,17 +98,17 @@ {{ tag }}{{$last ? '' : ', '}} </span> </td> - <td> + <td ng-if="$parent.$parent.$parent.entityType != 'cluster'"> <span ng-repeat="cluster in item.clusters.cluster"> {{ cluster }}{{$last ? '' : ', '}} </span> </td> - <td> + <td ng-if="$parent.$parent.$parent.entityType != 'cluster'"> <span ng-repeat="tag in item.tags.tag" ng-init="type = displayType(tag)"> {{ type | uppercase}} </span> </td> - <td class="stateCell"> + <td class="stateCell" ng-if="$parent.$parent.$parent.entityType != 'cluster'"> <span ng-class="{'blink-success': item.status == 'RUNNING', 'text-success': item.status == 'SUCCEEDED', 'blink-warning': item.status == 'SUSPENDED', @@ -114,7 +124,7 @@ </td> </tr> - <tr> + <tr class="paginationRow"> <td colspan="9"> <nav class="pull-right"> <ul class="pagination"> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/feedFormHdfsStorage.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/feedFormHdfsStorage.html b/falcon-ui/app/html/directives/feedFormHdfsStorage.html new file mode 100644 index 0000000..143d155 --- /dev/null +++ b/falcon-ui/app/html/directives/feedFormHdfsStorage.html @@ -0,0 +1,139 @@ +<!-- +/** +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +--> +<div class="col-xs-24 plr0px"> + <div class="col-xs-10 plr0px"> + <div class="col-xs-24"> + <label class="light">Cluster<mandatory-field></mandatory-field></label> + </div> + <div class="col-xs-24"> + <select ng-model="cluster.name" name="clusterName" + class="form-control padding0" ng-required="required" + ng-change="findClusterExists(cluster.name, cluster.type, storageInfo.feedClusters)" + validation-message="{{validations.messages.cluster}}"> + <option value="" disabled style='display:none;'>-Select {{cluster.type}} cluster-</option> + <option ng-repeat="clusterItem in storageInfo.clustersList" + value="{{clusterItem.name}}" ng-selected="cluster.name === clusterItem.name"> + {{clusterItem.name}} + </option> + </select> + </div> + <div class="col-xs-24 custom-danger" ng-show="checkDuplicateClusterOnTarget()"> + Target cannot be the same as the Source + </div> + <div class="col-xs-24 custom-danger" ng-show="clusterExists"> + Cluster is already added + </div> + <div class="col-xs-24"> + <label class="light">Data Path<mandatory-field></mandatory-field></label> + </div> + <div ng-repeat="location in cluster.storage.fileSystem.locations"> + <div class="col-xs-24" ng-if="location.type==='data'"> + <input type="text" name="dataPath" + placeholder="Enter Data Path" + ng-required="cluster.name" + validation-optional-message="{{validations.messages.path}}" + class="form-control" + ng-model="location.path" /> + </div> + </div> + <div class="col-xs-24"> + <a href="" ng-click="toggleAdvancedOptions()">MORE OPTIONS ></a> + </div> + </div> + <div class="col-xs-12 plr0px"> + <div class="datasourceBox" ng-show="showingAdvancedOptions"> + <div class="col-xs-24"> + <label class="light">Statistics Path</label> + </div> + <div ng-repeat="location in cluster.storage.fileSystem.locations"> + <div class="col-xs-24" ng-if="location.type==='stats'"> + <input type="text" class="form-control" ng-model="location.path"/> + </div> + </div> + <div class="col-xs-24 validityBox plr0px"> + <div class="col-xs-24 plr0px"> + <div class="col-xs-12 startDateBox"> + <label class="light">Start<mandatory-field></mandatory-field></label> + <input type="text" + name="startDateInput" + class="form-control dateInput" + placeholder="{{dateFormat | lowercase}}" + ng-model="cluster.validity.start.date" + simple-date-picker /> + </div> + <div class="col-xs-12 startTimeBox"> + <label class="light">Time<mandatory-field></mandatory-field></label> + <timepicker ng-change="constructDate()" + ng-model="cluster.validity.start.time" + hour-step="1" + minute-step="1" + show-meridian="true"> + </timepicker> + </div> + </div> + <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.start.date"> + {{validations.messages.date.empty}} + </label> + <div class="col-xs-24 plr0px"> + <div class="col-xs-12 endDateBox"> + <label class="light">End<mandatory-field></mandatory-field></label> + <input type="text" + name="startDateInput" + class="form-control dateInput" + placeholder="{{dateFormat | lowercase}}" + ng-model="cluster.validity.end.date" + simple-date-picker /> + </div> + <div class="col-xs-12 endTimeBox"> + <label class="light">Time<mandatory-field></mandatory-field></label> + <timepicker ng-change="constructDate()" + ng-model="cluster.validity.end.time" + hour-step="1" + minute-step="1" + show-meridian="true"> + </timepicker> + </div> + </div> + <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.end.date"> + {{validations.messages.date.empty}} + </label> + </div> + <label class="light col-xs-24">Retention<mandatory-field></mandatory-field></label> + <div class="col-xs-24 inlineInputsGroup"> + <input type="text" class="form-control" ng-model="cluster.retention.quantity" + ng-keydown="validations.acceptOnlyNumber($event)" ng-pattern="validations.patterns.twoDigits" /> + <select ng-model="cluster.retention.unit"> + <option selected value="minutes">minutes</option> + <option value="hours">hours</option> + <option value="days">days</option> + <option value="months">months</option> + </select> + </div> + </div> + </div> +</div> +<div class="col-xs-24 mt10"> + <a ng-click="reset()" ng-if="!storageInfo.readOnly">Reset</a> + <button class="btn datasourceBtn" ng-if="!storageInfo.readOnly" + ng-disabled="cluster.name==='' || !cluster.storage.fileSystem.locations[0].path || cluster.storage.fileSystem.locations[0].path ==='' || clusterExists" + ng-click="addCluster({type : storageInfo.type, dataTransferType : 'hdfs'})">Add {{buttonText}}</button> + <button class="btn datasourceBtn" ng-click="deleteCluster()" + ng-if="(storageInfo.feedClusters | filter:{type: cluster.type}).length > 1">Delete</button> +</div> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/feedFormHiveStorage.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/feedFormHiveStorage.html b/falcon-ui/app/html/directives/feedFormHiveStorage.html new file mode 100644 index 0000000..655a973 --- /dev/null +++ b/falcon-ui/app/html/directives/feedFormHiveStorage.html @@ -0,0 +1,132 @@ +<!-- +/** +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +--> +<div class="col-xs-24 plr0px"> + <div class="col-xs-10 plr0px"> + <div class="datasourceBox"> + <div class="col-xs-24"> + <label class="light">Cluster<mandatory-field></mandatory-field></label> + </div> + <div class="col-xs-24"> + <select ng-model="cluster.name" class="form-control padding0" ng-required="required" + ng-change="findClusterExists(cluster.name, cluster.type, storageInfo.feedClusters)" + validation-message="{{validations.messages.cluster}}"> + <option value="" disabled style='display:none;'>-Select {{cluster.type}} cluster-</option> + <option ng-repeat="clusterItem in storageInfo.clustersList" + value="{{clusterItem.name}}" ng-selected="cluster.name === clusterItem.name"> + {{clusterItem.name}} + </option> + </select> + </div> + <div class="col-xs-24 custom-danger" ng-show="checkDuplicateClusterOnTarget()"> + Target cannot be the same as the Source + </div> + <div class="col-xs-24 custom-danger" ng-show="clusterExists"> + Cluster is already added + </div> + <div class="col-xs-24"> + <label class="light" tooltip="feed.storage.tableUri"> + Table URI<mandatory-field></mandatory-field> + </label> + </div> + <div class="col-xs-24"> + <input type="text" + placeholder="Enter table uri" + class="form-control" + ng-required="cluster.name" + validation-optional-message="{{validations.messages.tableUri}}" + ng-model="cluster.storage.catalog.catalogTable.uri" /> + </div> + <div class="col-xs-24"> + <a href="" ng-click="toggleAdvancedOptions()">MORE OPTIONS ></a> + </div> + </div> + </div> + <div class="col-xs-12 plr0px"> + <div class="datasourceBox" ng-show="showingAdvancedOptions"> + <div class="col-xs-24 validityBox plr0px"> + <div class="col-xs-24 plr0px"> + <div class="col-xs-12 startDateBox"> + <label class="light">Start<mandatory-field></mandatory-field></label> + <input type="text" + name="startDateInput" + class="form-control dateInput" + placeholder="{{dateFormat | lowercase}}" + ng-model="cluster.validity.start.date" + simple-date-picker /> + </div> + <div class="col-xs-12 startTimeBox"> + <label class="light">Time<mandatory-field></mandatory-field></label> + <timepicker ng-change="constructDate()" + ng-model="cluster.validity.start.time" + hour-step="1" + minute-step="1" + show-meridian="true"> + </timepicker> + </div> + </div> + <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.start.date"> + {{validations.messages.date.empty}} + </label> + <div class="col-xs-24 plr0px"> + <div class="col-xs-12 endDateBox"> + <label class="light">End<mandatory-field></mandatory-field></label> + <input type="text" + name="startDateInput" + class="form-control dateInput" + placeholder="{{dateFormat | lowercase}}" + ng-model="cluster.validity.end.date" + simple-date-picker /> + </div> + <div class="col-xs-12 endTimeBox"> + <label class="light">Time<mandatory-field></mandatory-field></label> + <timepicker ng-change="constructDate()" + ng-model="cluster.validity.end.time" + hour-step="1" + minute-step="1" + show-meridian="true"> + </timepicker> + </div> + </div> + <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.end.date"> + {{validations.messages.date.empty}} + </label> + </div> + <label class="light col-xs-24">Retention<mandatory-field></mandatory-field></label> + <div class="col-xs-24 inlineInputsGroup"> + <input type="text" class="form-control" ng-required="required" ng-model="cluster.retention.quantity" ng-keydown="validations.acceptOnlyNumber($event)" ng-pattern="validations.patterns.twoDigits"> + <select ng-model="cluster.retention.unit" ng-keydown="validations.acceptOnlyNumber({$event:$event})" ng-required="required"> + <option selected value="minutes">minutes</option> + <option value="hours">hours</option> + <option value="days">days</option> + <option value="months">months</option> + </select> + </div> + </div> + </div> +</div> + +<div class="col-xs-24 mt10"> + <a ng-click="reset()" ng-if="!storageInfo.readOnly">Reset</a> + <button class="btn datasourceBtn" ng-if="!storageInfo.readOnly" + ng-disabled="cluster.name === '' || !cluster.storage.catalog.catalogTable.uri || $scope.cluster.name === '' || $scope.cluster.storage.catalog.catalogTable.uri==='' || clusterExists" + ng-click="addCluster({type : storageInfo.type, dataTransferType : 'hive'})">Add {{buttonText}}</button> + <button class="btn datasourceBtn" ng-click="deleteCluster()" + ng-if="(storageInfo.feedClusters | filter:{type: cluster.type}).length > 1">Delete</button> +</div> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/instancesListDv.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/instancesListDv.html b/falcon-ui/app/html/directives/instancesListDv.html index 5abc9d3..a3cc193 100644 --- a/falcon-ui/app/html/directives/instancesListDv.html +++ b/falcon-ui/app/html/directives/instancesListDv.html @@ -17,34 +17,28 @@ * limitations under the License. */ --> -<table class="listTable table" id="instancesList"> +<table class="listTable table"> <thead> <tr> - <th><div class="filtersSearchBox vertical-align"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th> - <th><div class="filtersSearchBox vertical-align">Instance</div></th> - <th><div class="filtersSearchBox">Started <span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('startTime')"></span> - <input type="text" class="form-control dateInput" ng-model="startFilter" ng-keypress="validateDate($event, 'start');" - ng-enter="filterInstances('startTime')" placeholder="mm/dd/yyyy hh:mm"> - <label class="error" ng-if="startFilterError">Incorrect Date Format</label> - <label class="error" ng-if="startAfterEndError">Start date should be before end date</label> - <label class="error" ng-if="startAfterNominalError">Start date should be after nominal start date {{ start }}</label> - <label class="error" ng-if="startBeforeNominalError">Start date should be before nominal end date {{ end }}</label> + <th class="align-top"><div class="filtersSearchBox vertical-align pt35px"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th> + <th class="align-top"><div class="filtersSearchBox vertical-align">Instance</div> + <input type="text" class="form-control" placeholder="instance" restrict="reject"> + </th> + <th class="align-top"><div class="filtersSearchBox" ng-class="{showMessage:!startDateValid, showValidationStyle :!startDateValid, validationMessageParent:!startDateValid}">Started <span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('startTime')"></span> + <input type="text" title="Date should be entered in {{dateFormat | lowercase}} format." class="form-control dateInput" ng-model="startFilter" ng-enter="filterInstances('startTime')" placeholder="{{dateFormat | lowercase}}" ng-keypress="validateDate($event,'start')"> + <label class="custom-danger validationMessageGral" ng-if="!startDateValid">You need to provide a valid date</label> </div></th> - <th><div class="filtersSearchBox">Ended <span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('endTime')"></span> - <input type="text" class="form-control dateInput" ng-model="endFilter" ng-keypress="validateDate($event, 'end');" - ng-enter="filterInstances('endTime')" placeholder="mm/dd/yyyy hh:mm"> - <label class="error" ng-if="endFilterError">Incorrect Date Format</label> - <label class="error" ng-if="endAfterNominalError">End date should be after nominal start date {{ start }}</label> - <label class="error" ng-if="endBeforeNominalError">End date should be before nominal end date {{ end }}</label> + <th class="align-top"><div class="filtersSearchBox" ng-class="{showMessage:!endDateValid, showValidationStyle :!endDateValid, validationMessageParent:!endDateValid}">Ended <span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('endTime')"></span> + <input type="text" title="Date should be entered in {{dateFormat | lowercase}} format." class="form-control dateInput" ng-model="endFilter" ng-enter="filterInstances('startTime')" placeholder="{{dateFormat | lowercase}}" ng-keypress="validateDate($event,'end')"> + <label class="custom-danger validationMessageGral" ng-if="!endDateValid">You need to provide a valid date</label> </div></th> - <th> + <th class="align-top"> <div class="filtersSearchBox">Status <span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('status')"></span> <select class="form-control padding0" ng-model="statusFilter" ng-change="filterInstances('startTime')"> <option value="">ALL</option> <option value="RUNNING">RUNNING</option> <option value="SUCCEEDED">SUCCEEDED</option> <option value="SUSPENDED">SUSPENDED</option> - <option value="WAITING">WAITING</option> <option value="KILLED">KILLED</option> </select> </div> @@ -54,18 +48,18 @@ <tbody> <tr ng-if="input.length > 0" class="buttonsRow"> - <td class="buttonCell" colspan="9"> + <td class="buttonCell border0px" colspan="9"> <div class="btn btn-gray btn-xs buttons-to-show" ng-click="download()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1"> <span class="entypo down"></span> <div>Log</div> </div> - <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selectedDisabledButtons.resume"> + <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selecteisabledButtons.resume"> <span class="entypo play"></span> <div>Resume</div> </div> <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeRerun()" ng-disabled="selectedDisabledButtons.rerun"> <span class="entypo play"></span> <div>Rerun</div> </div> <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-disabled="selectedDisabledButtons.suspend"> - <span class="entypo paus"></span> <div>Suspend</div> + <span class="entypo paus"></span> <div>Pause</div> </div> <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeKill()" ng-disabled="selectedDisabledButtons.stop"> <span class="entypo stop"></span> <div>Kill</div> @@ -107,18 +101,18 @@ <td> <!--{{ item.startTime }}<br/>--> <!--{{ item.startTime | date :'yyyy-MM-ddTHH:mm:ssZ' }}<br/>--> - {{ item.startTime | date :'MM/dd/yyyy HH:mm'}} + {{ item.startTime | date : dateFormat}} </td> <td> - {{ item.endTime | date :'MM/dd/yyyy HH:mm'}} + {{ item.endTime | date : dateFormat}} </td> <td class="stateCell"> <span ng-class="{ - 'blink-success': item.status == 'RUNNING', - 'text-success': item.status == 'SUCCEEDED', - 'blink-warning': item.status == 'WAITING' || item.status == 'UNKNOWN', - 'blink-danger': item.status == 'SUSPENDED', - 'text-danger': item.status == 'FAILED' || item.status == 'KILLED', + 'blink-success': item.status == 'RUNNING', + 'text-success': item.status == 'SUCCEEDED', + 'blink-warning': item.status == 'WAITING' || item.status == 'UNKNOWN', + 'blink-danger': item.status == 'SUSPENDED', + 'text-danger': item.status == 'FAILED' || item.status == 'KILLED', }">{{ item.status }}</span> </td> @@ -131,7 +125,7 @@ </td> </tr> - <tr> + <tr class="paginationRow"> <td colspan="5"> <nav class="pull-right"> <ul class="pagination"> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/lineageGraphDv.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/lineageGraphDv.html b/falcon-ui/app/html/directives/lineageGraphDv.html index 93a2896..7e01d78 100644 --- a/falcon-ui/app/html/directives/lineageGraphDv.html +++ b/falcon-ui/app/html/directives/lineageGraphDv.html @@ -20,10 +20,10 @@ <div id="lineageGraph"> <h4><small>Legends</small></h4> <ul class="lineage-legend"> - <li class="lineage-legend-feed-inst">Feed instance</li> - <li class="lineage-legend-feed-inst lineage-legend-terminal">Feed instance (terminal)</li> - <li class="lineage-legend-process-inst">Process instance</li> - <li class="lineage-legend-process-inst lineage-legend-terminal">Process instance (terminal)</li> + <li class="lineage-legend-feed-inst"><span>Feed instance</span></li> + <li class="lineage-legend-feed-inst lineage-legend-terminal"><span>Feed instance (terminal)</span></li> + <li class="lineage-legend-process-inst"><span>Process instance</span></li> + <li class="lineage-legend-process-inst lineage-legend-terminal"><span>Process instance (terminal)</span></li> </ul> </div> <div> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/navDv.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/navDv.html b/falcon-ui/app/html/directives/navDv.html index 63046f6..cffc170 100644 --- a/falcon-ui/app/html/directives/navDv.html +++ b/falcon-ui/app/html/directives/navDv.html @@ -17,84 +17,216 @@ * limitations under the License. */ --> -<nav class="col-sm-24 navbar navbar-default" role="navigation"> - <div class="col-sm-offset-1 col-sm-22"> - <button class="logoTitle" ui-sref="main"> +<nav class="col-sm-24 navbar navbar-default header1" role="navigation"> + <div class="col-sm-offset-2 col-sm-20"> + <a class="btn-link logoTitle" ui-sref="main"> <h1 class="navbar-header"> - <span class="falconLogo"></span> <span>Falcon</span> + <span class="falconLogo"></span> </h1> - </button> + </a> + <div class="loginHeaderBox" ng-show="userLogged()"> + <!--<button type="button" class="btn btn-lg btn-link" data-ng-click="showMenu=!showMenu"> + <span class="glyphicon glyphicon-th" aria-hidden="true"></span> + </button>--> + <!-- <div class="dropdown visible-lg-inline-block"> + <a class="btn btn-link dropdown-toggle" data-ng-click="" id="settingMenu" + data-toggle="dropdown" aria-expanded="true" role="button"> + <span class="glyphicon glyphicon-th"></span> + </a> + <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="settingMenu"> + <li role="presentation" role="menuitem" tabindex="-1"> + <button type="button" class="btn btn-link" data-ng-click="displayEntities('cluster')"> + Clusters + </button> + </li> + </ul> + </div> --> + <span class="entypo archive icon-lg entypo-align-sub" title="Clusters" data-ng-click="displayEntities('cluster')"> </span> + <span class="separator"> | </span> + <span class="notifications"> + <button class="btn btn-link" ng-click="notify()"> + <span class="glyphicon glyphicon-bell" title="Notifications"></span> + </button> + <server-messages></server-messages> + </span> + <span class="separator"> | </span> + <div class="dropdown visible-lg-inline-block"> + <div class="dropdown-toggle pointer" id="userMenu" data-toggle="dropdown" aria-expanded="true" role="button"> + <span class="user hide"></span>{{userToken}} <span class="caret"></span> + </div> + <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="userMenu"> + <li role="presentation"> + <a class="btn btn-link" ng-show="userLogged() && !ambariView()" ng-click="logOut()"> + <span class="glyphicon glyphicon-log-out" title="Logout"></span> + Logout + </a> + </li> + <li> + <a class="btn btn-link" + href="https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.4/bk_data_governance/content/ch_hdp_data_governance_overview.html" + target="_blank"> + <span class="glyphicon glyphicon-question-sign" title="Help"></span> + Help + </a> + </li> + <li><a class="btn btn-link" href="http://hortonworks.com/hadoop/falcon/" target="_blank"> + <span class="glyphicon glyphicon-info-sign" title="About"></span> + About + </a></li> + </ul> + </div> + </div> + </div> +</nav> +<nav class="col-sm-24 navbar navbar-default header2" role="navigation" ng-show="userLogged()"> - <div class="createNavWrapper" ng-show="userLogged()"> - <h4>Create an entity</h4> - <button type="button" - id="cluster.create" - ng-click="resetCluster()" - ng-disabled="isInForm('cluster')" - ng-class="{disabled:isInForm('cluster')}"> - <span class="entypo archive"></span> <span>Cluster</span> - </button> - <button type="button" - id="feed.create" - ng-click="resetFeed()" - ng-disabled="isInForm('feed')" - ng-class="{disabled:isInForm('feed')}"> - <span class="entypo download"></span> <span>Feed</span> - </button> - <button type="button" - id="process.create" - ng-click="resetProcess()" - ng-disabled="isInForm('process')" - ng-class="{disabled:isInForm('process')}"> - <span class="entypo cycle"></span> <span>Process</span> - </button> - <button type="button" - id="dataset.create" - ng-click="resetDataset()" - ng-disabled="isInForm('dataset')" - ng-class="{disabled:isInForm('dataset')}"> - <span class="glyphicon glyphicon-duplicate"></span> <span>Mirror</span> - </button> - </div> + <div class="col-sm-16" ng-show="userLogged()"> + <div class="row searchBoxContainer"> + <div class=" col-sm-offset-4 col-sm-16"> + <!--<i class="glyphicon glyphicon-refresh search-loading-icon" ng-show="loading"></i>--> + <img src="css/img/ajax-loader.gif" class="glyphicon search-loading-icon" ng-show="loading"/> + <!--<tags-input ng-model="tags" min-length="1" add-on-space="true" on-tag-added="displayResults()"--> + <!--on-tag-removed="displayResults()"></tags-input>--> - <div class="uploadNavWrapper" ng-show="userLogged()"> - <h4>Upload an entity</h4> - <div class="btn-file" ng-class="{fakeFocus: fake.focus}"> - <span class="entypo up"></span> - <input type="file" - id="files" - ng-focus="fake.focus = true" - ng-blur="fake.focus = false" - name="files[]" - multiple - fileinput-change="handleFile" - ng-model="fileJson"> - <span>Browse for the XML file</span> + <tags-input ng-model="tags" min-length="1" add-on-space="true" add-from-autocomplete-only="true" + on-tag-added="displayResults()" on-tag-removed="displayResults(true)" placeholder="Search"> + <auto-complete source="loadTags($query)" min-length="0"></auto-complete> + </tags-input> + <!--ng-class="tags.length > 0 ? 'question-icon' : 'remove-icon'"--> + <i id="nsPopover" class="glyphicon glyphicon-question-sign question-icon" + ns-popover + ns-popover-template="menu" + ns-popover-trigger="click" + ns-popover-theme="ns-popover-tooltip-theme" + ns-popover-timeout="5" + ns-popover-placement="bottom|right"></i> + <i class="glyphicon glyphicon-search search-icon" ng-hide="loading" ng-click="displayResults()"></i> + <script type="text/ng-template" id="menu"> + <div class="triangle"></div> + <div class="ns-popover-tooltip"> + <h5>Hey there! Want some search tips?</h5> + The <strong>first word</strong> you type will be taken as the <strong>Name</strong> of the entity. + <br/> + You can search <strong>*</strong> for getting all the entities. + <br/> + The <strong>second and following</strong> words will be taken as <strong> Tags</strong>. + <br/> + For filtering by type, write <strong>type=feed|process|mirror</strong> + </div> + </script> + <i class="glyphicon glyphicon-remove remove-icon" ng-if="tags.length > 0" ng-click="clearTags()"></i> + </div> </div> - </div> + </div> - <div class="loginHeaderBox"> - <div ng-show="userLogged()"> - <span class="user"></span> <div><strong>{{userToken}}</strong></div> + <div class="col-sm-8 uploadNavWrapper"> + <div class="dropdown"> + <!--<img src="css/img/32x32_create-entity.png" data-ng-click="showMenu=false" class="dropdown-toggle btn-create" + title="Create entity" id="entityMenu" data-toggle="dropdown" aria-expanded="true" role="button" />--> + <button class="dropdown-toggle btn-create" title="Create entity" id="entityMenu" + data-toggle="dropdown" aria-expanded="true" role="button"> + Create <span class="caret"></span> + </button> + <ul class="dropdown-menu" role="menu" aria-labelledby="entityMenu"> + <li role="presentation"> + <button class="cluster btn btn-link" role="menuitem" tabindex="-1" type="button" id="cluster.create" + ng-click="resetCluster()" ng-disabled="isInForm('cluster')"> + <span title="Cluster">Cluster</span> + </button> + </li> + <li role="presentation"> + <button class="feed btn btn-link" role="menuitem" tabindex="-1" type="button" id="feed.create" + ng-click="resetFeed()" ng-disabled="isInForm('feed')"> + <span title="Feed">Feed</span> + </button> + </li> + <li role="presentation"> + <button class="process btn btn-link" role="menuitem" tabindex="-1" type="button" id="process.create" + ng-click="resetProcess()" ng-disabled="isInForm('process')"> + <span title="Process">Process</span> + </button> + </li> + <li role="presentation"> + <div class="dropdown open"> + <button class="dataset btn btn-link" role="menuitem" tabindex="-1" type="button" id="dataset.create" + ng-click="resetDataset('HDFS')" ng-disabled="isInForm('dataset') && isMirror('HDFS')"> + <span title="Mirror">Mirror</span> + </button> + <ul class="dropdown-submenu" role="menu" aria-labelledby="dataset.create"> + <li role="presentation"> + <button class="hdfsMirror btn btn-link" role="menuitem" tabindex="-2" type="button" + id="hdfsMirror.create" ng-click="resetDataset('HDFS')" ng-disabled="isInForm('dataset') && isMirror('HDFS')"> + <span title="File System">File System</span> + </button> + </li> + <li role="presentation"> + <button class="hiveMirror btn btn-link" role="menuitem" tabindex="-2" type="button" + id="hiveMirror.create" ng-click="resetDataset('HIVE')" ng-disabled="isInForm('dataset') && isMirror('HIVE')"> + <span title="Hive">Hive</span> + </button> + </li> + <li role="presentation"> + <button class="snapshot btn btn-link" role="menuitem" tabindex="-2" type="button" + id="snapshot.create" ng-click="resetSnapshot()" ng-disabled="isInForm('snapshot')"> + <span title="Snapshot">Snapshot</span> + </button> + </li> + </ul> + </li> + <li role="presentation"> + <button class="dataset btn btn-link" role="menuitem" tabindex="-1" type="button" id="datasource.create" ng-click="resetDatasource()" ng-disabled="isInForm('datasource')" ng-class="{disabled:isInForm('datasource')}"> + <span title="Data Source">Data Source</span> + </button> + </li> + </ul> + </div> + <div class="dropdown"> + <!--<img src="css/img/32x32_upload.png" data-ng-click="showMenu=false" class="dropdown-toggle btn-upload" + title="Upload an entity definition" id="uploadMenu" data-toggle="dropdown" + aria-expanded="true" role="button" />--> + <button class="dropdown-toggle btn-upload" title="Upload an entity definition" id="uploadMenu" + data-toggle="dropdown" aria-expanded="true" role="button">Import<span class="caret"></span></button> + <ul class="dropdown-menu" role="menu" aria-labelledby="uploadMenu"> + <li role="presentation" class="btn-file"> + <button class="btn btn-link" role="menuitem" tabindex="-1" type="button"> + <span title="Xml file">Xml file</span> + </button> + <input type="file" + id="files" + ng-focus="fake.focus = true" + ng-blur="fake.focus = false" + name="files[]" + multiple + fileinput-change="handleFile" + ng-model="fileJson" /> + </li> + </ul> </div> - <button ng-show="userLogged() && !ambariView() && !isSecureMode()" ng-click="logOut()" ng-class="responses.unreaded > 0 ? 'logoutBT' : ''"> - <span class="glyphicon glyphicon-log-out header-icon"></span> <div><strong class="pointer">Logout</strong></div> - </button> + </div> +</nav> - <button ng-click="notify()" ng-blur="hideNotifs()" class="no-outline"> - <span class="badge badge-notify" ng-show="responses.unreaded > 0">{{ responses.unreaded }}</span> - <span class="glyphicon glyphicon-bell bell-notif header-icon"></span> - <strong class="pointer">Notifications</strong> - <div class="notifications"> - <server-messages></server-messages> +<!-- +<nav class="col-sm-24 navbar navbar-default header3" role="navigation" ng-show="userLogged() && showMenu"> + <div class="col-sm-offset-4 col-sm-18"> + <div class="loginHeaderBox"> + <a class="btn btn-link" ng-click="notify()"> + <span class="glyphicon glyphicon-bell" title="Notifications"></span> + <div class="notifications"> + <server-messages></server-messages> + </div> + </a> + <a class="btn btn-link" ng-show="userLogged() && !ambariView()" ng-click="logOut()"> + <span class="glyphicon glyphicon-log-out" title="Logout"></span> + </a> + <a class="btn btn-link" + href="http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.1/bk_falcon/bk_falcon-20140422.pdf" + target="_blank"> + <span class="glyphicon glyphicon-question-sign" title="Help"></span> + </a> + <a class="btn btn-link" href="http://hortonworks.com/hadoop/falcon/" target="_blank"> + <span class="glyphicon glyphicon-info-sign" title="About"></span> + </a> </div> - </button> - - <a href="http://hortonworks.com/hadoop/falcon/"> - <span class="glyphicon glyphicon-question-sign header-icon"></span> <div>Help</div> - </a> </div> - - </div> -</nav> +</nav>--> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/serverMessagesDv.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/serverMessagesDv.html b/falcon-ui/app/html/directives/serverMessagesDv.html index dd5a2a2..3910831 100644 --- a/falcon-ui/app/html/directives/serverMessagesDv.html +++ b/falcon-ui/app/html/directives/serverMessagesDv.html @@ -20,7 +20,7 @@ <div class="messagesArrow notifs" ng-show="server.responses.queue.length > 0"></div> <div class="messages notifs"> - + <div ng-if="showClose" class='notif-close'><button type='button' class='close' ng-click="close()">×</button></div> <div ng-show="server.responses.showAll" ng-repeat="message in server.responses.queue | reverse" class="message" ng-class="{ 'color-warning' : message.type === 'warning' || message.type === 'cancel', 'color-success' : message.type === 'success', http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/timeZoneSelectDv.html ---------------------------------------------------------------------- diff --git a/falcon-ui/app/html/directives/timeZoneSelectDv.html b/falcon-ui/app/html/directives/timeZoneSelectDv.html index f15bed7..f1ba102 100644 --- a/falcon-ui/app/html/directives/timeZoneSelectDv.html +++ b/falcon-ui/app/html/directives/timeZoneSelectDv.html @@ -17,7 +17,8 @@ * limitations under the License. */ --> -<select class="padding0 TZSelect form-control" ng-model="ngModel"> +<select class="padding0 TZSelect form-control" ng-model="ngModel" + ng-required="required"> <option value="" disabled style='display:none;'>-Select timezone-</option> <option value="UTC">UTC</option> <option value="GMT-12:00">(GMT -12:00) Eniwetok, Kwajalein</option> @@ -29,7 +30,7 @@ <option value="GMT-06:00">(GMT -6:00) Central Time (US & Canada), Mexico City</option> <option value="GMT-05:00">(GMT -5:00) Eastern Time (US & Canada), Bogota, Lima</option> <option value="GMT-04:00">(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz</option> - <option value="GMT-03:50">(GMT -3:30) Newfoundland</option> + <option value="GMT-03:30">(GMT -3:30) Newfoundland</option> <option value="GMT-03:00">(GMT -3:00) Brazil, Buenos Aires, Georgetown</option> <option value="GMT-02:00">(GMT -2:00) Mid-Atlantic</option> <option value="GMT-01:00">(GMT -1:00 hour) Azores, Cape Verde Islands</option> @@ -37,17 +38,17 @@ <option value="GMT+01:00">(GMT +1:00 hour) Brussels, Copenhagen, Madrid, Paris</option> <option value="GMT+02:00">(GMT +2:00) Kaliningrad, South Africa</option> <option value="GMT+03:00">(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg</option> - <option value="GMT+03:50">(GMT +3:30) Tehran</option> + <option value="GMT+03:30">(GMT +3:30) Tehran</option> <option value="GMT+04:00">(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi</option> - <option value="GMT+04:50">(GMT +4:30) Kabul</option> + <option value="GMT+04:30">(GMT +4:30) Kabul</option> <option value="GMT+05:00">(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent</option> - <option value="GMT+05:50">(GMT +5:30) Bombay, Calcutta, Madras, New Delhi</option> - <option value="GMT+05:75">(GMT +5:45) Kathmandu</option> + <option value="GMT+05:30">(GMT +5:30) Bombay, Calcutta, Madras, New Delhi</option> + <option value="GMT+05:45">(GMT +5:45) Kathmandu</option> <option value="GMT+06:00">(GMT +6:00) Almaty, Dhaka, Colombo</option> <option value="GMT+07:00">(GMT +7:00) Bangkok, Hanoi, Jakarta</option> <option value="GMT+08:00">(GMT +8:00) Beijing, Perth, Singapore, Hong Kong</option> <option value="GMT+09:00">(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk</option> - <option value="GMT+09:50">(GMT +9:30) Adelaide, Darwin</option> + <option value="GMT+09:30">(GMT +9:30) Adelaide, Darwin</option> <option value="GMT+10:00">(GMT +10:00) Eastern Australia, Guam, Vladivostok</option> <option value="GMT+11:00">(GMT +11:00) Magadan, Solomon Islands, New Caledonia</option> <option value="GMT+12:00">(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka</option>
