Skip to content

adriancmiranda/Proto

Repository files navigation

Proto

Proto is an extensible program-code-template for creating objects

build status dependencies status devDependency status Codacy Badge License

NPM

What you need to build your own Proto

In order to build Proto, you need to have the latest node/npm and git 1.7 or later. Earlier versions might work, but are not supported.

For Windows, you have to download and install git and node.

OS X users should install git.

Linux/BSD users should use their appropriate package managers to install git and node, or build from source if you swing that way. Easy-peasy.

How to build your own Proto

Clone a copy of the main Proto git repo by running:

git clone git://github.com/adriancmiranda/Proto.git

Enter the Proto directory and run the install script and the build script:

cd Proto && npm i && npm run build

The built version of Proto will be put in the dist/ subdirectory, along with the minified copy and associated map file.

Get Started

Installation

Links to CDN

Use this URL for dev/testing

<script src="https://rawgit.com/adriancmiranda/Proto/master/dist/Proto.umd.js"></script>

Use this URL in production

<script src="https://cdn.rawgit.com/adriancmiranda/Proto/master/dist/Proto.umd.min.js"></script>

via JSPM

jspm install adriancmiranda/Proto

via Bower

bower install adriancmiranda/Proto

via NPM

npm i -D Proto

via Component

component install adriancmiranda/Proto

Node/Browserify/Webpack

var Proto = require('Proto');

Usage

var Ninja = Proto.extends({
	// Objects doesn't affect implementations.
	defaults:{
		ninjateste:'**'
	},
	kill:function(flush){
		console.log('kill '+ flush);
		flush && this.flush();
	}
});

var Human = Proto.extends({
	constructor:function(){
		console.log('i r human', this.$protoID);
		this.super();
		this.option();
	}
});

var ChuckNorris = Human.extends({
	defaults:{
		skills:'ninja'
	},
	implements:[Ninja],
	constructor:function(){
		console.log('i r badass and.. ', this.$protoID);
		this.super();
		this.kill('with thumb');
	},
	rise:3
});

var Goku = ChuckNorris.extends({
	defaults:{
		superpowers:['unknown']
	},
	constructor:function(){
		console.log('Hello! I\'m goku and.. ', this.$protoID);
		this.super();
	},
	rise:function(){ // override rise property
		console.log('wait for', this.super(), 'days...'); // super returns rise property from superclass
		return this.super();
	}
});

var chuck = new ChuckNorris();
chuck.kill('again!');
console.log('chuck:', chuck instanceof Proto); // true
console.log('chuck:', chuck instanceof Ninja); // false
console.log('chuck:', chuck instanceof Human); // true
console.log('chuck:', chuck instanceof ChuckNorris); // true
console.log('chuck.options:', chuck.options);
console.log('chuck:', chuck);

var goku = new Goku();
goku.rise();
console.log('goku:', goku);

Sample

See this usage here. You'll need open the browser console to see him in action.

A real world sample

plnkr

License

MIT