Floating panel for angular js

Krishna KV
 
Team Leader, Aspire Systems
April 16, 2016
 
Rate this article
 
Views
17576

JSPanel is one of the popular jQuery plugin for creating dynamic re-sizeable panels. In this article we can see how to create a Angualr Js directive for Js Panel so that it can be used in an application in Angular way.

Intro to jsPanel

JSPanel can be used as floating panel, model window or as tooltip. The content can be loaded using static or ajax content.  JsPanel comes with a set of in-built icons but we are free to use Bootstrap or font awesome icons and override the default ones. As this is a jQuery plugin, jQuery 1.9 or above and jQuery UI 1.9 or above is a pre-requisite for this plugin.

Angular Directive

 app.directive('floatingPanel', function () {
     return {
         restrict: 'A',
         scope: {
             parentTag: '@',
             title: '@',
             content: '@',
             htmlTag:'@',
             theme: '@',         
         },
         link: function (scope, elem, attrs) {
             var config =
             {
                 title: scope.title == undefined ? '' : scope.title,
                 position: "center",
                 size: { width: 450, height: 250 },
                 content: scope.htmlTag == undefined ? scope.content : $('#'+ scope.htmlTag),
                 theme: scope.theme == undefined ? 'success' : scope.theme,
 
             };
             
             var size, position;
 
             if (scope.parentTag != undefined) {
                 var element = $('#' + scope.parentTag);
                 var pos = element.offset();
                 config.size = { width: element.width(), height: element.height() };
                 config.position = { top: pos.top, left: pos.left }
                 
             }
             
 
 
             var panel1 = $.jsPanel({
 
                 config
             });
 
         }
     };
 })

parentTag – to set the height, width position based on the html tag

title – to add the title for the panel

content – string parameter, which can be html or plain text.  Or htmlTag – to load the html content  from the page (id as the value).

theme -  to add the theme for the panel.

 

Controller

 var app = angular.module('appModule', []);
 
 (function () {
 
 
     app.controller('mainController', ['$scope', function ($scope) {
         $scope.title = "Title";
         $scope.date = new Date().toUTCString();
         $scope.onclick = function () {
             $scope.date = new Date().toUTCString();
         };
     }]);
 
 })();

HTML Page

 <!DOCTYPE html>
 <html ng-app="appModule">
 <head>
     <title></title>
 	<meta charset="utf-8" />
     <link href="Content/jquery-ui.complete.min.css" rel="stylesheet" />
     <link href="Content/jquery.jspanel.css" rel="stylesheet" />
     <link href="Content/bootstrap.css" rel="stylesheet" />
     <link href="Content/app.css" rel="stylesheet" />
 </head>
 <style type="text/css">
     .border{
         border:1px solid gray;
     }
 </style>
 <body>
 
     <div>
         <div ng-controller="mainController" style="width:100%;height:550px">
 
             <div style="width:38%;height:100%;float:left" class="border" id="leftDiv">
 
                 <div id="hcontent">
                     <h1>{{title}}</h1>
 
                     <p style="margin-right:20px;font-size:20px;color:blue">
                       
                         {{date}}
                         <button type="button" class="btn btn-default" ng-click="onclick()">Click</button>
 
                     </p>
                 </div>
                 <div floating-panel title="Left" parent-tag="leftDiv" html-tag="hcontent"></div>
             </div>
 
             <div floating-panel title="Right" parent-tag="rightDiv" content="<h1>Test</h1><p>This is paragraph</p>"></div>
 
             <div style="width:60%;height:100%;float:right" class="border" id="rightDiv">
 
             </div>
 
 
         </div>
     </div>
 
     <script src="Scripts/jquery-2.1.4.min.js"></script>
     <script src="Scripts/jquery-ui-complete.min.js"></script>
     <script src="Scripts/vendor/jquery-ui-touch-punch/jquery.ui.touch-punch.js"></script>
     <script src="Scripts/jquery.jspanel.js"></script>
     <script src="Scripts/angular.js"></script>
 
     <script src="app/app.js"></script>
     <script src="app/app.directive.js"></script>
 
 </body>
 </html>

Output

jsPanel

 

References

http://jspanel.de/

https://github.com/Flyer53/jsPanel

Author Info

Krishna KV
 
Team Leader, Aspire Systems
 
Rate this article
 
Krishna K.V has been working in IT Industry for over 7+ years. He holds a Master Degree in Information Technology. He is more interested to learn and share new technologies, ...read more
 

Leave a comment