cors: ui improvements

 - display loading lines at the bottom
 - use a button for enabling / disabling

PR: #587
PR-URL: https://github.com/apache/couchdb-fauxton/pull/587
Reviewed-By: Benjamin Keen <ben.keen@gmail.com>
diff --git a/app/addons/cors/assets/less/cors.less b/app/addons/cors/assets/less/cors.less
index d77ba47..756894b 100644
--- a/app/addons/cors/assets/less/cors.less
+++ b/app/addons/cors/assets/less/cors.less
@@ -14,6 +14,18 @@
 @import "../../../../../assets/less/variables.less";
 @import "../../../../../assets/less/bootstrap/mixins.less";
 
+.cors-page {
+  .loading-lines {
+    margin-top: 20px;
+  }
+  .enable-disable.btn {
+    margin-top: 10px;
+  }
+
+}
+
+
+
 #cors-header {
   margin: 18px 30px 0 30px;
 }
diff --git a/app/addons/cors/components.react.jsx b/app/addons/cors/components.react.jsx
index 6f6bf9f..c91a859 100644
--- a/app/addons/cors/components.react.jsx
+++ b/app/addons/cors/components.react.jsx
@@ -178,8 +178,8 @@
       }
 
       return (
-        <div id= "origin-domains-container">
-          <div className= "origin-domains">
+        <div id="origin-domains-container">
+          <div className="origin-domains">
             <div className="input-append">
               <input type="text" name="new_origin_domain" onChange={this.onInputChange} onKeyUp={this.onKeyUp} value={this.state.origin} placeholder="e.g., https://site.com"/>
               <button onClick={this.addOrigin} className="btn btn-primary add-domain"> Add </button>
@@ -261,7 +261,7 @@
       this.setState(this.getStoreState());
     },
 
-    enableCorsChange: function (event) {
+    enableCorsChange: function () {
       if (this.state.corsEnabled && !_.isEmpty(this.state.origins) ) {
         var result = window.confirm(app.i18n.en_US['cors-disable-cors-prompt']);
         if (!result) { return; }
@@ -305,10 +305,17 @@
 
     render: function () {
       var isVisible = _.all([this.state.corsEnabled, !this.state.isAllOrigins]);
-      var className = this.state.corsEnabled ? 'collapsing-container' : '';
+
+      var originSettings = (
+        <div id={this.state.corsEnabled ? 'collapsing-container' : ''}>
+          <Origins corsEnabled={this.state.corsEnabled} originChange={this.originChange} isAllOrigins={this.state.isAllOrigins}/>
+          <OriginTable updateOrigin={this.updateOrigin} deleteOrigin={this.deleteOrigin} isVisible={isVisible} origins={this.state.origins} />
+          <OriginInput addOrigin={this.addOrigin} isVisible={isVisible} />
+        </div>
+      );
 
       if (this.state.isLoading) {
-        return (<ReactComponents.LoadLines />);
+        originSettings = (<ReactComponents.LoadLines />);
       }
 
       return (
@@ -319,20 +326,18 @@
 
           <form id="corsForm" onSubmit={this.save}>
             <div className="cors-enable">
-              <label className="checkbox">
-                <input
-                  type="checkbox"
-                  checked={this.state.corsEnabled}
-                  onChange={this.enableCorsChange} />
-                  Enable CORS
-              </label>
+              {this.state.corsEnabled ? 'Cors is currently enabled.' : 'Cors is currently disabled.'}
+              <br />
+              <button
+                type="button"
+                className="enable-disable btn btn-small btn-success"
+                onClick={this.enableCorsChange}
+                disabled={this.state.isLoading ? 'disabled' : null}
+              >
+                {this.state.corsEnabled ? 'Disable CORS' : 'Enable CORS'}
+              </button>
             </div>
-            <div id={className}>
-              <Origins corsEnabled={this.state.corsEnabled} originChange={this.originChange} isAllOrigins={this.state.isAllOrigins}/>
-              <OriginTable updateOrigin={this.updateOrigin} deleteOrigin={this.deleteOrigin} isVisible={isVisible} origins={this.state.origins} />
-              <OriginInput addOrigin={this.addOrigin} isVisible={isVisible} />
-            </div>
-
+            {originSettings}
           </form>
         </div>
       );
diff --git a/app/addons/cors/tests/componentsSpec.react.jsx b/app/addons/cors/tests/componentsSpec.react.jsx
index 68dd301..7bd5762 100644
--- a/app/addons/cors/tests/componentsSpec.react.jsx
+++ b/app/addons/cors/tests/componentsSpec.react.jsx
@@ -92,13 +92,13 @@
 
       it('shows loading bars', function () {
         Actions.toggleLoadingBarsToEnabled(true);
-        assert.ok($(corsEl.getDOMNode()).hasClass('loading-lines'));
+        assert.equal($(corsEl.getDOMNode()).find('.loading-lines').length, 1);
       });
 
       it('hides loading bars', function () {
         Actions.toggleLoadingBarsToEnabled(false);
 
-        assert.notOk($(corsEl.getDOMNode()).hasClass('loading-lines'));
+        assert.equal($(corsEl.getDOMNode()).find('.loading-lines').length, 0);
       });
     });