Coder Social home page Coder Social logo

mdarif / javascript-boilerplate Goto Github PK

View Code? Open in Web Editor NEW
73.0 16.0 34.0 781 KB

JavaScript Boilerplate is the collection of best practices using a design pattern (global abetment) with the namespaces which would help us out to protect our code in a modular way with some commonly used utility methods, it’s equipped with the configuration file in the form object literal. It would be a template over which people can build their projects. We would also be looking into different APIs that can combine along with the best practices to enhance our customized solution.

License: MIT License

JavaScript 51.53% CSS 31.47% HTML 17.00%

javascript-boilerplate's Introduction

JavaScript Boilerplate v1.2

Build Status Dependency Status License Version [Code Climate] codeclimate-url

JavaScript Boilerplate is the collection of best practices using a design pattern (Global Abatement) with the use of defined namespaces that would help you to protect our code. It is developed in a modular way with some commonly used utility methods provided that you would find useful for common operations. It is equipped with the configuration file in the form of an object literal that can be used to store global objects, config ids, URLs or textual strings. This framework has been designed to work as a ready to use template that you can build further in your projects as needed as it outlines the framework neatly and exhibits an approach to extend it.

What's new in v1.2?

  • Have added the Jasmine Test Suite to unit test the boilerplate code with or without PhantomJS, one can fire up the same through Chrome as well
  • Grunt build has been enhanced tremendously
  • JavaScript syntax highlighting has been added
  • MODULE has renamed to JSB for better JavaScript semantics
  • Travis CI has been kicked off
  • Made several small changes like use strict, dir changes, css fixes, additional grunt plug-ins also have been added etc.

Files in Repository

  1. src/index.html - An html help file illustrating helper functions.

  2. src/js/_config.js - Config is having general details that will be commonly used across the application. Parameters like URLs, services, theme to be used within the application.

  3. src/js/_helper.js - Helper utility functions that are required across different modules or even within a single module.

  4. src/js/_main.js - It defines the main module. We have used IIFE (Intermediately invoking function expression) namespacing and global abatement in this logic. JSB is main namespace that has been defined and JSB.helper is one of the components.

  5. src/css/style.css - Style sheets for the html help file.

Usage

  1. Clone the repository using the quick start guide. To get started include the JS files in your js directory.

    The starting point is the src/js/_main.js file which has defined the main module and the component to be used. If you were to observe the code,

     (function (JSB, $, undefined) {
    
     	...... (2)
    
     })(window.JSB = window.JSB || {}, jQuery);
    

    The above code defines the JSB namespace and also passes true values of jquery and undefined to the inner component. Instead of JSB you can define your project name or application name as well and that would become your global namespace under which all the other components should be declared/defined. For e.g. if it is a project name MYPROJECT instead of JSB you can even write MYPROJECT as well.

    Once you have defined the wrapper (global namespace), you can start of modules inside the global namespace.

  2. The second step would be to define the components, which can be page level or widget level too.

    JSB.subModule = (function () { function _subModule() { ... (3) } return new _subModule() })();

    The above code has defined a component called helper as a sub module of JSB namespace. JSB.helper holds an object that gets returned through new _subModule(). We can define all the functions that we want for the helper module inside the function _subModule().

  3. The third step would be to define the private values, private functions , privileged functions etc. within the _subModule function. Comments have been provided as to which one is a private function and which is a privileged one. At the end of the function the init() function is exposed which in turn returns the object itself. When the object is returned all the privileged functions are exposed along with it and are accessible outside.

  4. Next is the src/js/_config.js file, which has all the global parameters that needs to be leveraged across the application. Think of this file/module as a container file to define your global variables, URLS etc. It is globally available inside the JSB namespace and we can access the parameters by specifying JSB.config.param to get its value in any other component. Here it has been primarily defined as an object literal as everything needs to be exposed globally.

  5. For creating utility methods to be used across application, you can leverage the src/js/_helper.js file. It works on the same principle as the src/js/_main.js. For E.g. the way to access a helper function outside the module would be JSB.helper.getCookie for the getCookie function.

Quick start

Clone the git repo - git clone git://github.com/mdarif/JavaScript-Boilerplate.git - or download it

You can also get the JavaScript Boilerplate through npm if you have already installed node.

npm install javascript-boilerplate

*Make sure, you should have node installed on your machine before running npm command

Grunt Build

Install Grunt.

OR

###Follow the below instructions to install and setup the Grunt

Install Grunt CLI, this will put the grunt command in your system path, allowing it to be run from any directory.

$ npm install -g grunt-cli

Now install Grunt

$ npm install grunt

You should also install all the dependencies

$ npm install

###Follow the below instructions to install and setup the compass task Run this task with the grunt compass command.

Compass is an open-source authoring framework for the Sass css preprocessor. It helps you build stylesheets faster with a huge library of Sass mixins and functions, advanced tools for spriting, and workflow improvements including file based Sass configuration and a simple pattern for building and using Compass extensions.

This task requires you to have Ruby, Sass, and Compass >=0.12.2 installed. If you're on OS X or Linux you probably already have Ruby installed; test with ruby -v in your terminal. When you've confirmed you have Ruby installed, run gem update --system && gem install compass to install Compass and Sass.

Fire up the grunt server command and see the preview in browser with live-reload enabled for app folder content

$ grunt server

Build the Project

$ grunt

You should be able to see the below message for a successful build and a folder name dist has been created with all the expected output, parallel to src folder, with all the tasks completed.

Done, without errors.

Testing

$ grunt test

We use jasmine as a unit testing framework to test our boilerplate code, as of now it's been only done for _.main.js, you would get all the test done in the next release.

Contributing

Anyone and everyone is welcome to contribute.

Project information

License

See LICENSE

Author

javascript-boilerplate's People

Contributors

mdarif avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

javascript-boilerplate's Issues

Great Job, are there any updates in the pipeline?

Hey mdarif,

Your boilerplate is really helpful and well written, is there any new updates or developments in the near future? Theres not much else on the internet that focuses on the best way to start a scalable js structure.

I just wondered if there was anything new or different that you might do now than you would have since your last commit.

Thanks,

Quick question on placement

Hey I wondered if you could help me on this,

What would you say is the proper way to implement a condition like so:

var uikit = {
    support : []
};

if ( Modernizr.inputtypes ) {

    for ( var i in Modernizr.inputtypes) {

        if ( Modernizr.inputtypes.hasOwnProperty(i) && ! Modernizr.inputtypes[i]) {

            uikit.support.push('no-input-' + i);

        }

    }

    document.documentElement.className = uikit.support.join(' ');

} 

Would you leave this as is inside the wrapper or would you wrap it in an anonymous function, a SEAF or another way entirely?

Thank you,

Why can't we just check the type of debug.

if (JSB.config.debug && (typeof window.console !== 'undefined' && typeof window.console.log !== 'undefined') && console.debug) {

The condition is currently written as typeof window.console.log !== 'undefined') && console.debug and then the console.debug function is called in the block. Why cant we simply check if the type of console.debug is function.

Simple Question

Hi mdarif,

I would like to thank you for this repo to get started writing a more organized jquery/javascript code for my web development. This is not an issue but more like a question I am hoping you can help me to understand a little bit more about the repo.

I am wondering if $(document).ready is needed in this structure? I am not seeing it any reference to wait for the jquery DOM ready method but I might be missing something here anyway. Using this code however without jquery DOM ready has not created the problem for me so far but I am keen to know how this is implemented. Sorry for the noob questions, I am hoping you can shed the light :) cheers

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.