Git Product home page Git Product logo

Comments (11)

tobeycodes avatar tobeycodes commented on July 18, 2024

This works although I'm not sure about the logic. I just quickly did it since I need it for a child theme since some use weight of 600.

get_font() could potentially in some weird way return null or not pass sanitization but getting the font weight will already have run at that point.

from primer.

fjarrett avatar fjarrett commented on July 18, 2024

Yeah I almost implemented this but decided against it since I wasn't sure if there was a use case, sounds like there is!

This approach won't really work because weights need to be tied to individual fonts. I'll think of a way to implement this.

from primer.

tobeycodes avatar tobeycodes commented on July 18, 2024

Well, I thought about doing it to the individual fonts too but it was going to increase the complexity a lot. You'd probably have to do some function like primer_font_weights and you define each weight for each use of the font with a fallback if not defined. That could be a lot to manage... Haha

My solution just assumes the font-weight is defined in the sass and never needs to change. E.g. if you have a medium font weight you have that regardless of what font you use.

from primer.

tobeycodes avatar tobeycodes commented on July 18, 2024

But I do agree on a individual font basis, would be better

from primer.

fjarrett avatar fjarrett commented on July 18, 2024

@schrapel Please test this out. This will allow a Child theme to specify weights on a per-font basis.

Rough example:

add_filter( 'primer_font_weights', function( $weights, $font ) {

    return ( 'Open Sans' === $font ) ? [ 300, 600 ] : $weights;

}, 10, 2 );

from primer.

fjarrett avatar fjarrett commented on July 18, 2024

I just found a flaw in the way fonts are loaded...working on a fix now

from primer.

fjarrett avatar fjarrett commented on July 18, 2024

@schrapel Alright I think this is getting better now. Fonts were being duplicated when used in multiple types. So if you were using Open Sans for all 3 areas, it would appear 3 times in the Google Font URL call!

Also I decided to pass the $font_type to the filter as well. This way a Child theme can decide "I want 700 weight to be available for all Headers" or "Use a 700 weight for Open Sans when used as a Header". And everything will get normalized, and duplicates will be removed, before the final Google Font URL is built. I think this is pretty flexible now.

add_filter( 'primer_font_weights', function( $weights, $font ) {

    return ( 'Open Sans' === $font ) ? [ 300, 600 ] : $weights;

}, 10, 2 );

add_filter( 'primer_font_weights', function( $weights, $font, $font_type ) {

    return ( 'header_font' === $font_type ) ? [ 400, 600, 700 ] : $weights;

}, 10, 3 );

add_filter( 'primer_font_weights', function( $weights, $font, $font_type ) {

    return ( 'Open Sans' === $font && 'header_font' === $font_type ) ? [ 400, 600, 700 ] : $weights;

}, 10, 3 );

from primer.

fjarrett avatar fjarrett commented on July 18, 2024

Merged into develop in ee5cb50

from primer.

tobeycodes avatar tobeycodes commented on July 18, 2024

Awesome, but now if you specify a font weight in this way. You also have to specify the css somehow too?

from primer.

fjarrett avatar fjarrett commented on July 18, 2024

That CSS will just have to be in the child theme and this filter just adds whatever weights the child says it needs. You're right that this doesn't give total control, and maybe we should switch the order of the args in the filter since $font will only be used in rare situations - or by folks overriding their child theme.

Can we move forward with what we have now and think about a more complete font weights API after 1.0?

from primer.

tobeycodes avatar tobeycodes commented on July 18, 2024

from primer.

Related Issues (20)

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.