From 4b2774f8dbc8c2bff46d6ec3ca1d8553b1f9cebb Mon Sep 17 00:00:00 2001 From: Baptiste Mille-Mathias Date: Sat, 21 May 2016 10:39:49 +0200 Subject: Don't cut entries title in card view Stop cutting titles arbitrary at caracter 42. --- .../CoreBundle/Resources/views/themes/material/Entry/entries.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig index 1d569226..e77d83bf 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig @@ -35,7 +35,7 @@ {% endif %} - {{ entry.title|striptags|slice(0, 42)|raw }} + {{ entry.title|striptags|raw }}
-- cgit v1.2.3 From e32aea53ab2aa6382c60ec194617aa8e0a79c28f Mon Sep 17 00:00:00 2001 From: Alexandr Danilov Date: Mon, 22 Aug 2016 23:34:44 +0300 Subject: Added the jquery library dotdotdot ( http://dotdotdot.frebsite.nl/ ) that allows you to clip a text on the second line and fixed cut entries title in card view --- .../Resources/public/themes/material/css/main.css | 6 + .../Resources/public/themes/material/js/init.js | 1 + .../public/themes/material/js/jquery.dotdotdot.js | 759 +++++++++++++++++++++ .../themes/material/js/jquery.dotdotdot.min.js | 13 + .../views/themes/material/layout.html.twig | 1 + 5 files changed, 780 insertions(+) create mode 100644 src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.js create mode 100644 src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.min.js diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css index b106d91a..f0beab98 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css @@ -285,6 +285,12 @@ main ul.row { .card .card-content .card-title { line-height: 32px; + max-height: 64px; + display: block; +} + +.card .card-content i.right, .card .card-reveal i.right { + margin-left: 0; } .card .card-content .estimatedTime { diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js index 491a7916..a277bd00 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js @@ -69,6 +69,7 @@ $(document).ready(function(){ $(".nav-panels").css('background', 'transparent'); return false; }); + $(".card-title").dotdotdot(); $(window).scroll(function () { var s = $(window).scrollTop(), d = $(document).height(), diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.js new file mode 100644 index 00000000..c87f2a71 --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.js @@ -0,0 +1,759 @@ +/* + * jQuery dotdotdot 1.8.3 + * + * Copyright (c) Fred Heusschen + * www.frebsite.nl + * + * Plugin website: + * dotdotdot.frebsite.nl + * + * Licensed under the MIT license. + * http://en.wikipedia.org/wiki/MIT_License + */ + +(function( $, undef ) +{ + if ( $.fn.dotdotdot ) + { + return; + } + + $.fn.dotdotdot = function( o ) + { + if ( this.length == 0 ) + { + $.fn.dotdotdot.debug( 'No element found for "' + this.selector + '".' ); + return this; + } + if ( this.length > 1 ) + { + return this.each( + function() + { + $(this).dotdotdot( o ); + } + ); + } + + + var $dot = this; + var orgContent = $dot.contents(); + + if ( $dot.data( 'dotdotdot' ) ) + { + $dot.trigger( 'destroy.dot' ); + } + + $dot.data( 'dotdotdot-style', $dot.attr( 'style' ) || '' ); + $dot.css( 'word-wrap', 'break-word' ); + if ($dot.css( 'white-space' ) === 'nowrap') + { + $dot.css( 'white-space', 'normal' ); + } + + $dot.bind_events = function() + { + $dot.bind( + 'update.dot', + function( e, c ) + { + $dot.removeClass("is-truncated"); + e.preventDefault(); + e.stopPropagation(); + + switch( typeof opts.height ) + { + case 'number': + opts.maxHeight = opts.height; + break; + + case 'function': + opts.maxHeight = opts.height.call( $dot[ 0 ] ); + break; + + default: + opts.maxHeight = getTrueInnerHeight( $dot ); + break; + } + + opts.maxHeight += opts.tolerance; + + if ( typeof c != 'undefined' ) + { + if ( typeof c == 'string' || ('nodeType' in c && c.nodeType === 1) ) + { + c = $('
').append( c ).contents(); + } + if ( c instanceof $ ) + { + orgContent = c; + } + } + + $inr = $dot.wrapInner( '
' ).children(); + $inr.contents() + .detach() + .end() + .append( orgContent.clone( true ) ) + .find( 'br' ) + .replaceWith( '
' ) + .end() + .css({ + 'height' : 'auto', + 'width' : 'auto', + 'border' : 'none', + 'padding' : 0, + 'margin' : 0 + }); + + var after = false, + trunc = false; + + if ( conf.afterElement ) + { + after = conf.afterElement.clone( true ); + after.show(); + conf.afterElement.detach(); + } + + if ( test( $inr, opts ) ) + { + if ( opts.wrap == 'children' ) + { + trunc = children( $inr, opts, after ); + } + else + { + trunc = ellipsis( $inr, $dot, $inr, opts, after ); + } + } + $inr.replaceWith( $inr.contents() ); + $inr = null; + + if ( $.isFunction( opts.callback ) ) + { + opts.callback.call( $dot[ 0 ], trunc, orgContent ); + } + + conf.isTruncated = trunc; + return trunc; + } + + ).bind( + 'isTruncated.dot', + function( e, fn ) + { + e.preventDefault(); + e.stopPropagation(); + + if ( typeof fn == 'function' ) + { + fn.call( $dot[ 0 ], conf.isTruncated ); + } + return conf.isTruncated; + } + + ).bind( + 'originalContent.dot', + function( e, fn ) + { + e.preventDefault(); + e.stopPropagation(); + + if ( typeof fn == 'function' ) + { + fn.call( $dot[ 0 ], orgContent ); + } + return orgContent; + } + + ).bind( + 'destroy.dot', + function( e ) + { + e.preventDefault(); + e.stopPropagation(); + + $dot.unwatch() + .unbind_events() + .contents() + .detach() + .end() + .append( orgContent ) + .attr( 'style', $dot.data( 'dotdotdot-style' ) || '' ) + .removeClass( 'is-truncated' ) + .data( 'dotdotdot', false ); + } + ); + return $dot; + }; // /bind_events + + $dot.unbind_events = function() + { + $dot.unbind('.dot'); + return $dot; + }; // /unbind_events + + $dot.watch = function() + { + $dot.unwatch(); + if ( opts.watch == 'window' ) + { + var $window = $(window), + _wWidth = $window.width(), + _wHeight = $window.height(); + + $window.bind( + 'resize.dot' + conf.dotId, + function() + { + if ( _wWidth != $window.width() || _wHeight != $window.height() || !opts.windowResizeFix ) + { + _wWidth = $window.width(); + _wHeight = $window.height(); + + if ( watchInt ) + { + clearInterval( watchInt ); + } + watchInt = setTimeout( + function() + { + $dot.trigger( 'update.dot' ); + }, 100 + ); + } + } + ); + } + else + { + watchOrg = getSizes( $dot ); + watchInt = setInterval( + function() + { + if ( $dot.is( ':visible' ) ) + { + var watchNew = getSizes( $dot ); + if ( watchOrg.width != watchNew.width || + watchOrg.height != watchNew.height ) + { + $dot.trigger( 'update.dot' ); + watchOrg = watchNew; + } + } + }, 500 + ); + } + return $dot; + }; + $dot.unwatch = function() + { + $(window).unbind( 'resize.dot' + conf.dotId ); + if ( watchInt ) + { + clearInterval( watchInt ); + } + return $dot; + }; + + var opts = $.extend( true, {}, $.fn.dotdotdot.defaults, o ), + conf = {}, + watchOrg = {}, + watchInt = null, + $inr = null; + + + if ( !( opts.lastCharacter.remove instanceof Array ) ) + { + opts.lastCharacter.remove = $.fn.dotdotdot.defaultArrays.lastCharacter.remove; + } + if ( !( opts.lastCharacter.noEllipsis instanceof Array ) ) + { + opts.lastCharacter.noEllipsis = $.fn.dotdotdot.defaultArrays.lastCharacter.noEllipsis; + } + + + conf.afterElement = getElement( opts.after, $dot ); + conf.isTruncated = false; + conf.dotId = dotId++; + + + $dot.data( 'dotdotdot', true ) + .bind_events() + .trigger( 'update.dot' ); + + if ( opts.watch ) + { + $dot.watch(); + } + + return $dot; + }; + + + // public + $.fn.dotdotdot.defaults = { + 'ellipsis' : '... ', + 'wrap' : 'word', + 'fallbackToLetter' : true, + 'lastCharacter' : {}, + 'tolerance' : 0, + 'callback' : null, + 'after' : null, + 'height' : null, + 'watch' : false, + 'windowResizeFix' : true + }; + $.fn.dotdotdot.defaultArrays = { + 'lastCharacter' : { + 'remove' : [ ' ', '\u3000', ',', ';', '.', '!', '?' ], + 'noEllipsis' : [] + } + }; + $.fn.dotdotdot.debug = function( msg ) {}; + + + // private + var dotId = 1; + + function children( $elem, o, after ) + { + var $elements = $elem.children(), + isTruncated = false; + + $elem.empty(); + + for ( var a = 0, l = $elements.length; a < l; a++ ) + { + var $e = $elements.eq( a ); + $elem.append( $e ); + if ( after ) + { + $elem.append( after ); + } + if ( test( $elem, o ) ) + { + $e.remove(); + isTruncated = true; + break; + } + else + { + if ( after ) + { + after.detach(); + } + } + } + return isTruncated; + } + function ellipsis( $elem, $d, $i, o, after ) + { + var isTruncated = false; + + // Don't put the ellipsis directly inside these elements + var notx = 'a, table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, blockquote, select, optgroup, option, textarea, script, style'; + + // Don't remove these elements even if they are after the ellipsis + var noty = 'script, .dotdotdot-keep'; + + $elem + .contents() + .detach() + .each( + function() + { + + var e = this, + $e = $(e); + + if ( typeof e == 'undefined' ) + { + return true; + } + else if ( $e.is( noty ) ) + { + $elem.append( $e ); + } + else if ( isTruncated ) + { + return true; + } + else + { + $elem.append( $e ); + if ( after && !$e.is( o.after ) && !$e.find( o.after ).length ) + { + $elem[ $elem.is( notx ) ? 'after' : 'append' ]( after ); + } + if ( test( $i, o ) ) + { + if ( e.nodeType == 3 ) // node is TEXT + { + isTruncated = ellipsisElement( $e, $d, $i, o, after ); + } + else + { + isTruncated = ellipsis( $e, $d, $i, o, after ); + } + } + + if ( !isTruncated ) + { + if ( after ) + { + after.detach(); + } + } + } + } + ); + $d.addClass("is-truncated"); + return isTruncated; + } + function ellipsisElement( $e, $d, $i, o, after ) + { + var e = $e[ 0 ]; + + if ( !e ) + { + return false; + } + + var txt = getTextContent( e ), + space = ( txt.indexOf(' ') !== -1 ) ? ' ' : '\u3000', + separator = ( o.wrap == 'letter' ) ? '' : space, + textArr = txt.split( separator ), + position = -1, + midPos = -1, + startPos = 0, + endPos = textArr.length - 1; + + + // Only one word + if ( o.fallbackToLetter && startPos == 0 && endPos == 0 ) + { + separator = ''; + textArr = txt.split( separator ); + endPos = textArr.length - 1; + } + + while ( startPos <= endPos && !( startPos == 0 && endPos == 0 ) ) + { + var m = Math.floor( ( startPos + endPos ) / 2 ); + if ( m == midPos ) + { + break; + } + midPos = m; + + setTextContent( e, textArr.slice( 0, midPos + 1 ).join( separator ) + o.ellipsis ); + $i.children() + .each( + function() + { + $(this).toggle().toggle(); + } + ); + + if ( !test( $i, o ) ) + { + position = midPos; + startPos = midPos; + } + else + { + endPos = midPos; + + // Fallback to letter + if (o.fallbackToLetter && startPos == 0 && endPos == 0 ) + { + separator = ''; + textArr = textArr[ 0 ].split( separator ); + position = -1; + midPos = -1; + startPos = 0; + endPos = textArr.length - 1; + } + } + } + + if ( position != -1 && !( textArr.length == 1 && textArr[ 0 ].length == 0 ) ) + { + txt = addEllipsis( textArr.slice( 0, position + 1 ).join( separator ), o ); + setTextContent( e, txt ); + } + else + { + var $w = $e.parent(); + $e.detach(); + + var afterLength = ( after && after.closest($w).length ) ? after.length : 0; + + if ( $w.contents().length > afterLength ) + { + e = findLastTextNode( $w.contents().eq( -1 - afterLength ), $d ); + } + else + { + e = findLastTextNode( $w, $d, true ); + if ( !afterLength ) + { + $w.detach(); + } + } + if ( e ) + { + txt = addEllipsis( getTextContent( e ), o ); + setTextContent( e, txt ); + if ( afterLength && after ) + { + var $parent = after.parent(); + + $(e).parent().append( after ); + + if ( !$.trim( $parent.html() ) ) + { + $parent.remove(); + } + } + } + } + + return true; + } + function test( $i, o ) + { + return $i.innerHeight() > o.maxHeight; + } + function addEllipsis( txt, o ) + { + while( $.inArray( txt.slice( -1 ), o.lastCharacter.remove ) > -1 ) + { + txt = txt.slice( 0, -1 ); + } + if ( $.inArray( txt.slice( -1 ), o.lastCharacter.noEllipsis ) < 0 ) + { + txt += o.ellipsis; + } + return txt; + } + function getSizes( $d ) + { + return { + 'width' : $d.innerWidth(), + 'height': $d.innerHeight() + }; + } + function setTextContent( e, content ) + { + if ( e.innerText ) + { + e.innerText = content; + } + else if ( e.nodeValue ) + { + e.nodeValue = content; + } + else if (e.textContent) + { + e.textContent = content; + } + + } + function getTextContent( e ) + { + if ( e.innerText ) + { + return e.innerText; + } + else if ( e.nodeValue ) + { + return e.nodeValue; + } + else if ( e.textContent ) + { + return e.textContent; + } + else + { + return ""; + } + } + function getPrevNode( n ) + { + do + { + n = n.previousSibling; + } + while ( n && n.nodeType !== 1 && n.nodeType !== 3 ); + + return n; + } + function findLastTextNode( $el, $top, excludeCurrent ) + { + var e = $el && $el[ 0 ], p; + if ( e ) + { + if ( !excludeCurrent ) + { + if ( e.nodeType === 3 ) + { + return e; + } + if ( $.trim( $el.text() ) ) + { + return findLastTextNode( $el.contents().last(), $top ); + } + } + p = getPrevNode( e ); + while ( !p ) + { + $el = $el.parent(); + if ( $el.is( $top ) || !$el.length ) + { + return false; + } + p = getPrevNode( $el[0] ); + } + if ( p ) + { + return findLastTextNode( $(p), $top ); + } + } + return false; + } + function getElement( e, $i ) + { + if ( !e ) + { + return false; + } + if ( typeof e === 'string' ) + { + e = $(e, $i); + return ( e.length ) + ? e + : false; + } + return !e.jquery + ? false + : e; + } + function getTrueInnerHeight( $el ) + { + var h = $el.innerHeight(), + a = [ 'paddingTop', 'paddingBottom' ]; + + for ( var z = 0, l = a.length; z < l; z++ ) + { + var m = parseInt( $el.css( a[ z ] ), 10 ); + if ( isNaN( m ) ) + { + m = 0; + } + h -= m; + } + return h; + } + + + // override jQuery.html + var _orgHtml = $.fn.html; + $.fn.html = function( str ) + { + if ( str != undef && !$.isFunction( str ) && this.data( 'dotdotdot' ) ) + { + return this.trigger( 'update', [ str ] ); + } + return _orgHtml.apply( this, arguments ); + }; + + + // override jQuery.text + var _orgText = $.fn.text; + $.fn.text = function( str ) + { + if ( str != undef && !$.isFunction( str ) && this.data( 'dotdotdot' ) ) + { + str = $( '
' ).text( str ).html(); + return this.trigger( 'update', [ str ] ); + } + return _orgText.apply( this, arguments ); + }; + + +})( jQuery ); + +/* + +## Automatic parsing for CSS classes +Contributed by [Ramil Valitov](https://github.com/rvalitov) + +### The idea +You can add one or several CSS classes to HTML elements to automatically invoke "jQuery.dotdotdot functionality" and some extra features. It allows to use jQuery.dotdotdot only by adding appropriate CSS classes without JS programming. + +### Available classes and their description +* dot-ellipsis - automatically invoke jQuery.dotdotdot to this element. This class must be included if you plan to use other classes below. +* dot-resize-update - automatically update if window resize event occurs. It's equivalent to option `watch:'window'`. +* dot-timer-update - automatically update if window resize event occurs. It's equivalent to option `watch:true`. +* dot-load-update - automatically update after the window has beem completely rendered. Can be useful if your content is generated dynamically using using JS and, hence, jQuery.dotdotdot can't correctly detect the height of the element before it's rendered completely. +* dot-height-XXX - available height of content area in pixels, where XXX is a number, e.g. can be `dot-height-35` if you want to set maximum height for 35 pixels. It's equivalent to option `height:'XXX'`. + +### Usage examples +*Adding jQuery.dotdotdot to element* + +
+

Lorem Ipsum is simply dummy text.

+
+ +*Adding jQuery.dotdotdot to element with update on window resize* + +
+

Lorem Ipsum is simply dummy text.

+
+ +*Adding jQuery.dotdotdot to element with predefined height of 50px* + +
+

Lorem Ipsum is simply dummy text.

+
+ +*/ + +jQuery(document).ready(function($) { + //We only invoke jQuery.dotdotdot on elements that have dot-ellipsis class + $(".dot-ellipsis").each(function(){ + //Checking if update on window resize required + var watch_window=$(this).hasClass("dot-resize-update"); + + //Checking if update on timer required + var watch_timer=$(this).hasClass("dot-timer-update"); + + //Checking if height set + var height=0; + var classList = $(this).attr('class').split(/\s+/); + $.each(classList, function(index, item) { + var matchResult = item.match(/^dot-height-(\d+)$/); + if(matchResult !== null) + height = Number(matchResult[1]); + }); + + //Invoking jQuery.dotdotdot + var x = new Object(); + if (watch_timer) + x.watch=true; + if (watch_window) + x.watch='window'; + if (height>0) + x.height=height; + $(this).dotdotdot(x); + }); + +}); + +//Updating elements (if any) on window.load event +jQuery(window).on('load', function(){ + jQuery(".dot-ellipsis.dot-load-update").trigger("update.dot"); +}); diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.min.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.min.js new file mode 100644 index 00000000..69f48386 --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.min.js @@ -0,0 +1,13 @@ +/* + * jQuery dotdotdot 1.8.3 + * + * Copyright (c) Fred Heusschen + * www.frebsite.nl + * + * Plugin website: + * dotdotdot.frebsite.nl + * + * Licensed under the MIT license. + * http://en.wikipedia.org/wiki/MIT_License + */ +!function(t,e){function n(t,e,n){var r=t.children(),o=!1;t.empty();for(var i=0,d=r.length;d>i;i++){var l=r.eq(i);if(t.append(l),n&&t.append(n),a(t,e)){l.remove(),o=!0;break}n&&n.detach()}return o}function r(e,n,i,d,l){var s=!1,c="a, table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, blockquote, select, optgroup, option, textarea, script, style",u="script, .dotdotdot-keep";return e.contents().detach().each(function(){var h=this,f=t(h);if("undefined"==typeof h)return!0;if(f.is(u))e.append(f);else{if(s)return!0;e.append(f),!l||f.is(d.after)||f.find(d.after).length||e[e.is(c)?"after":"append"](l),a(i,d)&&(s=3==h.nodeType?o(f,n,i,d,l):r(f,n,i,d,l)),s||l&&l.detach()}}),n.addClass("is-truncated"),s}function o(e,n,r,o,d){var c=e[0];if(!c)return!1;var h=s(c),f=-1!==h.indexOf(" ")?" ":" ",p="letter"==o.wrap?"":f,g=h.split(p),v=-1,w=-1,b=0,m=g.length-1;for(o.fallbackToLetter&&0==b&&0==m&&(p="",g=h.split(p),m=g.length-1);m>=b&&(0!=b||0!=m);){var y=Math.floor((b+m)/2);if(y==w)break;w=y,l(c,g.slice(0,w+1).join(p)+o.ellipsis),r.children().each(function(){t(this).toggle().toggle()}),a(r,o)?(m=w,o.fallbackToLetter&&0==b&&0==m&&(p="",g=g[0].split(p),v=-1,w=-1,b=0,m=g.length-1)):(v=w,b=w)}if(-1==v||1==g.length&&0==g[0].length){var x=e.parent();e.detach();var C=d&&d.closest(x).length?d.length:0;if(x.contents().length>C?c=u(x.contents().eq(-1-C),n):(c=u(x,n,!0),C||x.detach()),c&&(h=i(s(c),o),l(c,h),C&&d)){var T=d.parent();t(c).parent().append(d),t.trim(T.html())||T.remove()}}else h=i(g.slice(0,v+1).join(p),o),l(c,h);return!0}function a(t,e){return t.innerHeight()>e.maxHeight}function i(e,n){for(;t.inArray(e.slice(-1),n.lastCharacter.remove)>-1;)e=e.slice(0,-1);return t.inArray(e.slice(-1),n.lastCharacter.noEllipsis)<0&&(e+=n.ellipsis),e}function d(t){return{width:t.innerWidth(),height:t.innerHeight()}}function l(t,e){t.innerText?t.innerText=e:t.nodeValue?t.nodeValue=e:t.textContent&&(t.textContent=e)}function s(t){return t.innerText?t.innerText:t.nodeValue?t.nodeValue:t.textContent?t.textContent:""}function c(t){do t=t.previousSibling;while(t&&1!==t.nodeType&&3!==t.nodeType);return t}function u(e,n,r){var o,a=e&&e[0];if(a){if(!r){if(3===a.nodeType)return a;if(t.trim(e.text()))return u(e.contents().last(),n)}for(o=c(a);!o;){if(e=e.parent(),e.is(n)||!e.length)return!1;o=c(e[0])}if(o)return u(t(o),n)}return!1}function h(e,n){return e?"string"==typeof e?(e=t(e,n),e.length?e:!1):e.jquery?e:!1:!1}function f(t){for(var e=t.innerHeight(),n=["paddingTop","paddingBottom"],r=0,o=n.length;o>r;r++){var a=parseInt(t.css(n[r]),10);isNaN(a)&&(a=0),e-=a}return e}if(!t.fn.dotdotdot){t.fn.dotdotdot=function(e){if(0==this.length)return t.fn.dotdotdot.debug('No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){t(this).dotdotdot(e)});var o=this,i=o.contents();o.data("dotdotdot")&&o.trigger("destroy.dot"),o.data("dotdotdot-style",o.attr("style")||""),o.css("word-wrap","break-word"),"nowrap"===o.css("white-space")&&o.css("white-space","normal"),o.bind_events=function(){return o.bind("update.dot",function(e,d){switch(o.removeClass("is-truncated"),e.preventDefault(),e.stopPropagation(),typeof l.height){case"number":l.maxHeight=l.height;break;case"function":l.maxHeight=l.height.call(o[0]);break;default:l.maxHeight=f(o)}l.maxHeight+=l.tolerance,"undefined"!=typeof d&&(("string"==typeof d||"nodeType"in d&&1===d.nodeType)&&(d=t("
").append(d).contents()),d instanceof t&&(i=d)),g=o.wrapInner('
').children(),g.contents().detach().end().append(i.clone(!0)).find("br").replaceWith("
").end().css({height:"auto",width:"auto",border:"none",padding:0,margin:0});var c=!1,u=!1;return s.afterElement&&(c=s.afterElement.clone(!0),c.show(),s.afterElement.detach()),a(g,l)&&(u="children"==l.wrap?n(g,l,c):r(g,o,g,l,c)),g.replaceWith(g.contents()),g=null,t.isFunction(l.callback)&&l.callback.call(o[0],u,i),s.isTruncated=u,u}).bind("isTruncated.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(o[0],s.isTruncated),s.isTruncated}).bind("originalContent.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(o[0],i),i}).bind("destroy.dot",function(t){t.preventDefault(),t.stopPropagation(),o.unwatch().unbind_events().contents().detach().end().append(i).attr("style",o.data("dotdotdot-style")||"").removeClass("is-truncated").data("dotdotdot",!1)}),o},o.unbind_events=function(){return o.unbind(".dot"),o},o.watch=function(){if(o.unwatch(),"window"==l.watch){var e=t(window),n=e.width(),r=e.height();e.bind("resize.dot"+s.dotId,function(){n==e.width()&&r==e.height()&&l.windowResizeFix||(n=e.width(),r=e.height(),u&&clearInterval(u),u=setTimeout(function(){o.trigger("update.dot")},100))})}else c=d(o),u=setInterval(function(){if(o.is(":visible")){var t=d(o);c.width==t.width&&c.height==t.height||(o.trigger("update.dot"),c=t)}},500);return o},o.unwatch=function(){return t(window).unbind("resize.dot"+s.dotId),u&&clearInterval(u),o};var l=t.extend(!0,{},t.fn.dotdotdot.defaults,e),s={},c={},u=null,g=null;return l.lastCharacter.remove instanceof Array||(l.lastCharacter.remove=t.fn.dotdotdot.defaultArrays.lastCharacter.remove),l.lastCharacter.noEllipsis instanceof Array||(l.lastCharacter.noEllipsis=t.fn.dotdotdot.defaultArrays.lastCharacter.noEllipsis),s.afterElement=h(l.after,o),s.isTruncated=!1,s.dotId=p++,o.data("dotdotdot",!0).bind_events().trigger("update.dot"),l.watch&&o.watch(),o},t.fn.dotdotdot.defaults={ellipsis:"... ",wrap:"word",fallbackToLetter:!0,lastCharacter:{},tolerance:0,callback:null,after:null,height:null,watch:!1,windowResizeFix:!0},t.fn.dotdotdot.defaultArrays={lastCharacter:{remove:[" "," ",",",";",".","!","?"],noEllipsis:[]}},t.fn.dotdotdot.debug=function(t){};var p=1,g=t.fn.html;t.fn.html=function(n){return n!=e&&!t.isFunction(n)&&this.data("dotdotdot")?this.trigger("update",[n]):g.apply(this,arguments)};var v=t.fn.text;t.fn.text=function(n){return n!=e&&!t.isFunction(n)&&this.data("dotdotdot")?(n=t("
").text(n).html(),this.trigger("update",[n])):v.apply(this,arguments)}}}(jQuery),jQuery(document).ready(function(t){t(".dot-ellipsis").each(function(){var e=t(this).hasClass("dot-resize-update"),n=t(this).hasClass("dot-timer-update"),r=0,o=t(this).attr("class").split(/\s+/);t.each(o,function(t,e){var n=e.match(/^dot-height-(\d+)$/);null!==n&&(r=Number(n[1]))});var a=new Object;n&&(a.watch=!0),e&&(a.watch="window"),r>0&&(a.height=r),t(this).dotdotdot(a)})}),jQuery(window).on("load",function(){jQuery(".dot-ellipsis.dot-load-update").trigger("update.dot")}); \ No newline at end of file diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig index 25ad23dd..fa3e6e1d 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig @@ -11,6 +11,7 @@ {% block scripts %} {{ parent() }} + {% endblock %} -- cgit v1.2.3 From 474b086656eb628684d11d2c187a086d65a0fdd0 Mon Sep 17 00:00:00 2001 From: Alexandr Danilov Date: Mon, 22 Aug 2016 23:59:20 +0300 Subject: Simplify the initialization of the plugin dotdotdot --- src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js | 1 - .../CoreBundle/Resources/views/themes/material/Entry/entries.html.twig | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js index a277bd00..491a7916 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/init.js @@ -69,7 +69,6 @@ $(document).ready(function(){ $(".nav-panels").css('background', 'transparent'); return false; }); - $(".card-title").dotdotdot(); $(window).scroll(function () { var s = $(window).scrollTop(), d = $(document).height(), diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig index e77d83bf..5f49062f 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig @@ -35,7 +35,7 @@ {% endif %} - {{ entry.title|striptags|raw }} + {{ entry.title|striptags|raw }}
-- cgit v1.2.3 From d5de909bbc2c757e749e91c6638cddf8b29f92bd Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Tue, 23 Aug 2016 07:24:00 +0200 Subject: Update SymfonyRequirements --- var/SymfonyRequirements.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/var/SymfonyRequirements.php b/var/SymfonyRequirements.php index 841338f4..0a5de546 100644 --- a/var/SymfonyRequirements.php +++ b/var/SymfonyRequirements.php @@ -681,10 +681,17 @@ class SymfonyRequirements extends RequirementCollection if (class_exists('Symfony\Component\Intl\Intl')) { $this->addRecommendation( - \Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(), - sprintf('intl ICU version installed on your system (%s) should match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()), - 'In most cases you should be fine, but please verify there is no inconsistencies between data provided by Symfony and the intl extension. See https://github.com/symfony/symfony/issues/15007 for an example of inconsistencies you might run into.' + \Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion(), + sprintf('intl ICU version installed on your system is outdated (%s) and does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()), + 'To get the latest internationalization data upgrade the ICU system package and the intl PHP extension.' ); + if (\Symfony\Component\Intl\Intl::getIcuDataVersion() <= \Symfony\Component\Intl\Intl::getIcuVersion()) { + $this->addRecommendation( + \Symfony\Component\Intl\Intl::getIcuDataVersion() === \Symfony\Component\Intl\Intl::getIcuVersion(), + sprintf('intl ICU version installed on your system (%s) does not match the ICU data bundled with Symfony (%s)', \Symfony\Component\Intl\Intl::getIcuVersion(), \Symfony\Component\Intl\Intl::getIcuDataVersion()), + 'To avoid internationalization data incosistencies upgrade the symfony/intl component.' + ); + } } $this->addPhpIniRecommendation( -- cgit v1.2.3 From 28388e15c38290ba920849883c91f827a257cb50 Mon Sep 17 00:00:00 2001 From: Alexandr Danilov Date: Tue, 23 Aug 2016 12:58:35 +0300 Subject: Replacement plugin dotdotdot (6.7 KB) on my tinydot (315 bytes) --- .../public/themes/material/js/jquery.dotdotdot.js | 759 --------------------- .../themes/material/js/jquery.dotdotdot.min.js | 13 - .../public/themes/material/js/jquery.tinydot.js | 39 ++ .../themes/material/js/jquery.tinydot.min.js | 1 + .../views/themes/material/layout.html.twig | 2 +- 5 files changed, 41 insertions(+), 773 deletions(-) delete mode 100644 src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.js delete mode 100644 src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.min.js create mode 100644 src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js create mode 100644 src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.js deleted file mode 100644 index c87f2a71..00000000 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.js +++ /dev/null @@ -1,759 +0,0 @@ -/* - * jQuery dotdotdot 1.8.3 - * - * Copyright (c) Fred Heusschen - * www.frebsite.nl - * - * Plugin website: - * dotdotdot.frebsite.nl - * - * Licensed under the MIT license. - * http://en.wikipedia.org/wiki/MIT_License - */ - -(function( $, undef ) -{ - if ( $.fn.dotdotdot ) - { - return; - } - - $.fn.dotdotdot = function( o ) - { - if ( this.length == 0 ) - { - $.fn.dotdotdot.debug( 'No element found for "' + this.selector + '".' ); - return this; - } - if ( this.length > 1 ) - { - return this.each( - function() - { - $(this).dotdotdot( o ); - } - ); - } - - - var $dot = this; - var orgContent = $dot.contents(); - - if ( $dot.data( 'dotdotdot' ) ) - { - $dot.trigger( 'destroy.dot' ); - } - - $dot.data( 'dotdotdot-style', $dot.attr( 'style' ) || '' ); - $dot.css( 'word-wrap', 'break-word' ); - if ($dot.css( 'white-space' ) === 'nowrap') - { - $dot.css( 'white-space', 'normal' ); - } - - $dot.bind_events = function() - { - $dot.bind( - 'update.dot', - function( e, c ) - { - $dot.removeClass("is-truncated"); - e.preventDefault(); - e.stopPropagation(); - - switch( typeof opts.height ) - { - case 'number': - opts.maxHeight = opts.height; - break; - - case 'function': - opts.maxHeight = opts.height.call( $dot[ 0 ] ); - break; - - default: - opts.maxHeight = getTrueInnerHeight( $dot ); - break; - } - - opts.maxHeight += opts.tolerance; - - if ( typeof c != 'undefined' ) - { - if ( typeof c == 'string' || ('nodeType' in c && c.nodeType === 1) ) - { - c = $('
').append( c ).contents(); - } - if ( c instanceof $ ) - { - orgContent = c; - } - } - - $inr = $dot.wrapInner( '
' ).children(); - $inr.contents() - .detach() - .end() - .append( orgContent.clone( true ) ) - .find( 'br' ) - .replaceWith( '
' ) - .end() - .css({ - 'height' : 'auto', - 'width' : 'auto', - 'border' : 'none', - 'padding' : 0, - 'margin' : 0 - }); - - var after = false, - trunc = false; - - if ( conf.afterElement ) - { - after = conf.afterElement.clone( true ); - after.show(); - conf.afterElement.detach(); - } - - if ( test( $inr, opts ) ) - { - if ( opts.wrap == 'children' ) - { - trunc = children( $inr, opts, after ); - } - else - { - trunc = ellipsis( $inr, $dot, $inr, opts, after ); - } - } - $inr.replaceWith( $inr.contents() ); - $inr = null; - - if ( $.isFunction( opts.callback ) ) - { - opts.callback.call( $dot[ 0 ], trunc, orgContent ); - } - - conf.isTruncated = trunc; - return trunc; - } - - ).bind( - 'isTruncated.dot', - function( e, fn ) - { - e.preventDefault(); - e.stopPropagation(); - - if ( typeof fn == 'function' ) - { - fn.call( $dot[ 0 ], conf.isTruncated ); - } - return conf.isTruncated; - } - - ).bind( - 'originalContent.dot', - function( e, fn ) - { - e.preventDefault(); - e.stopPropagation(); - - if ( typeof fn == 'function' ) - { - fn.call( $dot[ 0 ], orgContent ); - } - return orgContent; - } - - ).bind( - 'destroy.dot', - function( e ) - { - e.preventDefault(); - e.stopPropagation(); - - $dot.unwatch() - .unbind_events() - .contents() - .detach() - .end() - .append( orgContent ) - .attr( 'style', $dot.data( 'dotdotdot-style' ) || '' ) - .removeClass( 'is-truncated' ) - .data( 'dotdotdot', false ); - } - ); - return $dot; - }; // /bind_events - - $dot.unbind_events = function() - { - $dot.unbind('.dot'); - return $dot; - }; // /unbind_events - - $dot.watch = function() - { - $dot.unwatch(); - if ( opts.watch == 'window' ) - { - var $window = $(window), - _wWidth = $window.width(), - _wHeight = $window.height(); - - $window.bind( - 'resize.dot' + conf.dotId, - function() - { - if ( _wWidth != $window.width() || _wHeight != $window.height() || !opts.windowResizeFix ) - { - _wWidth = $window.width(); - _wHeight = $window.height(); - - if ( watchInt ) - { - clearInterval( watchInt ); - } - watchInt = setTimeout( - function() - { - $dot.trigger( 'update.dot' ); - }, 100 - ); - } - } - ); - } - else - { - watchOrg = getSizes( $dot ); - watchInt = setInterval( - function() - { - if ( $dot.is( ':visible' ) ) - { - var watchNew = getSizes( $dot ); - if ( watchOrg.width != watchNew.width || - watchOrg.height != watchNew.height ) - { - $dot.trigger( 'update.dot' ); - watchOrg = watchNew; - } - } - }, 500 - ); - } - return $dot; - }; - $dot.unwatch = function() - { - $(window).unbind( 'resize.dot' + conf.dotId ); - if ( watchInt ) - { - clearInterval( watchInt ); - } - return $dot; - }; - - var opts = $.extend( true, {}, $.fn.dotdotdot.defaults, o ), - conf = {}, - watchOrg = {}, - watchInt = null, - $inr = null; - - - if ( !( opts.lastCharacter.remove instanceof Array ) ) - { - opts.lastCharacter.remove = $.fn.dotdotdot.defaultArrays.lastCharacter.remove; - } - if ( !( opts.lastCharacter.noEllipsis instanceof Array ) ) - { - opts.lastCharacter.noEllipsis = $.fn.dotdotdot.defaultArrays.lastCharacter.noEllipsis; - } - - - conf.afterElement = getElement( opts.after, $dot ); - conf.isTruncated = false; - conf.dotId = dotId++; - - - $dot.data( 'dotdotdot', true ) - .bind_events() - .trigger( 'update.dot' ); - - if ( opts.watch ) - { - $dot.watch(); - } - - return $dot; - }; - - - // public - $.fn.dotdotdot.defaults = { - 'ellipsis' : '... ', - 'wrap' : 'word', - 'fallbackToLetter' : true, - 'lastCharacter' : {}, - 'tolerance' : 0, - 'callback' : null, - 'after' : null, - 'height' : null, - 'watch' : false, - 'windowResizeFix' : true - }; - $.fn.dotdotdot.defaultArrays = { - 'lastCharacter' : { - 'remove' : [ ' ', '\u3000', ',', ';', '.', '!', '?' ], - 'noEllipsis' : [] - } - }; - $.fn.dotdotdot.debug = function( msg ) {}; - - - // private - var dotId = 1; - - function children( $elem, o, after ) - { - var $elements = $elem.children(), - isTruncated = false; - - $elem.empty(); - - for ( var a = 0, l = $elements.length; a < l; a++ ) - { - var $e = $elements.eq( a ); - $elem.append( $e ); - if ( after ) - { - $elem.append( after ); - } - if ( test( $elem, o ) ) - { - $e.remove(); - isTruncated = true; - break; - } - else - { - if ( after ) - { - after.detach(); - } - } - } - return isTruncated; - } - function ellipsis( $elem, $d, $i, o, after ) - { - var isTruncated = false; - - // Don't put the ellipsis directly inside these elements - var notx = 'a, table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, blockquote, select, optgroup, option, textarea, script, style'; - - // Don't remove these elements even if they are after the ellipsis - var noty = 'script, .dotdotdot-keep'; - - $elem - .contents() - .detach() - .each( - function() - { - - var e = this, - $e = $(e); - - if ( typeof e == 'undefined' ) - { - return true; - } - else if ( $e.is( noty ) ) - { - $elem.append( $e ); - } - else if ( isTruncated ) - { - return true; - } - else - { - $elem.append( $e ); - if ( after && !$e.is( o.after ) && !$e.find( o.after ).length ) - { - $elem[ $elem.is( notx ) ? 'after' : 'append' ]( after ); - } - if ( test( $i, o ) ) - { - if ( e.nodeType == 3 ) // node is TEXT - { - isTruncated = ellipsisElement( $e, $d, $i, o, after ); - } - else - { - isTruncated = ellipsis( $e, $d, $i, o, after ); - } - } - - if ( !isTruncated ) - { - if ( after ) - { - after.detach(); - } - } - } - } - ); - $d.addClass("is-truncated"); - return isTruncated; - } - function ellipsisElement( $e, $d, $i, o, after ) - { - var e = $e[ 0 ]; - - if ( !e ) - { - return false; - } - - var txt = getTextContent( e ), - space = ( txt.indexOf(' ') !== -1 ) ? ' ' : '\u3000', - separator = ( o.wrap == 'letter' ) ? '' : space, - textArr = txt.split( separator ), - position = -1, - midPos = -1, - startPos = 0, - endPos = textArr.length - 1; - - - // Only one word - if ( o.fallbackToLetter && startPos == 0 && endPos == 0 ) - { - separator = ''; - textArr = txt.split( separator ); - endPos = textArr.length - 1; - } - - while ( startPos <= endPos && !( startPos == 0 && endPos == 0 ) ) - { - var m = Math.floor( ( startPos + endPos ) / 2 ); - if ( m == midPos ) - { - break; - } - midPos = m; - - setTextContent( e, textArr.slice( 0, midPos + 1 ).join( separator ) + o.ellipsis ); - $i.children() - .each( - function() - { - $(this).toggle().toggle(); - } - ); - - if ( !test( $i, o ) ) - { - position = midPos; - startPos = midPos; - } - else - { - endPos = midPos; - - // Fallback to letter - if (o.fallbackToLetter && startPos == 0 && endPos == 0 ) - { - separator = ''; - textArr = textArr[ 0 ].split( separator ); - position = -1; - midPos = -1; - startPos = 0; - endPos = textArr.length - 1; - } - } - } - - if ( position != -1 && !( textArr.length == 1 && textArr[ 0 ].length == 0 ) ) - { - txt = addEllipsis( textArr.slice( 0, position + 1 ).join( separator ), o ); - setTextContent( e, txt ); - } - else - { - var $w = $e.parent(); - $e.detach(); - - var afterLength = ( after && after.closest($w).length ) ? after.length : 0; - - if ( $w.contents().length > afterLength ) - { - e = findLastTextNode( $w.contents().eq( -1 - afterLength ), $d ); - } - else - { - e = findLastTextNode( $w, $d, true ); - if ( !afterLength ) - { - $w.detach(); - } - } - if ( e ) - { - txt = addEllipsis( getTextContent( e ), o ); - setTextContent( e, txt ); - if ( afterLength && after ) - { - var $parent = after.parent(); - - $(e).parent().append( after ); - - if ( !$.trim( $parent.html() ) ) - { - $parent.remove(); - } - } - } - } - - return true; - } - function test( $i, o ) - { - return $i.innerHeight() > o.maxHeight; - } - function addEllipsis( txt, o ) - { - while( $.inArray( txt.slice( -1 ), o.lastCharacter.remove ) > -1 ) - { - txt = txt.slice( 0, -1 ); - } - if ( $.inArray( txt.slice( -1 ), o.lastCharacter.noEllipsis ) < 0 ) - { - txt += o.ellipsis; - } - return txt; - } - function getSizes( $d ) - { - return { - 'width' : $d.innerWidth(), - 'height': $d.innerHeight() - }; - } - function setTextContent( e, content ) - { - if ( e.innerText ) - { - e.innerText = content; - } - else if ( e.nodeValue ) - { - e.nodeValue = content; - } - else if (e.textContent) - { - e.textContent = content; - } - - } - function getTextContent( e ) - { - if ( e.innerText ) - { - return e.innerText; - } - else if ( e.nodeValue ) - { - return e.nodeValue; - } - else if ( e.textContent ) - { - return e.textContent; - } - else - { - return ""; - } - } - function getPrevNode( n ) - { - do - { - n = n.previousSibling; - } - while ( n && n.nodeType !== 1 && n.nodeType !== 3 ); - - return n; - } - function findLastTextNode( $el, $top, excludeCurrent ) - { - var e = $el && $el[ 0 ], p; - if ( e ) - { - if ( !excludeCurrent ) - { - if ( e.nodeType === 3 ) - { - return e; - } - if ( $.trim( $el.text() ) ) - { - return findLastTextNode( $el.contents().last(), $top ); - } - } - p = getPrevNode( e ); - while ( !p ) - { - $el = $el.parent(); - if ( $el.is( $top ) || !$el.length ) - { - return false; - } - p = getPrevNode( $el[0] ); - } - if ( p ) - { - return findLastTextNode( $(p), $top ); - } - } - return false; - } - function getElement( e, $i ) - { - if ( !e ) - { - return false; - } - if ( typeof e === 'string' ) - { - e = $(e, $i); - return ( e.length ) - ? e - : false; - } - return !e.jquery - ? false - : e; - } - function getTrueInnerHeight( $el ) - { - var h = $el.innerHeight(), - a = [ 'paddingTop', 'paddingBottom' ]; - - for ( var z = 0, l = a.length; z < l; z++ ) - { - var m = parseInt( $el.css( a[ z ] ), 10 ); - if ( isNaN( m ) ) - { - m = 0; - } - h -= m; - } - return h; - } - - - // override jQuery.html - var _orgHtml = $.fn.html; - $.fn.html = function( str ) - { - if ( str != undef && !$.isFunction( str ) && this.data( 'dotdotdot' ) ) - { - return this.trigger( 'update', [ str ] ); - } - return _orgHtml.apply( this, arguments ); - }; - - - // override jQuery.text - var _orgText = $.fn.text; - $.fn.text = function( str ) - { - if ( str != undef && !$.isFunction( str ) && this.data( 'dotdotdot' ) ) - { - str = $( '
' ).text( str ).html(); - return this.trigger( 'update', [ str ] ); - } - return _orgText.apply( this, arguments ); - }; - - -})( jQuery ); - -/* - -## Automatic parsing for CSS classes -Contributed by [Ramil Valitov](https://github.com/rvalitov) - -### The idea -You can add one or several CSS classes to HTML elements to automatically invoke "jQuery.dotdotdot functionality" and some extra features. It allows to use jQuery.dotdotdot only by adding appropriate CSS classes without JS programming. - -### Available classes and their description -* dot-ellipsis - automatically invoke jQuery.dotdotdot to this element. This class must be included if you plan to use other classes below. -* dot-resize-update - automatically update if window resize event occurs. It's equivalent to option `watch:'window'`. -* dot-timer-update - automatically update if window resize event occurs. It's equivalent to option `watch:true`. -* dot-load-update - automatically update after the window has beem completely rendered. Can be useful if your content is generated dynamically using using JS and, hence, jQuery.dotdotdot can't correctly detect the height of the element before it's rendered completely. -* dot-height-XXX - available height of content area in pixels, where XXX is a number, e.g. can be `dot-height-35` if you want to set maximum height for 35 pixels. It's equivalent to option `height:'XXX'`. - -### Usage examples -*Adding jQuery.dotdotdot to element* - -
-

Lorem Ipsum is simply dummy text.

-
- -*Adding jQuery.dotdotdot to element with update on window resize* - -
-

Lorem Ipsum is simply dummy text.

-
- -*Adding jQuery.dotdotdot to element with predefined height of 50px* - -
-

Lorem Ipsum is simply dummy text.

-
- -*/ - -jQuery(document).ready(function($) { - //We only invoke jQuery.dotdotdot on elements that have dot-ellipsis class - $(".dot-ellipsis").each(function(){ - //Checking if update on window resize required - var watch_window=$(this).hasClass("dot-resize-update"); - - //Checking if update on timer required - var watch_timer=$(this).hasClass("dot-timer-update"); - - //Checking if height set - var height=0; - var classList = $(this).attr('class').split(/\s+/); - $.each(classList, function(index, item) { - var matchResult = item.match(/^dot-height-(\d+)$/); - if(matchResult !== null) - height = Number(matchResult[1]); - }); - - //Invoking jQuery.dotdotdot - var x = new Object(); - if (watch_timer) - x.watch=true; - if (watch_window) - x.watch='window'; - if (height>0) - x.height=height; - $(this).dotdotdot(x); - }); - -}); - -//Updating elements (if any) on window.load event -jQuery(window).on('load', function(){ - jQuery(".dot-ellipsis.dot-load-update").trigger("update.dot"); -}); diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.min.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.min.js deleted file mode 100644 index 69f48386..00000000 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.dotdotdot.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * jQuery dotdotdot 1.8.3 - * - * Copyright (c) Fred Heusschen - * www.frebsite.nl - * - * Plugin website: - * dotdotdot.frebsite.nl - * - * Licensed under the MIT license. - * http://en.wikipedia.org/wiki/MIT_License - */ -!function(t,e){function n(t,e,n){var r=t.children(),o=!1;t.empty();for(var i=0,d=r.length;d>i;i++){var l=r.eq(i);if(t.append(l),n&&t.append(n),a(t,e)){l.remove(),o=!0;break}n&&n.detach()}return o}function r(e,n,i,d,l){var s=!1,c="a, table, thead, tbody, tfoot, tr, col, colgroup, object, embed, param, ol, ul, dl, blockquote, select, optgroup, option, textarea, script, style",u="script, .dotdotdot-keep";return e.contents().detach().each(function(){var h=this,f=t(h);if("undefined"==typeof h)return!0;if(f.is(u))e.append(f);else{if(s)return!0;e.append(f),!l||f.is(d.after)||f.find(d.after).length||e[e.is(c)?"after":"append"](l),a(i,d)&&(s=3==h.nodeType?o(f,n,i,d,l):r(f,n,i,d,l)),s||l&&l.detach()}}),n.addClass("is-truncated"),s}function o(e,n,r,o,d){var c=e[0];if(!c)return!1;var h=s(c),f=-1!==h.indexOf(" ")?" ":" ",p="letter"==o.wrap?"":f,g=h.split(p),v=-1,w=-1,b=0,m=g.length-1;for(o.fallbackToLetter&&0==b&&0==m&&(p="",g=h.split(p),m=g.length-1);m>=b&&(0!=b||0!=m);){var y=Math.floor((b+m)/2);if(y==w)break;w=y,l(c,g.slice(0,w+1).join(p)+o.ellipsis),r.children().each(function(){t(this).toggle().toggle()}),a(r,o)?(m=w,o.fallbackToLetter&&0==b&&0==m&&(p="",g=g[0].split(p),v=-1,w=-1,b=0,m=g.length-1)):(v=w,b=w)}if(-1==v||1==g.length&&0==g[0].length){var x=e.parent();e.detach();var C=d&&d.closest(x).length?d.length:0;if(x.contents().length>C?c=u(x.contents().eq(-1-C),n):(c=u(x,n,!0),C||x.detach()),c&&(h=i(s(c),o),l(c,h),C&&d)){var T=d.parent();t(c).parent().append(d),t.trim(T.html())||T.remove()}}else h=i(g.slice(0,v+1).join(p),o),l(c,h);return!0}function a(t,e){return t.innerHeight()>e.maxHeight}function i(e,n){for(;t.inArray(e.slice(-1),n.lastCharacter.remove)>-1;)e=e.slice(0,-1);return t.inArray(e.slice(-1),n.lastCharacter.noEllipsis)<0&&(e+=n.ellipsis),e}function d(t){return{width:t.innerWidth(),height:t.innerHeight()}}function l(t,e){t.innerText?t.innerText=e:t.nodeValue?t.nodeValue=e:t.textContent&&(t.textContent=e)}function s(t){return t.innerText?t.innerText:t.nodeValue?t.nodeValue:t.textContent?t.textContent:""}function c(t){do t=t.previousSibling;while(t&&1!==t.nodeType&&3!==t.nodeType);return t}function u(e,n,r){var o,a=e&&e[0];if(a){if(!r){if(3===a.nodeType)return a;if(t.trim(e.text()))return u(e.contents().last(),n)}for(o=c(a);!o;){if(e=e.parent(),e.is(n)||!e.length)return!1;o=c(e[0])}if(o)return u(t(o),n)}return!1}function h(e,n){return e?"string"==typeof e?(e=t(e,n),e.length?e:!1):e.jquery?e:!1:!1}function f(t){for(var e=t.innerHeight(),n=["paddingTop","paddingBottom"],r=0,o=n.length;o>r;r++){var a=parseInt(t.css(n[r]),10);isNaN(a)&&(a=0),e-=a}return e}if(!t.fn.dotdotdot){t.fn.dotdotdot=function(e){if(0==this.length)return t.fn.dotdotdot.debug('No element found for "'+this.selector+'".'),this;if(this.length>1)return this.each(function(){t(this).dotdotdot(e)});var o=this,i=o.contents();o.data("dotdotdot")&&o.trigger("destroy.dot"),o.data("dotdotdot-style",o.attr("style")||""),o.css("word-wrap","break-word"),"nowrap"===o.css("white-space")&&o.css("white-space","normal"),o.bind_events=function(){return o.bind("update.dot",function(e,d){switch(o.removeClass("is-truncated"),e.preventDefault(),e.stopPropagation(),typeof l.height){case"number":l.maxHeight=l.height;break;case"function":l.maxHeight=l.height.call(o[0]);break;default:l.maxHeight=f(o)}l.maxHeight+=l.tolerance,"undefined"!=typeof d&&(("string"==typeof d||"nodeType"in d&&1===d.nodeType)&&(d=t("
").append(d).contents()),d instanceof t&&(i=d)),g=o.wrapInner('
').children(),g.contents().detach().end().append(i.clone(!0)).find("br").replaceWith("
").end().css({height:"auto",width:"auto",border:"none",padding:0,margin:0});var c=!1,u=!1;return s.afterElement&&(c=s.afterElement.clone(!0),c.show(),s.afterElement.detach()),a(g,l)&&(u="children"==l.wrap?n(g,l,c):r(g,o,g,l,c)),g.replaceWith(g.contents()),g=null,t.isFunction(l.callback)&&l.callback.call(o[0],u,i),s.isTruncated=u,u}).bind("isTruncated.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(o[0],s.isTruncated),s.isTruncated}).bind("originalContent.dot",function(t,e){return t.preventDefault(),t.stopPropagation(),"function"==typeof e&&e.call(o[0],i),i}).bind("destroy.dot",function(t){t.preventDefault(),t.stopPropagation(),o.unwatch().unbind_events().contents().detach().end().append(i).attr("style",o.data("dotdotdot-style")||"").removeClass("is-truncated").data("dotdotdot",!1)}),o},o.unbind_events=function(){return o.unbind(".dot"),o},o.watch=function(){if(o.unwatch(),"window"==l.watch){var e=t(window),n=e.width(),r=e.height();e.bind("resize.dot"+s.dotId,function(){n==e.width()&&r==e.height()&&l.windowResizeFix||(n=e.width(),r=e.height(),u&&clearInterval(u),u=setTimeout(function(){o.trigger("update.dot")},100))})}else c=d(o),u=setInterval(function(){if(o.is(":visible")){var t=d(o);c.width==t.width&&c.height==t.height||(o.trigger("update.dot"),c=t)}},500);return o},o.unwatch=function(){return t(window).unbind("resize.dot"+s.dotId),u&&clearInterval(u),o};var l=t.extend(!0,{},t.fn.dotdotdot.defaults,e),s={},c={},u=null,g=null;return l.lastCharacter.remove instanceof Array||(l.lastCharacter.remove=t.fn.dotdotdot.defaultArrays.lastCharacter.remove),l.lastCharacter.noEllipsis instanceof Array||(l.lastCharacter.noEllipsis=t.fn.dotdotdot.defaultArrays.lastCharacter.noEllipsis),s.afterElement=h(l.after,o),s.isTruncated=!1,s.dotId=p++,o.data("dotdotdot",!0).bind_events().trigger("update.dot"),l.watch&&o.watch(),o},t.fn.dotdotdot.defaults={ellipsis:"... ",wrap:"word",fallbackToLetter:!0,lastCharacter:{},tolerance:0,callback:null,after:null,height:null,watch:!1,windowResizeFix:!0},t.fn.dotdotdot.defaultArrays={lastCharacter:{remove:[" "," ",",",";",".","!","?"],noEllipsis:[]}},t.fn.dotdotdot.debug=function(t){};var p=1,g=t.fn.html;t.fn.html=function(n){return n!=e&&!t.isFunction(n)&&this.data("dotdotdot")?this.trigger("update",[n]):g.apply(this,arguments)};var v=t.fn.text;t.fn.text=function(n){return n!=e&&!t.isFunction(n)&&this.data("dotdotdot")?(n=t("
").text(n).html(),this.trigger("update",[n])):v.apply(this,arguments)}}}(jQuery),jQuery(document).ready(function(t){t(".dot-ellipsis").each(function(){var e=t(this).hasClass("dot-resize-update"),n=t(this).hasClass("dot-timer-update"),r=0,o=t(this).attr("class").split(/\s+/);t.each(o,function(t,e){var n=e.match(/^dot-height-(\d+)$/);null!==n&&(r=Number(n[1]))});var a=new Object;n&&(a.watch=!0),e&&(a.watch="window"),r>0&&(a.height=r),t(this).dotdotdot(a)})}),jQuery(window).on("load",function(){jQuery(".dot-ellipsis.dot-load-update").trigger("update.dot")}); \ No newline at end of file diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js new file mode 100644 index 00000000..d2bf7fb6 --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js @@ -0,0 +1,39 @@ +/* + * jQuery tinydot 0.1 + * + * Copyright (c) Alexander Danilov + * www.modos189.ru + * + * Plugin repository: + * https://gitlab.com/modos189/tinydot + * + * Licensed under the MIT license. + * http://en.wikipedia.org/wiki/MIT_License + */ + +(function( $, undef ) +{ + if ( $.fn.tinydot ) + { + return; + } + + $.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)*$/, '...'); + }); + } + } +})( 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); + }); + +}); diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js new file mode 100644 index 00000000..32c5799f --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js @@ -0,0 +1 @@ +!function(t,n){t.fn.tinydot||(t.fn.tinydot=function(n){for(var e=t(this).children("a"),i=t(this).height();t(e).outerHeight()>i;)t(e).text(function(t,n){return n.replace(/\W*\s(\S)*$/,"...")})})}(jQuery),jQuery(document).ready(function(t){t(".dot-ellipsis").each(function(){var n=new Object;t(this).tinydot(n)})}); diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig index fa3e6e1d..630cbd66 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig @@ -11,7 +11,7 @@ {% block scripts %} {{ parent() }} - + {% endblock %} -- cgit v1.2.3 From cf967401b0072a0f9408875d16d0a03e60b85e33 Mon Sep 17 00:00:00 2001 From: Christian Studer Date: Wed, 24 Aug 2016 08:22:35 +0200 Subject: Fixes mailto link --- docs/en/user/errors_during_fetching.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/user/errors_during_fetching.rst b/docs/en/user/errors_during_fetching.rst index da6ee745..68892750 100644 --- a/docs/en/user/errors_during_fetching.rst +++ b/docs/en/user/errors_during_fetching.rst @@ -12,7 +12,7 @@ There may be several reasons: How can I help to fix that? --------------------------- -- `by sending us an email with the article's URL `_ +- `by sending us an email with the article's URL `_ - by trying to fix this article by yourself :) by creating a file for the article. You can use `this tool `__. -- cgit v1.2.3 From cdfeea0a96517ec0dfbf0e80066352b6c314ed72 Mon Sep 17 00:00:00 2001 From: Christian Studer Date: Wed, 24 Aug 2016 08:43:17 +0200 Subject: Fixes mailto link in french translation --- docs/fr/user/errors_during_fetching.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/fr/user/errors_during_fetching.rst b/docs/fr/user/errors_during_fetching.rst index 0f26fbc8..74290bef 100644 --- a/docs/fr/user/errors_during_fetching.rst +++ b/docs/fr/user/errors_during_fetching.rst @@ -12,7 +12,7 @@ Il peut y avoir plusieurs raisons : Comment puis-je aider pour réparer ça ? --------------------------------------- -- `en nous envoyant un email avec l'URL de l'article `_ +- `en nous envoyant un email avec l'URL de l'article `_ - en essayant de réparer cet article par vous-même :) en créant un fichier pour l'article. Vous pouvez utiliser `cet outil `__. -- cgit v1.2.3 From cdf405ad8fd7c8656fd1784e8b421d9cd34aef64 Mon Sep 17 00:00:00 2001 From: Christian Studer Date: Wed, 24 Aug 2016 08:43:38 +0200 Subject: Fixes mailto link in german translation --- docs/de/user/errors_during_fetching.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/user/errors_during_fetching.rst b/docs/de/user/errors_during_fetching.rst index b8e3e999..29621559 100644 --- a/docs/de/user/errors_during_fetching.rst +++ b/docs/de/user/errors_during_fetching.rst @@ -12,7 +12,7 @@ Das kann verschiedene Ursachen haben: Wie kann ich helfen das zu beheben? ----------------------------------- -- `indem du uns eine Mail mit der URL des Artikels sendest `_ +- `indem du uns eine Mail mit der URL des Artikels sendest `_ - indem du versuchst das Laden des Artikels durch Erstellen einer Datei für den Artikel selbst zu beheben Du kannst `dieses Tool `__ nutzen. -- cgit v1.2.3 From 18545173a6358805e3b7dde842d77aa3aded4f6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20L=C5=93uillet?= Date: Wed, 24 Aug 2016 08:53:20 +0200 Subject: Add configuration for german documentation --- docs/de/conf.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ docs/de/requirements.txt | 2 ++ 2 files changed, 57 insertions(+) create mode 100644 docs/de/conf.py create mode 100644 docs/de/requirements.txt diff --git a/docs/de/conf.py b/docs/de/conf.py new file mode 100644 index 00000000..8f2d130d --- /dev/null +++ b/docs/de/conf.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# +# wallabag documentation build configuration file, created by +# sphinx-quickstart on Fri Oct 16 06:47:23 2015. + +import sys +import os + +extensions = [] +templates_path = ['_templates'] +source_suffix = '.rst' +master_doc = 'index' +project = u'wallabag-fr' +copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence' +version = '2.0.0' +release = version +exclude_patterns = ['_build'] +pygments_style = 'sphinx' +html_theme = 'default' +html_static_path = ['_static'] +htmlhelp_basename = 'wallabagdedoc' + +latex_elements = { +} + +latex_documents = [ + ('index', 'wallabag-de.tex', u'wallabag Documentation', + u'Nicolas Lœuillet', 'manual'), +] + +man_pages = [ + ('index', 'wallabagde', u'wallabag Documentation', + [u'Nicolas Lœuillet'], 1) +] + +texinfo_documents = [ + ('index', 'wallabag', u'wallabag Documentation', + u'Nicolas Lœuillet', 'wallabag', 'wallabag is an opensource read-it-later.', + 'Miscellaneous'), +] + +##### Guzzle sphinx theme + +import guzzle_sphinx_theme +html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator' +html_theme_path = guzzle_sphinx_theme.html_theme_path() +html_theme = 'guzzle_sphinx_theme' + +# Custom sidebar templates, maps document names to template names. +html_sidebars = { + '**': ['logo-text.html', 'globaltoc.html', 'searchbox.html'] +} + +# Register the theme as an extension to generate a sitemap.xml +extensions.append("guzzle_sphinx_theme") diff --git a/docs/de/requirements.txt b/docs/de/requirements.txt new file mode 100644 index 00000000..06fc8973 --- /dev/null +++ b/docs/de/requirements.txt @@ -0,0 +1,2 @@ +Sphinx>=1.3.0,<1.4.0 +guzzle_sphinx_theme>=0.7.0,<0.8.0 -- cgit v1.2.3 From ddb49dd9311f5874c8681a149eb5ef1aedf4ce0f Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Wed, 24 Aug 2016 10:49:43 +0200 Subject: Allow failure for PHP 7.1 Got tired of `EE/home/travis/build.sh: line 45: 4445 Segmentation fault (core dumped) phpunit -v` using PHP 7.1.0beta3 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 73f9491a..53cf9bb5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,6 +54,7 @@ matrix: env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite allow_failures: - php: hhvm-3.12 + - php: 7.1 - php: nightly # exclude v1 branches -- cgit v1.2.3 From 5aba43d92c6b9fafb589420496737594ca3f3f1f Mon Sep 17 00:00:00 2001 From: Alexandr Danilov Date: Thu, 25 Aug 2016 16:09:55 +0300 Subject: Changes in the login form: * The alignment of the login form centered in WebKit * Indent after the reference password recovery --- src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css | 1 + src/Wallabag/UserBundle/Resources/views/Security/login.html.twig | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css index eb4eebd8..541096be 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css @@ -52,6 +52,7 @@ body { body.login main { padding: 0; + min-height: 100vh; } .border-bottom { diff --git a/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig index 982a33b2..5835330d 100644 --- a/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig @@ -39,7 +39,7 @@
-
+ -- cgit v1.2.3 From 538587855a72be5b49962132b976816295a05ebc Mon Sep 17 00:00:00 2001 From: Alexandr Danilov Date: Thu, 25 Aug 2016 16:22:47 +0300 Subject: A new version of the plugin tinydot with update on window resize --- .../public/themes/material/js/jquery.tinydot.js | 94 ++++++++++++++++++---- .../themes/material/js/jquery.tinydot.min.js | 2 +- .../views/themes/material/Entry/entries.html.twig | 2 +- 3 files changed, 81 insertions(+), 17 deletions(-) diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js index d2bf7fb6..bf9eadef 100644 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.js @@ -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 ) @@ -19,21 +19,85 @@ } $.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(''); + 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); }); - }); diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js index 32c5799f..74754629 100644 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/js/jquery.tinydot.min.js @@ -1 +1 @@ -!function(t,n){t.fn.tinydot||(t.fn.tinydot=function(n){for(var e=t(this).children("a"),i=t(this).height();t(e).outerHeight()>i;)t(e).text(function(t,n){return n.replace(/\W*\s(\S)*$/,"...")})})}(jQuery),jQuery(document).ready(function(t){t(".dot-ellipsis").each(function(){var n=new Object;t(this).tinydot(n)})}); +!function(a,b){function c(b){var c=b.children();if(0==c.length){var d=a(b).html();return b.html(""),b.append(""),b.children("span").html(d)}return c[0]}function d(b){a(b.child).html(b.orgContent),e(b)}function e(b){for(var c=a(b).height();a(b.child).outerHeight()>c;)a(b.child).html(function(a,b){return b.replace(/\W*\s(\S)*$/,"...")})}a.fn.tinydot||(a.fn.tinydot=function(b){var f=this;f.child=c(f),f.orgContent=a(f.child).html(),e(f),f.watch=function(){return a(window).on("resize",function(){h&&clearInterval(h),h=setTimeout(function(){d(f)},100)}),f};var g=a.extend(!0,{},a.fn.tinydot.defaults,b),h=null;g.watch&&f.watch()},a.fn.tinydot.defaults={watch:!1})}(jQuery),jQuery(document).ready(function(a){a(".dot-ellipsis").each(function(){var b=a(this).hasClass("dot-resize-update"),c=new Object;b&&(c.watch="window"),a(this).tinydot(c)})}); diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig index 2110b889..f6941ca5 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig @@ -35,7 +35,7 @@ {% endif %} - {{ entry.title|striptags|raw }} + {{ entry.title|striptags|raw }}
-- cgit v1.2.3 From ceebf13fe8803bd7ac7b64797ce75da82cebc261 Mon Sep 17 00:00:00 2001 From: Alexandr Danilov Date: Fri, 26 Aug 2016 01:13:35 +0300 Subject: Fix issue #1991: correction of the height field to add articles --- src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css index 541096be..9d9ebe12 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css @@ -207,6 +207,10 @@ nav input { display: none; } +.input-field.nav-panel-add, .input-field.nav-panel-add form { + height: 100%; +} + /* ========================================================================== 2 = Side-nav ========================================================================== */ -- cgit v1.2.3 From 985f5f9d05f7ff7e443442b1775923b379c141d6 Mon Sep 17 00:00:00 2001 From: Quent-in Date: Sat, 27 Aug 2016 12:24:18 +0200 Subject: Occitan version Occitan translation, I hope I properly put it where it has to be. If there reminds other textes to translate, please let me know! --- .../UserBundle/Resources/translations/wallabag_user.oc.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/Wallabag/UserBundle/Resources/translations/wallabag_user.oc.yml diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.oc.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.oc.yml new file mode 100644 index 00000000..53a1afd1 --- /dev/null +++ b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.oc.yml @@ -0,0 +1,11 @@ +# Two factor mail +auth_code: + on: 'sus' + mailer: + subject: "Còdi d'autentificacion wallabag" + body: + hello: "Bonjorn %user%," + first_para: "Estant qu'avètz activat la dobla autentificacion sus vòtre compte wallabag e que venètz de vos conectar dempuèi un novèl aparelh (ordinador, mobil, etc.) vos mandem un còdi per validar la connexion." + second_para: "Vaquí lo còdi a dintrar :" + support: "S'avètz un problèma de connexion, dobtetz pas a contacter l'assisténcia : " + signature: "La còla de wallabag" -- cgit v1.2.3