Jakub Pawlowicz [Sun, 12 Apr 2015 11:24:27 +0000 (12:24 +0100)]
Updates history with info about #429.
Jakub Pawlowicz [Sun, 12 Apr 2015 11:16:42 +0000 (12:16 +0100)]
No shorthand compacting for less than 3 properties.
There is no shorthand for 2 properties so there is no way it may
shorten the content.
It speeds up processing by ~5%.
Jakub Pawlowicz [Sun, 12 Apr 2015 11:06:57 +0000 (12:06 +0100)]
Fixes overriding shorthands by shorthands.
Previously a more understandable value could not override less
understandable one, e.g. function was not overridden by a unit or a color.
Jakub Pawlowicz [Sun, 12 Apr 2015 10:40:05 +0000 (11:40 +0100)]
Fixes non-shorthand overriding.
So far it's limited to colors, transforms, and all longhands.
Jakub Pawlowicz [Sun, 12 Apr 2015 10:23:15 +0000 (11:23 +0100)]
Fixes an edge case in shorthand merging.
There was an issue with understandability when merging two shorthand
properties if one is a component of another.
Jakub Pawlowicz [Sun, 12 Apr 2015 09:49:26 +0000 (10:49 +0100)]
Readds shorthand compacting.
Basically tries to compact longhands into shorthands if possible,
caring about number of components and their understandability.
It DOES NOT re-add `!important`-based compacting which was previously
available because:
* it's logic is flawed in global context, when introduced important
property may override properties appearing later on;
* it's very uncommon to occur.
Jakub Pawlowicz [Sat, 11 Apr 2015 20:57:53 +0000 (21:57 +0100)]
Reworks multiplex components.
So far values were handled like: `[[['repeat']], [['repeat']]]` which
were incompatible with same properties but not components.
From now on it's the same for both, e.g. `[['repeat'], [','], ['repeat']]`.
Jakub Pawlowicz [Sat, 11 Apr 2015 09:14:33 +0000 (10:14 +0100)]
Restores compatibility in validator.
Fixes validator with proper OO as we need to handle state there to
keep a list of compatible units.
Jakub Pawlowicz [Fri, 10 Apr 2015 19:24:26 +0000 (20:24 +0100)]
Restores warnings on invalid properties.
Jakub Pawlowicz [Fri, 10 Apr 2015 19:08:08 +0000 (20:08 +0100)]
Fixes #500 - merging duplicate adjacent properties.
If values are same then there's no point keeping them as is.
Jakub Pawlowicz [Fri, 10 Apr 2015 18:47:27 +0000 (19:47 +0100)]
Readds a switch to disable compacting.
Fixes couple issues with invalid output and also removes performance
regression when doing advanced merging.
Jakub Pawlowicz [Fri, 10 Apr 2015 09:42:55 +0000 (10:42 +0100)]
Fixes restoring `background-color` in layered `background`.
Only the last layer can have a color set.
Jakub Pawlowicz [Fri, 10 Apr 2015 09:28:30 +0000 (10:28 +0100)]
Adds more override specs.
Jakub Pawlowicz [Fri, 10 Apr 2015 09:11:09 +0000 (10:11 +0100)]
Re-adds shorthand-shorthand merging for `border`.
`border` is a special case as any of its components are shorthands too.
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.