Skeleton implementation of TableDetailService, to house common code for creating detail panels for table item selection.

Change-Id: I547f74a2e42699e4242cb8616f0edf3076019e88
diff --git a/web/gui/src/main/webapp/app/fw/widget/tableDetail.js b/web/gui/src/main/webapp/app/fw/widget/tableDetail.js
new file mode 100644
index 0000000..57f65a7
--- /dev/null
+++ b/web/gui/src/main/webapp/app/fw/widget/tableDetail.js
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed 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.
+ */
+
+/*
+ ONOS GUI -- Widget -- Table Detail Panel Service
+ */
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, $interval, $timeout, fs, wss;
+
+    // constants
+    // var refreshInterval = 2000;
+
+    function noop() {}
+
+    // TODO: describe the input object for the main function
+    // example params to (functionX):
+    // {
+    //    ...
+    // }
+    function buildBasePanel(opts) {
+        var popTopF = fs.isF(opts.popTop) || noop,
+            popMidF = fs.isF(opts.popMid) || noop,
+            popBotF = fs.isF(opts.popBot) || noop;
+
+        $log.debug('options are', opts);
+
+        // TODO use panel service to create base panel
+
+        // TODO: create divs, and pass into invocations of popTopF(div), etc.
+    }
+
+    // more functions
+
+    // TODO: add ref to PanelService
+    angular.module('onosWidget')
+    .factory('TableDetailService',
+    ['$log', '$interval', '$timeout', 'FnService', 'WebSocketService',
+
+    function (_$log_, _$interval_, _$timeout_, _fs_, _wss_) {
+        $log = _$log_;
+        $interval = _$interval_;
+        $timeout = _$timeout_;
+        fs = _fs_;
+        wss = _wss_;
+
+        return {
+            buildBasePanel: buildBasePanel
+        };
+    }]);
+}());
diff --git a/web/gui/src/main/webapp/app/view/device/device.js b/web/gui/src/main/webapp/app/view/device/device.js
index c85f5ec..ec8d8b5 100644
--- a/web/gui/src/main/webapp/app/view/device/device.js
+++ b/web/gui/src/main/webapp/app/view/device/device.js
@@ -258,14 +258,29 @@
         detailsPanel.hide();
     }
 
+    // Sample functions for detail panel creation
+    function popTop(div) {
+        $log.debug('populateTop');
+        // TODO: real work
+        // div.append(.....);
+        // div.append(.....);
+        // div.append(.....);
+    }
+
+    function popMid(div) {
+        $log.debug('populateMiddle');
+        // TODO: real work
+    }
+
     angular.module('ovDevice', [])
     .controller('OvDeviceCtrl',
-        ['$log', '$scope', '$location', 'TableBuilderService', 'FnService',
+        ['$log', '$scope', '$location', 'TableBuilderService',
+            'TableDetailService', 'FnService',
             'MastService', 'PanelService', 'WebSocketService', 'IconService',
             'NavService', 'KeyService',
 
         function (_$log_, _$scope_, _$location_,
-                  tbs, _fs_, _mast_, _ps_, _wss_, _is_, _ns_, _ks_) {
+                  tbs, tds, _fs_, _mast_, _ps_, _wss_, _is_, _ns_, _ks_) {
             var params,
                 handlers = {};
 
@@ -314,6 +329,16 @@
                 selCb: selCb
             });
 
+
+            // ==================== for testing for now ===============
+            // TODO: more than just an example
+            tds.buildBasePanel({
+                popTop: popTop,
+                popMid: popMid
+            });
+            // ==================== for testing for now ===============
+
+
             $scope.nav = function (path) {
                 if ($scope.selId) {
                     ns.navTo(path, { devId: $scope.selId });
diff --git a/web/gui/src/main/webapp/index.html b/web/gui/src/main/webapp/index.html
index 9f321f2..79542fa 100644
--- a/web/gui/src/main/webapp/index.html
+++ b/web/gui/src/main/webapp/index.html
@@ -81,6 +81,7 @@
     <script src="app/fw/widget/toolbar.js"></script>
     <script src="app/fw/widget/tooltip.js"></script>
     <script src="app/fw/widget/button.js"></script>
+    <script src="app/fw/widget/tableDetail.js"></script>
     <script src="app/fw/widget/tableBuilder.js"></script>
     <script src="app/fw/widget/chartBuilder.js"></script>
     <script src="app/fw/widget/listBuilder.js"></script>