how to create our own js library ivan zhekov telerik corporation front-end developer

42
JavaScript Libraries How To Create Our Own JS Library Ivan Zhekov Telerik Corporation www.telerik. com Front-end Developer

Upload: adelia-horton

Post on 17-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

JavaScript LibrariesHow To Create Our Own JS Library

Ivan Zhekov

Telerik Corporationwww.telerik.com

Front-end Developer

Page 2: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Table of Contents What is a JavaScript libraries Prominent JavaScript libraries

prototype js

MooTools

jQuery

Dojo

YUI

KendoUI

Page 3: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Table of Contents (2) JavaScript Library Fundamentals

Object creation / inheriting

Query

Traversing

Manipulation

Insertion / Deletion

Events

AJAX

Animations

Page 4: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Table of Contents (3) Recommended features

All spiced up for basic users

Powerful syntax for advanced users

Strong coding convention

Page 5: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

What is a JSL?Have you seen a moose?

It’s nothing like it!

Page 6: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

What is a JSL A JS library is pre-written code that aims to facilitate and /or jump start development, especially AJAX based tasks

A JS library: Works around browser differences Abstracts common work Adds sugar and spice

In addition it might have widgets, themes … and even more sugar

Page 7: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Library vs. Framework Technically speaking, it’s just text, so pick your favorite

Never the less mind that in order to call a library a framework, it needs: More features

More cases

Widgets

Full stack of dev love

Page 8: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Prominent JSLA brief, based overview

Page 9: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Prototype Created 2005 by Sam Stephenson One of the corner stones of JS, IMO Features

Object creation, DOM query, traversal, manip, events, Ajax, utility methods…

Scriptacolous / Scripty for animations / fx

Sadly no development over the past year … my personal favorite

Page 10: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Prototype syntax Sample code

// Get an element and attach eventvar header = $("header");header.observe("click", function() {

alert("Yay ... clicked :) ");});

// Delete all elements of tag name$$("a").each(Element.remove);

// Ajaxnew Ajax.Request(url, {

method: 'get',onSuccess: function(transport) {...}

});

Page 11: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

MooTools Created 2005 by Vallerio Proietti Initially moo.fx was a FX lib for prototype

Developed over the years as a separate lib

Features inspired by Prototype, but different: Object creation, DOM query,

traversal, manip, events, Ajax, utility methods…

Some what active development

Page 12: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Mootools syntax Sample code

var header = $("header");header.addEvnet("click", function() {

alert("Yay ... clicked :) ");});

$$("a").each(function(element) {element.dispose();

});

var myRequest = new Request({url: url,onSuccess: function(responseText,

responseXML) {...}});myRequest.send();

Page 13: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

jQuery Created 2006 by John Resig Initially just selectors Have become one of the most powerful and used js libraries in the web

Features DOM query, traversal, manip,

animations, Ajax, utility, plugins… Bundled with popular IDE’s Quite magical for n00bs

Page 14: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

jQuery syntax Sample code

var header = $("#header");header.bind("click", function() {

alert("Yay ... clicked :) ");});

$("a").remove();

$.Ajax(url, {success: function(data) {...}

});

Page 15: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Dojo Created 2005 by John Resig Somewhat underestimated, but powerful library with many features

Features DOM query, traversal, manip,

animations, Ajax, utility, plugins… UI widgets Mobile

Just released 1.7

Page 16: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Dojo syntax Sample code

var header = dojo.byId("header");dojo.connect(header, "onclick", function() {

alert("Yay ... clicked :) ");});

dojo.query("a").orphan();

dojo.xhrGet({url: url,load: function(data) {...}

});

Page 17: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

YUI Created 2005 by Yahoo! Home grown and developed Features

DOM query, traversal, manip, animations, Ajax, utility, plugins…

UI widgets Developer tools

Still actively developed

Page 18: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

YUI syntax Sample code (for YUI3)

YUI().use(["node", "io"], function (Y) {var header = Y.one("#container");header.on("click", function() {

alert("Yay ... clicked :) ");});

Y.all("a").remove();

Y.io(uri)});

Page 19: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Kendo UI Just released by Telerik So far, build on top of jQuery, but improved: Blazing fast templates Excels performance and ease of use

Features: UI widgets, templates, data

visualizations Serves CSS as browser compiled

LESS Coming in mobile flavor soon

Page 20: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

KendoUI syntax Sample code

// Kendo doesn't do DOM it's all UI// It requires certain HTML to be on the page

// auto complete widget$("#autocomplete").kendoAutoComplete(["Item1", "Item2"]);

// calendar widget$("#calendar").kendoCalendar();

// dropdown widget$("#combobox").kendoComboBox([{text: "Item1", value: "1"}, {text: "Item2", value: "2"}]);

// fancy upload$("#files").kendoUpload();

Page 21: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Other There are many, many, many, many, other js libraries out there Some deal with common tasks

Other excel in UI

There are those who do JS MVC

And some do server side Just ask G about them

Page 22: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Building our own JSLReady! Set! Go!

Page 23: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Roadmap We begin at the very end (feature wise)

Ensure code quality Homogenous syntax Module patterns Get the job done, add candy later Let’s pretend that there are NO old browsers

Then suddenly remember it and add support

Page 24: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Recommended features

Unicorns and rainbows

Page 25: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Code Convention What is a coding convention?

A set of writing rules concerning some or all aspects of the coding

How to comment How to name functions, variables,

params etc. White spaces…

Page 26: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Code Convention (2) Why have one?

Homogenous code Easier to read May help avoid problems in the

future Some habits are just good

Page 27: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Powerful Syntax That would be the normal way Libraries are generally wrapping native functionality All native functionality should be

achievable trough parameter combinations

One of two ways to do that: Have a single method for many

operations Have a method for each operation

Page 28: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Syntax sugar Not a new thing – almost 50 years old concept

Syntax sugar means having shorthand methods that do heavy lifting

Sort of a Swiss army knife for some stuff

Benefits: Easier to read / compact code

Gentle learning curve

More expressive Cons: random hate… above all

Page 29: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Documentation Documentation is essential

Don’t over document Don’t under document

Document just right: No more or less than needed Concrete sentences, clear language Avoid disambiguation Try to be neutral

Update the docs in a timely manner!

Page 30: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Examples The best documentation has examples Never the less have separate

examples Organize examples in scenarios Describe scenarios fluently Elaborate if a scenario is a bad

practice Help users choose between scenarios Provide at least one example per

scenario Have as many examples as possible Try not to mix code with content

Page 31: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Community Don’t underestimate the community The community is using the library They are important, but not too

important Have your own opinion, but listen to

others A proper community needs

Commenting articles, forums, tracking system, contribution system

Even awards A community is created by itself

And is dissolved that way

Page 32: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Let’s startChat: show me the code

Page 33: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Code convention It’s a bit see as we go, but just a start: //comments preferably Code indentation is one tab (set to

four spaces) Functions and properties are in

camelCase Objects and constructors are in

PascalCase If we need a getter use

get_property If we need private use _property No curly braces for single line

control structures Use white space accordingly

Page 34: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Object creation Object creation is important for:

Custom utility objects

UI widgets Magical base is overrated (IMO)

Actually, magic is overrated Simple inheriting first, multiple later

Object factory Prototype.create(…)

Page 35: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Querying the DOM Specificity first

A method for one

A method for all / sub querying Return what’s expected:

One, Many or NULL Use built in methods where possible

Optimize by analyzing parameters

Page 36: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

DOM traversal Not that different from querying

node.nodeType == 1 means HTML element

The parentNode is usually an element

Utility methods for: Siblings – all, left, right, single

Children – first, last, all

Recursive parents Selectors based traversing

Page 37: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Manipulation Attributes are mostly the same in HTML and DOM With few minor exceptions

First use concrete attributes Then normalize input for easier

development Mind that the style attribute is a bit different

We could make it work to set or get multiple attributes at once

Regardless of the choice for implementation, setting and getting props must work the same

Page 38: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

DOM insertions / deletions

Cover the basic DOM insertion Add extension methods for easier

insertions, like prepend, insertAfter etc.

Remember that innerHTML works faster in some cases and documentFragment in the rest

Do we eval scripts upon insertion?

Page 39: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

DOM events For a proper event system

Events should not bubble e.g. last param is false

We can make syntax that omits it Unless one wants to specify it

explicitly What do we do about anonymous events?

How do we mass remove events? Event delegates Events handlers for collection of elements

Page 40: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Ajax Just the basics

Implement methods for: post, get, put, delete

Use native objects Don’t wait for forever to timeout Status code vs. words based

callbacks Should the Ajax invoker be void?

Plain old fetching data to populate elements

Persistent connections

Page 41: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Animations Ways to do it:

Interval with fixed steps

Interval with time based steps

Native request animation frame Stopping animations and reverting to base

Chaining animations Animation callbacks Anything else you can think of

Page 42: How To Create Our Own JS Library Ivan Zhekov Telerik Corporation  Front-end Developer

Questions?

JavaScript Libraries

??

? ? ???

?

?

http://academy.telerik.com