npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

angular-width-query

v0.1.3

Published

Applies HTML classes to elements based upon an element's width.

Downloads

80

Readme

AngularWidthQuery

AngularWidthQuery is a set of directives which applies HTML classes to elements based upon a container element's width.

It was created to support the fluid layout of a container's elements as its width changed due to the opening and closing of other panels in the UI.

It replaces the need for CSS media queries in situations where the container element's width determines the layout, rather than the screen width.

Table of Contents

Features

  • Less than 4K minified.
  • CSS transition and animation aware.
  • Customizable directive names.
  • Compatible with CommonJS, AMD, and non-module build environments.

Installation

To install the package:

npm install angular-width-query

To require the package:

var widthQueryDirective = require("angular-width-query");

Example

The easiest way to understand AngularWidthQuery is to walk through a quick example of creating a fluid layout consisting of 6 equally sized sections. At small width, the sections are stacked. At medium width, the sections are arranged in two columns. At large width, the sections are arranged in three columns.

1. Add the Directives

First, add the directives from AngularWidthQuery to an Angular module.

widthQueryDirective('app');

2. Create the HTML Structure

Next, create the HTML structure for the container and the 6 sections.

<div width-query="container">
    <div width-query-class="section">Section 1</div>
    <div width-query-class="section">Section 2</div>
    <div width-query-class="section">Section 3</div>
    <div width-query-class="section">Section 4</div>
    <div width-query-class="section">Section 5</div>
    <div width-query-class="section">Section 6</div>
</div>

The values passed to the directives are the base HTML classes that will be initially added to the elements.

Based upon the current container element width, classes are dynamically added to the elements to reflect the current width. For example, "container-small" and "section-small" will be added to their respective elements when the width of the container element is considered to be small.

The width ranges and class modifiers are fully customizable. See the Usage section below for details.

3. Create the CSS

Lastly, create the CSS rules.

.container {
    box-sizing: border-box;
    font-size: 0;
}

.section {
    border: 1px solid #c0c0c0;
    box-sizing: border-box;
    display: inline-block;
    font-size: 1rem;
    height: 300px;
}

.section-large {
    width: 33.33%;
}

.section-medium {
    width: 50%;
}

.section-small {
    width: 100%;
}

That's it. You're done.

Usage

Factory Method

The widthQueryDirective() factory method adds the AngularWidthQuery directives to an Angular module.

To add the directives, call widthQueryDirective() with the name of the Angular module, and any options:

widthQueryDirective('app', {
    directiveNames: {
        widthQuery: <string>,
        widthQueryClass: <string>
    },
    modifiers: [
        [<string>, <number>, <number>],
        ...
    ],
    pollingInterval: <milliseconds>
});

'directiveNames' option

This option allows the names of the widthQuery and widthQueryClass directives to be changed to suit your needs.

widthQueryDirective('app', {
    directiveNames: {
        widthQuery: 'myWidthQuery',
        widthQueryClass: 'myWidthQueryClass'
    }
});

'modifiers' option

This option allows you to specify the class modifiers that can be added to the base HTML class.

Each item in the array is an array consisting of the class modifier, the lower width range, and the upper width range.

widthQueryDirective('app', {
    modifiers: [
        ['small', 0, 767],
        ['medium', 768, 1023],
        ['large', 1024, 100000]
    ]
});

'pollingInterval' option

This option allows you to specify the interval at which the directive polls the element's width. The directive begins polling the element's width when a window resize event or Angular digest event occurs. When the width stops changing, the polling stops.

widthQueryDirective('app', {
    pollingInterval: 100
});

If you have no animations or transitions, you can set this to 0.

WidthQuery Directive

The widthQuery directive updates the element's HTML class based upon the element's width.

<div width-query="container">
    ...
</div>

The widthQuery directive can be passed the base HTML class, or a set of options. These options override the options passed to the factory method.

<div width-query="{
    class: 'container',
    modifiers: [
        ['small', 0, 399],
        ['medium', 400, 1279],
        ['large', 1280, 100000]
    ],
    pollingInterval: 100,
    widthPollingListener: 'ctrl.widthChanged(width)',
    widthListener: 'ctrl.widthChanged(width)'
}">...</div>

'class' option

This option specifies the base HTML class to initially add to the element.

<div width-query="{
    class: 'container'
}">...</div>

'modifiers' option

This option allows you to specify the class modifiers that can be added to the base HTML class.

Each item in the array is an array consisting of the class modifier, the lower width range, and the upper width range.

<div width-query="{
    modifiers: [
        ['small', 0, 767],
        ['medium', 768, 1023],
        ['large', 1024, 100000]
    ]
}">...</div>

'pollingInterval' option

This option allows you to specify the interval at which the directive polls the element's width. The directive begins polling the element's width when a window resize or Angular digest event occurs. When the width stops changing, the polling stops.

<div width-query="{
    pollingInterval: 100
}">...</div>

If you have no animations or transitions, you can set this to 0.

'widthListener' option

This option allows you to specify a function to call when the width has stopped changing. This is useful when you need to update the display of other elements when an animation or transition has completed.

<div width-query="{
    widthListener: 'ctrl.widthChanged(width)'
}">...</div>

'widthPollingListener' option

This option allows you to specify a function to call while the width is changing. This is useful when you need to update the display of other elements during an animation or transition.

<div width-query="{
    widthPollingListener: 'ctrl.widthChanged(width)'
}">...</div>

WidthQueryClass Directive

The widthQueryClass directive updates the element's HTML class based upon the state of the parent widthQuery directive.

In the example below, if the widthQuery directive has applied class "container-small" to its element, the widthQueryClass directive will have applied class "section-small" to its element.

<div width-query="container">
    <div width-query-class="section">...</div>
    ...
</div>

The widthQuery directive is passed the base HTML class to initially add to the element.