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

scffld-bs

v1.1.1

Published

Bootstrap Package for scffld

Downloads

8

Readme

Scffld Bootstrap Package

A powerful starting point for developing html5 templates on BootStrap, build on top of scffld - a tool that provides the environment for compiling superset of languages used in the template into ones that browser understands.

Features

  • All features included from scffld.
  • Basic HTML skeleton in PUG with BootStrap component mixins.
  • Common JavaScript Libraries include:
  • Slick, mmenu, magnificPopup and parsleyjs libraries triggable via html data attributes without writing any JavaScript.
  • All JavaScript and CSS is required as npm dependencies and easily updatable.
  • Basic CSS Skeleton in SCSS with option to EDIT ALL BootStrap3 variables and other libraries.
  • A bunch of helpful SCSS Mixins,
  • Example page.

What!? - TL;DR scffld will pack your and 3rd party stylesheets and javascript into single files and optimize them!

Quickstart

ATENTION!

If you're here for the first time, I strongly recommend you skip the quickstart first and familiarize yourself with scffld-bs directory structure, using its' plugins and existing mixins.

Preffered

Create a clean project directory, navigate to it in terminal and run the following command:

npm i scffld-bs

Alternative

Clone this repository and then run npm install from the Terminal.

-- You will get a prompt from Scffld during installation process asking you to choose your build directory and css preprocessor. You can leave the default values by pressing enter, however it's important for scffld-bs to have Sass selected for default CSS handling!

-- You're done! You can use one of many scffld gulp tasks to build your template now, i.e.:

  • Run gulp serve to preview and watch for changes
  • Run gulp build to compile production version

Prequisites

Check your system is setup to run scffld.

Installation

Create na new clean project directory and go into it: mkdir myproject && cd myproject

Then run: npm i scffld-bs.

Wait for the Scffld prompt to popup and select your build destination and SASS for css.

After the process is finished, scffld will create a few files in your project root:

  • .babelrc - config file for babeljs that adds support for ECMAScript2015
  • .editorconfig - config for your editor, to have unified indentations in all the project files
  • .eslintrc - config for linting your JavaScripts with gulp test command.
  • .gitignore - that ignores node_modules and your selected build directory [dist/] by default
  • gulpfile.babel.js - logic for gulp, that provides all automated tasks from scffld into your project

It will also add all gulp plugins into your package.json under devDependencies for autoloading and a config under "scffld" key, on which the gulp tasks operate. You can modify it to your liking, but probbaly won't need to for this bootstrap package.

Project Structure

First! There's some rules you'll need to follow, but hey it's no rocket science. Scffld-bs has a predefined folder structure which is good to follow for the sake of sanity, but you can customize the build destinations for all resources (css, js, ...).

├── src
|   ├── _bootstrap              # Contains PUG mixins for Bootstrap components
|   ├── _images                 # Images for optimization during build
|   ├── _layouts                # HTML Layouts for diffrent kinds of pages
|   |   └── app.pug
|   ├── _modules                # Reusable modules
|   |   ├── modules.scss        # Wraps Sass styles from all modules
|   |   ├── modules.pug         # Wraps PUG Mixins from all modules
|   |   ├── modules.js          # Wraps JS Classes from all modules
|   |   └── module
|   |       ├── index.js        # Module JavaScript class
|   |       ├── module.scss     # Module Styles
|   |       └── module.pug      # Module markup - pug mixin
|   ├── _scripts                # Global scripts, base classes, etc
|   |   ├── components          # Application Script components and config
|   |   |   ├── app.js          # Application JavaScript start point
|   |   |   └── config.js       # Default config objects for all plugins
|   |   ├── bootstrap.js		  # Application bootstrapping - all 3rd party deps
|   |   └── main.js             # JavaScript entry file
|   ├── _seeds                  # JSON/YAML files that seed data to pug templates
|   ├── _styles                 # Global styles, mixins, variables, etc
|   |   ├── components
|   |   |   └── example.scss    # Seperate page related styles
|   |   ├── mixins
|   |   |   ├── _animations.scss   # Helpers for CSS animations and easing
|   |   |   ├── _breakpoints.scss  # Bootstrap media query helpers
|   |   |   ├── _fonts.scss        # Typography helpers
|   |   |   └── _utils.scss        # Common mixins for size, position, ...
|   |   └── _app.scss          # Application styles start point
|   |   └── _variables.scss    # Holds app and bootstrap variables
|   |   └── main.scss          # CSS entry file
|   └── example.pug            
|   └── index.pug              # Page - extends layout, provides content.
└── package.json               # Dependencies and scffld configuration

Components

Template skeleton consists of three parts:

  • Pug - for html murkup
  • Sass - for styles
  • ES2015 - for Javascript

Pug

Pug files provide markup for pages, layots for diffrent kind of pages, mixins for bootstrap components and mixins for template components.

Layouts

Layouts provide the basic markup skeleton with html head setup, website header and navigation and footer. They also include all the mixins that will make them available across all the pages.

Pages

Each pug file directly under ./src/ folder will be used to create a html page. This files extend layouts which wrap the page content with the html head, header and footer.

Bootstrap Mixins

These mixins remove the static boilerplate for bootstrap components so you can focus directly on your custom markup. For example to create a bootstrap modal and a button to open it, instead of the relatively large html markup only three lines of code suffice:

button.btn(data-toggle="modal", data-target="#exampleModal") Open Modal!
+modal("Modal title!", "exampleModal")
  p This is modal content

Explore their source code for usage, or example content for the use cases.

Module Mixins

For every module you'll create in you page, setup mixins for the pug. This way you can later reuse them in your pages, and remove repetition, in turn you'll end up with easy maintainable code.

For example if you have an article markup and you need to use it multiple times you just inject it in your page:

each item in articles
	+article(item)
	+article(item)

Seed Files

If you want to load global data into your pug templates, you can add JSON/YAML files in src/_seeds folder.

For example, add menu.json in src/_seeds folder:

{
  "name": "Home",
  "link": "/",
  "category": "Page",
  "status": "Development"
}

And it will be added to the site.data object under the key of filename and it can be used like so:

div
  h1= site.data.menu.name

Which outputs to:

<div>
  <h1>Home</h1>
</div>

Styles

Styles come packed with all the stylesheets from 3rd party libraries. The ones that provide a Sass source are required as such and can have their variables overwritten before the compilation proccess.

TIP: By tweaking the BS variables you can get very close to almost any design you'll need to implement with using nothing but bootstrap markup. This way you'll keep your code dry, won't pollute the global namespace with a bunch of custom classes and make it managable to any other developer that might come by.

Global styles

Your starting point for writing global styles [fonts, colors, ...] should be in _app.scss. For any page specific styles or if your global styles get too big, i suggest you split them in parts, store them in _styles/components/ folder and include them in your _app.scss.

Module Styles

These are included after global styles, and should be written at all times as standalone. Styles from modules should never change CSS outside of it's scope! They reside inside _modules\modulName folders and you will create them as needed.

IMPORTANT: for every module you create, you need to include in _modules/modules.scss!

Mixins

scffld-bs ships with some predefined mxins. The most useful ones are bootstrap BreakPoints and typography.

BootStrap Mixins

They follow the same logic as bootstrap classes - mobile first - and provide media queries on same widths. For example:

h1 {
  @include font-size(24px);
 
  @include bp-sm {
    @include font-size(36px);
  }
  
  @include bp-lg {
    @include font-size(56px);
  }
}

Typography - Font mixins

I urge you to use the font-size() mixin to set font sizes across all styles that need responsive scaling. It will calculate a rem unit for the font based on the base font size, and fonts will scale with the font size defined on the body.

--

Explore other mixins to see how to use them in your project.


Scripts

When writing JavaScript for your template, classes are preffered and spliting your page functionality into seperate components makes it easier to mantain and simple to reuse the same code in a different project.

There's a few modules packed in this skeleton that handle libraries and work out of the box, in a similar fashion as bootstrap components. All of them are triggered via html data-role attribute and you can use them without writing any JS.

--

Slick [data-role="slick"]

Slick by default initializes a slider with display of one slide and slides for one element.

.my-slider(data-role="slick")
  img(src="..." alt="...")
  img(src="..." alt="...")
  img(src="..." alt="...")

Slick accepts also a few additional options:

  • data-dots will add dot navigation to the slider.
  • data-arrows will add left and right arrows to the slider.
  • data-show-lg, data-show-md, data-show-sm, data-show-xs determines how many slides to show on corresponding bootstrap breakpoints.
  • data-slide-lg, data-slide-md, data-slide-sm, data-slide-xs determines how many slides to slide each time on corresponding bootstrap breakpoints. By default it's always one.

For example you want to slide some articles and have different number of slides on each breakpoints:

.article-slider(data-role="slick" data-dots data-show-lg="4" data-show-md="3" data-show-sm="2" data-show-xs="1")
  +article(...)
  +article(...)
  +article(...)
  +article(...)
  +article(...)

--

MagnificPopup [data-role="magnific"]

The default target type for popups is image. You can change it in the config.js.

To trigger magnific popup on a link just add the data attribute to an anchor tag pointing to an image.

a(href="/img/bigimage.jpg" data-role="magnific")
	img(src="/img/thumb.jpg")

--

jQuery.mmenu [data-role="mmenu"]

You can also setup a offcanvas navigation with mmenu without JavaScript. Just add a <nav> element with id and data attribute to the page and wrap your hamburger with an anchor pointing to the nav id:

a(href="#mobile-menu")
  .hamburger

nav#mobile-menu(data-role="mmenu")
  ul
    li
      a(href="...") Home

Images and Fonts

All images in src/_images will be optimized, reduced in files size and copied to your build folder in ./images/.

Build process will also pick up fonts from slick, bootstrap and font-awesome and move them into ./fonts/ folder inside your build dir.

IMPORTANT Any other folder in ./src/ that is not prefixed with underscore ( _ ) will be simply copied into your build dir. So you never need to do anything in there, you always version only the source dir!


Building

You build your template with gulp tasks provided by the sccfld:

  • gulp serve will build a unminified version of the template and boot up a developement server, that listens to changes in your source files and automaticaly updates them in the browser.
  • gulp build compiles a optimized and minified version of the template ready for production.

Check out a full list of available tasks on scffld repository

Contributing

Anyone and everyone is welcome to contribute. Please take a moment to review the guidelines for contributing and code of conduct.

License

The MIT License (MIT). Please see License File for more information - © Matej Svajger