diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index e8a48bb..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,29 +0,0 @@
-# Logs
-logs
-*.log
-
-# Runtime data
-pids
-*.pid
-*.seed
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-
-# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Compiled binary addons (http://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directory
-# Commenting this out is preferred by some people, see
-# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
-node_modules
-bower_components
-
-# Users Environment Variables
-.lock-wscript
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 17e7b9e..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-language: node_js
-node_js:
-  - 0.11
-before_script:
-  - npm install -g bower  
-  - bower install
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 8d80000..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Kier Borromeo
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/README.md b/README.md
deleted file mode 100644
index 79f6381..0000000
--- a/README.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# angular-infinite-scroll
-
-[![Build Status](https://travis-ci.org/srph/angular-infinite-scroll.svg?branch=master)](https://travis-ci.org/srph/angular-infinite-scroll) [![Bower version](https://badge.fury.io/bo/angular-srph-infinite-scroll.svg)](http://badge.fury.io/bo/angular-srph-infinite-scroll) [![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT) [![SemVer](http://img.shields.io/badge/semver-2.0.0-brightgreen.svg)](http://semver.org/spec/v2.0.0.html) [![Author | Shields.io](http://img.shields.io/badge/author-%40srph-blue.svg?style=flat-square)](http://twitter.com/_srph)
-
-A simple infinite scroll solution for AngularJS weighing < ```1 KB``` (minified).
-
-## Content
-
-- [Getting Started](#getting-started)
-  - [Installation](#installation)
-  - [Usage](#usage)
-  - [API](#api)
-  - [Examples](#examples)
-- [Support](#support)
-- [Contribution](#contributing)
-  - [Building](#building)
-- [Alternatives](#alternatives)
-- [Changelogs](#changelogs)
-
-## Getting Started
-
-Getting started is very easy!
-
-**Requirements**
-
-- AngularJS ```>=v1.2.0``` (Should work with)
-- jQuery (at least) ```>=v.1.7``` (Planned in the future to be removed)
-
-### Installation
-
-```angular-infinite-scroll``` is available on [**Bower**]:
-
-```
-$ bower install angular-srph-infinite-scroll --save
-```
-
-\* *The purpose of the ```--save``` argument is to add it your bower file's dependencies.*
-
-```angular-infinite-scroll``` is also available on [**CDN**(s)]:
-
-- **Raw GIT**
-```html
-<script src="https://cdn.rawgit.com/srph/angular-infinite-scroll/master/dist/angular-srph-infinite-scroll.js"></script>
-<!-- min -->
-<script src="https://cdn.rawgit.com/srph/angular-infinite-scroll/master/dist/angular-srph-infinite-scroll.min.js"></script>
-```
-
-**Include the script to your HTML file after jQuery and AngularJS (*must be in proper order*).**
-
-```html
-<!-- other scripts -->
-<script src="/path/to/jquery.js"></script>
-<script src="/path/to/angular.js"></script>
-<script src="/path/to/angular-srph-infinite-scroll.js"></script>
-```
-
-**Add the library module to one of your app module's dependencies.**
-
-```js
-angular.module('myApp', [/** other dependencies */, 'srph.infinite-scroll']);
-```
-
-### Usage
-
-Use the directive on a container element.
-
-```html
-<div srph-infinite-scroll="callback()"
-  {disabled="true"}
-  {container="true"}
-  {throttle="0"}
-  {threshold="200"}>
-  <!-- your ng-repeat, typically -->
-  <div ng-repeat="apple in apples"> {{ apple.name }} </div>
-</div>
-```
-
-\* The `{ .. }` enclosures indicate that the parameter is optional.
-
-### API
-
-Head over to the [API Documentation](https://github.com/srph/angular-infinite-scroll/blob/master/docs/api.md) to see accepted parameters, and how to use each.
-
-### Examples
-
-Head over to the [examples page](http://srph.github.io/angular-infinite-scroll/) to help you get started!
-
-## Contribution
-
-All contributions are appreciated. Please simply file an issue first for any inquiry, proposal, or question to avoid closed pull-requests; useless work. Thanks!
-
-```
-=========      ================
-| issue |  ->  | pull-request |
-=========      ================
-```
-
-Pull-requests with test or without are both appreciated!
-
-### Building
-
-Please check [`docs/building`](https://github.com/srph/angular-infinite-scroll/edit/master/README.md)
-
-## Alternatives
-
-- [ng-scroller (`jankuca/ng-scroller`)](https://github.com/jankuca/ng-scroller)
-- [ngInfiniteScroll (`sroze/ngInfiniteScroll`)](https://github.com/sroze/ngInfiniteScroll)
-- [lrInfiniteScroll (`lorenzofox3/lrInfiniteScroll`](https://github.com/lorenzofox3/lrInfiniteScroll)
-
-## Changelogs
-
-See the [CHANGELOGS.md](https://github.com/srph/angular-infinite-scroll/blob/master/docs/CHANGELOG.md)
-
-## Acknowledgement
-
-Primarily motivated and almost based on [sroze/ngInfiniteScroll](https://github.com/sroze/ngInfiniteScroll).
-
-**angular-infinite-scroll** © 2014+, Kier Borromeo (srph). Released under the [MIT](http://mit-license.org/) License.<br>
-
-> [srph.github.io](http://srph.github.io) &nbsp;&middot;&nbsp;
-> GitHub [@srph](https://github.com/srph) &nbsp;&middot;&nbsp;
-> Twitter [@_srph](https://twitter.com/_srph)
diff --git a/bower.json b/bower.json
deleted file mode 100644
index 1c9e941..0000000
--- a/bower.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "name": "angular-srph-infinite-scroll",
-  "version": "0.1.5",
-  "homepage": "https://github.com/srph/angular-infinite-scroll",
-  "authors": [
-    "srph <seraphipod@gmail.com>"
-  ],
-  "description": "Another infinite scroll shit solution for AngularJS.",
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "angular": "~1.3.12",
-    "jquery": "~2.1.3"
-  },
-  "devDependencies": {
-    "angular-mocks": "~1.3.13"
-  }
-}
diff --git a/dist/angular-srph-infinite-scroll.js b/dist/angular-srph-infinite-scroll.js
deleted file mode 100644
index 82f25c8..0000000
--- a/dist/angular-srph-infinite-scroll.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * angular-infinite-scroll
- * @author Kier Borromeo (srph)
- * @repository https://github.com/srph/angular-infinite-scroll
- * @license MIT
- */
-+function(angular, undefined) {
-  'use strict';
-  angular
-    .module('srph.infinite-scroll', [])
-    .directive('srphInfiniteScroll', directive);
-
-  function directive($window, $document, $timeout, $q) {
-    return {
-      scope: {
-        callback: '&srphInfiniteScroll',
-        disabled: '=',
-        container: '=',
-        threshold: '=',
-        throttle: '='
-        // immediate: '='
-      },
-
-      restrict: 'EA',
-      link: linkFn
-    };
-
-    function linkFn(scope, element) {
-      var _windowElm = angular.element($window);
-      var _bodyElm = angular.element('html, body');
-
-      var promise = null;
-      var callback = scope.callback;
-      var threshold = scope.threshold || 200;
-      var throttle = scope.throttle || 350;
-      // var immediate = !!scope.immediate || true;
-
-      var $container = $getContainer(scope.container);
-      var isContainerElm = $container == element;
-      var isContainerBody = $container == _bodyElm;
-      var $scrollingContainer = isContainerBody ?  _windowElm : element;
-
-      // Flag whether the vertical scroll position changed.
-      // Why? Horizontal scroll shouldn't trigger the damn thing.
-      var _last_scroll = 0;
-
-      $scrollingContainer.on('scroll', $handle); // Scroll event listener
-      scope.$on('$destroy', $handleUnbind) // Scope listener
-      
-      /**
-       * Binds the scroll event listener
-       * which triggers the infinite scroll.
-       *
-       * It just calls the callback after the provided
-       * scrolling. ... `
-       */
-      function $handle(evt) {
-        var height = $scrollingContainer.innerHeight(); // Container height
-        var scroll = $scrollingContainer.scrollTop(); // The amount of scrolling
-        var bottom = $container.prop('scrollHeight'); // Container height + amount of scrolling
-
-        // Halt the execution if the disabled flag is set and true
-        // or if the execution is still running
-        var disabled = scope.disabled;
-        if ( (!angular.isUndefined(disabled) && !!disabled)
-          || promise !== null
-          || _last_scroll == scroll) {
-          return;
-        }
-
-        // Update the last vertical scroll position
-        _last_scroll = scroll;
-
-        // scrollHeight - height = scroll offset
-        if ( scroll + threshold >= bottom - height ) {
-          promise = $timeout(function() {
-            // We use $q.when to set the `promise` flag (if the callback is still running)
-            // to null (set the flag as done / no execution is running) so async
-            // shit is considered.
-            // `finally` block so incase the promise was rejected or whatever.
-            $q.when(callback()).finally(function() { promise = null });
-          }, throttle, true);
-        }
-      }
-
-      /**
-       * Unbinds the scroll event listener when
-       * the scope is destroyed
-       */
-      function $handleUnbind() {
-        $container.unbind('scroll', $handle);
-      }
-
-      /**
-       * Returns the container based on the `container` parameter.
-       */
-      function $getContainer(container) {
-        if ( angular.isUndefined(container) ) return _bodyElm;
-        if ( !!container ) return element;
-
-        throw new Error('Container option is not accepted.');
-      }
-    }
-  }
-  directive.$inject = ['$window', '$document', '$timeout', '$q'];
-}(angular);
\ No newline at end of file
diff --git a/dist/angular-srph-infinite-scroll.min.js b/dist/angular-srph-infinite-scroll.min.js
deleted file mode 100644
index 37cea81..0000000
--- a/dist/angular-srph-infinite-scroll.min.js
+++ /dev/null
@@ -1 +0,0 @@
-+function(n){"use strict";function t(t,e,i,l){function o(e,o){function r(){var t=m.innerHeight(),o=m.scrollTop(),r=$.prop("scrollHeight"),c=e.disabled;!n.isUndefined(c)&&c||null!==f||w==o||(w=o,o+h>=r-t&&(f=i(function(){l.when(a())["finally"](function(){f=null})},p,!0)))}function c(){$.unbind("scroll",r)}function s(t){if(n.isUndefined(t))return d;if(t)return o;throw new Error("Container option is not accepted.")}var u=n.element(t),d=n.element("html, body"),f=null,a=e.callback,h=e.threshold||200,p=e.throttle||350,$=s(e.container),b=$==d,m=b?u:o,w=0;m.on("scroll",r),e.$on("$destroy",c)}return{scope:{callback:"&srphInfiniteScroll",disabled:"=",container:"=",threshold:"=",throttle:"="},restrict:"EA",link:o}}n.module("srph.infinite-scroll",[]).directive("srphInfiniteScroll",t),t.$inject=["$window","$document","$timeout","$q"]}(angular);
\ No newline at end of file
diff --git a/docs/api.md b/docs/api.md
deleted file mode 100644
index 7634588..0000000
--- a/docs/api.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# API
-
-- [```srph-infinite-scroll```](#srph-infinite-scroll-expression)
-- [```disabled```](#disabled-boolean-default-false)
-- [```throttle```](#throttle-number-default-350)
-- [```threshold```](#threshold-number-default-200)
-- [```container```](#container-boolean)
-
-##### ```srph-infinite-scroll``` (```expression```)
-
-Callback to be evaluated (expression to be evaluated) when the current scroll position reaches the *bottom*.
-
-\* If the callback runs an asynchronous method (```$http```), please make sure to return the promise like so:
-
-```js
-$scope.myCallback() = function() {
-  return $http.get('api/v1/..')
-    .then(onSuccess)
-    .catch(onError);
-}
-```
-
-Failing to do so, unexpected behaviors may occur.
-
-[Back to top](#content)
-
-##### ```disabled``` (```boolean```, *default*: ```false```)
-
-Disable callback from being executed.
-
-[Back to top](#content)
-
-##### ```throttle``` (```number```, *default*: ```350```)
-
-Delays the execution of the callback
-
-[Back to top](#content)
-
-##### ```threshold``` (```number```, *default*: ```200```)
-
-Scroll allowance for executing the callback when reaching the bottom. This allows you to get the callback executed even before reaching the bottom.
-
-[Back to top](#content)
-
-##### ```container``` (```boolean```)
-
-Use the container (element which the directive was applies to) for the infinite scrolling instead of the window. Set ```true``` to use the element which the directive is applied to; leave as blank to use the ```body``` / ```$window```.
-
-The example below illustrates that ```myCallback()``` will be executed when the ```div``` is scrolled to the bottom:
-
-```html
-<div style="overflow: scroll; height: 500px;" srph-infinite-scroll="myCallback()" container="true">
-  <ul>
-    <li> ng-repeat="apple in apples"> {{ apple.name }} </li>
-  </ul>
-</div>
-```
diff --git a/docs/building.md b/docs/building.md
deleted file mode 100644
index 10ce22e..0000000
--- a/docs/building.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# Building
-
-If you plan to contribute (put some fixes, add a feature, put some tests), then this is for you. Otherwise, I wouldn't recommend building the library from source (and probably won't make sense).
-
-**Requirements**
-
-1. ```nodejs```
-2. ```npm```
-3. ```bower```
-
-If you are using a Debian-based Linux distro, you may install ```nodejs``` and ```npm``` by:
-
-```bash
-# nodejs-legacy since it properly registers to PATH
-$ apt-get install nodejs-legacy npm
-```
-
-If you have restriction / access issues, simply add ```sudo``` (```sudo apt-get install ...```).
-
-And then install ```bower``` and ```karma-cli``` which depends on nodejs and is registered through ```npm```.
-
-```
-$ npm install bower karma-cli  -g
-```
-
-Now, we'll start building the project itself.
-
-Start by cloning this repository. Then run these commands to install the project's dependencies:
-
-```bash
-$ cd </path/to/project-root> # replace with the root dir of the project
-$ npm install & bower install
-```
-
-Uglification / Testing:
-
-```
-$ npm run test # Run the tests
-$ npm run build # Build / annotate (ng-annotate)
-$ npm run uglify # Uglify
-$ npm run start # (build and annotate)
-```
-
-If you would like to watch the files for the tests, install ```karma-cli``` (allows you to use ```karma``` on the cli).
-
-```bash
-$ npm install karma-cli 
-
-# on root dir
-$ karma start
-```
diff --git a/docs/changelog.md b/docs/changelog.md
deleted file mode 100644
index 457c6a2..0000000
--- a/docs/changelog.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Changelogs
-
-#### v0.1.5
-
-- Fixed callback from being executed when ```disabled``` was `defined` and `true`, and `promise` is `null`.
-
-#### v0.1.4
-
-- Fixed conditions on cancelling the callback from being called (technically fixes horizontal scrolling from triggering the callback).
-
-#### v0.1.3
-
-- Fixed a variable being undefined.
-
-#### v0.1.2
-
-- Fixed *horizontal scrolling* from triggering the callback. Now, only vertical scrolling will trigger the infinite scrolling.
-
-#### v0.1.1
-
-- Fixed failing promises. Promise block now uses the ```final``` block instead of ```then``` so there are no unexpected behaviors when returned *promises* from asynchronous callbacks fail.
-
-#### v0.1.0
-
-- Released on Bower.
-- Basic implementation.
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..825ee9a
--- /dev/null
+++ b/index.html
@@ -0,0 +1,90 @@
+<!--
+  angular-infinite-scroll - (c) 2014 Kier Borromeo | @srph
+  @link http://srph.github.io/angular-infinite-scroll
+  @repository http://github.com/srph/angular-infinite-scroll
+  @license MIT
+   __   .__                                    .__ 
+  |  | _|__| ___________  ______   ____   ____ |__|
+  |  |/ /  |/ __ \_  __ \ \____ \ /  _ \ / ___\|  |
+  |    <|  \  ___/|  | \/ |  |_> >  <_> ) /_/  >  |
+  |__|_ \__|\___  >__|    |   __/ \____/\___  /|__|
+       \/       \/        |__|         /_____/     
+-->
+<!DOCTYPE html>
+<html>
+<head>
+  <title>srph/angular-infinite-scroll</title>
+  <meta charset="utf-8">
+  <link href='http://fonts.googleapis.com/css?family=Raleway:400,700,500,600,300,200,100' rel='stylesheet' type='text/css'>
+  <link href="//cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css" rel="stylesheet">
+  <style>
+    .u-text-center { text-align: center; }
+    .u-box-allowance { margin-top: 50px; margin-bottom: 25px;}
+    .container { width: 768px; margin-top: 25px; margin-bottom: 25px; }
+  </style>
+</head>
+<body>
+  <div class="container u-text-center">
+    <h1> srph/angular-infinite-scroll </h1>
+
+    <p>A simple infinite scroll for AngularJS weighing  <kbd>&lt;1 KB</kbd>. </p>.
+
+    <div style="margin-bottom: 10px;">
+      <a href="//github.com/srph/angular-infinite-scroll" class="button button-primary" style="margin-right: 5px;"> Fork it on Github </a>
+    </div>
+
+    <iframe src="https://ghbtns.com/github-btn.html?user=srph&type=follow&count=true"
+      frameborder="0"
+      scrolling="0"
+      width="135px"
+      height="20px">
+    </iframe>
+
+    <iframe src="https://ghbtns.com/github-btn.html?user=srph&repo=angular-infinite-scroll&type=star&count=true"
+      frameborder="0"
+      scrolling="0"
+      width="75px"
+      height="20px">
+    </iframe>
+
+    <hr>
+
+    <p class="u-text-center">Here are some examples to help you get started.</p>
+
+
+    <div style="1px solid #ddd" class="u-text-center u-box-allowance">
+      <h3> Basic </h3>
+      <p>
+        Here is a basic implementation of the infinite-scroll. Keep on scrolling, <em>forever</em> (<em>Walang forever</em>).
+      </p>
+      <iframe src="http://embed.plnkr.co/MjtyRMY8ixSwGai9ypZG/preview"
+        frameborder="0"
+        height="500px"
+        width="700px">
+      </iframe>
+    </div>
+
+    Infinite scrolling on a container element (which means we track the scrolling on an element instead of window).
+        Keep on scrolling, we should stop by 24.
+
+    <div style="1px solid #ddd" class="u-text-center u-box-allowance">
+      <h3> Advanced </h3>
+      <p> All together now! </p>
+      <p>
+        Implements the infinite scrolling on a container element, with a <kbd>threshold</kbd> of <kbd>500px</kbd>,
+        with a throttle of <kbd>50s</kbd>, and an asynchronous callback (<kbd>$timeout</kbd> is an asynchronous method) which finishes in <kbd>2s</kbd> (notice that scrolling won't trigger the callback until it finishes).
+      </p>
+      <iframe src="http://embed.plnkr.co/9mfa7WMi5S8OTPrQrDi0/preview"
+        frameborder="0"
+        height="500px"
+        width="700px">
+      </iframe>
+    </div>
+  </div>
+
+  <!-- Thanks, Raw GIT, CDNjs -->
+  <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
+  <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.12/angular.min.js"></script>
+  <script src="//cdn.rawgit.com/srph/angular-infinite-scroll/master/dist/angular-srph-infinite-scroll.min.js"></script>
+</body>
+</html>
diff --git a/karma.conf.js b/karma.conf.js
deleted file mode 100644
index e526576..0000000
--- a/karma.conf.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// Karma configuration
-// Generated on Mon Feb 09 2015 17:28:46 GMT+0800 (PHT)
-
-module.exports = function(config) {
-  config.set({
-
-    // base path that will be used to resolve all patterns (eg. files, exclude)
-    basePath: './',
-
-
-    // frameworks to use
-    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-    frameworks: ['jasmine-jquery', 'jasmine'],
-
-
-    // list of files / patterns to load in the browser
-    files: [
-      'bower_components/jquery/dist/jquery.min.js',
-      'bower_components/angular/angular.min.js',
-      'bower_components/angular-mocks/angular-mocks.js',
-      'src/directive.js',
-      'tests/**/*.spec.js'
-    ],
-
-
-    // list of files to exclude
-    exclude: [
-    ],
-
-
-    // preprocess matching files before serving them to the browser
-    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-    preprocessors: {
-    },
-
-
-    // test results reporter to use
-    // possible values: 'dots', 'progress'
-    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-    reporters: ['progress'],
-
-
-    // web server port
-    port: 9876,
-
-
-    // enable / disable colors in the output (reporters and logs)
-    colors: true,
-
-
-    // level of logging
-    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
-    logLevel: config.LOG_INFO,
-
-
-    // enable / disable watching file and executing tests whenever any file changes
-    autoWatch: true,
-
-
-    // start these browsers
-    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-    browsers: ['Chrome'],
-
-
-    // Continuous Integration mode
-    // if true, Karma captures browsers, runs the tests and exits
-    singleRun: false
-  });
-};
diff --git a/package.json b/package.json
deleted file mode 100644
index 7437ad4..0000000
--- a/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "name": "infinite",
-  "version": "1.0.0",
-  "description": "[![Author | Shields.io](http://img.shields.io/badge/author-%40srph-blue.svg?style=flat-square)](http://twitter.com/_srph) [![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)",
-  "main": "karma.conf.js",
-  "scripts": {
-    "test": "./node_modules/karma/bin/karma start --single-run",
-    "build": "ng-annotate ./src/directive.js -a -o ./dist/angular-srph-infinite-scroll.js --single_quotes",
-    "uglify": "uglifyjs ./dist/angular-srph-infinite-scroll.js -m -c -o ./dist/angular-srph-infinite-scroll.min.js",
-    "start": "npm run build && npm run uglify"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/srph/angular-infinite-scroll.git"
-  },
-  "author": "",
-  "license": "ISC",
-  "bugs": {
-    "url": "https://github.com/srph/angular-infinite-scroll/issues"
-  },
-  "homepage": "https://github.com/srph/angular-infinite-scroll",
-  "devDependencies": {
-    "jasmine-core": "^2.2.0",
-    "jasmine-jquery": "^2.0.6",
-    "karma": "^0.12.31",
-    "karma-chrome-launcher": "^0.1.7",
-    "karma-jasmine": "^0.3.5",
-    "karma-jasmine-jquery": "^0.1.1",
-    "karma-phantomjs-launcher": "^0.1.4",
-    "ng-annotate": "^0.15.4",
-    "uglify-js": "^2.4.16"
-  }
-}
diff --git a/src/directive.js b/src/directive.js
deleted file mode 100644
index f1c21ce..0000000
--- a/src/directive.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * angular-infinite-scroll
- * @author Kier Borromeo (srph)
- * @repository https://github.com/srph/angular-infinite-scroll
- * @license MIT
- */
-+function(angular, undefined) {
-  'use strict';
-  angular
-    .module('srph.infinite-scroll', [])
-    .directive('srphInfiniteScroll', directive);
-
-  function directive($window, $document, $timeout, $q) {
-    return {
-      scope: {
-        callback: '&srphInfiniteScroll',
-        disabled: '=',
-        container: '=',
-        threshold: '=',
-        throttle: '='
-        // immediate: '='
-      },
-
-      restrict: 'EA',
-      link: linkFn
-    };
-
-    function linkFn(scope, element) {
-      var _windowElm = angular.element($window);
-      var _bodyElm = angular.element('html, body');
-
-      var promise = null;
-      var callback = scope.callback;
-      var threshold = scope.threshold || 200;
-      var throttle = scope.throttle || 350;
-      // var immediate = !!scope.immediate || true;
-
-      var $container = $getContainer(scope.container);
-      var isContainerElm = $container == element;
-      var isContainerBody = $container == _bodyElm;
-      var $scrollingContainer = isContainerBody ?  _windowElm : element;
-
-      // Flag whether the vertical scroll position changed.
-      // Why? Horizontal scroll shouldn't trigger the damn thing.
-      var _last_scroll = 0;
-
-      $scrollingContainer.on('scroll', $handle); // Scroll event listener
-      scope.$on('$destroy', $handleUnbind) // Scope listener
-      
-      /**
-       * Binds the scroll event listener
-       * which triggers the infinite scroll.
-       *
-       * It just calls the callback after the provided
-       * scrolling. ... `
-       */
-      function $handle(evt) {
-        var height = $scrollingContainer.innerHeight(); // Container height
-        var scroll = $scrollingContainer.scrollTop(); // The amount of scrolling
-        var bottom = $container.prop('scrollHeight'); // Container height + amount of scrolling
-
-        // Halt the execution if the disabled flag is set and true
-        // or if the execution is still running
-        var disabled = scope.disabled;
-        if ( (!angular.isUndefined(disabled) && !!disabled)
-          || promise !== null
-          || _last_scroll == scroll) {
-          return;
-        }
-
-        // Update the last vertical scroll position
-        _last_scroll = scroll;
-
-        // scrollHeight - height = scroll offset
-        if ( scroll + threshold >= bottom - height ) {
-          promise = $timeout(function() {
-            // We use $q.when to set the `promise` flag (if the callback is still running)
-            // to null (set the flag as done / no execution is running) so async
-            // shit is considered.
-            // `finally` block so incase the promise was rejected or whatever.
-            $q.when(callback()).finally(function() { promise = null });
-          }, throttle, true);
-        }
-      }
-
-      /**
-       * Unbinds the scroll event listener when
-       * the scope is destroyed
-       */
-      function $handleUnbind() {
-        $container.unbind('scroll', $handle);
-      }
-
-      /**
-       * Returns the container based on the `container` parameter.
-       */
-      function $getContainer(container) {
-        if ( angular.isUndefined(container) ) return _bodyElm;
-        if ( !!container ) return element;
-
-        throw new Error('Container option is not accepted.');
-      }
-    }
-  }
-}(angular);
\ No newline at end of file
diff --git a/tests/directive.spec.js b/tests/directive.spec.js
deleted file mode 100644
index d95b0bb..0000000
--- a/tests/directive.spec.js
+++ /dev/null
@@ -1,134 +0,0 @@
-describe('directive', function() {
-  var element
-    , compiled
-    , $timeout
-    , bodyElm
-    , $q
-    , $compile
-    , $controller
-    , $controllerProvider
-    , $rootScope
-    , $scope
-    , spyEvt
-    , _mkController
-
-  beforeEach(function() {
-    angular
-      .module('srph.infinite-scroll.test', [])
-      .config(function(_$controllerProvider_) { $controllerProvider = _$controllerProvider_ });
-
-    module('srph.infinite-scroll', 'srph.infinite-scroll.test');
-
-    inject(function(_$compile_, _$q_, _$timeout_, _$controller_, _$rootScope_) {
-      $q = _$q_;
-      $compile = _$compile_;
-      $timeout = _$timeout_;
-      $controller = _$controller_;
-      $rootScope = _$rootScope_;
-      $scope = $rootScope.$new();
-      _mkController = function(controller) {
-        $controllerProvider.register('TestController', controller || function($scope) {
-          $scope.callback = angular.noop;
-        });
-      };
-    });
-
-    bodyElm = angular.element('html, body');
-    bodyElm.height(750);
-  });
-
-  // YOLO
-  it('should pass', function() {
-    expect(true).toBe(true);
-  });
-
-  describe('scroll handler / infinite scroll', function() {
-    describe('halt execution', function() {
-      it('should halt when disabled', function() {
-        _mkController();
-        var controller = $controller('TestController', { $scope: $scope });
-        element = _mkElm({ disabled: true });
-        // spyOn($scope, 'callback');
-        scroll(element);
-        // expect($scope.callback).toHaveBeenCalled();
-        $timeout.flush()
-      });
-
-      it('should not halt callback when scope.disabled is undefined', function() {
-        element = _mkElm();
-        scroll(element);
-      });
-
-      it('should not halt callback when scope.disabled is false', function() {
-        element = _mkElm();
-        scroll(element);
-      });
-
-      it('should halt when promise is not null', function() {
-        element = _mkElm();
-      });
-    });
-
-    describe('trigger when the scroll reaches the bottom + threshold', function() {
-      describe('trigger', function() {
-        it('should trigger for window');
-
-        it('should trigger for element', function() {
-          element = _mkElm({ container: true });
-          compiled = compile(element);
-          scroll(compiled);
-        });
-      });
-
-      it('should execute callback i qn <throttle-ms> (e.g, 500ms)', function() {
-
-      });
-
-      it('should assign promise to null only after the callback is finished (testing async)', function() {
-
-      });
-    });
-  });
-
-  function _mkElm(options) {
-    options = options || {};
-    var callback = options.callback;
-    var disabled = options.disabled;
-    var throttle = options.throttle;
-    var immediate = options.immediate;
-    var container = options.container;
-    var threshold = options.threshold;
-    var children = options.children;
-
-    return angular.element([
-      '<div ',
-        'srph-infinite-scroll="callback()"',
-        'style="height: 500px; overflow: scroll"; width: 100%;',
-        disabled !== undefined ? 'disabled="' + disabled + '"' : '',
-        throttle !== undefined ? 'throttle="' + throttle + '"' : '',
-        immediate !== undefined ? 'immediate="' + immediate + '"' : '',
-        container !== undefined ? 'container="' + container + '"' : '',
-        threshold !== undefined ? 'threshold="' + threshold + '"' : '',
-        '>',
-        children,
-      '</div>'
-    ].join(' '));
-  }
-
-  function scroll(e, t) {
-    expect( e.scrollTop() ).toBe(0);
-    var bottom = e.prop('scrollHeight');
-    var height = e.height();
-    var s = Math.abs((bottom - height <= 0 ? bottom : bottom - height)) - (t || 0);
-    e.scrollTop( s );
-    e.scroll();
-    e.triggerHandler('scroll');
-    expect( e.scrollTop() ).toBe(s);
-  }
-
-  function compile(e) {
-    var c = $compile( e )($scope);
-    $scope.$digest();
-    return c;
-  }
-});
\ No newline at end of file
