Giter Site home page Giter Site logo

celiolatorraca / autoprefixer-tv Goto Github PK

View Code? Open in Web Editor NEW
11.0 2.0 3.0 30 KB

PostCSS plugin to split only duplicated prefixed property declarations into multiple rules.

License: MIT License

JavaScript 81.60% CSS 18.40%
postcss postcss-plugin react-tv webos

autoprefixer-tv's Introduction

PostCSS Autoprefixer Tv Build Status

PostCSS plugin to split only duplicated prefixed property declarations into multiple rules.

Why should I use this plugin?

Some of the TV manufacturers use custom webkit distributions as the engine in their applications.

Especially the WebOS TVs. The webpack distribution they use has a bug that invalidates the overwriting declarations in a same CSS definition.

So, as you can see in the example below, the property display: flex invalidates the previous one (display: -webkit-flex) which is accepted by this distribution.

This is an example of the splitting this plugin is intended to do:

Before:

.foo {
    display: -webkit-flex;
    display: flex;
    color: red;
    height: 50px;
    height: 100px;
}

After:

.foo {
    display: -webkit-flex;
}

.foo {
    display: flex;
    color: red;
    height: 50px;
    height: 100px;
}

Usage

postcss([ require('autoprefixer-tv') ])

You can use this plugin separately, but it is well integrated with Autoprefixer plugin. You just need to require it after the autoprefixer postcss plugin.

postcss([ require('autoprefixer'), require('autoprefixer-tv') ])

autoprefixer-tv's People

Contributors

celiolatorraca avatar wmartins avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

autoprefixer-tv's Issues

Plugins fails for multiple prefixed rules

cc @andrejr

While trying to use this plugin with multiple prefix rules, it fails for some scenarios with multiple -PREFIX-property rules. As details below.

Two prefixed styles

input.css

.example{
    font-size:-webkit-calc((10vw + 10px));
    font-size:calc((10vw + 10px));
    line-height:-webkit-calc(20vw + 20px);
    line-height:calc(20vw + 20px);
}

Expected

.example{
    font-size:-webkit-calc((10vw + 10px));
}
.example{
    line-height:-webkit-calc(20vw + 20px);
}
.example{
    font-size:calc((10vw + 10px));
    line-height:calc(20vw + 20px);
}

Current output

Note the comments to see the difference

.example{
    font-size:-webkit-calc((10vw + 10px));
}
.example{
    line-height:calc(20vw + 20px); /* This should be prefixed */
}
.example{
    font-size:calc((10vw + 10px));
    line-height:-webkit-calc(20vw + 20px); /* This should not be prefixed */
}

Three prefixed styles

input.css

.example{
    font-size:-webkit-calc((10vw + 10px));
    font-size:calc((10vw + 10px));
    line-height:-webkit-calc(20vw + 20px);
    line-height:calc(20vw + 20px);
    max-height:-webkit-calc(30vw + 30px);
    max-height:calc(30vw + 30px);
}

Expected

.example{
    font-size:-webkit-calc((10vw + 10px));
}
.example{
    line-height:-webkit-calc(20vw + 20px);
}
.example{
    max-height:-webkit-calc(30vw + 30px);
}
.example{
    font-size:calc((10vw + 10px));
    line-height:calc(20vw + 20px);
    max-height:calc(30vw + 30px);
}

Current output

Fails with:

TypeError: Cannot read property 'prop' of undefined

Error details
TypeError: Cannot read property 'prop' of undefined

    at duplicatedProps.forEach.duplicatedProp (index.js:49:43)
        at Array.forEach (<anonymous>)
    at css.walkRules.rule (index.js:37:25)
    at node_modules/postcss/lib/container.js:237:28
    at node_modules/postcss/lib/container.js:144:26
    at Root.each (node_modules/postcss/lib/container.js:110:22)
    at Root.walk (node_modules/postcss/lib/container.js:143:21)
    at Root.walkRules (node_modules/postcss/lib/container.js:235:25)
    at css (index.js:32:9)
    at LazyResult.run (node_modules/postcss/lib/lazy-result.js:277:20)
    at LazyResult.asyncTick (node_modules/postcss/lib/lazy-result.js:192:32)
    at processing.Promise.then._this2.processed (node_modules/postcss/lib/lazy-result.js:231:20)
        at new Promise (<anonymous>)
    at LazyResult.async (node_modules/postcss/lib/lazy-result.js:228:27)
    at LazyResult.then (node_modules/postcss/lib/lazy-result.js:134:21)
    at run (tests/index.test.js:9:1)
    at Object.it.only (tests/index.test.js:44:16)
        at new Promise (<anonymous>)
    at Promise.resolve.then.el (node_modules/p-map/index.js:46:16)
        at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.