Jakub Pawlowicz [Fri, 10 Apr 2015 08:31:18 +0000 (09:31 +0100)]
Re-adds `background` merging based on length.
Adds merging `background` shorthand with longhands based on a result
length so it's done only if the result is shorter.
Also adds deep cloning in addition to shallow one.
Jakub Pawlowicz [Wed, 8 Apr 2015 07:26:08 +0000 (08:26 +0100)]
Unifies all stringifying code.
Instead of having 3 of them (simple, source maps, and advanced
optimizations helpers), we have one now with a slightly different
storing logic for source maps.
Jakub Pawlowicz [Mon, 23 Mar 2015 20:36:07 +0000 (20:36 +0000)]
First step towards single tokenization.
* Removes tokenization from all steps in favour to single at the beginning.
* Adds tokenization of properties value by value instead of all in one piece, e.g.
`margin:0px 1px` gets tokenized into `margin`, `0px, and `1px`.
* Full tokenization means more detailed source maps too.
* Reworks override compactor and associated classes to use single tokenization.
* Simplifies override compactor code so it's much easier to understand.
* Adds loads of tests to override compactor and family.
Caveats / in progress:
* Shorthand compactor is turned off.
* Inherit compacting is gone (but will be back).
* Some multivalue background tests are failing.
* There's no way to turn off compacting (possible performance regression).
Jakub Pawlowicz [Tue, 24 Mar 2015 19:41:25 +0000 (19:41 +0000)]
Adds an option to Splitter helper to keep separators.
Jakub Pawlowicz [Sat, 11 Apr 2015 07:32:42 +0000 (08:32 +0100)]
Clarifies where `--source-map-inline-sources` output goes.
See https://github.com/jakubpawlowicz/clean-css/issues/397#issuecomment-
90896687
Jakub Pawlowicz [Wed, 8 Apr 2015 07:33:56 +0000 (08:33 +0100)]
Merge pull request #520 from XhmikosR/patch-3
Update README.md
Jakub Pawlowicz [Wed, 8 Apr 2015 07:32:26 +0000 (08:32 +0100)]
Merge pull request #519 from XhmikosR/patch-2
Update History.md
Jakub Pawlowicz [Wed, 8 Apr 2015 07:31:55 +0000 (08:31 +0100)]
Merge pull request #518 from XhmikosR/patch-1
Update commander to 2.7.x.
XhmikosR [Tue, 7 Apr 2015 07:45:42 +0000 (10:45 +0300)]
Update README.md
XhmikosR [Tue, 7 Apr 2015 07:37:29 +0000 (10:37 +0300)]
Update History.md
XhmikosR [Tue, 7 Apr 2015 07:32:05 +0000 (10:32 +0300)]
Update commander to 2.7.x.
Jakub Pawlowicz [Sat, 4 Apr 2015 08:14:28 +0000 (09:14 +0100)]
Version 3.1.9 release notes.
Jakub Pawlowicz [Sat, 4 Apr 2015 07:18:24 +0000 (08:18 +0100)]
Fixes #511 - calc, parentheses and advanced optimizations.
We're waiting for #429 to have it fixed properly, but here's an
intermediate fix.
Jakub Pawlowicz [Sun, 22 Mar 2015 17:07:02 +0000 (17:07 +0000)]
Adds small improvements to `reduceNonAdjacent` optimizer.
Jakub Pawlowicz [Sun, 22 Mar 2015 16:56:28 +0000 (16:56 +0000)]
Removes empty element removal from `mergeAdjacent`.
After all we do it now in one pass at the end.
Jakub Pawlowicz [Sun, 22 Mar 2015 16:33:13 +0000 (16:33 +0000)]
Speeds up duplication removal in advanced optimizer.
Instead of calculating id from selector and body it uses selector only
and body in a 2nd pass.
Jakub Pawlowicz [Wed, 18 Mar 2015 20:37:01 +0000 (20:37 +0000)]
Reworks tokenizer to operate on arrays.
* Uses arrays instead of hashes.
* Gets rid of cached metadata in favor to live-calculated values.
* Adds `removeEmpty` step in advanced optimizer to improve empty
elements removal.
* Cleans up simple optimizer iteration loop.
* Cleans up source map tracking.
Jakub Pawlowicz [Tue, 17 Mar 2015 20:15:52 +0000 (20:15 +0000)]
Version 3.1.8 release notes.
Jakub Pawlowicz [Tue, 17 Mar 2015 20:13:36 +0000 (20:13 +0000)]
Fixes #499 - too aggressive `-` removal.
So far we don't check if a stripped value is a numerical one so
we should be extra careful about removing such values.
Jakub Pawlowicz [Tue, 17 Mar 2015 19:33:07 +0000 (19:33 +0000)]
Fixes #498 - restructuring content with flexbox properties.
Flexbox is quite tricky as there are many different properties which
can't be reordered. Instead of implementing fine grained rules for all
of them we simply block flexbox from being restructured.
Potentially we should revisit it at some point to find out if restructuring
groups of properties would be a good idea.
Jakub Pawlowicz [Sun, 15 Mar 2015 08:42:15 +0000 (08:42 +0000)]
Fixes #397 - support for source map's sourcesContent property.
When handling input source map it checks whether sourcesContent is present
and if it is so then it's reused in the output source map.
Adds `sourceMapInlineSources` / `--source-map-inline-source` switches to
control whether an inlined source map is created or not.
In case an input source map with a `sourcesContent` field is provided
then all sources from that source map are carried over to the output source map.
Jakub Pawlowicz [Sun, 15 Mar 2015 08:42:47 +0000 (08:42 +0000)]
Fixed remote asset rebasing when passing data as a hash.
Jakub Pawlowicz [Mon, 16 Mar 2015 19:17:53 +0000 (19:17 +0000)]
Version 3.1.7 release notes.
Jakub Pawlowicz [Mon, 16 Mar 2015 18:52:29 +0000 (18:52 +0000)]
Fixes #496 - space after bracket removal inside `calc`.
In case of `) -` and `) +` in `calc` expressions a space should not
be removed at all times.
Jakub Pawlowicz [Sun, 15 Mar 2015 21:08:10 +0000 (21:08 +0000)]
Improves path resolution inside source maps.
Source files referenced inside source maps are no properly rebased
in many scenarios:
* Full resolution for source maps referenced by a path.
* Full resolution for source maps passed to `#minify` inside a hash.
* Full resolution for remote source maps.
* No resolution if path to source map not given.
Jakub Pawlowicz [Sun, 15 Mar 2015 16:47:23 +0000 (16:47 +0000)]
Adds better internal target handling.
`target` option is now resolved inside main module.
Also added `options.explicitTarget` which resolves to true if target
was passed explicitely.
Jakub Pawlowicz [Sun, 15 Mar 2015 16:27:57 +0000 (16:27 +0000)]
Removes absolute path resolver from tokenizer.
Jakub Pawlowicz [Sun, 15 Mar 2015 15:50:01 +0000 (15:50 +0000)]
Changes internal representation of all paths.
Paths has to be either:
* relative to root path if referencing a local file
* absolute for all URLs.
Jakub Pawlowicz [Sun, 15 Mar 2015 15:08:04 +0000 (15:08 +0000)]
Clean ups tests with topics' lazy evaluation.
It is easier to debug tests when all code is lazily evaluated, means
all topics are functions or static values, not calls to objects.
Jakub Pawlowicz [Sun, 15 Mar 2015 14:05:30 +0000 (14:05 +0000)]
Makes `root` option implicitely default to `process.cwd()` unless given.
Jakub Pawlowicz [Thu, 12 Mar 2015 19:15:03 +0000 (19:15 +0000)]
Version 3.1.6 release notes.
Jakub Pawlowicz [Thu, 12 Mar 2015 19:10:40 +0000 (19:10 +0000)]
Fixes #489 - edge case in filter optimizations.
So Chroma and Alpha filters can be shortened if they are not mixed,
but the regexp was too greedy and AlphaImageLoader was matched too.
Jakub Pawlowicz [Sat, 7 Mar 2015 17:36:36 +0000 (17:36 +0000)]
Updates nock dependency to version 1.x.
Jakub Pawlowicz [Sat, 7 Mar 2015 11:33:27 +0000 (11:33 +0000)]
Merge pull request #486 from XhmikosR/patch-2
Update appveyor.yml
Jakub Pawlowicz [Sat, 7 Mar 2015 11:33:18 +0000 (11:33 +0000)]
Merge pull request #485 from XhmikosR/patch-1
Update History.md
XhmikosR [Sat, 7 Mar 2015 11:10:10 +0000 (13:10 +0200)]
Update appveyor.yml
Use `1` for io.js.
XhmikosR [Sat, 7 Mar 2015 11:09:33 +0000 (13:09 +0200)]
Update History.md
[ci skip]
Jakub Pawlowicz [Fri, 6 Mar 2015 21:18:25 +0000 (21:18 +0000)]
Version 3.1.5 release notes.
Jakub Pawlowicz [Fri, 6 Mar 2015 21:16:07 +0000 (21:16 +0000)]
Fixes #483 - property order in restructuring.
This:
```css
a{background-size:100%}
p{background:no-repeat;background-size:100%}
```
cannot be restructured into:
```css
a,p{background-size:100%}
p{background:no-repeat}
```
Jakub Pawlowicz [Thu, 5 Mar 2015 19:38:38 +0000 (19:38 +0000)]
Fixes #376 - compat option to disable 0[unit] -> 0 minifying.
It turns out unit removal messes up with transforms in IE10-12.
Jakub Pawlowicz [Thu, 5 Mar 2015 06:54:40 +0000 (06:54 +0000)]
Fixes #480 - uppercase properties in reordering.
It's an edge case but we should support it nonetheless.
Jakub Pawlowicz [Wed, 4 Mar 2015 08:30:49 +0000 (08:30 +0000)]
Version 3.1.4 release notes.
Jakub Pawlowicz [Wed, 4 Mar 2015 10:10:17 +0000 (10:10 +0000)]
Fixes #472 - broken function minification.
There was a wrong tokenization inside functions (gradient) with
functions (rgb) inside them.
Eduardo Abela [Tue, 3 Mar 2015 15:52:09 +0000 (16:52 +0100)]
Fixes #476 - keep `@import`s on top when restructuring.
It is the same story as with `@charset`s and important comments.
Jakub Pawlowicz [Tue, 3 Mar 2015 22:31:12 +0000 (22:31 +0000)]
Fixes #478 - whitespace after closing brace.
So instead of aiding tokenization on top level we should only alter
body tags with a brace.
It was naive to do it on the top level in the first place :/
Jakub Pawlowicz [Tue, 3 Mar 2015 14:38:32 +0000 (14:38 +0000)]
Points version in master to 3.2.0-pre.
Jakub Pawlowicz [Tue, 3 Mar 2015 13:48:18 +0000 (13:48 +0000)]
Version 3.1.3 release notes.
Jakub Pawlowicz [Mon, 2 Mar 2015 23:38:13 +0000 (23:38 +0000)]
Fixes #464 - handling escaped braces in URLs.
It was properly handled in URL processor but not URL rewriter.
This fix extracts a UrlScanner class with algorithm from URL processor
and reuses it in URL rewriter.
Technically it should be a fix not such a "major" refactor, but bending
the rules shouldn't hurt :-).
Jakub Pawlowicz [Mon, 2 Mar 2015 22:24:17 +0000 (22:24 +0000)]
Fixes #475 - correctly handle whitespace after closing bracket.
There was an issue with `:not(...).class` turned into `:not(...) .class`.
Jakub Pawlowicz [Mon, 2 Mar 2015 07:51:23 +0000 (07:51 +0000)]
Merge pull request #474 from XhmikosR/master
bin/cleancss: use `console.log` instead of `util.puts`.
XhmikosR [Sun, 1 Mar 2015 20:09:31 +0000 (22:09 +0200)]
bin/cleancss: use `console.log` instead of `util.puts`.
Fixes warning with node.js 0.12.
Jakub Pawlowicz [Sun, 1 Mar 2015 18:00:42 +0000 (18:00 +0000)]
Version 3.1.2.
Jakub Pawlowicz [Sun, 1 Mar 2015 17:56:57 +0000 (17:56 +0000)]
Fixes #466 - rebuilding background shorthand.
In case of multi-value shorthands (comma separated) we reuse tokens
instead of cloning when splitting / rebuilding values.
There was an edge case in rebuilding when having more than one
`background` in a rule.
Jakub Pawlowicz [Sun, 1 Mar 2015 16:49:01 +0000 (16:49 +0000)]
Fixes #462 - escaped apostrophes in selector rules.
QuoteScanner were not scanning correctly for escaped apostrophes.
Jakub Pawlowicz [Sun, 1 Mar 2015 09:36:19 +0000 (09:36 +0000)]
Refixes #471 - correct order after restructuring.
Apparently multiple important comments were not factored in.
Jakub Pawlowicz [Sun, 1 Mar 2015 13:22:49 +0000 (13:22 +0000)]
Fixes #396 - better input source maps tracking.
We do it in tokenization step now instead of stringifying. That aids
compatibility as we get raw not processed content.
Jakub Pawlowicz [Sun, 1 Mar 2015 10:46:05 +0000 (10:46 +0000)]
Refactores source map tracking.
On unknown source a `$stdin` value is now used instead of `__stdin__.css`.
Jakub Pawlowicz [Sun, 1 Mar 2015 14:12:09 +0000 (14:12 +0000)]
Merge pull request #473 from XhmikosR/master
Remove extra commas.
XhmikosR [Sun, 1 Mar 2015 13:25:54 +0000 (15:25 +0200)]
Change prepublish script to use the check one instead of duplicating it.
XhmikosR [Sun, 1 Mar 2015 13:22:40 +0000 (15:22 +0200)]
Remove extra commas.
Jakub Pawlowicz [Fri, 27 Feb 2015 19:52:51 +0000 (19:52 +0000)]
Fixes 3.1.0 changelog diff link.
Jakub Pawlowicz [Fri, 27 Feb 2015 19:52:30 +0000 (19:52 +0000)]
Version 3.1.1.
Jakub Pawlowicz [Fri, 27 Feb 2015 19:48:27 +0000 (19:48 +0000)]
Fixes #469 - extracting from broken property.
That should never happen but skip such properties if ever encountered.
Jakub Pawlowicz [Fri, 27 Feb 2015 19:29:08 +0000 (19:29 +0000)]
Fixes #471 - preserves correct order after restructuring.
Restructured content should not end up before important comments or
a charset.
Jakub Pawlowicz [Fri, 27 Feb 2015 09:43:39 +0000 (09:43 +0000)]
Fixes #470 - negative padding.
Basically negative paddings are not allowed by browsers so we should
not merge them into shorthands.
Jakub Pawlowicz [Thu, 26 Feb 2015 08:40:08 +0000 (08:40 +0000)]
Version 3.1.0.
Jakub Pawlowicz [Wed, 25 Feb 2015 22:47:52 +0000 (22:47 +0000)]
Bumps browserify to 9.x.
Jakub Pawlowicz [Wed, 25 Feb 2015 22:35:39 +0000 (22:35 +0000)]
Updates changelog with io.js info.
Jakub Pawlowicz [Wed, 25 Feb 2015 22:24:39 +0000 (22:24 +0000)]
Adds restructuring info to 3.1 changelog.
Jakub Pawlowicz [Wed, 25 Feb 2015 22:19:29 +0000 (22:19 +0000)]
Adds `--skip-restructuring` / `restructuring` switches.
Adds a CLI & API switches to turn off restructuring, which is on
by default.
Jakub Pawlowicz [Wed, 25 Feb 2015 20:39:01 +0000 (20:39 +0000)]
Improves property reordering.
* Extracts extracting and 'canReorder' into modules.
* Adds better property extracting so more properties can be reordered correctly.
* Fixes joined data ordering.
Jakub Pawlowicz [Wed, 25 Feb 2015 20:35:31 +0000 (20:35 +0000)]
Reworks same-selector merging to run both ways.
This way it can optimize more use cases as content may not be
movable one way but it could be other way, e.g.:
```css
a{color:red}
p{display:block}
a{display:inline-block}
```
In this case the third selector can't be moved and merged with the
first one, but it can be done the other way around.
Jakub Pawlowicz [Sun, 22 Feb 2015 21:54:36 +0000 (21:54 +0000)]
Improves reordering by trying multiple fits.
Tries to find the best possible option of token re-arrangements, which
at the same time solves issue with reordering more than one selector at
a time.
Instead of comparing pre- and post-reordering size it tries subsets
of selectors too (one level deep) for possible better options.
Jakub Pawlowicz [Sun, 22 Feb 2015 14:33:29 +0000 (14:33 +0000)]
Adds smarter reordering rules.
We can reorder two properties if one them is shorthand and the other
is granular but they have the same value.
Note: it may be improved even further with #429 in place. At that time
we may compare exact values, e.g. `margin:0 1px` is currently not
swappable with `margin-top:0` but it should.
Jakub Pawlowicz [Sun, 22 Feb 2015 12:52:34 +0000 (12:52 +0000)]
Improves restructuring optimizations.
We were not using restructuring optimizer fully, because every property that
was previously encountered, was not reused again, see `optimizer-test.js`
for a use case.
Jakub Pawlowicz [Sun, 22 Feb 2015 11:36:38 +0000 (11:36 +0000)]
Speeds up restructuring.
We don't need to do a full selector cleanup, just remove repetitions
and remap.
Jakub Pawlowicz [Sun, 22 Feb 2015 10:53:37 +0000 (10:53 +0000)]
Speeds up advanced optimizations.
There's no need to rerun duplicate removal and merging adjacent
optimizers since we have smart reordering in place.
Jakub Pawlowicz [Sun, 22 Feb 2015 09:19:15 +0000 (09:19 +0000)]
Disables restructuring inside @keyframes.
It's forbidden by the spec, see "Duplicate resolution" on
https://developer.mozilla.org/en-US/docs/Web/CSS/@keyframes
Jakub Pawlowicz [Mon, 5 Jan 2015 23:20:27 +0000 (23:20 +0000)]
Adds smart selector restructuring.
The algorithm traverses tokens list backwards, picking up any properties
on its way. If a property already exists and has the same value, it adds
the current token to the list of matching that property, otherwise one
of two things happens:
* The property is dropped from the list if there's been only one token
associated with it.
* It tries to move properties around if it results in a shorter content.
Jakub Pawlowicz [Fri, 20 Feb 2015 21:04:37 +0000 (21:04 +0000)]
Uses root directory for temp data.
Jakub Pawlowicz [Fri, 20 Feb 2015 20:50:41 +0000 (20:50 +0000)]
Fixes networking tests.
Adds 'server-destroy' which helps with closing server sockets.
Also ensures that inliner reports one error only for a resource.
Jakub Pawlowicz [Tue, 17 Feb 2015 19:50:24 +0000 (19:50 +0000)]
Updates History.md with #463 info.
Siguršur Gušbrandsson [Mon, 16 Feb 2015 21:35:19 +0000 (21:35 +0000)]
Fixes #463 - relative remote @import URLs.
Testcase:
cleancss -d --root http://jeffwalker.com/wp-content/themes/salient-child/ http://jeffwalker.com/wp-content/themes/salient-child/style.css?ver=4.1.1
Jakub Pawlowicz [Mon, 16 Feb 2015 09:13:26 +0000 (09:13 +0000)]
Merge pull request #461 from XhmikosR/ci
Update CI configs
XhmikosR [Mon, 16 Feb 2015 07:10:31 +0000 (09:10 +0200)]
AppVeyor: clear cache when package.json changes.
XhmikosR [Mon, 16 Feb 2015 07:10:18 +0000 (09:10 +0200)]
Travis CI: Add io.js and fast finish.
Jakub Pawlowicz [Sun, 15 Feb 2015 21:26:31 +0000 (21:26 +0000)]
Tweaks source maps tests to allow Windows tests to pass.
Jakub Pawlowicz [Sun, 15 Feb 2015 21:04:42 +0000 (21:04 +0000)]
Merge pull request #458 from XhmikosR/appveyor
Add AppVeyor for Windows tests.
XhmikosR [Sat, 7 Feb 2015 13:04:47 +0000 (15:04 +0200)]
Add AppVeyor for Windows tests.
Jakub Pawlowicz [Wed, 11 Feb 2015 09:15:17 +0000 (09:15 +0000)]
Clean up in History.md.
* Old repo name sneaked in.
* Pre-release diff should point to `HEAD` instead of a missing tag.
Jakub Pawlowicz [Wed, 11 Feb 2015 09:13:16 +0000 (09:13 +0000)]
Updates changelog with node.js 0.12 info.
Jakub Pawlowicz [Tue, 10 Feb 2015 20:47:48 +0000 (20:47 +0000)]
Enables 'by selector' advanced merging over media.
It works already for merging media blocks, so it's just a matter
of enabling it for 'by selector' merging.
Jakub Pawlowicz [Tue, 10 Feb 2015 07:55:19 +0000 (07:55 +0000)]
Adds a way to switch off `@media` merging.
* In API mode, set `mediaMerging` option to false.
* In CLI mode, add `--skip-media-merging` switch.
Jakub Pawlowicz [Tue, 10 Feb 2015 07:31:00 +0000 (07:31 +0000)]
Improves selector traversal in advanced merging.
Selectors can be reordered if one of the following rules regarding
any pair of its properties is met:
* Property name root (`font` in `font-size`) is different, e.g.
`margin:0` <-> `color:red`
* Property name root, name, and value are the same, e.g.
`color:red` <-> `color:red`
`margin-top:0` <-> `margin-top:0`
* Property name root is the same, names are different, and any name
is not root, e.g
`margin-top:0` <-> `margin-bottom:10px`
Jakub Pawlowicz [Sun, 8 Feb 2015 11:42:42 +0000 (11:42 +0000)]
Simplifies selector traversal in advanced merging.
Unifies selector traversal from `@media` merge algorithm and one
merging selectors with same name.
Effectively solves `@media` merging issue when traversed property
can be a shorthand.
Jakub Pawlowicz [Sun, 8 Feb 2015 11:00:40 +0000 (11:00 +0000)]
Fixes an edge case in merging non-adjacent selectors by name.
Jakub Pawlowicz [Sat, 7 Feb 2015 19:45:37 +0000 (19:45 +0000)]
Fixes #204 - media query merging.
It adds media query merging with the following set of rules:
* adjacent media with same conditions can be merged;
* non-adjacent media with same conditions can be merged only if
any of moved properties is not redefined in-between, or a
property is redefined with the exactly same value.
Jakub Pawlowicz [Tue, 10 Feb 2015 15:51:08 +0000 (15:51 +0000)]
Fixes tokenization regression issue.
Introduced in
a9c75d34.
Jakub Pawlowicz [Tue, 10 Feb 2015 09:09:37 +0000 (09:09 +0000)]
Merge pull request #456 from XhmikosR/travis
Travis: test node.js 0.12 too.
XhmikosR [Sat, 7 Feb 2015 10:17:13 +0000 (12:17 +0200)]
Travis: test node.js 0.12 too.