From 332caf0bbaf582ce484eeedd586335fad000434c Mon Sep 17 00:00:00 2001
From: RaNaN <Mast3rRaNaN@hotmail.de>
Date: Tue, 14 Aug 2012 22:34:45 +0200
Subject: added dialog window

---
 module/web/static/css/default/style.css        |   6 +-
 module/web/static/css/omniwindow.css           |  72 +++++++++++++
 module/web/static/js/libs/jquery.omniwindow.js | 141 +++++++++++++++++++++++++
 module/web/templates/default/base.html         | 130 +++++++++++++++--------
 4 files changed, 303 insertions(+), 46 deletions(-)
 create mode 100644 module/web/static/css/omniwindow.css
 create mode 100644 module/web/static/js/libs/jquery.omniwindow.js

(limited to 'module/web')

diff --git a/module/web/static/css/default/style.css b/module/web/static/css/default/style.css
index f882e4a43..87cd60831 100644
--- a/module/web/static/css/default/style.css
+++ b/module/web/static/css/default/style.css
@@ -157,7 +157,11 @@ header .logo {
 
 #globalprogress {
     height: 8px;
-    margin: 8px 5px;
+    margin: 8px 5px 0;
+}
+
+#globalprogress .ui-widget-header {
+    background: #fee247;
 }
 
 #speedgraph {
diff --git a/module/web/static/css/omniwindow.css b/module/web/static/css/omniwindow.css
new file mode 100644
index 000000000..12f4d451c
--- /dev/null
+++ b/module/web/static/css/omniwindow.css
@@ -0,0 +1,72 @@
+/* Default class for an overlay */
+.ow-overlay {
+     content: " ";
+     height: 100%;
+     width: 100%;
+     position: absolute;
+     left: 0;
+     top: 0;
+     background: -moz-radial-gradient(center, ellipse cover,  rgba(127,127,0,0) 0%, rgba(127,127,127,0.9) 100%);
+     background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,rgba(127,127,127,0)), color-stop(100%,rgba(127,127,127,0.9)));
+     background: -webkit-radial-gradient(center, ellipse cover,  rgba(127,127,127,0) 0%,rgba(127,127,127,0.9) 100%);
+     background: -o-radial-gradient(center, ellipse cover,  rgba(127,127,127,0) 0%,rgba(127,127,127,0.9) 100%);
+     background: -ms-radial-gradient(center, ellipse cover,  rgba(127,127,127,0) 0%,rgba(127,127,127,0.9) 100%);
+     background: radial-gradient(center, ellipse cover,  rgba(127,127,127,0) 0%,rgba(127,127,127,0.9) 100%);
+     filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#007f7f7f', endColorstr='#e67f7f7f',GradientType=1 );
+    z-index: 50;
+ }
+
+/* Default class for both hidden overlay and modal window */
+.ow-closed {
+    display: none;
+}
+
+/* Default class for modal window */
+.modal {
+    left: 50%;
+    position: fixed;
+    width: 300px;
+    height: 300px;
+    z-index: 100;
+    background-color: #ffffff;
+}
+
+/* Animations */
+.window-container {
+    background: #fcfcfc;
+    opacity: 0;
+    margin: 8em auto;
+    width: 500px;
+    padding: 10px 20px 20px;
+    text-align: left;
+    border-radius: 3px;
+    box-shadow: 0px 0px 30px rgba(0,0,0,0.2);
+    -webkit-transition: 0.4s ease-out;
+    -moz-transition: 0.4s ease-out;
+    -ms-transition: 0.4s ease-out;
+    -o-transition: 0.4s ease-out;
+    transition: 0.4s ease-out;
+}
+
+.zoomin {
+    -webkit-transform:  scale(1.2);
+    -moz-transform:  scale(1.2);
+    -ms-transform:  scale(1.2);
+    transform:  scale(1.2);
+}
+
+.zoomout {
+    -webkit-transform:  scale(0.7);
+    -moz-transform:  scale(0.7);
+    -ms-transform:  scale(0.7);
+    transform:  scale(0.7);
+}
+
+.window-container-visible {
+    -webkit-transform:  scale(1);
+    -moz-transform:  scale(1);
+    -ms-transform:  scale(1);
+    transform:  scale(1);
+    opacity: 1;
+}
+
diff --git a/module/web/static/js/libs/jquery.omniwindow.js b/module/web/static/js/libs/jquery.omniwindow.js
new file mode 100644
index 000000000..e1f0b8f77
--- /dev/null
+++ b/module/web/static/js/libs/jquery.omniwindow.js
@@ -0,0 +1,141 @@
+// jQuery OmniWindow plugin
+// @version:  0.7.0
+// @author:   Rudenka Alexander (mur.mailbox@gmail.com)
+// @license:  MIT
+
+;(function($) {
+  "use strict";
+  $.fn.extend({
+    omniWindow: function(options) {
+
+      options = $.extend(true, {
+        animationsPriority: {
+          show: ['overlay', 'modal'],
+          hide: ['modal', 'overlay']
+        },
+        overlay: {
+          selector: '.ow-overlay',
+          hideClass: 'ow-closed',
+          animations: {
+            show: function(subjects, internalCallback) { return internalCallback(subjects); },
+            hide: function(subjects, internalCallback) { return internalCallback(subjects); },
+            internal: {
+              show: function(subjects){ subjects.overlay.removeClass(options.overlay.hideClass); },
+              hide: function(subjects){ subjects.overlay.addClass(options.overlay.hideClass); }
+            }
+          }
+        },
+        modal:   {
+          hideClass: 'ow-closed',
+          animations: {
+            show: function(subjects, internalCallback) { return internalCallback(subjects); },
+            hide: function(subjects, internalCallback) { return internalCallback(subjects); },
+            internal: {
+              show: function(subjects){ subjects.modal.removeClass(options.modal.hideClass); },
+              hide: function(subjects){ subjects.modal.addClass(options.modal.hideClass); }
+            }
+          },
+          internal: {
+            stateAttribute: 'ow-active'
+          }
+        },
+        eventsNames: {
+          show: 'show.ow',
+          hide: 'hide.ow',
+          internal: {
+            overlayClick:  'click.ow',
+            keyboardKeyUp: 'keyup.ow'
+          }
+        },
+        callbacks: {                                                                                  // Callbacks execution chain
+          beforeShow:  function(subjects, internalCallback) { return internalCallback(subjects); },   // 1 (stop if retruns false)
+          positioning: function(subjects, internalCallback) { return internalCallback(subjects); },   // 2
+          afterShow:   function(subjects, internalCallback) { return internalCallback(subjects); },   // 3
+          beforeHide:  function(subjects, internalCallback) { return internalCallback(subjects); },   // 4 (stop if retruns false)
+          afterHide:   function(subjects, internalCallback) { return internalCallback(subjects); },   // 5
+          internal: {
+            beforeShow: function(subjects) {
+              if (subjects.modal.data(options.modal.internal.stateAttribute)) {
+                return false;
+              } else {
+                subjects.modal.data(options.modal.internal.stateAttribute, true);
+                return true;
+              }
+            },
+            afterShow: function(subjects) {
+              $(document).on(options.eventsNames.internal.keyboardKeyUp, function(e) {
+                if (e.keyCode === 27) {                                              // if the key pressed is the ESC key
+                  subjects.modal.trigger(options.eventsNames.hide);
+                }
+              });
+
+              subjects.overlay.on(options.eventsNames.internal.overlayClick, function(){
+                subjects.modal.trigger(options.eventsNames.hide);
+              });
+            },
+            positioning: function(subjects) {
+              subjects.modal.css('margin-left', Math.round(subjects.modal.outerWidth() / -2));
+            },
+            beforeHide: function(subjects) {
+              if (subjects.modal.data(options.modal.internal.stateAttribute)) {
+                subjects.modal.data(options.modal.internal.stateAttribute, false);
+                return true;
+              } else {
+                return false;
+              }
+            },
+            afterHide: function(subjects) {
+              subjects.overlay.off(options.eventsNames.internal.overlayClick);
+              $(document).off(options.eventsNames.internal.keyboardKeyUp);
+
+              subjects.overlay.css('display', ''); // clear inline styles after jQ animations
+              subjects.modal.css('display', '');
+            }
+          }
+        }
+      }, options);
+
+      var animate = function(process, subjects, callbackName) {
+        var first  = options.animationsPriority[process][0],
+            second = options.animationsPriority[process][1];
+
+        options[first].animations[process](subjects, function(subjs) {        // call USER's    FIRST animation (depends on priority)
+          options[first].animations.internal[process](subjs);                 // call internal  FIRST animation
+
+          options[second].animations[process](subjects, function(subjs) {     // call USER's    SECOND animation
+            options[second].animations.internal[process](subjs);              // call internal  SECOND animation
+
+                                                                              // then we need to call USER's
+                                                                              // afterShow of afterHide callback
+            options.callbacks[callbackName](subjects, options.callbacks.internal[callbackName]);
+          });
+        });
+      };
+
+      var showModal = function(subjects) {
+        if (!options.callbacks.beforeShow(subjects, options.callbacks.internal.beforeShow)) { return; } // cancel showing if beforeShow callback return false
+
+        options.callbacks.positioning(subjects, options.callbacks.internal.positioning);
+
+        animate('show', subjects, 'afterShow');
+      };
+
+      var hideModal = function(subjects) {
+        if (!options.callbacks.beforeHide(subjects, options.callbacks.internal.beforeHide)) { return; } // cancel hiding if beforeHide callback return false
+
+        animate('hide', subjects, 'afterHide');
+      };
+
+
+      var $overlay = $(options.overlay.selector);
+
+      return this.each(function() {
+        var $modal  = $(this);
+        var subjects = {modal: $modal, overlay: $overlay};
+
+        $modal.bind(options.eventsNames.show, function(){ showModal(subjects); })
+              .bind(options.eventsNames.hide, function(){ hideModal(subjects); });
+      });
+    }
+  });
+})(jQuery);
\ No newline at end of file
diff --git a/module/web/templates/default/base.html b/module/web/templates/default/base.html
index d5d51d989..5e1b2089a 100644
--- a/module/web/templates/default/base.html
+++ b/module/web/templates/default/base.html
@@ -9,11 +9,13 @@
     <link href="static/css/default/style.css" rel="stylesheet" type="text/css" media="screen"/>
     <link href="static/css/black-tie/jquery-ui-1.8.22.custom.css" rel="stylesheet" type="text/css" media="screen"/>
     <link href="static/css/jquery.qtip.min.css" rel="stylesheet" type="text/css" media="screen"/>
+    <link href="static/css/omniwindow.css" rel="stylesheet" type="text/css" media="screen"/>
 
     <script type="text/javascript" src="static/js/libs/jquery-1.8.0.min.js"></script>
     <script type="text/javascript" src="static/js/libs/jquery.flot.min.js"></script>
     <script type="text/javascript" src="static/js/libs/jquery-ui-1.8.22.custom.min.js"></script>
     <script type="text/javascript" src="static/js/libs/jquery.qtip.min.js"></script>
+    <script type="text/javascript" src="static/js/libs/jquery.omniwindow.js"></script>
 
     <script type="text/javascript" src="static/js/libs/underscore-min.js"></script>
     <script type="text/javascript" src="static/js/libs/backbone-min.js"></script>
@@ -32,57 +34,50 @@
             <span class="title">pyLoad</span>
 
             {% if user %}
-            <div id="notification_div">
-                No runnings tasks
-                <div id="globalprogress"></div>
-            </div>
-            <script>
-                $(document).ready(function() {
-                    $("#globalprogress").progressbar({ value: 37 });
-                });
-            </script>
-
-            <div class="header_block">
-                <div class="header_icon" id="header_user">
-                    <span>{{ user.name }}</span>
+                <div id="notification_div">
+                    No runnings tasks
+                    <div id="globalprogress"></div>
                 </div>
-                <div class="header_text">
-                    <a href="logout" id="header_logout">{{ _("Logout")}}</a>
+                <script>
+                    $(document).ready(function () {
+                        $("#globalprogress").progressbar({ value:37 });
+                    });
+                </script>
+
+                <div class="header_block">
+                    <div class="header_icon" id="header_user">
+                        <span>{{ user.name }}</span>
+                    </div>
+                    <div class="header_text">
+                        <a href="logout" id="header_logout">{{ _("Logout") }}</a>
+                    </div>
                 </div>
-            </div>
-            <div id="speedgraph"></div>
-            <div class="header_block">
-                <div class="header_icon" id="header_speed">
-                    <span class="header_text">500 kb/s</span>
+                <div id="speedgraph"></div>
+                <div class="header_block">
+                    <div class="header_icon" id="header_speed">
+                        <span class="header_text">500 kb/s</span>
+                    </div>
+                    <div class="header_icon" id="header_qeuue">
+                        <span class="header_text">5 / 125</span>
+                    </div>
                 </div>
-                <div class="header_icon" id="header_qeuue">
-                    <span class="header_text">5 / 125</span>
-                </div>
-            </div>
             {% endif %}
         </div>
     </header>
     <div id="push"></div>
     <div id="content">
-        <a href="#test" class="nyroModal">DOM Element (hidden div)</a>
-        <div id="test" style="display: none; width: 600px;">
-            <a href="demoSent.php" class="nyroModal">Open a new modal</a><br />
-            Test
+        <div class="modal window-container zoomout ow-closed">
+            <h1>Close me!</h1>
+            <a class='close-button' href='#'>X</a>
         </div>
-        <script type="text/javascript">
-            var dialog;
-            $(function() {
-//                dialog = $('.nyroModal').nyroModal();
-            });
-        </script>
+        <a id="dialog_open" href="#">Show Dialog</a>
         {% block content %}
         {% endblock content %}
     </div>
 </div>
 <footer>
     <div class="center">
-        <div class="logo" src="static/img/default/logo_grey.png"></div>
-
+        <div class="logo"></div>
         <div class="block copyright">
             © 2008-2012<br>
             The pyLoad Team<br>
@@ -178,22 +173,67 @@
     });
 </script>
 <script type="text/javascript">
-    $(function(){
+    $(function () {
         $("#header_speed").qtip({
-            content : {
-                text: "Download speed"
+            content:{
+                text:"Download speed"
             },
-            position : {
-                my: 'top center',
-                at: 'bottom center'
+            position:{
+                my:'top center',
+                at:'bottom center'
             },
-            show: { delay : 1000},
-            style : {
-                classes: 'ui-tooltip-dark ui-tooltip-shadow'
+            show:{ delay:1000},
+            style:{
+                classes:'ui-tooltip-dark ui-tooltip-shadow'
             }
         })
     });
 </script>
+<script type="text/javascript">
+    $(function () {
+        var dialog = $('div.modal').omniWindow({
+            overlay:{
+                animations:{
+                    hide:function (subjects, internalCallback) {
+                        subjects.overlay.fadeOut(400, function () {
+                            internalCallback(subjects); // call internal callback
+                        })
+                    },
+
+                    show:function (subjects, internalCallback) {
+                        subjects.overlay.fadeIn(250, function () {
+                            internalCallback(subjects); // call internal callback
+                        });
+                    }}},
+            modal:{
+                animations:{
+                    hide:function (subjects, internalCallback) {
+                        subjects.modal.removeClass('window-container-visible');
+                        subjects.modal.fadeOut(function () {
+                            internalCallback(subjects); // call internal callback
+                        });
+                    },
+
+                    show:function (subjects, internalCallback) {
+                        subjects.modal.fadeIn(function () {
+                            subjects.modal.addClass('window-container-visible');
+                            internalCallback(subjects); // call internal callback
+                        });
+                    }}
+            }});
+
+        $('#dialog_open').click(function (e) {
+            e.preventDefault();
+            dialog.trigger('show');
+        });
+
+        $('.close-button').click(function (e) {
+            e.preventDefault();
+            dialog.trigger('hide');
+        });
+    });
+</script>
+<div class="ow-overlay ow-closed"></div>
 {% block deferred %}
 {% endblock deferred %}
 </body>
-- 
cgit v1.2.3