]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js
A new version of the plugin tinydot with update on window resize
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / Resources / public / themes / material / js / jquery.tinydot.js
index d2bf7fb64e5fa3094c2f4d06b9f5c4238ef2130b..bf9eadef2cf9a16a2c6445a4b973aa734fa84d8c 100644 (file)
@@ -1,14 +1,14 @@
 /*
- *     jQuery tinydot 0.1
+ *    jQuery tinydot 0.2.0
  *
- *     Copyright (c) Alexander Danilov
- *     www.modos189.ru
+ *    Copyright (c) Alexander Danilov
+ *    modos189.ru
  *
- *     Plugin repository:
- *     https://gitlab.com/modos189/tinydot
+ *    Plugin website:
+ *    tinydot.modos189.ru
  *
- *     Licensed under the MIT license.
- *     http://en.wikipedia.org/wiki/MIT_License
+ *    Licensed under the MIT license.
+ *    http://en.wikipedia.org/wiki/MIT_License
  */
 
 (function( $, undef )
     }
 
     $.fn.tinydot = function( o ) {
-        var p=$(this).children('a');
-        var divh=$(this).height();
-        while ($(p).outerHeight()>divh) {
-            $(p).text(function (index, text) {
-                return text.replace(/\W*\s(\S)*$/, '...');
+        
+        var $dot = this;
+        $dot.child = getChildOrDie($dot);
+        $dot.orgContent = $($dot.child).html();
+        ellipsis( $dot );
+
+        $dot.watch = function()
+        {
+            $(window).on('resize', function(){
+                if ( watchInt )
+                {
+                    clearInterval( watchInt );
+                }
+                watchInt = setTimeout(
+                    function()
+                    {
+                        reinitialize($dot);
+                    }, 100
+                );
             });
+            
+            return $dot;
+        };
+    
+        var opts = $.extend( true, {}, $.fn.tinydot.defaults, o ),
+            watchInt = null;
+
+        if ( opts.watch )
+        {
+            $dot.watch();
         }
     }
+    
+    // public
+    $.fn.tinydot.defaults = {
+        'watch'               : false
+    };
+    
+    function getChildOrDie( $elem )
+    {
+        var childrens = $elem.children();
+        if (childrens.length == 0) {
+            // create children
+            var data = $($elem).html();
+            $elem.html('');
+            $elem.append('<span />');
+            return $elem.children('span').html(data);
+        } else {
+            return childrens[0];
+        }
+    }
+    
+    function reinitialize( $elem )
+    {
+        $($elem.child).html($elem.orgContent);
+        ellipsis( $elem );
+    }
+    
+    function ellipsis( $elem ) {
+        var divh=$($elem).height();
+        while ($($elem.child).outerHeight()>divh) {
+            $($elem.child).html(function (index, html) {
+                return html.replace(/\W*\s(\S)*$/, '...');
+            });
+        }
+    }
+    
 })( jQuery );
 
 jQuery(document).ready(function($) {
     //We only invoke jQuery.tinydot on elements that have dot-ellipsis class
     $(".dot-ellipsis").each(function(){
-            var x = new Object();
-            $(this).tinydot(x);
+        //Checking if update on window resize required
+        var watch_window=$(this).hasClass("dot-resize-update");
+
+        //Invoking jQuery.tinydot
+        var x = new Object();
+        if (watch_window)
+                x.watch='window';
+        $(this).tinydot(x);
     });
-            
 });