# Documentation

An overview of the admin template

# Thank you

Thank you for purchasing. Feel free to contact me if you have any questions.

Also, email me if you have any feature requests or advices, I'll be glad to know.

Rate it if you like it, it helps for more updates, thank you so much!

# Introduction

Material is a fully responsive admin web app template built with Bootstrap & AngularJS. It uses Sass CSS which makes it easy to customize.

# File Structure

Within the download you'll find the following file structure and contents

Once downloaded, unzip the compressed folder and you'll see something like this:

    Material/
    ├── Material/                       ───> Contains the develop version of Material Admin Template.
    │   ├── client/                           └──> All front end files are in this folder.
    │   │     ├── app/                            └──> All the custom JS scripts and HTML markup
    │   │     ├── fonts/                          └──> Contains icon fonts.
    │   │     ├── i18n/                           └──> Data files for i18n (Internationalization)
    │   │     ├── images/
    │   │     ├── styles/                         └──> All the custom stylesheets (Scss files)
    │   │     ├── favicon.ico
    │   │     └── index.html
    │   ├── .bowerrc
    │   ├── .editorconfig
    │   ├── .gitattributes
    │   ├── .jshintrc
    │   ├── .travis.yml
    │   ├── bower.json
    │   ├── CHANGELOG.md              ───> The change log
    │   ├── gulp.config.js
    │   ├── gulpfile.js
    │   └── package.json
    ├── dist/                         ───> The distribution (production) version of Material Admin
    ├── documentation/                ───> Where the help documentation is.
    └── landing/                      ───> The landing page template

Introduction to some important files:

".bowerrc"
  file is hidden, and is used for configure Twitter Bower
"bower.json"
  is the JSON file of Twitter Bower (You can click the link to know more).
"gulp.config.js"
  contains the global configuration variables of Gulp tasks
"gulpfile.js"
  is the configure file of Gulp (You can click the link to know more). It is used to configure or define tasks and load Gulp plugins.
"package.json"
  is the JSON file of NPM (You can click the link to know more). This file is used by npm to store metadata for projects published as npm modules.

# Dependencies Management with Bower

Bower is a front-end package manager for the web by Twitter.

Material use Bower to manage all the front end dependencies, make things clean, tidy and simple. However if you are not familiar with command line tool, it may be a bit scary for you, but don't worry, it's simple.

If you haven't try Bower before, then give it a shot, it makes life easier, you'll fall in love with it.

Inside the bower.json file of Bower, you'll see the list dependencies (package name and version):

If you want to know more about the packages, you can click here. Search the package and click the link to know more.

     "dependencies": {
        "jquery": "~2.1.4",
        "angular": "~1.4.0",
        "angular-route": "~1.4.0",
        "angular-animate": "~1.4.0",
        "angular-aria": "~1.4.0",
        "angular-messages": "~1.4.0",
        "angular-material": "~1.0.0-rc2",
        "angular-ui-router": "~0.2.14",
        "angular-bootstrap": "~0.14.0",
        "angular-translate": "~2.8.0",
        "angular-translate-loader-static-files": "~2.8.0",
        "material-design-iconic-font": "~2.1.0",
        "font-awesome": "~4.4.0",
        "textAngular": "~1.4.0",
        "toastr": "~2.1.0",
        "jquery.easy-pie-chart": "~2.1.6",
        "jquery.slimscroll": "~1.3.3",
        "jquery-steps": "~1.1.0",
        "angular-ui-tree": "~2.10.0",
        "ngmap": "~1.13.0",
        "flot": "~0.8.3",
        "flot.tooltip": "~0.8.5",
        "jvectormap": "~2.0.0",
        "flot.curvedlines": "~0.6.4",
        "angular-scroll": "~0.7.0",
        "Chart.js": "~1.0.1",
        "angular-chart.js": "~0.8.0",
        "angular-validation-match": "~1.6.0"
     }

# Automation with Gulp

Gulp is a JavaScript task runner (Automation), save yourself from repetitive tasks.

It's probably a bit complex to you if it's your first time using Gulp. However, you'll fail in love with it once you get up and running, it saves you from repetitive tasks. Project like jQuery, Bootstrap and many more use and love task automation tools.

By the way, be sure to check out this Getting Started guide, it will help you get up and running.

"gulp.config.js"
  contains the global configuration variables of Gulp tasks
"gulpfile.js"
  is the configure file of Gulp (You can click the link to know more). It is used to configure or define tasks and load Gulp plugins.
"package.json"
  is the JSON file of NPM (You can click the link to know more). This file is used by npm to store metadata for projects published as npm modules.

Inside package.json file, you'll see all the Gulp plugins that help to automate the tasks.

And all the plugins are configured in gulpfile.js file.

If you want to know more about the plugins, you can click here.

     "devDependencies": {
        "browser-sync": "~2.9.0",
        "del": "~2.0.0",
        "gulp": "~3.9.0",
        "gulp-angular-filesort": "~1.1.1",
        "gulp-angular-templatecache": "~1.8.0",
        "gulp-autoprefixer": "~3.1.0",
        "gulp-csso": "~1.0.0",
        "gulp-filter": "~3.0.0",
        "gulp-if": "~2.0.0",
        "gulp-imagemin": "~2.4.0",
        "gulp-inject": "~3.0.0",
        "gulp-jade": "~1.1.0",
        "gulp-jscs": "~3.0.0",
        "gulp-jshint": "~1.12.0",
        "gulp-less": "~3.0.3",
        "gulp-load-plugins": "~1.0.0",
        "gulp-ng-annotate": "~1.1.0",
        "gulp-open": "~1.0.0",
        "gulp-plumber": "~1.0.0",
        "gulp-print": "~2.0.0",
        "gulp-rev": "~6.0.0",
        "gulp-rev-replace": "~0.4.0",
        "gulp-ruby-sass": "~2.0.0",
        "gulp-sass": "~2.1.0",
        "gulp-sourcemaps": "~1.6.0",
        "gulp-task-listing": "~1.0.0",
        "gulp-uglify": "~1.4.0",
        "gulp-useref": "~1.3.0",
        "gulp-util": "~3.0.4",
        "jshint-stylish": "~2.0.0",
        "wiredep": "~2.2.0",
        "yargs": "~3.29.0"
     }

# How to Run it?

You'll need to put the files on a server to run it.

So you can upload the "dist" folder to your server to run it. Or you can build a server locally.

Then how to build a server locally?

You can build a locally server using WAMP or MAMP (if you uses PHP). Also it's pretty easy to build one with Python or Ruby (if you prefer Python or Ruby). And here we'll build a local server with NodeJS

Preparation:

You'll need to install Node.js (NPM comes along with it) and node-static (an NPM package)

Steps:

It's easy if you are familiar with Node. Download Node.js here then install it, and install node-static with one command line

    $ npm install -g node-static

The usage of node-static is simple. Just enter the "dist" directory with command line

    $ cd dist/

and type:

    $ static

It'll return something like this:

    serving "." at http://127.0.0.1:8080

Then you can view the template on http://127.0.0.1:8080 with your browser

# How to Use It?

In order to do development with it, first you'll need have the following tools installed:

- Node.js (NPM comes along with it), just download and install it, that's it, don't be afraid.
- Yeoman , Bower, Gulp for modern workflow.
- Ruby (if you are using a Mac, you already have it) , Sass , Compass for Sass CSS.

And you'll need to know how some basis about them, click the links to learn more if you not familiar with these yet. If it's your first time using these tools, it's probably too complex or even overwhelming for you. You'd better find someone to help you.

By the way, just a tip here, after you installed NodeJS (NPM comes along with it), you can use one command line to install Yeoman, Bower and Gulp instead of installing them one by one

    $ npm install -g yo bower gulp

If you already know how to use them, then just do a few things to start developing:

1. Enter "Material" folder with your command line tool.

2. Install all the NPM packages (for development) with NPM:

    $ npm install

3. Install all the front end packages with Twitter Bower:

    $ bower install

4. Then type gulp serve and you are ready to go.

    $ gulp serve

By the way, if you want to build a distribution (production) version, simply run

    $ gulp serve-dist

All the files for development are under ./Material/client/ folder.

# Basic Template Structure

The basic structure of template (index.html) is quiet simple. It contains 3 parts: The header, which load all the stylesheets. The body, which contains the content of App. The footer, which load all the scripts.

The Header

    <!doctype html>
    <!--[if lt IE 8]>         <html class="no-js lt-ie8"> <![endif]-->
    <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
        <head>
            <meta charset="utf-8">
            <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
            <title>Web Application</title>
            <meta name="description" content="Responsive Admin Web App with Bootstrap and AngularJS">
            <meta name="keywords" content="angularjs admin, admin templates, admin themes, bootstrap admin">
            <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">

            <!-- Needs images, font... therefore can not be part of main.css -->
            <link href='http://fonts.googleapis.com/css?family=Roboto:400,100,500,300,300italic,500italic|Roboto+Condensed:400,300' rel='stylesheet' type='text/css'>
            <link rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.min.css">
            <link rel="stylesheet" href="bower_components/weather-icons/css/weather-icons.min.css">
            <!-- end Needs images -->

                <!-- build:css({.tmp,client}) styles/main.css -->
                <link rel="stylesheet" href="styles/bootstrap.css">
                <link rel="stylesheet" href="styles/ui.css">
                <link rel="stylesheet" href="styles/main.css">
                <!-- endbuild -->

        </head>

The Body

        <body data-ng-app="app"
              id="app"
              class="app"
              data-custom-page
              data-off-canvas-nav
              data-ng-controller="AppCtrl"
              data-ng-class=" { 'layout-boxed': admin.layout === 'boxed',
                                'nav-collapsed-min': admin.menu === 'collapsed'
              } ">
            <!--[if lt IE 9]>
                <div class="lt-ie9-bg">
                    <p class="browsehappy">You are using an <strong>outdated</strong> browser.</p>
                    <p>Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
                </div>
            <![endif]-->

            <header data-ng-include=" 'views/header.html' "
                     id="header"
                     class="header-container "
                     data-ng-class="{ 'header-fixed': admin.fixedHeader,
                                      'bg-white': ['11','12','13','14','15','16','21'].indexOf(admin.skin) >= 0,
                                      'bg-dark': admin.skin === '31',
                                      'bg-primary': ['22','32'].indexOf(admin.skin) >= 0,
                                      'bg-success': ['23','33'].indexOf(admin.skin) >= 0,
                                      'bg-info-alt': ['24','34'].indexOf(admin.skin) >= 0,
                                      'bg-warning': ['25','35'].indexOf(admin.skin) >= 0,
                                      'bg-danger': ['26','36'].indexOf(admin.skin) >= 0
                     }"></header>

            <div class="main-container"
                 data-ng-class="{ 'app-nav-horizontal': admin.menu === 'horizontal' }">
                <aside data-ng-include=" 'views/sidebar.html' "
                       id="nav-container"
                       class="nav-container"
                       data-ng-class="{ 'nav-fixed': admin.fixedSidebar,
                                        'nav-horizontal': admin.menu === 'horizontal',
                                        'nav-vertical': admin.menu === 'vertical',
                                        'bg-white': ['31','32','33','34','35','36'].indexOf(admin.skin) >= 0,
                                        'bg-dark': ['31','32','33','34','35','36'].indexOf(admin.skin) < 0
                       }">
                </aside>

                <div id="content" class="content-container">
                    <section data-ui-view
                             class="view-container {{admin.pageTransition.class}}"></section>
                </div>
            </div>

The Footer

            <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
            <!-- build:js scripts/vendor.js -->
            <script src="bower_components/jquery/dist/jquery.min.js"></script>
            <script src="bower_components/angular/angular.min.js"></script>
            <script src="bower_components/angular-animate/angular-animate.min.js"></script>
            <script src="bower_components/angular-ui-router/release/angular-ui-router.min.js"></script>
            <!-- endbuild -->

            <!-- build:js scripts/ui.js -->
            <script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
            <script src="bower_components/jquery-steps/build/jquery.steps.min.js"></script>
            <script src="bower_components/toastr/toastr.min.js"></script>
            <script src="bower_components/bootstrap-file-input/bootstrap.file-input.js"></script>
            <script src="bower_components/jquery.slimscroll/jquery.slimscroll.min.js"></script>
            <script src="scripts/vendors/jquery.sparkline.min.js"></script>
            <script src="bower_components/flot/jquery.flot.js"></script>
            <script src="bower_components/flot/jquery.flot.resize.js"></script>
            <script src="bower_components/flot/jquery.flot.pie.js"></script>
            <script src="scripts/vendors/jquery.flot.orderBars.js"></script>
            <script src="bower_components/flot/jquery.flot.stack.js"></script>
            <script src="bower_components/flot.curvedlines/curvedLines.js"></script>
            <script src="bower_components/flot.tooltip/js/jquery.flot.tooltip.min.js"></script>
            <script src="bower_components/flot/jquery.flot.time.js"></script>
            <script src="bower_components/jquery.easy-pie-chart/dist/angular.easypiechart.min.js"></script>
            <script src="bower_components/angular-ui-tree/dist/angular-ui-tree.min.js"></script>
            <script src="bower_components/ngmap/build/scripts/ng-map.min.js"></script>
            <script src="bower_components/ng-tags-input/ng-tags-input.min.js"></script>
            <script src="scripts/vendors/jquery-jvectormap-1.2.2.min.js"></script>
            <script src="scripts/vendors/jquery-jvectormap-world-mill-en.js"></script>
            <script src="bower_components/angular-loading-bar/build/loading-bar.min.js"></script>
            <script src="bower_components/angular-scroll/angular-scroll.min.js"></script>

            <script src="bower_components/textAngular/dist/textAngular-rangy.min.js"></script>
            <script src="bower_components/textAngular/dist/textAngular.min.js"></script>
            <script src="bower_components/textAngular/dist/textAngular-sanitize.min.js"></script>

            <script src="bower_components/angular-translate/angular-translate.min.js"></script>
            <script src="bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js"></script>

            <script src="bower_components/Chart.js/Chart.min.js"></script>
            <script src="bower_components/angular-chart.js/dist/angular-chart.min.js"></script>
            <!-- endbuild -->

            <!-- build:js scripts/app.js -->
            <script src="scripts/app.module.js"></script>
            <script src="scripts/core/config.route.js"></script>
            <script src="scripts/core/app.controller.js"></script>
            <script src="scripts/core/i18n.js"></script>

            <script src="scripts/chart/chart.module.js"></script>
            <script src="scripts/chart/chart.controller.js"></script>
            <script src="scripts/chart/chart.directive.js"></script>

            <script src="scripts/form/form.module.js"></script>
            <script src="scripts/form/form.controller.js"></script>
            <script src="scripts/form/form.directive.js"></script>
            <script src="scripts/form/formValidation.module.js"></script>
            <script src="scripts/form/formValidation.controller.js"></script>
            <script src="scripts/form/formValidation.directive.js"></script>

            <script src="scripts/layout/nav.module.js"></script>
            <script src="scripts/layout/nav.directive.js"></script>

            <script src="scripts/page/page.module.js"></script>
            <script src="scripts/page/page.controller.js"></script>
            <script src="scripts/page/page.directive.js"></script>

            <script src="scripts/table/table.module.js"></script>
            <script src="scripts/table/table.controller.js"></script>

            <script src="scripts/ui/ui.module.js"></script>
            <script src="scripts/ui/ui.controller.js"></script>
            <script src="scripts/ui/ui.directive.js"></script>
            <script src="scripts/ui/ui.service.js"></script>
            <script src="scripts/ui/map.module.js"></script>
            <script src="scripts/ui/map.controller.js"></script>
            <script src="scripts/ui/map.directive.js"></script>
            <!-- endbuild -->
        </body>
    </html>

# Layouts & Color Schemes

You can simply update a few variables to change the default settings.

Open "./client/app/core/app.config.js" file, you'll find following code. You can change the value to update default settings.

    $scope.main = {
        brand: 'Material',
        name: 'Lisa',
        year: year,
        layout: 'wide',                                 // 'boxed', 'wide'
        menu: 'vertical',                               // 'horizontal', 'vertical', 'collapsed'
        fixedHeader: true,                              // true, false
        fixedSidebar: true,                             // true, false
        pageTransition: pageTransitionOpts[0],          // 0, 1, 2, 3... and build your own
        skin: '12'                                      // 11,12,13,14,15,16; 21,22,23,24,25,26; 31,32,33,34,35,36
    };

For example you want to set "boxed" layout as default, then you can update code like so:

    $scope.admin = {
        brand: 'Material',
        name: 'Lisa',
        year: year,
        layout: 'boxed',                                // 'boxed', 'wide'
        menu: 'vertical',                               // 'horizontal', 'vertical', 'collapsed'
        fixedHeader: true,                              // true, false
        fixedSidebar: true,                             // true, false
        pageTransition: pageTransitionOpts[0],          // 0, 1, 2, 3... and build your own
        skin: '12'                                      // 11,12,13,14,15,16; 21,22,23,24,25,26; 31,32,33,34,35,36
    };

Done and enjoy :)