GUACAMOLE-630: Move color scheme headers within color buttons.
diff --git a/guacamole/src/main/webapp/app/form/directives/guacInputColor.js b/guacamole/src/main/webapp/app/form/directives/guacInputColor.js
index e5cd3bf..24ab501 100644
--- a/guacamole/src/main/webapp/app/form/directives/guacInputColor.js
+++ b/guacamole/src/main/webapp/app/form/directives/guacInputColor.js
@@ -23,10 +23,37 @@
  */
 angular.module('form').directive('guacInputColor', [function guacInputColor() {
 
+    /**
+     * Returns whether the given color is relatively dark. A color is
+     * considered dark if white text would be more visible over a background
+     * of that color (provide better contrast) than black text.
+     *
+     * @param {HSVaColor} color
+     *     The color to test.
+     *
+     * @returns {Boolean}
+     *     true if the given color is relatively dark (white text would provide
+     *     better contrast than black), false otherwise.
+     */
+    var isDark = function isDark(color) {
+
+        var rgb = color.toRGBA();
+
+        // Convert RGB to luminance in HSL space (as defined by the
+        // relative luminance formula given by the W3C for accessibility)
+        var luminance = 0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2];
+
+        // Consider the background to be dark if white text over that
+        // background would provide better contrast than black
+        return luminance <= 153; // 153 is the component value 0.6 converted from 0-1 to the 0-255 range
+
+    };
+
     var config = {
         restrict: 'E',
         replace: true,
         templateUrl: 'app/form/templates/guacInputColor.html',
+        transclude: true
     };
 
     config.scope = {
@@ -58,6 +85,15 @@
         var $q         = $injector.get('$q');
         var $translate = $injector.get('$translate');
 
+        /**
+         * Whether the color currently selected is "dark" in the sense that the
+         * color white will have higher contrast against it than the color
+         * black.
+         *
+         * @type Boolean
+         */
+        $scope.dark = false;
+
         // Init color picker after required translation strings are available
         $q.all({
             'save'   : $translate('APP.ACTION_SAVE'),
@@ -128,6 +164,7 @@
             pickr.on('save', function colorChanged(color) {
                 $scope.$evalAsync(function updateModel() {
                     $scope.model = color.toHEXA().toString();
+                    $scope.dark = isDark(pickr.getColor());
                 });
             });
 
@@ -135,6 +172,7 @@
             pickr.on('init', function pickrReady(color) {
                 $scope.$watch('model', function modelChanged(model) {
                     pickr.setColor(model);
+                    $scope.dark = isDark(pickr.getColor());
                 });
             });
 
diff --git a/guacamole/src/main/webapp/app/form/styles/terminal-color-scheme-field.css b/guacamole/src/main/webapp/app/form/styles/terminal-color-scheme-field.css
index e3b393d..e34d619 100644
--- a/guacamole/src/main/webapp/app/form/styles/terminal-color-scheme-field.css
+++ b/guacamole/src/main/webapp/app/form/styles/terminal-color-scheme-field.css
@@ -57,6 +57,18 @@
     height: 1.5em;
     min-width: 1.25em;
     border-radius: 0.15em;
+    line-height: 1.5em;
+    text-align: center;
+    font-size: 0.75em;
+    cursor: pointer;
+}
+
+.form-field .terminal-color-scheme-field .custom-color-scheme .guac-input-color.dark {
+    color: white;
+}
+
+.form-field .terminal-color-scheme-field .custom-color-scheme .palette .guac-input-color {
+    font-weight: bold;
 }
 
 /* Increase width of color picker to allow two even rows of eight color
diff --git a/guacamole/src/main/webapp/app/form/templates/guacInputColor.html b/guacamole/src/main/webapp/app/form/templates/guacInputColor.html
index de6f15e..35af778 100644
--- a/guacamole/src/main/webapp/app/form/templates/guacInputColor.html
+++ b/guacamole/src/main/webapp/app/form/templates/guacInputColor.html
@@ -1 +1,3 @@
-<div input class="guac-input-color" ng-style="{ 'background-color' : model }"></div>
\ No newline at end of file
+<div class="guac-input-color" ng-class="{ 'dark' : dark }" ng-style="{ 'background-color' : model }">
+    <ng-transclude></ng-transclude>
+</div>
\ No newline at end of file
diff --git a/guacamole/src/main/webapp/app/form/templates/terminalColorSchemeField.html b/guacamole/src/main/webapp/app/form/templates/terminalColorSchemeField.html
index 5a2db3a..8da6a79 100644
--- a/guacamole/src/main/webapp/app/form/templates/terminalColorSchemeField.html
+++ b/guacamole/src/main/webapp/app/form/templates/terminalColorSchemeField.html
@@ -9,18 +9,16 @@
         <!-- Default foreground and background colors -->
         <tbody class="default-colors">
             <tr>
-                <th>{{ getFieldHeader(field.name + '-foreground') | translate }}</th>
                 <td>
                     <div class="palette-group">
-                        <guac-input-color model="customColorScheme.foreground" palette="defaultPalette"></guac-input-color>
+                        <guac-input-color model="customColorScheme.foreground" palette="defaultPalette">{{ getFieldHeader(field.name + '-foreground') | translate }}</guac-input-color>
                     </div>
                 </td>
             </tr>
             <tr>
-                <th>{{ getFieldHeader(field.name + '-background') | translate }}</th>
                 <td>
                     <div class="palette-group">
-                        <guac-input-color model="customColorScheme.background" palette="defaultPalette"></guac-input-color>
+                        <guac-input-color model="customColorScheme.background" palette="defaultPalette">{{ getFieldHeader(field.name + '-background') | translate }}</guac-input-color>
                     </div>
                 </td>
             </tr>
@@ -29,27 +27,26 @@
         <!-- 16-color palette -->
         <tbody class="palette">
             <tr>
-                <th rowspan="2">{{ getFieldHeader(field.name + '-palette') | translate }}</th>
                 <td class="low-intensity-colors">
                     <div class="palette-group">
                         <div class="palette-group">
                             <div class="palette-group">
-                                <guac-input-color model="customColorScheme.colors[0]" palette="defaultPalette"></guac-input-color>
-                                <guac-input-color model="customColorScheme.colors[1]" palette="defaultPalette"></guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[0]" palette="defaultPalette">0</guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[1]" palette="defaultPalette">1</guac-input-color>
                             </div>
                             <div class="palette-group">
-                                <guac-input-color model="customColorScheme.colors[2]" palette="defaultPalette"></guac-input-color>
-                                <guac-input-color model="customColorScheme.colors[3]" palette="defaultPalette"></guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[2]" palette="defaultPalette">2</guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[3]" palette="defaultPalette">3</guac-input-color>
                             </div>
                         </div>
                         <div class="palette-group">
                             <div class="palette-group">
-                                <guac-input-color model="customColorScheme.colors[4]" palette="defaultPalette"></guac-input-color>
-                                <guac-input-color model="customColorScheme.colors[5]" palette="defaultPalette"></guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[4]" palette="defaultPalette">4</guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[5]" palette="defaultPalette">5</guac-input-color>
                             </div>
                             <div class="palette-group">
-                                <guac-input-color model="customColorScheme.colors[6]" palette="defaultPalette"></guac-input-color>
-                                <guac-input-color model="customColorScheme.colors[7]" palette="defaultPalette"></guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[6]" palette="defaultPalette">6</guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[7]" palette="defaultPalette">7</guac-input-color>
                             </div>
                         </div>
                     </div>
@@ -60,22 +57,22 @@
                     <div class="palette-group">
                         <div class="palette-group">
                             <div class="palette-group">
-                                <guac-input-color model="customColorScheme.colors[8]" palette="defaultPalette"></guac-input-color>
-                                <guac-input-color model="customColorScheme.colors[9]" palette="defaultPalette"></guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[8]" palette="defaultPalette">8</guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[9]" palette="defaultPalette">9</guac-input-color>
                             </div>
                             <div class="palette-group">
-                                <guac-input-color model="customColorScheme.colors[10]" palette="defaultPalette"></guac-input-color>
-                                <guac-input-color model="customColorScheme.colors[11]" palette="defaultPalette"></guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[10]" palette="defaultPalette">10</guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[11]" palette="defaultPalette">11</guac-input-color>
                             </div>
                         </div>
                         <div class="palette-group">
                             <div class="palette-group">
-                                <guac-input-color model="customColorScheme.colors[12]" palette="defaultPalette"></guac-input-color>
-                                <guac-input-color model="customColorScheme.colors[13]" palette="defaultPalette"></guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[12]" palette="defaultPalette">12</guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[13]" palette="defaultPalette">13</guac-input-color>
                             </div>
                             <div class="palette-group">
-                                <guac-input-color model="customColorScheme.colors[14]" palette="defaultPalette"></guac-input-color>
-                                <guac-input-color model="customColorScheme.colors[15]" palette="defaultPalette"></guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[14]" palette="defaultPalette">14</guac-input-color>
+                                <guac-input-color model="customColorScheme.colors[15]" palette="defaultPalette">15</guac-input-color>
                             </div>
                         </div>
                     </div>
diff --git a/guacamole/src/main/webapp/translations/en.json b/guacamole/src/main/webapp/translations/en.json
index 19ee828..924ad18 100644
--- a/guacamole/src/main/webapp/translations/en.json
+++ b/guacamole/src/main/webapp/translations/en.json
@@ -370,9 +370,8 @@
         "FIELD_HEADER_CLIENT_CERT"     : "Client certificate:",
         "FIELD_HEADER_CLIENT_KEY"      : "Client key:",
         "FIELD_HEADER_COLOR_SCHEME"    : "Color scheme:",
-        "FIELD_HEADER_COLOR_SCHEME_BACKGROUND" : "Background:",
-        "FIELD_HEADER_COLOR_SCHEME_FOREGROUND" : "Foreground:",
-        "FIELD_HEADER_COLOR_SCHEME_PALETTE"    : "Palette:",
+        "FIELD_HEADER_COLOR_SCHEME_BACKGROUND" : "Background",
+        "FIELD_HEADER_COLOR_SCHEME_FOREGROUND" : "Foreground",
         "FIELD_HEADER_CONTAINER"       : "Container name:",
         "FIELD_HEADER_CREATE_RECORDING_PATH"  : "Automatically create recording path:",
         "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:",
@@ -555,9 +554,8 @@
 
         "FIELD_HEADER_BACKSPACE"    : "Backspace key sends:",
         "FIELD_HEADER_COLOR_SCHEME" : "Color scheme:",
-        "FIELD_HEADER_COLOR_SCHEME_BACKGROUND" : "Background:",
-        "FIELD_HEADER_COLOR_SCHEME_FOREGROUND" : "Foreground:",
-        "FIELD_HEADER_COLOR_SCHEME_PALETTE"    : "Palette:",
+        "FIELD_HEADER_COLOR_SCHEME_BACKGROUND" : "Background",
+        "FIELD_HEADER_COLOR_SCHEME_FOREGROUND" : "Foreground",
         "FIELD_HEADER_COMMAND"      : "Execute command:",
         "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:",
         "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:",
@@ -638,9 +636,8 @@
 
         "FIELD_HEADER_BACKSPACE"      : "Backspace key sends:",
         "FIELD_HEADER_COLOR_SCHEME"   : "Color scheme:",
-        "FIELD_HEADER_COLOR_SCHEME_BACKGROUND" : "Background:",
-        "FIELD_HEADER_COLOR_SCHEME_FOREGROUND" : "Foreground:",
-        "FIELD_HEADER_COLOR_SCHEME_PALETTE"    : "Palette:",
+        "FIELD_HEADER_COLOR_SCHEME_BACKGROUND" : "Background",
+        "FIELD_HEADER_COLOR_SCHEME_FOREGROUND" : "Foreground",
         "FIELD_HEADER_CREATE_RECORDING_PATH" : "Automatically create recording path:",
         "FIELD_HEADER_CREATE_TYPESCRIPT_PATH" : "Automatically create typescript path:",
         "FIELD_HEADER_FONT_NAME"      : "Font name:",