From: Jakub Pawlowicz Date: Sun, 1 Jan 2017 11:45:33 +0000 (+0100) Subject: Fixes a bug ignoring incorrect properties in complex restructuring. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=5d0597c31f53dcdcd44ab03e8c459c5e48ce59a0;p=clean-css.git Fixes a bug ignoring incorrect properties in complex restructuring. Why: * Apparently there was a wrong value returned from sorting callback which only manifested in complex stylesheets being restructured. --- diff --git a/History.md b/History.md index 3c846c7f..1a30cf62 100644 --- a/History.md +++ b/History.md @@ -2,6 +2,7 @@ ================== * Adds more detailed error & warning messages on top of the new tokenizer. +* Fixes a bug ignoring incorrect properties in complex restructuring. * Requires Node.js 4.0+ to run. * Removes `debug` API switch as stats are always gathered and available under `stats` property. * Replaces the old tokenizer with a new one which doesn't use any escaping. diff --git a/lib/optimizer/restructure.js b/lib/optimizer/restructure.js index b01d41f8..ba6cb4ac 100644 --- a/lib/optimizer/restructure.js +++ b/lib/optimizer/restructure.js @@ -9,7 +9,7 @@ var cloneArray = require('../utils/clone-array'); var Token = require('../tokenizer/token'); function naturalSorter(a, b) { - return a > b; + return a > b ? 1 : -1; } function cloneAndMergeSelectors(propertyA, propertyB) { diff --git a/test/fixtures/big-min.css b/test/fixtures/big-min.css index 65865f3a..b66d638c 100644 --- a/test/fixtures/big-min.css +++ b/test/fixtures/big-min.css @@ -1,6 +1,5 @@ /*! normalize.css 2012-01-31T16:06 UTC - http://github.com/necolas/normalize.css */ .bt_abo:hover,a{text-decoration:none} -.bt_fonce a,.btn,.btn_abo,.btn_fonce,.btn_petit{filter:progid:dximagetransform.microsoft.gradient(enabled=false)} article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block} audio,canvas,video{display:inline-block} [hidden],audio:not([controls]){display:none} @@ -82,7 +81,7 @@ table{border-spacing:0;border-collapse:collapse} .ie .txt13_120,.ie .txt13_140{font-size:13px} .txt12{font-size:1.2rem} .txt11{font-size:1.1rem} -.btn_petit,.ie .txt11{font-size:11px} +.ie .txt11{font-size:11px} .txt10{font-size:1rem} .ie .txt10{font-size:10px} .container_18{margin:0 13px;width:974px} @@ -214,6 +213,7 @@ section article{margin:0 0 16px} .type_element{white-space:nowrap} .nature_edito{font-weight:400;font-size:16px;font-family:FetteEngschrift,'Arial Narrow',sans-serif} .bloc_bg_gris2{background:#f8f9fb;padding:8px 16px} +.bt_fonce a,.btn,.btn_abo,.btn_fonce,.btn_petit{background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(enabled=false)} .mgl5{margin-left:5px} .mgr5{margin-right:5px} .mgb5{margin-bottom:5px} @@ -255,11 +255,11 @@ section article{margin:0 0 16px} .bloc_abo{border-top:3px solid #ffd500} img[width="312"],img[width="642"]{margin-bottom:6px} img[width="202"]{margin-bottom:4px} -.btn,.btn_abo,.btn_fonce,.btn_petit{display:inline-block;padding:4px 10px;margin-bottom:0;color:#000b15;text-align:center;font-weight:700;vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-ms-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);cursor:pointer} -.bt_fonce a,.btn_fonce{color:#fff;background-color:#000b15;background-image:-moz-linear-gradient(top,#5d666d,#000b15);background-image:-ms-linear-gradient(top,#5d666d,#000b15);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5d666d),to(#000b15));background-image:-webkit-linear-gradient(top,#5d666d,#000b15);background-image:-o-linear-gradient(top,#5d666d,#000b15);background-image:linear-gradient(top,#5d666d,#000b15);background-repeat:repeat-x;border-color:#000b15;border-color:rgba(0,0,0,.1)} -.btn_abo{color:#000b15;background-color:#ffc600;background-image:-moz-linear-gradient(top,#ffe562,#ffc600);background-image:-ms-linear-gradient(top,#ffe562,#ffc600);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffe562),to(#ffc600));background-image:-webkit-linear-gradient(top,#ffe562,#ffc600);background-image:-o-linear-gradient(top,#ffe562,#ffc600);background-image:linear-gradient(top,#ffe562,#ffc600);background-repeat:repeat-x;border-color:#ffc600;border-color:rgba(0,0,0,.1)} +.btn,.btn_abo,.btn_fonce,.btn_petit{display:inline-block;padding:4px 10px;margin-bottom:0;color:#000b15;text-align:center;font-weight:700;vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-ms-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(top,#fff,#e6e6e6);border:1px solid #ccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);cursor:pointer} +.bt_fonce a,.btn_fonce{color:#fff;background-color:#000b15;background-image:-moz-linear-gradient(top,#5d666d,#000b15);background-image:-ms-linear-gradient(top,#5d666d,#000b15);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5d666d),to(#000b15));background-image:-webkit-linear-gradient(top,#5d666d,#000b15);background-image:-o-linear-gradient(top,#5d666d,#000b15);background-image:linear-gradient(top,#5d666d,#000b15);border-color:#000b15;border-color:rgba(0,0,0,.1)} +.btn_abo{color:#000b15;background-color:#ffc600;background-image:-moz-linear-gradient(top,#ffe562,#ffc600);background-image:-ms-linear-gradient(top,#ffe562,#ffc600);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffe562),to(#ffc600));background-image:-webkit-linear-gradient(top,#ffe562,#ffc600);background-image:-o-linear-gradient(top,#ffe562,#ffc600);background-image:linear-gradient(top,#ffe562,#ffc600);border-color:#ffc600;border-color:rgba(0,0,0,.1)} .btn.large{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box} -.btn_petit{padding:2px 4px;line-height:16px} +.btn_petit{padding:2px 4px;font-size:11px;line-height:16px} .btn:hover,.btn_abo:hover,.btn_fonce:hover,.btn_petit:hover{text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-ms-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear} .btn:hover,.btn_petit:hover{color:#2e3942;background-color:#e6e6e6} .btn.active,.btn.disabled,.btn.disabled:hover,.btn:active,.btn[disabled],.btn_petit.active,.btn_petit:active,.btn_petit[disabled],input[type=submit].disabled{background-color:#e6e6e6;color:#d2d6db} @@ -716,12 +716,11 @@ img[height="97"]+.ico29x29{bottom:6%;left:3.5%} #footer .description{color:#a2a9ae;padding:3px 13px;line-height:120%} #header_facebook,#header_google,#header_twitter{position:relative} .conteneur_popinbox{position:absolute;z-index:10;top:20px;left:-145px;padding:11px 0 0;-webkit-box-shadow:-1px 4px 3px -2px rgba(0,11,21,.5);-moz-box-shadow:-1px 4px 3px -2px rgba(0,11,21,.5);box-shadow:-1px 4px 3px -2px rgba(0,11,21,.5);background:url(/medias/web/img/habillage/lightbox_sociaux_coche.png) center top no-repeat;display:none} -#barre_titre,#header,#nav,#surheader .services li,.carrousel,.carrousel .elt,.conteneur_carrousel,.position_pub{position:relative} -#header,.position_pub:hover{z-index:3} .popinbox{padding:10px;background:#fff;overflow:visible} .sociaux .popinbox{width:292px;text-indent:0} #header_facebook_contenu{position:relative;height:258px} -.position_pub{line-height:0} +.position_pub{position:relative;line-height:0} +.position_pub:hover{z-index:3} .position_pub.bottom2{width:1000px;margin:0 auto;text-align:center} .position_pub.bottom2.filled{margin:16px auto} .position_pub.top{width:1000px;min-height:16px;margin:0 auto} @@ -732,9 +731,9 @@ img[height="97"]+.ico29x29{bottom:6%;left:3.5%} .col_droite .position_pub.filled.noborder{background:0 0;padding:0} .conteneur_ligatus{margin:25px 0} .conteneur_ligatus *{vertical-align:bottom} -.conteneur_carrousel{overflow:hidden;height:321px} -.carrousel{width:6000px} -.carrousel .elt{width:644px;float:left} +.conteneur_carrousel{position:relative;overflow:hidden;height:321px} +.carrousel{width:6000px;position:relative} +.carrousel .elt{width:644px;float:left;position:relative} .conteneur_carrousel .navigation{text-align:center;clear:both;-webkit-user-select:none} .conteneur_carrousel .navigation .precedent,.conteneur_carrousel .navigation .precedent span,.conteneur_carrousel .navigation .repere,.conteneur_carrousel .navigation .reperes,.conteneur_carrousel .navigation .suivant,.conteneur_carrousel .navigation .suivant span{display:inline-block;vertical-align:middle} .conteneur_carrousel .navigation .reperes{display:inline;background:0 0} @@ -759,7 +758,8 @@ img[height="97"]+.ico29x29{bottom:6%;left:3.5%} .portfolio_appel_revolutionnaire.conteneur_carrousel .navigation .precedent:hover span,.portfolio_appel_revolutionnaire.conteneur_carrousel .navigation .suivant:hover span{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";opacity:.9;color:#222} .portfolio_appel_revolutionnaire.conteneur_carrousel .navigation .suivant{left:auto;right:0} .portfolio_appel_revolutionnaire a .legende.bg_fonce{color:#fff} -#header{font-size:12px;text-align:left} +#barre_titre,#header,#nav{position:relative} +#header{z-index:3;font-size:12px;text-align:left} #barre-titre{z-index:2} #nav{z-index:1} #header a{display:inline-block} @@ -776,7 +776,7 @@ img[height="97"]+.ico29x29{bottom:6%;left:3.5%} #surheader .droit .services:hover{background:#fff} #surheader .droit .services>li>.obf{padding:0 10px;height:24px;line-height:24px} #surheader .droit .services:hover a{color:#000b15} -#surheader .services li{line-height:25px} +#surheader .services li{position:relative;line-height:25px} #surheader .services div{display:none;position:absolute;right:0;top:25px;-webkit-box-shadow:0 2px 4px rgba(0,11,21,.5);-moz-box-shadow:0 2px 4px rgba(0,11,21,.5);box-shadow:0 2px 4px rgba(0,11,21,.5);width:340px;z-index:10;background:#fff} #surheader .services.droite div{right:auto;left:0} #surheader .services li:hover div{display:block} diff --git a/test/fixtures/blueprint-min.css b/test/fixtures/blueprint-min.css index 75e6de3c..5e54c441 100644 --- a/test/fixtures/blueprint-min.css +++ b/test/fixtures/blueprint-min.css @@ -1,3 +1,4 @@ +h1,h3{line-height:1} h1 img,h2 img,h3 img,h4 img,h5 img,h6 img,html{margin:0} .pull-1,.pull-10,.pull-11,.pull-12,.pull-13,.pull-14,.pull-15,.pull-16,.pull-17,.pull-18,.pull-19,.pull-2,.pull-20,.pull-21,.pull-22,.pull-23,.pull-24,.pull-3,.pull-4,.pull-5,.pull-6,.pull-7,.pull-8,.pull-9,.push-1,.push-10,.push-11,.push-12,.push-13,.push-14,.push-15,.push-16,.push-17,.push-18,.push-19,.push-2,.push-20,.push-21,.push-22,.push-23,.push-24,.push-3,.push-4,.push-5,.push-6,.push-7,.push-8,.push-9{position:relative;float:left} .clear,hr{clear:both} @@ -13,9 +14,9 @@ a img{border:none} html{padding:0;border:0;font-size:100.01%} body{line-height:1.5;font-size:75%;color:#222;background:#fff;font-family:"Helvetica Neue",Arial,Helvetica,sans-serif} h1,h2,h3,h4,h5,h6{font-weight:400;color:#111} -h1{font-size:3em;line-height:1;margin-bottom:.5em} +h1{font-size:3em;margin-bottom:.5em} h2{font-size:2em;margin-bottom:.75em} -h3{font-size:1.5em;line-height:1;margin-bottom:1em} +h3{font-size:1.5em;margin-bottom:1em} h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em} h5,h6{font-size:1em;font-weight:700} h5{margin-bottom:1.5em} diff --git a/test/fixtures/bootstrap-min.css b/test/fixtures/bootstrap-min.css index 769b82bd..5eff1908 100644 --- a/test/fixtures/bootstrap-min.css +++ b/test/fixtures/bootstrap-min.css @@ -1,6 +1,5 @@ hr,img{border:0} body,figure{margin:0} -.btn-group>.btn-group,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left} .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px} html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%} article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block} @@ -424,6 +423,7 @@ pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-r } .row{margin-right:-15px;margin-left:-15px} .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px} +.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left} .col-xs-12{width:100%} .col-xs-11{width:91.66666667%} .col-xs-10{width:83.33333333%} @@ -651,6 +651,7 @@ caption{padding-top:8px;padding-bottom:8px;color:#777} .table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5} table col[class*=col-]{position:static;display:table-column;float:none} table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none} +.btn-group>.btn-group,.btn-toolbar .btn-group,.btn-toolbar .input-group,.dropdown-menu{float:left} .table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8} .table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8} .table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6} @@ -754,6 +755,7 @@ select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-contro .form-inline .has-feedback .form-control-feedback{top:0} .form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right} } +.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%} .form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0} .form-horizontal .checkbox,.form-horizontal .radio{min-height:27px} .form-horizontal .form-group{margin-right:-15px;margin-left:-15px} @@ -800,9 +802,8 @@ select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-contro .btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} .btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} .btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px} -.btn-block{display:block;width:100%} +.btn-block{display:block} .btn-block+.btn-block{margin-top:5px} -input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%} .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear} .fade.in{opacity:1} .collapse{display:none;visibility:hidden}